提交 6d88d8d4 authored 作者: 李秋林's avatar 李秋林

同步勤策经销商数据\上传活动计划

上级 2659756a
......@@ -7,13 +7,13 @@
<parent>
<groupId>com.wangxiaolu</groupId>
<artifactId>wangxiaolu-promotion-parent</artifactId>
<version>0.0.1</version>
<version>0.0.2</version>
</parent>
<groupId>com.wangxiaolu</groupId>
<artifactId>wangxiaolu-promotion-service</artifactId>
<version>0.1.8</version>
<version>0.1.9</version>
<name>wangxiaolu-promotion-service</name>
<description>promotion-service</description>
......@@ -24,7 +24,7 @@
<dependency>
<groupId>com.wangxiaolu</groupId>
<artifactId>wangxiaolu-promotion-common</artifactId>
<version>0.0.1</version>
<version>0.0.2</version>
<exclusions>
<exclusion>
<artifactId>spring-cloud-gateway-server</artifactId>
......@@ -237,9 +237,8 @@
<dependency>
<groupId>com.fasterxml.uuid</groupId>
<artifactId>java-uuid-generator</artifactId>
<version>3.1.4</version>
<version>${java-uuid-generator.version}</version>
</dependency>
</dependencies>
<build>
......
package com.wangxiaolu.promotion.controller.activity.employee;
package com.wangxiaolu.promotion.controller.activity.manage;
import com.wangxiaolu.promotion.pojo.PageInfo;
import com.wangxiaolu.promotion.result.basedata.R;
import com.wangxiaolu.promotion.service.activity.employee.EmpPromotionStoreQueryService;
import com.wangxiaolu.promotion.service.activity.manage.EmpPromotionStoreQueryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
......
package com.wangxiaolu.promotion.controller.activity.manage.activityplan;
import com.wangxiaolu.promotion.common.util.NumberUtils;
import com.wangxiaolu.promotion.exception.DataException;
import com.wangxiaolu.promotion.pojo.activity.manage.vo.ActivityPlanInfoVo;
import com.wangxiaolu.promotion.result.basedata.R;
import com.wangxiaolu.promotion.result.basedata.RCode;
import com.wangxiaolu.promotion.service.activity.manage.ActivityPlanInfoCoreService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author : liqiulin
* @date : 2024-09-02 18
* @describe :
*/
@Slf4j
@RestController
@RequestMapping("/activity/employee/plan_info/core")
public class ActivityPlanInfoCoreController {
@Autowired
ActivityPlanInfoCoreService activityPlanInfoCoreService;
@PutMapping("/update")
public R updateActivityInfo(@RequestBody ActivityPlanInfoVo activityPlanInfoVo){
if (NumberUtils.isNull(activityPlanInfoVo.getId()) && CollectionUtils.isEmpty(activityPlanInfoVo.getIds())){
throw new DataException(RCode.SELECT_PARAMS_ERROR);
}
activityPlanInfoCoreService.updateActivityInfo(activityPlanInfoVo);
return R.success();
}
}
package com.wangxiaolu.promotion.controller.activity.manage.activityplan;
import com.wangxiaolu.promotion.pojo.PageInfo;
import com.wangxiaolu.promotion.result.basedata.R;
import com.wangxiaolu.promotion.service.activity.manage.ActivityPlanInfoQueryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author : liqiulin
* @date : 2024-09-03 11
* @describe :
*/
@Slf4j
@RestController
@RequestMapping("/activity/employee/plan_info/core")
public class ActivityPlanInfoQueryController {
@Autowired
ActivityPlanInfoQueryService activityPlanInfoQueryService;
@PostMapping("/page")
public R findActivityInfoPage(@RequestBody PageInfo pageInfo){
activityPlanInfoQueryService.findActivityPlanInfoPage(pageInfo);
return R.success(pageInfo);
}
}
package com.wangxiaolu.promotion.controller.activity.manage.activityplan;
import com.wangxiaolu.promotion.common.util.NumberUtils;
import com.wangxiaolu.promotion.exception.DataException;
import com.wangxiaolu.promotion.pojo.activity.manage.dto.EmployeeActivityPlanInfoDto;
import com.wangxiaolu.promotion.pojo.activity.manage.dto.EmployeeActivityPlanRecordDto;
import com.wangxiaolu.promotion.pojo.activity.manage.vo.ActivityPlanInfoVo;
import com.wangxiaolu.promotion.pojo.activity.manage.vo.ActivityPlanVo;
import com.wangxiaolu.promotion.result.basedata.R;
import com.wangxiaolu.promotion.result.basedata.RCode;
import com.wangxiaolu.promotion.service.activity.manage.ActivityPlanRecordCoreService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
/**
* @author : liqiulin
* @date : 2024-08-20 13
* @describe : 活动计划上传记录
*/
@Slf4j
@RestController
@RequestMapping("/activity/employee/plan/core")
public class ActivityPlanRecordCoreController {
@Autowired
ActivityPlanRecordCoreService activityPlanRecordCoreService;
/**
* 上传活动计划表
*/
@PostMapping("/push/excel")
public R pushPlanExcel(@RequestBody ActivityPlanVo activityPlanVo) {
try {
EmployeeActivityPlanRecordDto planDto = new EmployeeActivityPlanRecordDto();
BeanUtils.copyProperties(activityPlanVo, planDto);
planDto.setCreateDate(new Date());
String[] urlArr = activityPlanVo.getExcelUrl().split("weda-uploader/");
String fileId = urlArr[urlArr.length - 1];
planDto.setExcelFiledId(fileId);
activityPlanRecordCoreService.saveActivityPlan(planDto, activityPlanVo);
return R.success();
} catch (Exception e) {
return R.fail(e.getMessage());
}
}
@DeleteMapping("/delete/{id}")
public R deleteActivityPlanById(@PathVariable Long id){
if (NumberUtils.isNull(id)){
throw new DataException(RCode.API_DATA_ERROR);
}
activityPlanRecordCoreService.deleteById(id);
return R.success();
}
}
package com.wangxiaolu.promotion.controller.activity.manage.activityplan;
import com.wangxiaolu.promotion.pojo.PageInfo;
import com.wangxiaolu.promotion.pojo.activity.manage.dto.EmployeeActivityPlanRecordDto;
import com.wangxiaolu.promotion.pojo.activity.manage.vo.ActivityPlanVo;
import com.wangxiaolu.promotion.result.basedata.R;
import com.wangxiaolu.promotion.service.activity.manage.ActivityPlanRecordQueryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author : liqiulin
* @date : 2024-08-21 14
* @describe :活动计划记录查询
*/
@Slf4j
@RestController
@RequestMapping("/activity/employee/plan/query")
public class ActivityPlanRecordQueryController {
@Autowired
ActivityPlanRecordQueryService activityPlanRecordQueryService;
@PostMapping("/record/page")
public R findActivityPlanRecordPage(@RequestBody PageInfo pageInfo){
activityPlanRecordQueryService.findActivityPlanRecordPage(pageInfo);
return R.success(pageInfo);
}
@PostMapping("/record/one")
public R findActivityPlanRecord(@RequestBody ActivityPlanVo activityPlanVo){
EmployeeActivityPlanRecordDto dto = activityPlanRecordQueryService.findActivityPlanRecord(activityPlanVo);
return R.success(dto);
}
}
package com.wangxiaolu.promotion.controller.activity.employee;
package com.wangxiaolu.promotion.controller.activity.manage.tem;
import com.wangxiaolu.promotion.enums.activity.TemActApproveStatus;
import com.wangxiaolu.promotion.exception.ParamException;
import com.wangxiaolu.promotion.pojo.activity.employee.vo.ApproveVO;
import com.wangxiaolu.promotion.pojo.activity.manage.vo.ApproveVo;
import com.wangxiaolu.promotion.result.basedata.R;
import com.wangxiaolu.promotion.result.basedata.RCode;
import com.wangxiaolu.promotion.service.activity.employee.EmployeeCoreTemActivityService;
import com.wangxiaolu.promotion.service.activity.manage.EmployeeCoreTemActivityService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -28,7 +28,7 @@ public class EmployeeCoreTemActivityController {
* 管理员审批上报活动数据
*/
// @PostMapping("/approve/{id}")
public R approveActivity(@PathVariable("id") long reportedId,@RequestBody ApproveVO approveVO) {
public R approveActivity(@PathVariable("id") long reportedId,@RequestBody ApproveVo approveVO) {
if (TemActApproveStatus.SEND_BACK.equals(approveVO.getApproveStatus()) && StringUtils.isBlank(approveVO.getApproveReason())){
throw new ParamException(RCode.SEND_BACK_REASON_NOT,null);
}
......
package com.wangxiaolu.promotion.controller.activity.employee;
package com.wangxiaolu.promotion.controller.activity.manage.tem;
import com.wangxiaolu.promotion.pojo.activity.employee.vo.ClockVo;
import com.wangxiaolu.promotion.pojo.activity.manage.vo.ClockVo;
import com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryClockDto;
import com.wangxiaolu.promotion.result.basedata.R;
import com.wangxiaolu.promotion.service.activity.employee.EmployeeCoreTemClockService;
import com.wangxiaolu.promotion.service.activity.manage.EmployeeCoreTemClockService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
......
package com.wangxiaolu.promotion.controller.activity.employee;
package com.wangxiaolu.promotion.controller.activity.manage.tem;
import com.wangxiaolu.promotion.exception.ParamException;
import com.wangxiaolu.promotion.pojo.activity.employee.vo.TemporaryInfoVo;
import com.wangxiaolu.promotion.pojo.activity.manage.vo.TemporaryInfoVo;
import com.wangxiaolu.promotion.pojo.user.dto.WxTemporaryInfoDto;
import com.wangxiaolu.promotion.result.basedata.R;
import com.wangxiaolu.promotion.result.basedata.RCode;
import com.wangxiaolu.promotion.service.activity.employee.EmployeeCoreTemporaryInfoService;
import com.wangxiaolu.promotion.service.activity.manage.EmployeeCoreTemporaryInfoService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PutMapping;
......
package com.wangxiaolu.promotion.controller.activity.employee;
package com.wangxiaolu.promotion.controller.activity.manage.tem;
import com.wangxiaolu.promotion.pojo.PageInfo;
import com.wangxiaolu.promotion.result.basedata.R;
import com.wangxiaolu.promotion.service.activity.employee.EmployeeQueryTemActivityService;
import com.wangxiaolu.promotion.service.activity.manage.EmployeeQueryTemActivityService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
......
package com.wangxiaolu.promotion.controller.activity.employee;
package com.wangxiaolu.promotion.controller.activity.manage.tem;
import com.wangxiaolu.promotion.pojo.PageInfo;
import com.wangxiaolu.promotion.result.basedata.R;
import com.wangxiaolu.promotion.service.activity.employee.EmployeeQueryTemClockService;
import com.wangxiaolu.promotion.service.activity.manage.EmployeeQueryTemClockService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
......
package com.wangxiaolu.promotion.controller.activity.employee;
package com.wangxiaolu.promotion.controller.activity.manage.tem;
import com.wangxiaolu.promotion.pojo.PageInfo;
import com.wangxiaolu.promotion.result.basedata.R;
import com.wangxiaolu.promotion.service.activity.employee.EmployeeQueryTemporaryInfoService;
import com.wangxiaolu.promotion.service.activity.manage.EmployeeQueryTemporaryInfoService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
......
package com.wangxiaolu.promotion.controller.user;
package com.wangxiaolu.promotion.controller.user.login.employee;
import com.wangxiaolu.promotion.pojo.user.vo.LoginVo;
import com.wangxiaolu.promotion.pojo.user.vo.UserLoginParam;
import com.wangxiaolu.promotion.result.basedata.R;
import com.wangxiaolu.promotion.service.user.WangxlEmployeeQueryService;
......@@ -24,8 +25,8 @@ public class WangxlEmployeeLoginController {
@PostMapping("/login")
public R wangxlEmployeelogin(@RequestBody UserLoginParam userLoginParam) {
userLoginParam.validate();
String token = wangxlEmployeeQueryService.employeeLoginVerify(userLoginParam);
return R.success(token);
LoginVo loginVo = wangxlEmployeeQueryService.employeeLoginVerify(userLoginParam);
return R.success(loginVo);
}
}
package com.wangxiaolu.promotion.controller.user;
package com.wangxiaolu.promotion.controller.user.login.tem;
import com.wangxiaolu.promotion.pojo.user.vo.UserLoginParam;
import com.wangxiaolu.promotion.result.basedata.R;
......
package com.wangxiaolu.promotion.controller.wechat;
package com.wangxiaolu.promotion.controller.user.login.tem;
import com.alibaba.fastjson.JSONObject;
import com.wangxiaolu.promotion.common.redis.RedisKeys;
......@@ -28,7 +28,7 @@ import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
@RequestMapping("/user/wechat/core")
public class WeChatUserCoreController {
public class TemporaryInfoCoreController {
@Autowired
WeChatUserCoreService weChatUserCoreService;
......
package com.wangxiaolu.promotion.controller.wechat;
package com.wangxiaolu.promotion.controller.user.login.tem;
import com.alibaba.fastjson.JSONObject;
import com.wangxiaolu.promotion.common.redis.RedisKeys;
import com.wangxiaolu.promotion.common.redis.service.RedisCache;
import com.wangxiaolu.promotion.common.util.DataUtils;
import com.wangxiaolu.promotion.exception.ParamException;
import com.wangxiaolu.promotion.pojo.user.dto.WxTemporaryInfoDto;
import com.wangxiaolu.promotion.pojo.user.vo.LoginVo;
import com.wangxiaolu.promotion.pojo.user.vo.WxTemporaryLoginVo;
import com.wangxiaolu.promotion.result.basedata.R;
......@@ -26,7 +25,7 @@ import java.util.Objects;
@Slf4j
@RestController
@RequestMapping("/user/wechat/query")
public class WeChatUserQueryController {
public class temporaryInfoQueryController {
@Autowired
private WeChatUserQueryService weChatUserQueryService;
......
......@@ -64,5 +64,13 @@ public class QinCeDataTaskController {
return R.success();
}
/**
* 同步经销商数据
*/
@GetMapping("/dealers")
public R productDealers(){
qinCeDataTaskService.productDealers();
return R.success();
}
}
package com.wangxiaolu.promotion.controller.user.qince;
import com.wangxiaolu.promotion.pojo.PageInfo;
import com.wangxiaolu.promotion.result.basedata.R;
import com.wangxiaolu.promotion.service.user.QinCeDealerQueryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @author : liqiulin
* @date : 2024-09-02 13
* @describe :
*/
@RestController
@RequestMapping("/user/dealer/query")
public class QinCeDealerQueryController {
@Autowired
QinCeDealerQueryService qinCeDealerQueryService;
@PostMapping("/page")
public R findPage(@RequestBody PageInfo pageInfo){
qinCeDealerQueryService.page(pageInfo);
return R.success(pageInfo);
}
}
......@@ -8,5 +8,5 @@ import com.wangxiaolu.promotion.pojo.user.dto.PromotionManageEmployeeDto;
* @describe :
*/
public interface PromotionManageEmployeeDao {
PromotionManageEmployeeDto selectOneByEmployeeNo(String employeeNo);
PromotionManageEmployeeDto loginByEmployeeNo(String employeeNo,String pwd);
}
package com.wangxiaolu.promotion.domain.activity.dao.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wangxiaolu.promotion.common.util.MD5Utils;
import com.wangxiaolu.promotion.domain.activity.dao.PromotionManageEmployeeDao;
import com.wangxiaolu.promotion.domain.activity.mapper.PromotionManageEmployeeMapper;
import com.wangxiaolu.promotion.domain.activity.mapper.entity.PromotionManageEmployeeDO;
import com.wangxiaolu.promotion.exception.ParamException;
import com.wangxiaolu.promotion.pojo.user.dto.PromotionManageEmployeeDto;
import com.wangxiaolu.promotion.result.basedata.RCode;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -23,11 +26,19 @@ public class PromotionManageEmployeeDaoImpl implements PromotionManageEmployeeDa
PromotionManageEmployeeMapper promotionManageEmployeeMapper;
@Override
public PromotionManageEmployeeDto selectOneByEmployeeNo(String employeeNo) {
public PromotionManageEmployeeDto loginByEmployeeNo(String employeeNo, String pwd) {
LambdaQueryWrapper<PromotionManageEmployeeDO> lqw = new LambdaQueryWrapper();
lqw.eq(PromotionManageEmployeeDO::getEmployeeNo,employeeNo);
PromotionManageEmployeeDO promotionManageEmployeeDO = promotionManageEmployeeMapper.selectOne(lqw);
if (Objects.isNull(promotionManageEmployeeDO)){
throw new ParamException(RCode.LOGIN_PARAM_ERROR,null);
}
if (!MD5Utils.getSaltverifyMD5(pwd,promotionManageEmployeeDO.getPasswork())){
throw new ParamException(RCode.LOGIN_PASSWORD_ERROR,null);
}
return transitionDto(promotionManageEmployeeDO);
}
......@@ -40,4 +51,6 @@ public class PromotionManageEmployeeDaoImpl implements PromotionManageEmployeeDa
BeanUtils.copyProperties(employeeDO, dto);
return dto;
}
}
......@@ -41,6 +41,21 @@ public class PromotionManageEmployeeDO implements Serializable {
*/
private String passwork;
/**
* 部门信息-勤策部门id,关联部门表qc_id字段
*/
private String deptQcId;
/**
* 部门信息-勤策部门名称
*/
private String deptQcName;
/**
* 备注,不过超过100字
*/
// private String remarks;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
package com.wangxiaolu.promotion.domain.manage.dao;
import com.wangxiaolu.promotion.domain.manage.wrapperQo.ActivityPlanInfoWrapper;
import com.wangxiaolu.promotion.pojo.PageInfo;
import com.wangxiaolu.promotion.pojo.activity.manage.dto.EmployeeActivityPlanInfoDto;
import java.util.List;
/**
* @author : liqiulin
* @date : 2024-08-29 13
* @describe :
*/
public interface EmployeeActivityPlanInfoDao {
void saveList(List<EmployeeActivityPlanInfoDto> planInfoDtos);
void page(PageInfo pageInfo, ActivityPlanInfoWrapper wrapper);
void deletebyActivityPlanRecordId(Long recordId);
void update(ActivityPlanInfoWrapper wrap);
}
package com.wangxiaolu.promotion.domain.manage.dao;
import com.wangxiaolu.promotion.domain.manage.wrapperQo.ActivityPlanRecordWrapper;
import com.wangxiaolu.promotion.pojo.PageInfo;
import com.wangxiaolu.promotion.pojo.activity.manage.dto.EmployeeActivityPlanRecordDto;
import java.util.List;
/**
* @author : liqiulin
* @date : 2024-08-21 13
* @describe :
*/
public interface EmployeeActivityPlanRecordDao {
Long save(EmployeeActivityPlanRecordDto planDto);
void selectPage(ActivityPlanRecordWrapper wrap, PageInfo pageInfo);
EmployeeActivityPlanRecordDto selectOne(ActivityPlanRecordWrapper wp);
void deleteById(Long id);
}
package com.wangxiaolu.promotion.domain.manage.dao.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wangxiaolu.promotion.common.enums.StatusType;
import com.wangxiaolu.promotion.common.util.NumberUtils;
import com.wangxiaolu.promotion.domain.manage.dao.EmployeeActivityPlanInfoDao;
import com.wangxiaolu.promotion.domain.manage.mapper.EmployeeActivityPlanInfoMapper;
import com.wangxiaolu.promotion.domain.manage.mapper.entity.EmployeeActivityPlanInfoDO;
import com.wangxiaolu.promotion.domain.manage.wrapperQo.ActivityPlanInfoWrapper;
import com.wangxiaolu.promotion.exception.DataException;
import com.wangxiaolu.promotion.exception.ParamException;
import com.wangxiaolu.promotion.pojo.PageInfo;
import com.wangxiaolu.promotion.pojo.activity.manage.dto.EmployeeActivityPlanInfoDto;
import com.wangxiaolu.promotion.result.basedata.RCode;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
* @author : liqiulin
* @date : 2024-08-29 13
* @describe :
*/
@Service
public class EmployeeActivityPlanInfoDaoImpl implements EmployeeActivityPlanInfoDao {
@Autowired
EmployeeActivityPlanInfoMapper employeeActivityPlanInfoMapper;
@Override
public void saveList(List<EmployeeActivityPlanInfoDto> planInfoDtos) {
List<EmployeeActivityPlanInfoDO> dos = new ArrayList<>(planInfoDtos.size() * 2);
Date createTime = new Date();
planInfoDtos.stream().forEach(dto -> {
EmployeeActivityPlanInfoDO infoDo = new EmployeeActivityPlanInfoDO();
BeanUtils.copyProperties(dto, infoDo);
infoDo.setCreateTime(createTime);
dos.add(infoDo);
});
employeeActivityPlanInfoMapper.saveList(dos);
}
@Override
public void page(PageInfo pageInfo, ActivityPlanInfoWrapper wrapper) {
LambdaQueryWrapper<EmployeeActivityPlanInfoDO> qw = buildWrapper(wrapper);
Page<EmployeeActivityPlanInfoDO> page = new Page<>(pageInfo.getPageNum(), pageInfo.getPageSize());
Page<EmployeeActivityPlanInfoDO> doPage = employeeActivityPlanInfoMapper.selectPage(page, qw);
pageInfo.pageCovert(doPage);
// 目前没有返回到service处理逻辑,所以不需要转dto
pageInfo.setRecords(doPage.getRecords());
}
@Override
public void deletebyActivityPlanRecordId(Long recordId) {
employeeActivityPlanInfoMapper.deletebyActivityPlanRecordId(recordId);
}
@Override
public void update(ActivityPlanInfoWrapper wrap) {
LambdaQueryWrapper<EmployeeActivityPlanInfoDO> qw = buildUpdateWrapper(wrap);
EmployeeActivityPlanInfoDO updateDO = new EmployeeActivityPlanInfoDO();
updateDO.setActivityStatus(wrap.getActivityStatusUpdate().getType());
employeeActivityPlanInfoMapper.update(updateDO,qw);
}
private LambdaQueryWrapper<EmployeeActivityPlanInfoDO> buildWrapper(ActivityPlanInfoWrapper wrapper) {
LambdaQueryWrapper<EmployeeActivityPlanInfoDO> qw = new LambdaQueryWrapper<>();
if (Objects.nonNull(wrapper.getEmployeeId())) {
qw.eq(EmployeeActivityPlanInfoDO::getEmployeeId, wrapper.getEmployeeId());
}
if (Objects.nonNull(wrapper.getActivityPlanRecordId())) {
qw.eq(EmployeeActivityPlanInfoDO::getActivityPlanRecordId, wrapper.getActivityPlanRecordId());
}
if (StringUtils.isNotBlank(wrapper.getExcelFiledId())) {
qw.eq(EmployeeActivityPlanInfoDO::getExcelFiledId, wrapper.getExcelFiledId());
}
if (StringUtils.isNotBlank(wrapper.getActivityMonth())) {
qw.eq(EmployeeActivityPlanInfoDO::getActivityMonth, wrapper.getActivityMonth());
}
if (Objects.nonNull(wrapper.getActivityStartDate())) {
qw.eq(EmployeeActivityPlanInfoDO::getActivityStartDate, wrapper.getActivityStartDate());
}
if (StringUtils.isNotBlank(wrapper.getDealerName())) {
qw.like(EmployeeActivityPlanInfoDO::getDealerName, wrapper.getDealerName());
}
if (StringUtils.isNotBlank(wrapper.getCity())) {
qw.like(EmployeeActivityPlanInfoDO::getCity, wrapper.getCity());
}
if (StringUtils.isNotBlank(wrapper.getStoreName())) {
qw.like(EmployeeActivityPlanInfoDO::getStoreName, wrapper.getStoreName());
}
if (Objects.nonNull(wrapper.getActivityStatus())){
qw.eq(EmployeeActivityPlanInfoDO::getActivityStatus,wrapper.getActivityStatus().getType());
}
qw.eq(EmployeeActivityPlanInfoDO::getIsDelete, StatusType.VALID.getType());
qw.orderByDesc(EmployeeActivityPlanInfoDO::getCreateTime);
return qw;
}
private LambdaQueryWrapper<EmployeeActivityPlanInfoDO> buildUpdateWrapper(ActivityPlanInfoWrapper wrapper) {
LambdaQueryWrapper<EmployeeActivityPlanInfoDO> qw = new LambdaQueryWrapper<>();
if (!CollectionUtils.isEmpty(wrapper.getIds())) {
qw.in(EmployeeActivityPlanInfoDO::getId,wrapper.getIds());
}
if (!NumberUtils.isNull(wrapper.getId())){
qw.eq(EmployeeActivityPlanInfoDO::getId,wrapper.getId());
}
if (qw.isEmptyOfWhere()){
throw new ParamException(RCode.SELECT_PARAMS_ERROR,null);
}
return qw;
}
}
package com.wangxiaolu.promotion.domain.manage.dao.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wangxiaolu.promotion.common.enums.StatusType;
import com.wangxiaolu.promotion.common.util.NumberUtils;
import com.wangxiaolu.promotion.domain.manage.dao.EmployeeActivityPlanRecordDao;
import com.wangxiaolu.promotion.domain.manage.mapper.EmployeeActivityPlanRecordMapper;
import com.wangxiaolu.promotion.domain.manage.mapper.entity.EmployeeActivityPlanRecordDO;
import com.wangxiaolu.promotion.domain.manage.wrapperQo.ActivityPlanRecordWrapper;
import com.wangxiaolu.promotion.exception.DataException;
import com.wangxiaolu.promotion.pojo.PageInfo;
import com.wangxiaolu.promotion.pojo.activity.manage.dto.EmployeeActivityPlanRecordDto;
import com.wangxiaolu.promotion.result.basedata.RCode;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* @author : liqiulin
* @date : 2024-08-21 13
* @describe :
*/
@Service
public class EmployeeActivityPlanRecordDaoImpl implements EmployeeActivityPlanRecordDao {
@Autowired
EmployeeActivityPlanRecordMapper employeeActivityPlanRecordMapper;
@Override
public Long save(EmployeeActivityPlanRecordDto planDto) {
ActivityPlanRecordWrapper rWrapper = new ActivityPlanRecordWrapper()
.setEmployeeId(planDto.getEmployeeId())
.setActivityMonth(planDto.getActivityMonth());
LambdaQueryWrapper<EmployeeActivityPlanRecordDO> qw = buildWrapper(rWrapper);
Integer count = employeeActivityPlanRecordMapper.selectCount(qw);
if (count >= 1) {
throw new DataException(RCode.ACTIVITY_PLAN_MONTH_HAS);
}
EmployeeActivityPlanRecordDO planDo = new EmployeeActivityPlanRecordDO();
BeanUtils.copyProperties(planDto, planDo);
employeeActivityPlanRecordMapper.insert(planDo);
return planDo.getId();
}
@Override
public void selectPage(ActivityPlanRecordWrapper wrap, PageInfo pageInfo) {
LambdaQueryWrapper<EmployeeActivityPlanRecordDO> qw = buildWrapper(wrap);
Page<EmployeeActivityPlanRecordDO> page = new Page<>(pageInfo.getPageNum(),pageInfo.getPageSize());
Page<EmployeeActivityPlanRecordDO> doPage = employeeActivityPlanRecordMapper.selectPage(page, qw);
pageInfo.pageCovert(doPage);
pageInfo.setRecords(doPage.getRecords());
}
@Override
public EmployeeActivityPlanRecordDto selectOne(ActivityPlanRecordWrapper wp) {
LambdaQueryWrapper<EmployeeActivityPlanRecordDO> qw = buildWrapper(wp);
EmployeeActivityPlanRecordDO planDo = employeeActivityPlanRecordMapper.selectOne(qw);
return transitionDto(planDo);
}
@Override
public void deleteById(Long id) {
employeeActivityPlanRecordMapper.deleteByIdFake(id);
}
private LambdaQueryWrapper<EmployeeActivityPlanRecordDO> buildWrapper(ActivityPlanRecordWrapper rWrapper){
LambdaQueryWrapper<EmployeeActivityPlanRecordDO> qw = new LambdaQueryWrapper<>();
if (Objects.nonNull(rWrapper.getId())){
qw.eq(EmployeeActivityPlanRecordDO::getId,rWrapper.getId());
return qw;
}
if (Objects.nonNull(rWrapper.getEmployeeId())){
qw.eq(EmployeeActivityPlanRecordDO::getEmployeeId,rWrapper.getEmployeeId());
}
if (StringUtils.isNotBlank(rWrapper.getActivityMonth())){
qw.eq(EmployeeActivityPlanRecordDO::getActivityMonth,rWrapper.getActivityMonth());
}
qw.eq(EmployeeActivityPlanRecordDO::getIsDelete, StatusType.VALID.getType());
qw.orderByDesc(EmployeeActivityPlanRecordDO::getId);
return qw;
}
/**
* DO to DTO (单个对象)
* @param planRecordDos DO对象List
* @return DTO对象
*/
private List<EmployeeActivityPlanRecordDto> transitionDtos(List<EmployeeActivityPlanRecordDO> planRecordDos) {
if (CollectionUtils.isEmpty(planRecordDos)) {
return new ArrayList<>();
}
List<EmployeeActivityPlanRecordDto> dtos = new ArrayList<>(planRecordDos.size() * 2);
for (EmployeeActivityPlanRecordDO planRecordDo : planRecordDos) {
dtos.add(transitionDto(planRecordDo));
}
return dtos;
}
private EmployeeActivityPlanRecordDto transitionDto(EmployeeActivityPlanRecordDO planRecordDo) {
EmployeeActivityPlanRecordDto dto = null;
if (Objects.isNull(planRecordDo)) {
return dto;
}
dto = new EmployeeActivityPlanRecordDto();
BeanUtils.copyProperties(planRecordDo, dto);
return dto;
}
}
\ No newline at end of file
package com.wangxiaolu.promotion.domain.manage.mapper;
import com.wangxiaolu.promotion.domain.manage.mapper.entity.EmployeeActivityPlanInfoDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wangxiaolu.promotion.pojo.activity.manage.dto.EmployeeActivityPlanInfoDto;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author a02200059
* @description 针对表【employee_activity_plan_info】的数据库操作Mapper
* @createDate 2024-08-26 14:22:06
* @Entity com.wangxiaolu.promotion.domain.manage.mapper.entity.EmployeeActivityPlanInfoDO
*/
@Repository
@Mapper
public interface EmployeeActivityPlanInfoMapper extends BaseMapper<EmployeeActivityPlanInfoDO> {
void saveList(@Param("dos") List<EmployeeActivityPlanInfoDO> dos);
void deletebyActivityPlanRecordId(Long recordId);
}
package com.wangxiaolu.promotion.domain.manage.mapper;
import com.wangxiaolu.promotion.domain.manage.mapper.entity.EmployeeActivityPlanRecordDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
/**
* @author a02200059
* @description 针对表【employee_activity_plan_record】的数据库操作Mapper
* @createDate 2024-08-20 13:38:48
* @Entity com.wangxiaolu.promotion.domain.employee.mapper.entity.EmployeeActivityPlanRecordDO
*/
@Repository
@Mapper
public interface EmployeeActivityPlanRecordMapper extends BaseMapper<EmployeeActivityPlanRecordDO> {
void deleteByIdFake(Long id);
}
package com.wangxiaolu.promotion.domain.manage.mapper.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
*
* @TableName employee_activity_plan_info
*/
@TableName(value ="employee_activity_plan_info")
@Data
public class EmployeeActivityPlanInfoDO implements Serializable {
/**
* 主键id
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 活动计划表上传记录id
*/
private Long activityPlanRecordId;
/**
* 文件ID(云存储中的id)
*/
private String excelFiledId;
/**
* promotion_manage_employee表id
*/
private Integer employeeId;
/**
* 姓名
*/
private String employeeName;
/**
* 员工工号
*/
private String employeeNo;
/**
* 活动月份YYYY-MM
*/
private String activityMonth;
/**
* 城市
*/
private String city;
/**
* 经销商编码
*/
private String dealerId;
/**
* 经销商名称
*/
private String dealerName;
/**
* 系统名称
*/
private String lineName;
/**
* 店铺名称
*/
private String storeName;
/**
* 活动模式
*/
private String activityPattern;
/**
* 活动开始日期
*/
private Date activityStartDate;
/**
* 活动结束日期
*/
private Date activityEndDate;
/**
* 虎皮场次
*/
private Integer hupiCount;
/**
* 去骨场次
*/
private Integer quguCount;
/**
* 促销员上班时间
*/
private String temporaryOnTime;
private Date createTime;
private Date modifyTime;
/**
* 1:open
* 0:close
*/
private Integer activityStatus;
/**
* 1:有效;0:删除;
*/
private Integer isDelete;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
package com.wangxiaolu.promotion.domain.manage.mapper.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
*
* @TableName employee_activity_plan_record
*/
@TableName(value ="employee_activity_plan_record")
@Data
public class EmployeeActivityPlanRecordDO implements Serializable {
/**
* 主键id
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* promotion_manage_employee表id
*/
private Integer employeeId;
/**
* 文件http地址
*/
private String excelUrl;
/**
* 文件ID(云存储中的id)
*/
private String excelFiledId;
/**
* 创建日期YYYY-MM-DD
*/
private Date createDate;
/**
* 活动月份YYYY-MM
*/
private String activityMonth;
/**
* 周的开始日期
*/
private Date monthStartDate;
/**
* 周的结束日期
*/
private Date monthEndDate;
/**
* 创建时间
*/
private Date createTime;
/**
* 修改时间
*/
private Date modifyTime;
/**
* 删除日期
*/
private Date deleteTime;
/**
* 1:有效;0:删除;
*/
private Integer isDelete;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
package com.wangxiaolu.promotion.domain.manage.wrapperQo;
import com.wangxiaolu.promotion.common.enums.StatusType;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.util.Date;
import java.util.List;
/**
* @author : liqiulin
* @date : 2024-08-29 13
* @describe :
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class ActivityPlanInfoWrapper {
/**
* 活动计划表上传记录id
*/
private Long activityPlanRecordId;
/**
* 文件ID(云存储中的id)
*/
private String excelFiledId;
/**
* promotion_manage_employee表id
*/
private Integer employeeId;
/**
* 活动月份YYYY-MM
*/
private String activityMonth;
/**
* 活动开始日期
*/
private Date activityStartDate;
/**
* 城市
*/
private String city;
/**
* 经销商编码
*/
private String dealerId;
/**
* 店铺名称
*/
private String storeName;
/**
* 经销商名称
*/
private String dealerName;
/**
* 活动状态
*/
StatusType activityStatus;
List<Long> ids;
Long id;
StatusType activityStatusUpdate;
}
package com.wangxiaolu.promotion.domain.manage.wrapperQo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
/**
* @author : liqiulin
* @date : 2024-08-21 14
* @describe :
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class ActivityPlanRecordWrapper {
private Long id;
private Integer employeeId;
/**
* 文件ID(云存储中的id)
*/
private String excelFiledId;
/**
* 活动月份YYYY-MM
*/
private String activityMonth;
}
package com.wangxiaolu.promotion.domain.user.dao;
import com.wangxiaolu.promotion.pojo.PageInfo;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author : liqiulin
* @date : 2024-08-27 19
* @describe :
*/
public interface QinceDealerDao {
void saveList(List<Object> dealerJsons);
void page(PageInfo pageInfo);
Map<Object,Object> selectAll();
}
package com.wangxiaolu.promotion.domain.user.dao.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wangxiaolu.promotion.domain.user.dao.QinceDealerDao;
import com.wangxiaolu.promotion.domain.user.mapper.QinceDealerMapper;
import com.wangxiaolu.promotion.domain.user.mapper.entity.QinceDealerDO;
import com.wangxiaolu.promotion.pojo.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.rmi.server.ObjID;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* @author : liqiulin
* @date : 2024-08-27 19
* @describe :
*/
@Slf4j
@Service
public class QinceDealerDaoImpl implements QinceDealerDao {
@Autowired
QinceDealerMapper qinceDealerMapper;
@Override
public void saveList(List<Object> dealerJsons) {
// 目前没有查重逻辑,只在前边判断逻辑中进行新增
qinceDealerMapper.saveList(dealerJsons);
log.info("勤策同步经销商,新增数量:{}",dealerJsons.size());
}
@Override
public void page(PageInfo pageInfo) {
Map queryParams = pageInfo.getQueryParams();
LambdaQueryWrapper<QinceDealerDO> qw = new LambdaQueryWrapper<>();
if (!CollectionUtils.isEmpty(queryParams)) {
if (StringUtils.isNotBlank((String) queryParams.get("dealerId"))) {
qw.eq(QinceDealerDO::getDealerId, queryParams.get("dealerId"));
}
if (StringUtils.isNotBlank((String) queryParams.get("dealerName"))) {
qw.like(QinceDealerDO::getDealerName, queryParams.get("dealerName"));
}
}
qw.select(QinceDealerDO::getDealerId, QinceDealerDO::getDealerName);
Page<QinceDealerDO> page = new Page<>(pageInfo.getPageNum(), pageInfo.getPageSize());
Page<QinceDealerDO> doPage = qinceDealerMapper.selectPage(page, qw);
pageInfo.pageCovert(page);
pageInfo.setRecords(doPage.getRecords());
}
@Override
public Map<Object, Object> selectAll() {
List<QinceDealerDO> qinceDealerDOS = qinceDealerMapper.selectList(null);
Map<Object,Object> maps = new HashMap<>(qinceDealerDOS.size()*2);
qinceDealerDOS.forEach(qinceDealerDO -> {
maps.put(qinceDealerDO.getDealerId(),qinceDealerDO.getDealerName());
});
return maps;
}
}
package com.wangxiaolu.promotion.domain.user.mapper;
import com.wangxiaolu.promotion.domain.user.mapper.entity.QinceDealerDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.STRowID;
import org.springframework.stereotype.Repository;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author a02200059
* @description 针对表【qince_dealer】的数据库操作Mapper
* @createDate 2024-08-27 18:59:50
* @Entity com.wangxiaolu.promotion.domain.user.mapper.entity.QinceDealerDO
*/
@Repository
@Mapper
public interface QinceDealerMapper extends BaseMapper<QinceDealerDO> {
void saveList(@Param("dealerJsons") List<Object> dealerJsons);
}
package com.wangxiaolu.promotion.domain.user.mapper.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
*
* @TableName qince_dealer
*/
@TableName(value ="qince_dealer")
@Data
public class QinceDealerDO implements Serializable {
/**
* 主键id
*/
@TableId(type = IdType.AUTO)
private Integer id;
/**
* 经销商编码
*/
private String dealerId;
/**
* 经销商名称
*/
private String dealerName;
/**
* 合作状态。0:终止合作,1:合作中,2:未合作,3:有意向
*/
private String dealerCooperateStatus;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
package com.wangxiaolu.promotion.pojo.activity.manage.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
*
* @TableName employee_activity_plan_info
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
@Accessors(chain = true)
public class EmployeeActivityPlanInfoDto implements Serializable {
/**
* 主键id
*/
private Long id;
private List<Long> ids;
/**
* 活动计划表上传记录id
*/
private Long activityPlanRecordId;
/**
* 文件ID(云存储中的id)
*/
private String excelFiledId;
/**
* promotion_manage_employee表id
*/
private Integer employeeId;
/**
* 姓名
*/
private String employeeName;
/**
* 员工工号
*/
private String employeeNo;
/**
* 活动月份YYYY-MM
*/
private String activityMonth;
/**
* 城市
*/
private String city;
/**
* 经销商编码
*/
private String dealerId;
/**
* 经销商名称
*/
private String dealerName;
/**
* 系统名称
*/
private String lineName;
/**
* 店铺名称
*/
private String storeName;
/**
* 活动模式
*/
private String activityPattern;
/**
* 活动开始日期
*/
private Date activityStartDate;
/**
* 活动结束日期
*/
private Date activityEndDate;
/**
* 虎皮场次
*/
private Integer hupiCount;
/**
* 去骨场次
*/
private Integer quguCount;
/**
* 促销员上班时间
*/
private String temporaryOnTime;
private Integer activityStatus;
/**
* 1:有效;0:删除;
*/
private Integer isDelete;
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
package com.wangxiaolu.promotion.pojo.activity.manage.dto;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
@AllArgsConstructor
@NoArgsConstructor
@Data
@Accessors(chain = true)
public class EmployeeActivityPlanRecordDto implements Serializable {
/**
* 主键id
*/
private Long id;
/**
* promotion_manage_employee表id
*/
private Integer employeeId;
/**
* 文件http地址
*/
private String excelUrl;
/**
* 文件ID(云存储中的id)
*/
private String excelFiledId;
/**
* 创建日期YYYY-MM-DD
*/
private Date createDate;
/**
* 活动月份YYYY-MM
*/
private String activityMonth;
/**
* 月结束日期
*/
private Date monthStartDate;
/**
* 月结束日期
*/
private Date monthEndDate;
/**
* 创建时间
*/
private Date createTime;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
package com.wangxiaolu.promotion.pojo.activity.manage.vo;
import com.wangxiaolu.promotion.common.enums.StatusType;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @author : liqiulin
* @date : 2024-09-02 18
* @describe :
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
@Accessors(chain = true)
public class ActivityPlanInfoVo {
List<Long> ids;
Long id;
StatusType activityStatusUpdate;
}
package com.wangxiaolu.promotion.pojo.activity.manage.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.util.Date;
/**
* @author : liqiulin
* @date : 2024-08-20 14
* @describe : 文件上传Vo
* 目前用于活动计划表上传接口
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
@Accessors(chain = true)
public class ActivityPlanVo {
/**
* promotion_manage_employee表id
*/
private Integer employeeId;
private String employeeNo;
private String employeeName;
private String deptQcId;
private String deptQcName;
/**
* 文件http地址
*/
private String excelUrl;
/**
* 活动月份YYYY-MM
*/
private String activityMonth;
/**
* 月份第几周
*/
// private Integer monthWeekNumber;
/**
* 月结束日期
*/
private Date monthStartDate;
/**
* 月结束日期
*/
private Date monthEndDate;
}
package com.wangxiaolu.promotion.pojo.activity.employee.vo;
package com.wangxiaolu.promotion.pojo.activity.manage.vo;
import com.wangxiaolu.promotion.enums.activity.TemActApproveStatus;
import lombok.AllArgsConstructor;
......@@ -13,7 +13,7 @@ import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ApproveVO {
public class ApproveVo {
/**
* 审批状态
*/
......
package com.wangxiaolu.promotion.pojo.activity.employee.vo;
package com.wangxiaolu.promotion.pojo.activity.manage.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
......
package com.wangxiaolu.promotion.pojo.activity.employee.vo;
package com.wangxiaolu.promotion.pojo.activity.manage.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
......
......@@ -36,7 +36,12 @@ public class PromotionManageEmployeeDto {
private String employeeNo;
/**
* 密码
* 部门信息-勤策部门id,关联部门表qc_id字段
*/
private String passwork;
private String deptQcId;
/**
* 部门信息-勤策部门名称
*/
private String deptQcName;
}
package com.wangxiaolu.promotion.service.activity.manage;
import com.wangxiaolu.promotion.pojo.activity.manage.vo.ActivityPlanInfoVo;
/**
* @author : liqiulin
* @date : 2024-09-02 18
* @describe :
*/
public interface ActivityPlanInfoCoreService {
void updateActivityInfo(ActivityPlanInfoVo activityPlanInfoVo);
}
package com.wangxiaolu.promotion.service.activity.manage;
import com.wangxiaolu.promotion.pojo.PageInfo;
/**
* @author : liqiulin
* @date : 2024-09-03 11
* @describe :
*/
public interface ActivityPlanInfoQueryService {
void findActivityPlanInfoPage(PageInfo pageInfo);
}
package com.wangxiaolu.promotion.service.activity.manage;
import com.wangxiaolu.promotion.pojo.activity.manage.dto.EmployeeActivityPlanRecordDto;
import com.wangxiaolu.promotion.pojo.activity.manage.vo.ActivityPlanVo;
/**
* @author : liqiulin
* @date : 2024-08-21 13
* @describe :
*/
public interface ActivityPlanRecordCoreService {
void saveActivityPlan(EmployeeActivityPlanRecordDto planDto, ActivityPlanVo activityPlanVo) throws Exception;
void deleteById(Long id);
}
package com.wangxiaolu.promotion.service.activity.manage;
import com.wangxiaolu.promotion.pojo.PageInfo;
import com.wangxiaolu.promotion.pojo.activity.manage.dto.EmployeeActivityPlanInfoDto;
import com.wangxiaolu.promotion.pojo.activity.manage.dto.EmployeeActivityPlanRecordDto;
import com.wangxiaolu.promotion.pojo.activity.manage.vo.ActivityPlanVo;
import java.util.List;
/**
* @author : liqiulin
* @date : 2024-08-21 14
* @describe :
*/
public interface ActivityPlanRecordQueryService {
void findActivityPlanRecordPage(PageInfo pageInfo);
EmployeeActivityPlanRecordDto findActivityPlanRecord(ActivityPlanVo activityPlanVo);
}
package com.wangxiaolu.promotion.service.activity.employee;
package com.wangxiaolu.promotion.service.activity.manage;
import com.wangxiaolu.promotion.pojo.PageInfo;
......
package com.wangxiaolu.promotion.service.activity.employee;
package com.wangxiaolu.promotion.service.activity.manage;
import com.wangxiaolu.promotion.pojo.activity.employee.vo.ApproveVO;
import com.wangxiaolu.promotion.pojo.activity.manage.vo.ApproveVo;
/**
* @author : liqiulin
......@@ -8,7 +8,7 @@ import com.wangxiaolu.promotion.pojo.activity.employee.vo.ApproveVO;
* @describe :
*/
public interface EmployeeCoreTemActivityService {
void approveActivity(long reportedId, ApproveVO approveVO);
void approveActivity(long reportedId, ApproveVo approveVO);
void deleteById(long id);
}
package com.wangxiaolu.promotion.service.activity.employee;
package com.wangxiaolu.promotion.service.activity.manage;
import com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryClockDto;
......
package com.wangxiaolu.promotion.service.activity.employee;
package com.wangxiaolu.promotion.service.activity.manage;
import com.wangxiaolu.promotion.pojo.user.dto.WxTemporaryInfoDto;
......
package com.wangxiaolu.promotion.service.activity.employee;
package com.wangxiaolu.promotion.service.activity.manage;
import com.wangxiaolu.promotion.pojo.PageInfo;
......
package com.wangxiaolu.promotion.service.activity.employee;
package com.wangxiaolu.promotion.service.activity.manage;
import com.wangxiaolu.promotion.pojo.PageInfo;
......
package com.wangxiaolu.promotion.service.activity.employee;
package com.wangxiaolu.promotion.service.activity.manage;
import com.wangxiaolu.promotion.pojo.PageInfo;
......
package com.wangxiaolu.promotion.service.activity.manage.impl;
import com.wangxiaolu.promotion.domain.manage.dao.EmployeeActivityPlanInfoDao;
import com.wangxiaolu.promotion.domain.manage.wrapperQo.ActivityPlanInfoWrapper;
import com.wangxiaolu.promotion.pojo.activity.manage.vo.ActivityPlanInfoVo;
import com.wangxiaolu.promotion.service.activity.manage.ActivityPlanInfoCoreService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author : liqiulin
* @date : 2024-09-02 18
* @describe :
*/
@Service
public class ActivityPlanInfoCoreServiceImpl implements ActivityPlanInfoCoreService {
@Autowired
EmployeeActivityPlanInfoDao employeeActivityPlanInfoDao;
@Override
public void updateActivityInfo(ActivityPlanInfoVo activityPlanInfoVo) {
ActivityPlanInfoWrapper wrap = new ActivityPlanInfoWrapper();
wrap.setIds(activityPlanInfoVo.getIds()).setId(activityPlanInfoVo.getId()).setActivityStatusUpdate(activityPlanInfoVo.getActivityStatusUpdate());
employeeActivityPlanInfoDao.update(wrap);
}
}
package com.wangxiaolu.promotion.service.activity.manage.impl;
import com.alibaba.fastjson.JSONObject;
import com.wangxiaolu.promotion.domain.manage.dao.EmployeeActivityPlanInfoDao;
import com.wangxiaolu.promotion.domain.manage.wrapperQo.ActivityPlanInfoWrapper;
import com.wangxiaolu.promotion.pojo.PageInfo;
import com.wangxiaolu.promotion.service.activity.manage.ActivityPlanInfoQueryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author : liqiulin
* @date : 2024-09-03 11
* @describe :
*/
@Service
public class ActivityPlanInfoQueryServiceImpl implements ActivityPlanInfoQueryService {
@Autowired
EmployeeActivityPlanInfoDao employeeActivityPlanInfoDao;
@Override
public void findActivityPlanInfoPage(PageInfo pageInfo) {
ActivityPlanInfoWrapper wrapper = JSONObject.parseObject(JSONObject.toJSONString(pageInfo.getQueryParams()), ActivityPlanInfoWrapper.class);
employeeActivityPlanInfoDao.page(pageInfo,wrapper);
}
}
package com.wangxiaolu.promotion.service.activity.manage.impl;
import com.wangxiaolu.promotion.common.excel.ReadExcelUtils;
import com.wangxiaolu.promotion.common.redis.RedisKeys;
import com.wangxiaolu.promotion.common.redis.service.RedisCache;
import com.wangxiaolu.promotion.domain.manage.dao.EmployeeActivityPlanInfoDao;
import com.wangxiaolu.promotion.domain.manage.dao.EmployeeActivityPlanRecordDao;
import com.wangxiaolu.promotion.exception.DataException;
import com.wangxiaolu.promotion.pojo.activity.manage.dto.EmployeeActivityPlanInfoDto;
import com.wangxiaolu.promotion.pojo.activity.manage.dto.EmployeeActivityPlanRecordDto;
import com.wangxiaolu.promotion.pojo.activity.manage.vo.ActivityPlanVo;
import com.wangxiaolu.promotion.result.basedata.RCode;
import com.wangxiaolu.promotion.service.activity.manage.ActivityPlanRecordCoreService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.*;
/**
* @author : liqiulin
* @date : 2024-08-21 13
* @describe :
*/
@Service
public class ActivityPlanRecordCoreServiceImpl implements ActivityPlanRecordCoreService {
@Autowired
RedisCache redisCache;
@Autowired
EmployeeActivityPlanRecordDao employeeActivityPlanRecordDao;
@Autowired
EmployeeActivityPlanInfoDao employeeActivityPlanInfoDao;
@Transactional(rollbackFor = Exception.class)
@Override
public void saveActivityPlan(EmployeeActivityPlanRecordDto planDto, ActivityPlanVo activityPlanVo) throws Exception {
// 保存上传记录
Long planRecordId = employeeActivityPlanRecordDao.save(planDto);
// Long planRecordId = 37L;
planDto.setId(planRecordId);
// 解析excel表是否符合规范、保存
saveActivityPlanInfo(activityPlanVo, planDto);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void deleteById(Long id) {
employeeActivityPlanRecordDao.deleteById(id);
employeeActivityPlanInfoDao.deletebyActivityPlanRecordId(id);
}
private void saveActivityPlanInfo(ActivityPlanVo activityPlanVo, EmployeeActivityPlanRecordDto planDto) throws Exception {
// 下载
String filePath = "./activity_plan/" + activityPlanVo.getEmployeeNo() + "/" + planDto.getExcelFiledId();
downloadExcel(activityPlanVo.getExcelUrl(),filePath);
// 读取
List<EmployeeActivityPlanInfoDto> planInfoDtos = readSheet0(filePath, activityPlanVo, planDto);
// 保存
employeeActivityPlanInfoDao.saveList(planInfoDtos);
}
private void downloadExcel( String urlStr,String filePath) throws Exception{
// 保存文件
URL url = new URL(urlStr);
URLConnection urlConnection = url.openConnection();
InputStream inputStream = urlConnection.getInputStream();
FileOutputStream fileOutputStream = new FileOutputStream(filePath);
// 调大小
byte[] buffer = new byte[102400];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, bytesRead);
}
fileOutputStream.close();
inputStream.close();
}
private List<EmployeeActivityPlanInfoDto> readSheet0(String filePath, ActivityPlanVo activityPlanVo, EmployeeActivityPlanRecordDto planDto) throws Exception {
// 1、解析表格数据
ReadExcelUtils readExcelUtils = new ReadExcelUtils(filePath);
Map<Integer, List<Object>> rows = readExcelUtils.readContent();
if (rows.size() <= 0) {
throw new DataException(RCode.API_DATA_ERROR);
}
Map<Object, Object> dealers = redisCache.getAllHash(RedisKeys.UserKeys.DEALER_HAVE_LIST.getKey());
// 2、校验数据准确性
verifyRow(rows,dealers);
/**
* 3、保存入库
*/
List<EmployeeActivityPlanInfoDto> planInfoDtos = new ArrayList<>(rows.size() * 2);
for (Map.Entry<Integer, List<Object>> entry : rows.entrySet()) {
List<Object> value = entry.getValue();
EmployeeActivityPlanInfoDto planInfoDto = new EmployeeActivityPlanInfoDto()
.setActivityPlanRecordId(planDto.getId())
.setExcelFiledId(planDto.getExcelFiledId())
.setEmployeeId(activityPlanVo.getEmployeeId())
.setEmployeeName(activityPlanVo.getEmployeeName())
.setEmployeeNo(activityPlanVo.getEmployeeNo())
.setActivityMonth(planDto.getActivityMonth())
.setCity((String) value.get(0))
.setDealerId((String) value.get(1))
.setDealerName((String) dealers.get(value.get(1)))
.setLineName((String) value.get(2))
.setStoreName((String) value.get(3))
.setActivityPattern((String) value.get(4))
.setActivityStartDate((Date) value.get(5))
.setActivityEndDate((Date) value.get(6))
.setHupiCount(Integer.parseInt(StringUtils.isBlank((String)value.get(7)) ? "0" : (String) value.get(7)))
.setQuguCount(Integer.parseInt(StringUtils.isBlank((String)value.get(8)) ? "0" : (String) value.get(8)))
.setTemporaryOnTime((String) value.get(9));
planInfoDtos.add(planInfoDto);
}
return planInfoDtos;
}
/**
* 校验数据是否规范
*/
private void verifyRow(Map<Integer, List<Object>> rows, Map<Object, Object> dealers) throws Exception {
for (Map.Entry<Integer, List<Object>> entry : rows.entrySet()) {
Integer rowNo = entry.getKey()+1;
List<Object> value = entry.getValue();
System.out.println(value);
String city = (String) value.get(0);
if (StringUtils.isBlank(city)) {
throw new DataException("第"+rowNo+"行 - 城市不可为空");
}
String dealerId = (String) value.get(1);
if (!dealers.containsKey(dealerId.trim())) {
throw new DataException("第"+rowNo+"行 - 经销商编码错误");
}
String lineName = (String) value.get(2);
if (StringUtils.isBlank(lineName)) {
throw new DataException("第"+rowNo+"行 - 系统名称为空");
}
String storeName = (String) value.get(3);
if (StringUtils.isBlank(storeName)) {
throw new DataException("第"+rowNo+"行 - 店铺名称为空");
}
String pattern = (String) value.get(4);
if (StringUtils.isBlank(pattern)) {
throw new DataException("第"+rowNo+"行 - 活动模式为空");
}
Object activityStartDateO = value.get(5);
if (StringUtils.isBlank(activityStartDateO.toString()) || !(activityStartDateO instanceof Date)) {
throw new DataException("第"+rowNo+"行 - 活动开始时间为空或格式错误(请将【开始日期】【结束日期】两列设置为时间格式)");
}
Object activityENDDateO = value.get(6);
if (StringUtils.isBlank(activityENDDateO.toString()) || !(activityENDDateO instanceof Date)) {
throw new DataException("第"+rowNo+"行 - 活动结束时间为空或格式错误(请将【开始日期】【结束日期】两列设置为时间格式)");
}
}
}
}
package com.wangxiaolu.promotion.service.activity.manage.impl;
import com.alibaba.fastjson.JSONObject;
import com.wangxiaolu.promotion.domain.manage.dao.EmployeeActivityPlanRecordDao;
import com.wangxiaolu.promotion.domain.manage.wrapperQo.ActivityPlanRecordWrapper;
import com.wangxiaolu.promotion.pojo.PageInfo;
import com.wangxiaolu.promotion.pojo.activity.manage.dto.EmployeeActivityPlanRecordDto;
import com.wangxiaolu.promotion.pojo.activity.manage.vo.ActivityPlanVo;
import com.wangxiaolu.promotion.service.activity.manage.ActivityPlanRecordQueryService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author : liqiulin
* @date : 2024-08-21 14
* @describe :
*/
@Service
public class ActivityPlanRecordQueryServiceImpl implements ActivityPlanRecordQueryService {
@Autowired
EmployeeActivityPlanRecordDao employeeActivityPlanRecordDao;
@Override
public void findActivityPlanRecordPage(PageInfo pageInfo) {
ActivityPlanRecordWrapper wrap = JSONObject.parseObject(JSONObject.toJSONString(pageInfo.getQueryParams()), ActivityPlanRecordWrapper.class);
employeeActivityPlanRecordDao.selectPage(wrap,pageInfo);
}
@Override
public EmployeeActivityPlanRecordDto findActivityPlanRecord(ActivityPlanVo activityPlanVo) {
ActivityPlanRecordWrapper wp = new ActivityPlanRecordWrapper();
BeanUtils.copyProperties(activityPlanVo,wp);
return employeeActivityPlanRecordDao.selectOne(wp);
}
}
package com.wangxiaolu.promotion.service.activity.employee.impl;
package com.wangxiaolu.promotion.service.activity.manage.impl;
import com.alibaba.fastjson.JSONObject;
import com.wangxiaolu.promotion.domain.activity.dao.PromotionStoreDao;
import com.wangxiaolu.promotion.domain.activity.wrapperQo.PromotionStoreWrapper;
import com.wangxiaolu.promotion.pojo.PageInfo;
import com.wangxiaolu.promotion.service.activity.employee.EmpPromotionStoreQueryService;
import com.wangxiaolu.promotion.service.activity.manage.EmpPromotionStoreQueryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......
package com.wangxiaolu.promotion.service.activity.employee.impl;
package com.wangxiaolu.promotion.service.activity.manage.impl;
import com.wangxiaolu.promotion.common.enums.StatusType;
import com.wangxiaolu.promotion.domain.activity.dao.*;
import com.wangxiaolu.promotion.domain.activity.wrapperQo.TemporaryClockWrapper;
import com.wangxiaolu.promotion.domain.activity.wrapperQo.TemporaryPhotoWrapper;
import com.wangxiaolu.promotion.enums.activity.LogType;
import com.wangxiaolu.promotion.enums.activity.TemActApproveStatus;
import com.wangxiaolu.promotion.exception.DataException;
import com.wangxiaolu.promotion.exception.ParamException;
import com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryActivityMarketCellDto;
import com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryActivityReportedDto;
import com.wangxiaolu.promotion.pojo.activity.employee.vo.ApproveVO;
import com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryClockDto;
import com.wangxiaolu.promotion.pojo.activity.manage.vo.ApproveVo;
import com.wangxiaolu.promotion.result.basedata.RCode;
import com.wangxiaolu.promotion.service.activity.employee.EmployeeCoreTemActivityService;
import com.wangxiaolu.promotion.service.activity.manage.EmployeeCoreTemActivityService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -43,7 +40,7 @@ public class EmployeeCoreTemActivityServiceImpl implements EmployeeCoreTemActivi
@Transactional(rollbackFor = Exception.class)
@Override
public void approveActivity(long reportedId, ApproveVO approveVO) {
public void approveActivity(long reportedId, ApproveVo approveVO) {
TemporaryActivityReportedDto reportedDto = temporaryActivityReportedDao.findOneById(reportedId);
if (Objects.isNull(reportedDto)) {
throw new ParamException(RCode.DATA_NOT_HAVE_ERROR, null);
......
package com.wangxiaolu.promotion.service.activity.employee.impl;
package com.wangxiaolu.promotion.service.activity.manage.impl;
import com.wangxiaolu.promotion.common.enums.StatusType;
import com.wangxiaolu.promotion.domain.activity.dao.TemporaryActivityClockDao;
import com.wangxiaolu.promotion.domain.activity.dao.TemporaryActivityPhotoDao;
import com.wangxiaolu.promotion.domain.activity.dao.TemporaryActivityReportedDao;
import com.wangxiaolu.promotion.domain.activity.wrapperQo.TemporaryClockWrapper;
import com.wangxiaolu.promotion.domain.activity.wrapperQo.TemporaryPhotoWrapper;
import com.wangxiaolu.promotion.exception.DataException;
import com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryActivityReportedDto;
import com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryClockDto;
import com.wangxiaolu.promotion.result.basedata.RCode;
import com.wangxiaolu.promotion.service.activity.employee.EmployeeCoreTemClockService;
import com.wangxiaolu.promotion.service.activity.manage.EmployeeCoreTemClockService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......
package com.wangxiaolu.promotion.service.activity.employee.impl;
package com.wangxiaolu.promotion.service.activity.manage.impl;
import com.wangxiaolu.promotion.domain.user.dao.TemporaryInfoDao;
import com.wangxiaolu.promotion.pojo.user.dto.WxTemporaryInfoDto;
import com.wangxiaolu.promotion.service.activity.employee.EmployeeCoreTemporaryInfoService;
import com.wangxiaolu.promotion.service.activity.manage.EmployeeCoreTemporaryInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......
package com.wangxiaolu.promotion.service.activity.employee.impl;
package com.wangxiaolu.promotion.service.activity.manage.impl;
import com.alibaba.fastjson.JSONObject;
import com.wangxiaolu.promotion.domain.activity.dao.TemporaryActivityClockDao;
......@@ -12,8 +12,7 @@ import com.wangxiaolu.promotion.pojo.PageInfo;
import com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryActivityMarketCellDto;
import com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryActivityReportedDto;
import com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryClockDto;
import com.wangxiaolu.promotion.result.basedata.R;
import com.wangxiaolu.promotion.service.activity.employee.EmployeeQueryTemActivityService;
import com.wangxiaolu.promotion.service.activity.manage.EmployeeQueryTemActivityService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......
package com.wangxiaolu.promotion.service.activity.employee.impl;
package com.wangxiaolu.promotion.service.activity.manage.impl;
import com.alibaba.fastjson.JSONObject;
import com.wangxiaolu.promotion.domain.activity.dao.TemporaryActivityClockDao;
import com.wangxiaolu.promotion.domain.activity.wrapperQo.TemporaryClockWrapper;
import com.wangxiaolu.promotion.pojo.PageInfo;
import com.wangxiaolu.promotion.service.activity.employee.EmployeeQueryTemClockService;
import com.wangxiaolu.promotion.service.activity.manage.EmployeeQueryTemClockService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......
package com.wangxiaolu.promotion.service.activity.employee.impl;
package com.wangxiaolu.promotion.service.activity.manage.impl;
import com.alibaba.fastjson.JSONObject;
import com.wangxiaolu.promotion.domain.user.dao.TemporaryInfoDao;
import com.wangxiaolu.promotion.domain.user.wrapperQo.TemporaryWrapper;
import com.wangxiaolu.promotion.pojo.PageInfo;
import com.wangxiaolu.promotion.service.activity.employee.EmployeeQueryTemporaryInfoService;
import com.wangxiaolu.promotion.service.activity.manage.EmployeeQueryTemporaryInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......
......@@ -16,4 +16,5 @@ public interface QinCeDataTaskService {
void productAllTask();
void productDealers();
}
package com.wangxiaolu.promotion.service.user;
import com.wangxiaolu.promotion.pojo.PageInfo;
/**
* @author : liqiulin
* @date : 2024-09-02 13
* @describe :
*/
public interface QinCeDealerQueryService {
void page(PageInfo pageInfo);
}
package com.wangxiaolu.promotion.service.user;
import com.wangxiaolu.promotion.pojo.user.vo.LoginVo;
import com.wangxiaolu.promotion.pojo.user.vo.UserLoginParam;
/**
......@@ -9,5 +10,5 @@ import com.wangxiaolu.promotion.pojo.user.vo.UserLoginParam;
*/
public interface WangxlEmployeeQueryService {
String employeeLoginVerify(UserLoginParam userLoginParam);
LoginVo employeeLoginVerify(UserLoginParam userLoginParam);
}
......@@ -2,16 +2,21 @@ package com.wangxiaolu.promotion.service.user.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.wangxiaolu.promotion.common.redis.RedisKeys;
import com.wangxiaolu.promotion.common.redis.service.RedisCache;
import com.wangxiaolu.promotion.domain.activity.dao.PromotionStoreDao;
import com.wangxiaolu.promotion.domain.user.dao.*;
import com.wangxiaolu.promotion.service.user.QinCeDataTaskService;
import com.wangxiaolu.promotion.utils.OkHttp;
import com.wangxiaolu.promotion.utils.QinCeUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.Map;
import java.util.*;
/**
* @author : liqiulin
......@@ -22,6 +27,8 @@ import java.util.Map;
@Service
public class QinCeDataTaskServiceImpl implements QinCeDataTaskService {
@Autowired
RedisCache redisCache;
@Autowired
QinCeUtils qinCeUtils;
@Autowired
......@@ -36,6 +43,8 @@ public class QinCeDataTaskServiceImpl implements QinCeDataTaskService {
QinceProductInfoDao qinceProductInfoDao;
@Autowired
PromotionStoreDao promotionStoreDao;
@Autowired
QinceDealerDao qinceDealerDao;
@Override
public void departmentSyncTask() {
......@@ -108,6 +117,65 @@ public class QinCeDataTaskServiceImpl implements QinCeDataTaskService {
qinceProductInfoDao.productSyncTask(responseDatas);
}
/**
* 同步经销商
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void productDealers() {
Set<Object> dealerIdsR = redisCache.getHashKeys(RedisKeys.UserKeys.DEALER_HAVE_LIST.getKey());
if (CollectionUtils.isEmpty(dealerIdsR)){
// 将数据库中的经销商保存到redis中
Map<Object, Object> dealers = qinceDealerDao.selectAll();
dealerIdsR = dealers.keySet();
redisCache.putAllHash(RedisKeys.UserKeys.DEALER_HAVE_LIST.getKey(),dealers);
}
int i = 0;
boolean nextPage = true;
while (nextPage) {
i++;
nextPage = booleanDealersPage(i,dealerIdsR);
}
}
private boolean booleanDealersPage(Integer pageNum,Set<Object> dealerIdsR){
Map<String, Object> params = qinCeUtils.queryDealerParam(pageNum);
String url = qinCeUtils.builderUrl(QinCeUtils.QUERY_DEALER, params);
JSONObject resultJson = OkHttp.postQC(url, params);
JSONArray responseDatas = resultJson.getJSONArray("response_data");
log.info("勤策-查询一周内修改过的经销商,第{}页数据「{}」条", pageNum, responseDatas.size());
if (responseDatas.size() <= 0) {
return false;
}
List<Object> dealerJsons = new ArrayList<>(1500);
Map<Object,Object> dealers = new HashMap<>(1500);
for (int index = 0; index < responseDatas.size(); index++) {
JSONObject jsonObject = responseDatas.getJSONObject(index);
String dealerId = jsonObject.getString("dealer_id");
if (StringUtils.isBlank(dealerId)|| (dealerId.length() != 6) || dealerIdsR.contains(dealerId)){
continue;
}
dealerJsons.add(jsonObject);
dealers.put(dealerId,jsonObject.getString("dealer_name"));
}
// 未新增数据不保存
if (CollectionUtils.isEmpty(dealerJsons)){
return true;
}
log.info("勤策-同步一周内修改过的经销商,第{}页数据「{}」条", pageNum, dealerJsons.size());
qinceDealerDao.saveList(dealerJsons);
redisCache.putAllHash(RedisKeys.UserKeys.DEALER_HAVE_LIST.getKey(),dealers);
return true;
}
private boolean booleanshopDetailPage(Integer pageNum) {
// 查找一周内修改或新增的数据
Map<String, Object> params = qinCeUtils.queryShopParam(pageNum);
......@@ -117,11 +185,11 @@ public class QinCeDataTaskServiceImpl implements QinCeDataTaskService {
JSONObject resultJson = OkHttp.postQC(url, params);
JSONArray responseDatas = resultJson.getJSONArray("response_data");
if (responseDatas.size() <= 0) {
log.error("勤策-同步一周内修改过的终端store数据,未查询到数据");
log.info("勤策-同步一周内修改过的终端store数据,第{}页未查询到数据",pageNum);
return false;
}
log.info("勤策-同步一周内修改过的终端store数据,查询到第{}页数据「{}」条", pageNum, responseDatas.size());
log.info("勤策-同步一周内修改过的终端store数据,第{}页数据「{}」条", pageNum, responseDatas.size());
qinCeClienteleShopDao.shopDetailAllTask(responseDatas);
promotionStoreDao.qinceShopDetailAllTask(responseDatas);
return true;
......
package com.wangxiaolu.promotion.service.user.impl;
import com.wangxiaolu.promotion.domain.user.dao.QinceDealerDao;
import com.wangxiaolu.promotion.pojo.PageInfo;
import com.wangxiaolu.promotion.service.user.QinCeDealerQueryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author : liqiulin
* @date : 2024-09-02 13
* @describe :
*/
@Service
public class QinCeDealerQueryServiceImpl implements QinCeDealerQueryService {
@Autowired
QinceDealerDao qinceDealerDao;
@Override
public void page(PageInfo pageInfo) {
qinceDealerDao.page(pageInfo);
}
}
......@@ -7,6 +7,7 @@ import com.wangxiaolu.promotion.common.util.MD5Utils;
import com.wangxiaolu.promotion.domain.activity.dao.PromotionManageEmployeeDao;
import com.wangxiaolu.promotion.exception.ParamException;
import com.wangxiaolu.promotion.pojo.user.dto.PromotionManageEmployeeDto;
import com.wangxiaolu.promotion.pojo.user.vo.LoginVo;
import com.wangxiaolu.promotion.pojo.user.vo.UserLoginParam;
import com.wangxiaolu.promotion.result.basedata.RCode;
import com.wangxiaolu.promotion.service.user.WangxlEmployeeQueryService;
......@@ -33,19 +34,14 @@ public class WangxlEmployeeQueryServiceImpl implements WangxlEmployeeQueryServic
@Override
public String employeeLoginVerify(UserLoginParam userLoginParam) {
PromotionManageEmployeeDto employeeDto = promotionManageEmployeeDao.selectOneByEmployeeNo(userLoginParam.getLoginName());
if (Objects.isNull(employeeDto)){
throw new ParamException(RCode.LOGIN_PARAM_ERROR,null);
}
if (!MD5Utils.getSaltverifyMD5(userLoginParam.getPassword(),employeeDto.getPasswork())){
throw new ParamException(RCode.LOGIN_PASSWORD_ERROR,null);
}
log.info("促销员管理后台登录成功,工号:{}", userLoginParam.getLoginName());
public LoginVo employeeLoginVerify(UserLoginParam userLoginParam) {
PromotionManageEmployeeDto employeeDto = promotionManageEmployeeDao.loginByEmployeeNo(userLoginParam.getLoginName(),userLoginParam.getPassword());
String loginToken = jwtUtils.getEmployeeToken(userLoginParam.getLoginName(), userLoginParam.getPassword());
redisCache.addToJsonToMinute(RedisKeys.UserKeys.TEMPORARY_TOKEN.getKey()+loginToken,employeeDto,360);
return loginToken;
LoginVo loginVo = new LoginVo<>(employeeDto,loginToken);
return loginVo;
}
}
......@@ -48,6 +48,8 @@ public class QinCeUtils {
public static final String QUERY_PRODUCT_PD_TYPE = "/api/product/v1/queryPdType/";
// 商品列表
public static final String QUERY_PRODUCT = "/api/product/v1/queryProduct/";
// 经销商
public static final String QUERY_DEALER = "/api/dealer/v1/queryDealer/";
public String builderUrl(String sidepath, Map<String, Object> params) {
String msgId = UUID.randomUUID().toString();
......@@ -82,13 +84,8 @@ public class QinCeUtils {
*/
public Map<String, Object> queryOrgParam() {
Map<String, Object> params = new HashMap<>();
params.put("id", "");
params.put("org_id", "");
params.put("org_code", "");
params.put("org_name", "");
params.put("org_status", "");
params.put("create_date", "");
params.put("modify_date", "");
DateTime dateTime = DateUtil.offsetDay(new Date(), -1);
params.put("modify_date", DateUtil.format(dateTime, DatePattern.NORM_DATE_PATTERN));
return params;
}
......@@ -101,23 +98,8 @@ public class QinCeUtils {
if (queryId) {
params.put("id", "");
}
// 根据来源第三方系统的员工唯一标识精确查询,id、emp_id如果同时存在优先取id
params.put("emp_id", "");
// 根据员工登录帐号精确查询
params.put("emp_code", "");
// 根据姓名模糊查询
params.put("emp_name", "");
// 根据人员编码精确查询
params.put("employee_code", "");
// 根据员工状态查询
params.put("emp_status", "");
// 根据创建日期查询用户。格式:yyyy-MM-dd
params.put("create_date", "");
// 根据修改日期查询用户。格式:yyyy-MM-dd
params.put("modify_date", "");
// 根据手机号查询
params.put("emp_mobile", "");
DateTime dateTime = DateUtil.offsetDay(new Date(), -1);
params.put("modify_date", DateUtil.format(dateTime, DatePattern.NORM_DATE_PATTERN));
return params;
}
......@@ -172,4 +154,15 @@ public class QinCeUtils {
params.put("prd_id", "");
return params;
}
public Map<String, Object> queryDealerParam(Integer pageNum) {
Map<String, Object> params = new HashMap<>();
params.put("page_number", pageNum);
params.put("status", "1");
// todo 全量数据同步后,再开启指定日期同步
// DateTime dateTime = DateUtil.offsetDay(new Date(), -7);
// params.put("after_create_date", DateUtil.format(dateTime, DatePattern.NORM_DATETIME_PATTERN));
return params;
}
}
......@@ -27,26 +27,32 @@ public class XxlJobHandler {
/**
* 同步组织架构/部门数据
* 0 10 1
* 修改日期为昨天
*/
@XxlJob("qince_department_task")
public void departmentSyncTask(){
log.info("[xxl-job] start === 同步勤策部门数据");
log.info("[xxl-job] start === 同步勤策部门——昨天修改数据");
qinCeDataTaskService.departmentSyncTask();
log.info("[xxl-job] end === 同步勤策部门数据");
log.info("[xxl-job] end === 同步勤策部门——昨天修改数据");
}
/**
* 同步员工数据
* 0 0 1
* 修改日期为昨天
*/
@XxlJob("qince_employee_task")
public void employeeSyncTask(){
log.info("[xxl-job] start === 同步员工数据");
log.info("[xxl-job] start === 同步员工——昨天修改数据");
qinCeDataTaskService.employeeSyncTask();
log.info("[xxl-job] end === 同步员工数据");
log.info("[xxl-job] end === 同步员工——昨天修改数据");
}
/**
* 同步[终端数据]
* 7日内有更新的终端
* 0 0 0
*/
@XxlJob("qince_shop_task")
public void shopDetailAllTask(){
......@@ -57,6 +63,8 @@ public class XxlJobHandler {
/**
* 同步[商品类型]
* 全量
* 0 12 2
*/
@XxlJob("qince_product_type_task")
public void productTypeAllTask(){
......@@ -67,6 +75,8 @@ public class XxlJobHandler {
/**
* 同步[商品详情]
* 0 10 2
* 全量
*/
@XxlJob("qince_product_info_task")
public void productInfoAllTask(){
......@@ -75,4 +85,15 @@ public class XxlJobHandler {
log.info("[xxl-job] end === 同步商品详情");
}
/**
* 同步[经销商列表]
* 0 0 2
*/
@XxlJob("qince_dealers")
public void dealersTask(){
log.info("[xxl-job] start === 同步经销商");
qinCeDataTaskService.productDealers();
log.info("[xxl-job] end === 同步经销商");
}
}
......@@ -62,10 +62,17 @@ tengxunyun:
#验证码过期时间(分钟)
overdue_long: 5
#qince:
# open_api: https://openapi.region2.qince.com
# open_id: 8030282350124307682
# app_key: Gx0yQw4UhDtNjESmDl
qince:
open_api: https://openapi.region2.qince.com
open_id: 8030282350124307682
app_key: Gx0yQw4UhDtNjESmDl
open_id: 8546408787259919799
app_key: oV0FHfMt81Tii2_kst
# mybatis-plus 控制台打印sql日志
mybatis-plus:
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wangxiaolu.promotion.domain.manage.mapper.EmployeeActivityPlanInfoMapper">
<resultMap id="BaseResultMap" type="com.wangxiaolu.promotion.domain.manage.mapper.entity.EmployeeActivityPlanInfoDO">
<id property="id" column="id" jdbcType="BIGINT"/>
<result property="activityPlanRecordId" column="activity_plan_record_id" jdbcType="BIGINT"/>
<result property="excelFiledId" column="excel_filed_id" jdbcType="VARCHAR"/>
<result property="employeeId" column="employee_id" jdbcType="INTEGER"/>
<result property="employeeName" column="employee_name" jdbcType="VARCHAR"/>
<result property="employeeNo" column="employee_no" jdbcType="VARCHAR"/>
<result property="activityMonth" column="activity_month" jdbcType="CHAR"/>
<result property="city" column="city" jdbcType="VARCHAR"/>
<result property="dealerId" column="dealer_id" jdbcType="VARCHAR"/>
<result property="dealerName" column="dealer_name" jdbcType="VARCHAR"/>
<result property="lineName" column="line_name" jdbcType="VARCHAR"/>
<result property="storeName" column="store_name" jdbcType="VARCHAR"/>
<result property="activityPattern" column="activity_pattern" jdbcType="VARCHAR"/>
<result property="activityStartDate" column="activity_start_date" jdbcType="DATE"/>
<result property="activityEndDate" column="activity_end_date" jdbcType="DATE"/>
<result property="hupiCount" column="hupi_count" jdbcType="INTEGER"/>
<result property="quguCount" column="qugu_count" jdbcType="INTEGER"/>
<result property="temporaryOnTime" column="temporary_on_time" jdbcType="VARCHAR"/>
<result property="isDelete" column="is_delete" jdbcType="INTEGER"/>
</resultMap>
<sql id="Base_Column_List">
id,activity_plan_record_id,excel_filed_id,
employee_id,employee_name,employee_no,
activity_month,city,dealer_id,
dealer_name,line_name,store_name,
activity_pattern,activity_start_date,activity_end_date,
hupi_count,qugu_count,temporary_on_time,
is_delete
</sql>
<insert id="saveList">
insert into employee_activity_plan_info (activity_plan_record_id, excel_filed_id, employee_id, employee_name,
employee_no, activity_month, city, dealer_id, dealer_name, line_name,
store_name, activity_pattern, activity_start_date, activity_end_date,
hupi_count, qugu_count, temporary_on_time)
values
<foreach collection="dos" item="item" separator=",">
(#{item.activityPlanRecordId},#{item.excelFiledId},#{item.employeeId},#{item.employeeName},
#{item.employeeNo},#{item.activityMonth},#{item.city},#{item.dealerId},#{item.dealerName},#{item.lineName},
#{item.storeName},#{item.activityPattern},#{item.activityStartDate},#{item.activityEndDate},
#{item.hupiCount},#{item.quguCount},#{item.temporaryOnTime})
</foreach>
</insert>
<update id="deletebyActivityPlanRecordId">
update employee_activity_plan_info set is_delete = 0 where activity_plan_record_id = #{recordId}
</update>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wangxiaolu.promotion.domain.manage.mapper.EmployeeActivityPlanRecordMapper">
<resultMap id="BaseResultMap" type="com.wangxiaolu.promotion.domain.manage.mapper.entity.EmployeeActivityPlanRecordDO">
<id property="id" column="id" jdbcType="BIGINT"/>
<result property="employeeId" column="employee_id" jdbcType="INTEGER"/>
<result property="excelUrl" column="excel_url" jdbcType="VARCHAR"/>
<result property="excelFiledId" column="excel_filed_id" jdbcType="VARCHAR"/>
<result property="createDate" column="create_date" jdbcType="DATE"/>
<result property="activityMonth" column="activity_month" jdbcType="CHAR"/>
<result property="monthStartDate" column="month_start_date" jdbcType="DATE"/>
<result property="monthEndDate" column="month_end_date" jdbcType="DATE"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="modifyTime" column="modify_time" jdbcType="TIMESTAMP"/>
<result property="deleteTime" column="delete_time" jdbcType="TIME"/>
<result property="isDelete" column="is_delete" jdbcType="INTEGER"/>
</resultMap>
<sql id="Base_Column_List">
id,employee_id,excel_url,
excel_filed_id,create_date,activity_month,
month_week_number,week_start_date,week_end_date,
create_time,modify_time,delete_time,
is_delete
</sql>
<update id="deleteByIdFake">
update employee_activity_plan_record set is_delete = 0,delete_time = now() where id = #{id};
</update>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wangxiaolu.promotion.domain.user.mapper.QinceDealerMapper">
<resultMap id="BaseResultMap" type="com.wangxiaolu.promotion.domain.user.mapper.entity.QinceDealerDO">
<id property="id" column="id" jdbcType="INTEGER"/>
<result property="dealerId" column="dealer_id" jdbcType="VARCHAR"/>
<result property="dealerName" column="dealer_name" jdbcType="VARCHAR"/>
<result property="dealerCooperateStatus" column="dealer_cooperate_status" jdbcType="CHAR"/>
</resultMap>
<sql id="Base_Column_List">
id,dealer_id,dealer_name,
dealer_cooperate_status,dealer_modify_time
</sql>
<insert id="saveList">
insert into qince_dealer
(dealer_id, dealer_name, dealer_cooperate_status, create_time)
VALUES
<foreach collection="dealerJsons" item="item" separator=",">
(#{item.dealer_id}, #{item.dealer_name},
#{item.dealer_cooperate_status},#{item.create_time})
</foreach>
</insert>
</mapper>
package com.wangxiaolu.promotion.controller.user;
import com.wangxiaolu.promotion.controller.user.login.tem.PromotionLoginController;
import com.wangxiaolu.promotion.pojo.user.vo.UserLoginParam;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
......
package com.wangxiaolu.promotion.controller.wechat;
import com.alibaba.fastjson.JSONObject;
import com.wangxiaolu.promotion.controller.user.login.tem.TemporaryInfoCoreController;
import com.wangxiaolu.promotion.controller.user.login.tem.temporaryInfoQueryController;
import com.wangxiaolu.promotion.pojo.user.vo.WxTemporaryEnrollVo;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
......@@ -18,9 +20,9 @@ import org.springframework.test.context.junit4.SpringRunner;
class WeChatUserCoreControllerTest {
@Autowired
WeChatUserCoreController weChatUserCoreController;
TemporaryInfoCoreController weChatUserCoreController;
@Autowired
WeChatUserQueryController weChatUserQueryController;
temporaryInfoQueryController weChatUserQueryController;
@Test
void enrollUserInfo() {
......
package com.wangxiaolu.promotion.controller.wechat;
import com.wangxiaolu.promotion.pojo.user.dto.WxTemporaryInfoDto;
import com.wangxiaolu.promotion.controller.user.login.tem.temporaryInfoQueryController;
import com.wangxiaolu.promotion.pojo.user.vo.WxTemporaryLoginVo;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
......@@ -8,8 +8,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import static org.junit.jupiter.api.Assertions.*;
/**
* @author : liqiulin
* @date : 2024-04-16 11
......@@ -20,7 +18,7 @@ import static org.junit.jupiter.api.Assertions.*;
class WeChatUserQueryControllerTest {
@Autowired
WeChatUserQueryController weChatUserQueryController;
temporaryInfoQueryController weChatUserQueryController;
@Test
void temporaryLoginByPhoneAndOpenId() {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论