提交 14770872 authored 作者: 000516's avatar 000516 提交者: Coding

活动计划V2城市经理角色:上报记录保存、解析excel中的数据进行保存、分页查询数据

1、后台登录单独类文件删除,登录与查询共用controller;2、新增管理员账号开通功能;3、删除单独的xxljoncontroller;4、活动计划与其他controller分离; 2、活动计划V2城市经理角色:上报记录保存、解析excel中的数据进行保存、分页查询数据 3、活动计划新增并返回解析数据、活动计划提交、阿里云oss获取token 4、修改Docker命令提示;修改application中的nacos配置为线下机房;添加qa配置
...@@ -13,6 +13,7 @@ docker rmi ...@@ -13,6 +13,7 @@ docker rmi
docker build -t promotion-service:latest . docker build -t promotion-service:latest .
Live启动:
docker run -d -p 8011:8011 --name promotion-service \ docker run -d -p 8011:8011 --name promotion-service \
-v /var/logs/promotion-service/:/var/logs/promotion-service/ \ -v /var/logs/promotion-service/:/var/logs/promotion-service/ \
-v /var/logs/xxl_job/:/var/logs/xxl_job/ \ -v /var/logs/xxl_job/:/var/logs/xxl_job/ \
...@@ -20,3 +21,12 @@ docker run -d -p 8011:8011 --name promotion-service \ ...@@ -20,3 +21,12 @@ docker run -d -p 8011:8011 --name promotion-service \
--network host \ --network host \
promotion-service:latest promotion-service:latest
QA启动:
docker run -d -p 8011:8011 --name promotion-service \
-v /var/logs/promotion-service/:/var/logs/promotion-service/ \
-v /var/logs/xxl_job/:/var/logs/xxl_job/ \
--restart=always \
--network host \
--spring.profiles.active=qa \
promotion-service:latest
\ No newline at end of file
...@@ -239,6 +239,12 @@ ...@@ -239,6 +239,12 @@
<artifactId>java-uuid-generator</artifactId> <artifactId>java-uuid-generator</artifactId>
<version>${java-uuid-generator.version}</version> <version>${java-uuid-generator.version}</version>
</dependency> </dependency>
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>${aliyun.oss.version}</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
...@@ -25,7 +25,6 @@ public class EmployeeQueryTemActivityController { ...@@ -25,7 +25,6 @@ public class EmployeeQueryTemActivityController {
* *
* @param loginQcId 员工 * @param loginQcId 员工
* @return 活动数据 * @return 活动数据
* @RequestHeader("loginQcId") String loginQcId
*/ */
@PostMapping("/page") @PostMapping("/page")
public R findActivitys(String loginQcId, @RequestBody PageInfo pageInfo) { public R findActivitys(String loginQcId, @RequestBody PageInfo pageInfo) {
......
...@@ -24,8 +24,8 @@ public class EmployeeQueryTemClockController { ...@@ -24,8 +24,8 @@ public class EmployeeQueryTemClockController {
* 查询员工打卡记录 * 查询员工打卡记录
*/ */
@PostMapping("/page") @PostMapping("/page")
public R findClockList(@RequestHeader("loginQcId") String loginQcId, @RequestBody PageInfo pageInfo) { public R findClockList(@RequestBody PageInfo pageInfo) {
employeeQueryTemClockService.findClockList(loginQcId, pageInfo); employeeQueryTemClockService.findClockList("", pageInfo);
return R.success(pageInfo); return R.success(pageInfo);
} }
......
...@@ -23,7 +23,6 @@ public class EmployeeQueryTemporaryInfoController { ...@@ -23,7 +23,6 @@ public class EmployeeQueryTemporaryInfoController {
/** /**
* 查询负责的促销员列表 * 查询负责的促销员列表
* @RequestHeader("loginQcId") String loginQcId,
*/ */
@PostMapping("/page") @PostMapping("/page")
public R findTemporaryInfoPage(@RequestBody PageInfo pageInfo) { public R findTemporaryInfoPage(@RequestBody PageInfo pageInfo) {
......
...@@ -29,25 +29,25 @@ public class PromotionStoreCoreController { ...@@ -29,25 +29,25 @@ public class PromotionStoreCoreController {
@Autowired @Autowired
RedisCache redisCache; RedisCache redisCache;
@PostMapping("/save") // @PostMapping("/save")
public R saveStore(@RequestHeader("Authorization") String authorization, @RequestBody PromotionStoreDto promotionStoreDto) { // public R saveStore(@RequestHeader("Authorization") String authorization, @RequestBody PromotionStoreDto promotionStoreDto) {
promotionStoreDto.verify(); // promotionStoreDto.verify();
// 是否重复提交 // // 是否重复提交
repetitiveSaveStore(authorization); // repetitiveSaveStore(authorization);
//
// 在缓存中查询 // // 在缓存中查询
JSONObject userJson = redisCache.getToJson(RedisKeys.UserKeys.TEMPORARY_TOKEN.getKey() + authorization); // JSONObject userJson = redisCache.getToJson(RedisKeys.UserKeys.TEMPORARY_TOKEN.getKey() + authorization);
//
promotionStoreDto.setTemporaryId(userJson.getInteger("id")); // promotionStoreDto.setTemporaryId(userJson.getInteger("id"));
promotionStoreDto.setTemporaryName(userJson.getString("name")); // promotionStoreDto.setTemporaryName(userJson.getString("name"));
promotionStoreDto.setDeptQcId(userJson.getString("deptQcId")); // promotionStoreDto.setDeptQcId(userJson.getString("deptQcId"));
promotionStoreDto.setDeptQcOrgName(userJson.getString("deptQcOrgName")); // promotionStoreDto.setDeptQcOrgName(userJson.getString("deptQcOrgName"));
promotionStoreDto.setChargerQcId(userJson.getString("chargerQcId")); // promotionStoreDto.setChargerQcId(userJson.getString("chargerQcId"));
promotionStoreDto.setChargerName(userJson.getString("chargerName")); // promotionStoreDto.setChargerName(userJson.getString("chargerName"));
//
promotionStoreCoreService.saveStore(promotionStoreDto); // promotionStoreCoreService.saveStore(promotionStoreDto);
return R.success(); // return R.success();
} // }
private void repetitiveSaveStore(String authorization) { private void repetitiveSaveStore(String authorization) {
String recordKey = RedisKeys.TemporaryKeys.TEMPORARY_SAVE_STORE_REPETITIVE.getKey() + authorization; String recordKey = RedisKeys.TemporaryKeys.TEMPORARY_SAVE_STORE_REPETITIVE.getKey() + authorization;
......
...@@ -8,9 +8,11 @@ import com.wangxiaolu.promotion.service.activity.temporary.TemporaryActivityCloc ...@@ -8,9 +8,11 @@ import com.wangxiaolu.promotion.service.activity.temporary.TemporaryActivityCloc
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotNull;
import java.util.Objects; import java.util.Objects;
/** /**
...@@ -33,7 +35,7 @@ public class TemporaryActivityClockQueryController { ...@@ -33,7 +35,7 @@ public class TemporaryActivityClockQueryController {
@GetMapping("/{temporary_id}") @GetMapping("/{temporary_id}")
public R findTodayTemporaryClockByTemId(@PathVariable("temporary_id") Integer temporaryId) { public R findTodayTemporaryClockByTemId(@PathVariable("temporary_id") Integer temporaryId) {
if (Objects.isNull(temporaryId) || temporaryId < 1){ if (Objects.isNull(temporaryId) || temporaryId < 1){
throw new DataException(RCode.DATA_NOT_HAVE_ERROR,null); throw new DataException(RCode.DATA_NOT_HAVE_ERROR);
} }
TemporaryClockDto clockDto = temporaryActivityClockQueryService.findTodayTemporaryClockByTemId(temporaryId); TemporaryClockDto clockDto = temporaryActivityClockQueryService.findTodayTemporaryClockByTemId(temporaryId);
...@@ -50,7 +52,7 @@ public class TemporaryActivityClockQueryController { ...@@ -50,7 +52,7 @@ public class TemporaryActivityClockQueryController {
@GetMapping("/date") @GetMapping("/date")
public R findTemporaryClockByTemIdAndDate(Integer temporaryId, String createDate) { public R findTemporaryClockByTemIdAndDate(Integer temporaryId, String createDate) {
if (Objects.isNull(temporaryId) || temporaryId < 1 || StringUtils.isBlank(createDate)){ if (Objects.isNull(temporaryId) || temporaryId < 1 || StringUtils.isBlank(createDate)){
throw new DataException(RCode.DATA_NOT_HAVE_ERROR,null); throw new DataException(RCode.DATA_NOT_HAVE_ERROR);
} }
TemporaryClockDto clockDto = temporaryActivityClockQueryService.findTemporaryClockByTemIdAndDate(temporaryId, createDate); TemporaryClockDto clockDto = temporaryActivityClockQueryService.findTemporaryClockByTemIdAndDate(temporaryId, createDate);
...@@ -63,7 +65,7 @@ public class TemporaryActivityClockQueryController { ...@@ -63,7 +65,7 @@ public class TemporaryActivityClockQueryController {
@GetMapping("/id") @GetMapping("/id")
public R findTemporaryClockByTemIdAndDate(Long id) { public R findTemporaryClockByTemIdAndDate(Long id) {
if (Objects.isNull(id) || id < 1){ if (Objects.isNull(id) || id < 1){
throw new DataException(RCode.DATA_NOT_HAVE_ERROR,null); throw new DataException(RCode.DATA_NOT_HAVE_ERROR);
} }
TemporaryClockDto clockDto = temporaryActivityClockQueryService.findById(id); TemporaryClockDto clockDto = temporaryActivityClockQueryService.findById(id);
return R.success(clockDto); return R.success(clockDto);
......
package com.wangxiaolu.promotion.controller.activity.manage.activityplan; package com.wangxiaolu.promotion.controller.activityplan;
import com.wangxiaolu.promotion.common.redis.RedisKeys; import com.wangxiaolu.promotion.common.redis.RedisKeys;
import com.wangxiaolu.promotion.common.redis.service.RedisCache; import com.wangxiaolu.promotion.common.redis.service.RedisCache;
......
package com.wangxiaolu.promotion.controller.activity.manage.activityplan; package com.wangxiaolu.promotion.controller.activityplan;
import com.wangxiaolu.promotion.pojo.PageInfo; import com.wangxiaolu.promotion.pojo.PageInfo;
import com.wangxiaolu.promotion.pojo.activity.manage.vo.ActivityPlanInfoVo; import com.wangxiaolu.promotion.pojo.activity.manage.vo.ActivityPlanInfoVo;
......
package com.wangxiaolu.promotion.controller.activity.manage.activityplan; package com.wangxiaolu.promotion.controller.activityplan;
import com.wangxiaolu.promotion.common.util.NumberUtils; import com.wangxiaolu.promotion.common.util.NumberUtils;
import com.wangxiaolu.promotion.exception.DataException; import com.wangxiaolu.promotion.exception.DataException;
......
package com.wangxiaolu.promotion.controller.activity.manage.activityplan; package com.wangxiaolu.promotion.controller.activityplan;
import com.wangxiaolu.promotion.pojo.PageInfo; import com.wangxiaolu.promotion.pojo.PageInfo;
import com.wangxiaolu.promotion.pojo.activity.manage.dto.EmployeeActivityPlanRecordDto; import com.wangxiaolu.promotion.pojo.activity.manage.dto.EmployeeActivityPlanRecordDto;
......
package com.wangxiaolu.promotion.controller.activity.manage.activityplan; package com.wangxiaolu.promotion.controller.activityplan;
import com.wangxiaolu.promotion.result.basedata.R; import com.wangxiaolu.promotion.result.basedata.R;
import com.wangxiaolu.promotion.service.activity.manage.ActivityTypeQueryService; import com.wangxiaolu.promotion.service.activity.manage.ActivityTypeQueryService;
......
package com.wangxiaolu.promotion.controller.activityplanv2;
import com.wangxiaolu.promotion.exception.DataException;
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.activityplanv2.PromPlanCoreService;
import com.wangxiaolu.promotion.service.user.ManageEmployeeQueryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
/**
* @author : liqiulin
* @date : 2025-01-07 13
* @describe :
*/
@RestController
@RequestMapping("/plan/v2/core")
public class PromPlanCoreController {
@Autowired
private PromPlanCoreService promPlanCoreService;
@Autowired
private ManageEmployeeQueryService manageEmployeeQueryService;
/**
* 城市经理 - 上传计划
* 当月只能上传次月的新增(当月需要新增需要交由职能角色上传)
*/
@PostMapping("/self/upload")
public R selfPlan(@RequestBody ActivityPlanVo activityPlanVo) {
// 判断当前账号是否是城市经理
boolean isSelf = manageEmployeeQueryService.isOneSelf(activityPlanVo.getEmployeeId());
if (!isSelf) {
throw new DataException(RCode.EMP_PRIVILEGE_ERROR);
}
try {
String[] urlArr = activityPlanVo.getExcelUrl().split("weda-uploader/");
String fileId = urlArr[urlArr.length - 1];
if (fileId.length() > 53) {
throw new DataException(RCode.ACTIVITY_PLAN_FILENAME_LONG);
}
//todo String filePath = "/home/" + fileId;
// FileUtils.downloadExcel(activityPlanVo.getExcelUrl(), filePath);
String filePath = "/Users/a02200059/Desktop/测试新增v3 2.xlsx";
activityPlanVo.setExcelId(fileId);
Map<String, Object> map = promPlanCoreService.selfPlanUp(activityPlanVo, filePath);
return R.success(map);
} catch (DataException e) {
return new R(e.getCode(), e.getMsg(), null);
}
}
@GetMapping("/self/upload/{uuid}")
public R selfPlanAf(@PathVariable("uuid") String planUuid){
promPlanCoreService.selfPlanAf(planUuid);
return R.success();
}
/**
* 职能角色 - 上传计划
*/
@GetMapping("/auth/upload")
public void authPlan() {
}
}
package com.wangxiaolu.promotion.controller.user.employee; package com.wangxiaolu.promotion.controller.activityplanv2;
import com.wangxiaolu.promotion.pojo.user.vo.LoginVo; import com.wangxiaolu.promotion.pojo.PageInfo;
import com.wangxiaolu.promotion.pojo.user.vo.UserLoginParam;
import com.wangxiaolu.promotion.result.basedata.R; import com.wangxiaolu.promotion.result.basedata.R;
import com.wangxiaolu.promotion.service.user.WangxlEmployeeQueryService; import com.wangxiaolu.promotion.service.activityplanv2.PromPlanQueryService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
...@@ -12,21 +11,19 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -12,21 +11,19 @@ import org.springframework.web.bind.annotation.RestController;
/** /**
* @author : liqiulin * @author : liqiulin
* @date : 2024-05-28 19 * @date : 2025-02-06 16
* @describe : 王小卤员工登录接口 * @describe :
*/ */
@RestController @RestController
@RequestMapping("/user/employee") @RequestMapping("/plan/v2/query")
public class WangxlEmployeeLoginController { public class PromPlanQueryController {
@Autowired @Autowired
WangxlEmployeeQueryService wangxlEmployeeQueryService; private PromPlanQueryService promPlanQueryService;
@PostMapping("/login") @PostMapping("/page")
public R wangxlEmployeelogin(@RequestBody UserLoginParam userLoginParam) { public R queryPage(@RequestBody PageInfo pageInfo){
userLoginParam.validate(); promPlanQueryService.queryPage(pageInfo);
LoginVo loginVo = wangxlEmployeeQueryService.employeeLoginVerify(userLoginParam); return R.success(pageInfo);
return R.success(loginVo);
} }
} }
package com.wangxiaolu.promotion.controller.user.employee;
import com.wangxiaolu.promotion.pojo.user.vo.UserLoginParam;
import com.wangxiaolu.promotion.result.basedata.R;
import com.wangxiaolu.promotion.result.basedata.RCode;
import com.wangxiaolu.promotion.service.user.ManageEmployeeCoreService;
import com.wangxiaolu.promotion.service.user.ManageEmployeeQueryService;
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;
import java.util.Objects;
/**
* @author : liqiulin
* @date : 2025-01-13 13
* @describe :
*/
@RestController
@RequestMapping("/user/employee/core")
public class ManageEmployeeCoreController {
@Autowired
ManageEmployeeQueryService manageEmployeeQueryService;
@Autowired
ManageEmployeeCoreService manageEmployeeCoreService;
/**
* 操作业务员账号
* 开通、关闭、修改权限
*/
@PostMapping ("/account")
public R openEmployeeAccount(@RequestBody UserLoginParam param) {
param.valLoginName();
if (Objects.isNull(param.getPrivilegeId())) {
return R.fail(RCode.EMP_PRIVILEGE_ERROR);
}
// 开通新账号、修改账号(账号信息、权限)
boolean hasEmp = manageEmployeeQueryService.hasByEmpNo(param.getLoginName());
if (hasEmp) {
manageEmployeeCoreService.putAccount(param);
}else {
manageEmployeeCoreService.openAccount(param);
}
return R.success();
}
}
...@@ -2,6 +2,8 @@ package com.wangxiaolu.promotion.controller.user.employee; ...@@ -2,6 +2,8 @@ package com.wangxiaolu.promotion.controller.user.employee;
import com.wangxiaolu.promotion.pojo.activity.manage.vo.ManageEmployeeVo; import com.wangxiaolu.promotion.pojo.activity.manage.vo.ManageEmployeeVo;
import com.wangxiaolu.promotion.pojo.user.dto.ManageEmployeeInfoDto; import com.wangxiaolu.promotion.pojo.user.dto.ManageEmployeeInfoDto;
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.result.basedata.R;
import com.wangxiaolu.promotion.service.user.ManageEmployeeQueryService; import com.wangxiaolu.promotion.service.user.ManageEmployeeQueryService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -15,22 +17,31 @@ import java.util.List; ...@@ -15,22 +17,31 @@ import java.util.List;
* @describe : 王小卤员工登录接口 * @describe : 王小卤员工登录接口
*/ */
@RestController @RestController
@RequestMapping("/user/employee/query") @RequestMapping("/user/employee")
public class ManageEmployeeQueryController { public class ManageEmployeeQueryController {
@Autowired @Autowired
ManageEmployeeQueryService manageEmployeeQueryService; ManageEmployeeQueryService manageEmployeeQueryService;
@PostMapping("/one") @PostMapping("/login")
public R wangxlEmployeelogin(@RequestBody UserLoginParam userLoginParam) {
userLoginParam.validate();
LoginVo loginVo = manageEmployeeQueryService.employeeLoginVerify(userLoginParam);
return R.success(loginVo);
}
@PostMapping("/query/one")
public R findOne(@RequestBody ManageEmployeeVo manageEmployeeVo){ public R findOne(@RequestBody ManageEmployeeVo manageEmployeeVo){
ManageEmployeeInfoDto one = manageEmployeeQueryService.findOne(manageEmployeeVo); ManageEmployeeInfoDto one = manageEmployeeQueryService.findOne(manageEmployeeVo);
return R.success(one); return R.success(one);
} }
@PostMapping("/list") @PostMapping("/query/list")
public R findList(@RequestBody ManageEmployeeVo manageEmployeeVo){ public R findList(@RequestBody ManageEmployeeVo manageEmployeeVo){
List<ManageEmployeeInfoDto> dtos = manageEmployeeQueryService.findList(manageEmployeeVo); List<ManageEmployeeInfoDto> dtos = manageEmployeeQueryService.findList(manageEmployeeVo);
return R.success(dtos); return R.success(dtos);
} }
} }
...@@ -51,15 +51,15 @@ public class temporaryInfoQueryController { ...@@ -51,15 +51,15 @@ public class temporaryInfoQueryController {
/** /**
* 促销员信息查询 * 促销员信息查询
*/ */
@PostMapping("/temporary/phone_openid") // @PostMapping("/temporary/phone_openid")
public R getTemporaryInfoByOpenIdAndPhone(@RequestHeader("Authorization") String authorization, @RequestBody WxTemporaryLoginVo wxTemporaryLoginVo) { // public R getTemporaryInfoByOpenIdAndPhone(@RequestHeader("Authorization") String authorization, @RequestBody WxTemporaryLoginVo wxTemporaryLoginVo) {
// 在缓存中查询 // // 在缓存中查询
JSONObject userJson = redisCache.getToJson(RedisKeys.UserKeys.TEMPORARY_TOKEN.getKey() + authorization); // JSONObject userJson = redisCache.getToJson(RedisKeys.UserKeys.TEMPORARY_TOKEN.getKey() + authorization);
if (Objects.isNull(userJson)) { // if (Objects.isNull(userJson)) {
throw new ParamException(RCode.NOT_LOGIN_ERROR, null); // throw new ParamException(RCode.NOT_LOGIN_ERROR, null);
} // }
return R.success(userJson); // return R.success(userJson);
} // }
private void phontAndOpenIdVerify(WxTemporaryLoginVo wxTemporaryLoginVo) { private void phontAndOpenIdVerify(WxTemporaryLoginVo wxTemporaryLoginVo) {
if (StringUtils.isBlank(wxTemporaryLoginVo.getOpenId()) || StringUtils.isBlank(wxTemporaryLoginVo.getPhone())) { if (StringUtils.isBlank(wxTemporaryLoginVo.getOpenId()) || StringUtils.isBlank(wxTemporaryLoginVo.getPhone())) {
......
package com.wangxiaolu.promotion.controller.activity.manage; package com.wangxiaolu.promotion.controller.yun;
import com.wangxiaolu.promotion.service.activity.manage.ActivityTypeQueryService; import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.wangxiaolu.promotion.result.basedata.R;
import com.wangxiaolu.promotion.utils.AliyunUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
...@@ -8,18 +12,23 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -8,18 +12,23 @@ import org.springframework.web.bind.annotation.RestController;
/** /**
* @author : liqiulin * @author : liqiulin
* @date : 2024-09-10 13 * @date : 2025-02-06 13
* @describe : * @describe :
*/ */
@Slf4j
@RestController @RestController
@RequestMapping("/activity/employee/xxl_job") @RequestMapping("/user/aliyun/")
public class XxlJobController { public class AliyunGetToken {
@Autowired @Autowired
private ActivityTypeQueryService activityTypeQueryService; private AliyunUtils aliyunUtils;
@GetMapping("/activity_type_pattern") @GetMapping("/signature")
public void activityTypePattern(){ public R getSignature() {
activityTypeQueryService.patternToRedis(); try {
return R.success(aliyunUtils.getSignature());
}catch (JsonProcessingException e){
return R.fail();
}
} }
} }
package com.wangxiaolu.promotion.controller.user; package com.wangxiaolu.promotion.controller.yun;
import com.wangxiaolu.promotion.exception.ParamException; import com.wangxiaolu.promotion.exception.ParamException;
import com.wangxiaolu.promotion.result.basedata.R; import com.wangxiaolu.promotion.result.basedata.R;
......
...@@ -19,4 +19,11 @@ public interface ManageEmployeeInfoDao { ...@@ -19,4 +19,11 @@ public interface ManageEmployeeInfoDao {
List<ManageEmployeeInfoDto> selectList(ManageEmployeeWrapper ewrap); List<ManageEmployeeInfoDto> selectList(ManageEmployeeWrapper ewrap);
void openAccount(String employeeNo, Integer privilegeId);
boolean hasByEmpNo(String employeeNo);
void updateAccount(String employeeNo, Integer privilegeId, String status);
boolean isOneSelf(Integer employeeId);
} }
...@@ -12,6 +12,7 @@ import com.wangxiaolu.promotion.result.basedata.RCode; ...@@ -12,6 +12,7 @@ import com.wangxiaolu.promotion.result.basedata.RCode;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -64,6 +65,47 @@ public class ManageEmployeeInfoInfoDaoImpl implements ManageEmployeeInfoDao { ...@@ -64,6 +65,47 @@ public class ManageEmployeeInfoInfoDaoImpl implements ManageEmployeeInfoDao {
return transitionDtos(dos); return transitionDtos(dos);
} }
@Transactional(rollbackFor = Exception.class)
@Override
public void openAccount(String employeeNo, Integer privilegeId) {
ManageEmployeeInfoDO eDo = new ManageEmployeeInfoDO();
eDo.setEmployeeNo(employeeNo);
manageEmployeeInfoMapper.insertOne(eDo);
addPrivilege(eDo.getId(),privilegeId);
}
@Override
public boolean hasByEmpNo(String employeeNo) {
Integer id = manageEmployeeInfoMapper.hasByEmpNo(employeeNo);
return Objects.nonNull(id);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateAccount(String employeeNo, Integer privilegeId, String status) {
manageEmployeeInfoMapper.updateByEmployeeNo(employeeNo,status);
updatePrivilege(employeeNo,privilegeId);
}
@Override
public boolean isOneSelf(Integer employeeId) {
return manageEmployeeInfoMapper.isOneSelf(employeeId);
}
/**
* 增加权限
*/
private void addPrivilege(Integer empId, Integer privilegeId) {
manageEmployeeInfoMapper.addPrivilege(empId,privilegeId);
}
/**
* 修改权限
*/
private void updatePrivilege(String employeeNo, Integer privilegeId) {
manageEmployeeInfoMapper.updatePrivilege(employeeNo,privilegeId);
}
private LambdaQueryWrapper<ManageEmployeeInfoDO> builderOneWrapper(ManageEmployeeWrapper ewrap){ private LambdaQueryWrapper<ManageEmployeeInfoDO> builderOneWrapper(ManageEmployeeWrapper ewrap){
LambdaQueryWrapper<ManageEmployeeInfoDO> qw = new LambdaQueryWrapper<>(); LambdaQueryWrapper<ManageEmployeeInfoDO> qw = new LambdaQueryWrapper<>();
if (Objects.nonNull(ewrap.getId())){ if (Objects.nonNull(ewrap.getId())){
...@@ -75,6 +117,7 @@ public class ManageEmployeeInfoInfoDaoImpl implements ManageEmployeeInfoDao { ...@@ -75,6 +117,7 @@ public class ManageEmployeeInfoInfoDaoImpl implements ManageEmployeeInfoDao {
if (Objects.nonNull(ewrap.getEmployeeNo())){ if (Objects.nonNull(ewrap.getEmployeeNo())){
qw.eq(ManageEmployeeInfoDO::getEmployeeNo,ewrap.getEmployeeNo()); qw.eq(ManageEmployeeInfoDO::getEmployeeNo,ewrap.getEmployeeNo());
} }
qw.eq(ManageEmployeeInfoDO::getStatus,"0");
return qw; return qw;
} }
...@@ -89,6 +132,7 @@ public class ManageEmployeeInfoInfoDaoImpl implements ManageEmployeeInfoDao { ...@@ -89,6 +132,7 @@ public class ManageEmployeeInfoInfoDaoImpl implements ManageEmployeeInfoDao {
if (!CollectionUtils.isEmpty(ewrap.getEmployeeNos())){ if (!CollectionUtils.isEmpty(ewrap.getEmployeeNos())){
qw.in(ManageEmployeeInfoDO::getEmployeeNo,ewrap.getEmployeeNos()); qw.in(ManageEmployeeInfoDO::getEmployeeNo,ewrap.getEmployeeNos());
} }
qw.eq(ManageEmployeeInfoDO::getStatus,"0");
return qw; return qw;
} }
......
...@@ -3,6 +3,7 @@ package com.wangxiaolu.promotion.domain.activity.mapper; ...@@ -3,6 +3,7 @@ package com.wangxiaolu.promotion.domain.activity.mapper;
import com.wangxiaolu.promotion.domain.activity.mapper.entity.ManageEmployeeInfoDO; import com.wangxiaolu.promotion.domain.activity.mapper.entity.ManageEmployeeInfoDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
/** /**
...@@ -16,6 +17,18 @@ import org.springframework.stereotype.Repository; ...@@ -16,6 +17,18 @@ import org.springframework.stereotype.Repository;
public interface ManageEmployeeInfoMapper extends BaseMapper<ManageEmployeeInfoDO> { public interface ManageEmployeeInfoMapper extends BaseMapper<ManageEmployeeInfoDO> {
ManageEmployeeInfoDO selectToLogin(String employeeNo); ManageEmployeeInfoDO selectToLogin(String employeeNo);
void insertOne(ManageEmployeeInfoDO eDo);
void addPrivilege(@Param("empId") Integer empId,@Param("privilegeId") Integer privilegeId);
Integer hasByEmpNo(String employeeNo);
void updateByEmployeeNo(@Param("employeeNo") String employeeNo,@Param("status") String status);
void updatePrivilege(@Param("employeeNo") String employeeNo,@Param("privilegeId") Integer privilegeId);
boolean isOneSelf(Integer employeeId);
} }
......
...@@ -52,6 +52,10 @@ public class ManageEmployeeInfoDO implements Serializable { ...@@ -52,6 +52,10 @@ public class ManageEmployeeInfoDO implements Serializable {
* 部门信息-勤策部门名称 * 部门信息-勤策部门名称
*/ */
private String deptQcName; private String deptQcName;
/**
* 0正常 1停用
*/
private String status;
/** /**
* 备注,不过超过100字 * 备注,不过超过100字
......
...@@ -26,4 +26,5 @@ public class ManageEmployeeWrapper { ...@@ -26,4 +26,5 @@ public class ManageEmployeeWrapper {
private Set<String> employeeNos; private Set<String> employeeNos;
private boolean hasDeptQcId; private boolean hasDeptQcId;
private boolean statusIsNull;
} }
package com.wangxiaolu.promotion.domain.activityplanv2.dao;
import com.alibaba.fastjson.JSONArray;
import com.wangxiaolu.promotion.domain.manage.wrapperQo.ActivityPlanInfoWrapper;
import com.wangxiaolu.promotion.pojo.PageInfo;
import com.wangxiaolu.promotion.pojo.activity.manage.dto.ActivityPlanInfoDto;
import java.util.Date;
/**
* @author : liqiulin
* @date : 2025-02-06 11
* @describe :
*/
public interface ActivityPlanInfoDao {
void saveList(JSONArray table, Long recordId);
void page(PageInfo pageInfo, ActivityPlanInfoWrapper wrapper);
ActivityPlanInfoDto selectPlan(String storeCode, Date date);
}
package com.wangxiaolu.promotion.domain.activityplanv2.dao;
import com.alibaba.fastjson.JSONObject;
/**
* @author : liqiulin
* @date : 2025-02-06 11
* @describe :
*/
public interface ActivityPlanRecordDao {
Long save(JSONObject record);
}
package com.wangxiaolu.promotion.domain.activityplanv2.dao.impl;
import com.alibaba.fastjson.JSONArray;
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.BeanUtils;
import com.wangxiaolu.promotion.common.util.DataUtils;
import com.wangxiaolu.promotion.domain.activityplanv2.dao.ActivityPlanInfoDao;
import com.wangxiaolu.promotion.domain.activityplanv2.mapper.ActivityPlanInfoMapper;
import com.wangxiaolu.promotion.domain.activityplanv2.mapper.entity.ActivityPlanInfoDo;
import com.wangxiaolu.promotion.domain.manage.wrapperQo.ActivityPlanInfoWrapper;
import com.wangxiaolu.promotion.exception.DataException;
import com.wangxiaolu.promotion.pojo.PageInfo;
import com.wangxiaolu.promotion.pojo.activity.manage.dto.ActivityPlanInfoDto;
import com.wangxiaolu.promotion.result.basedata.RCode;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.exceptions.PersistenceException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.Objects;
/**
* @author : liqiulin
* @date : 2025-02-06 11
* @describe :
*/
@Service
public class ActivityPlanInfoDaoImpl implements ActivityPlanInfoDao {
@Autowired
private ActivityPlanInfoMapper activityPlanInfoMapper;
@Override
public void saveList(JSONArray table, Long recordId) {
try {
activityPlanInfoMapper.saveList(table, recordId);
} catch (PersistenceException e) {
e.printStackTrace();
throw new DataException(RCode.ACTIVITY_PLAN_REPETITION_ERROR);
}
}
@Override
public void page(PageInfo pageInfo, ActivityPlanInfoWrapper wrapper) {
LambdaQueryWrapper<ActivityPlanInfoDo> qw = buildWrapper(wrapper);
Page<ActivityPlanInfoDo> page = new Page<>(pageInfo.getPageNum(), pageInfo.getPageSize());
Page<ActivityPlanInfoDo> doPage = activityPlanInfoMapper.selectPage(page, qw);
pageInfo.pageCovert(doPage);
pageInfo.setRecords(doPage.getRecords());
}
@Override
public ActivityPlanInfoDto selectPlan(String storeCode, Date date) {
ActivityPlanInfoDo activityPlanInfoDo = activityPlanInfoMapper.selectPlan(storeCode, date);
return BeanUtils.transitionDto(activityPlanInfoDo, ActivityPlanInfoDto.class);
}
private LambdaQueryWrapper<ActivityPlanInfoDo> buildWrapper(ActivityPlanInfoWrapper wrapper) {
LambdaQueryWrapper<ActivityPlanInfoDo> qw = new LambdaQueryWrapper<>();
if (Objects.nonNull(wrapper.getEmployeeId())) {
qw.eq(ActivityPlanInfoDo::getEmployeeId, wrapper.getEmployeeId());
}
if (Objects.nonNull(wrapper.getActivityPlanRecordId())) {
qw.eq(ActivityPlanInfoDo::getPlanFileId, wrapper.getActivityPlanRecordId());
}
if (StringUtils.isNotBlank(wrapper.getDealerName())) {
qw.like(ActivityPlanInfoDo::getDealerName, wrapper.getDealerName());
}
if (StringUtils.isNotBlank(wrapper.getCity())) {
qw.like(ActivityPlanInfoDo::getCity, wrapper.getCity());
}
if (StringUtils.isNotBlank(wrapper.getStoreNameLike())) {
qw.like(ActivityPlanInfoDo::getStoreName, wrapper.getStoreNameLike());
}
if (StringUtils.isNotBlank(wrapper.getStoreName())) {
qw.eq(ActivityPlanInfoDo::getStoreName, wrapper.getStoreName());
}
if (Objects.nonNull(wrapper.getActivityStatus())) {
qw.eq(ActivityPlanInfoDo::getPlanStatus, wrapper.getActivityStatus().getType());
}
qw.between(ActivityPlanInfoDo::getDate, wrapper.getActivityStartDate(), wrapper.getActivityEndDate());
qw.eq(ActivityPlanInfoDo::getIsDelete, StatusType.VALID.getType());
qw.orderByDesc(ActivityPlanInfoDo::getCreateTime);
return qw;
}
}
package com.wangxiaolu.promotion.domain.activityplanv2.dao.impl;
import com.alibaba.fastjson.JSONObject;
import com.wangxiaolu.promotion.domain.activityplanv2.dao.ActivityPlanRecordDao;
import com.wangxiaolu.promotion.domain.activityplanv2.mapper.ActivityPlanRecordMapper;
import com.wangxiaolu.promotion.domain.activityplanv2.mapper.entity.ActivityPlanRecordDo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author : liqiulin
* @date : 2025-02-06 11
* @describe :
*/
@Service
public class ActivityPlanRecordDaoImpl implements ActivityPlanRecordDao {
@Autowired
private ActivityPlanRecordMapper activityPlanRecordMapper;
@Override
public Long save(JSONObject record) {
ActivityPlanRecordDo activityPlanRecordDo = JSONObject.parseObject(record.toJSONString(), ActivityPlanRecordDo.class);
activityPlanRecordMapper.insert(activityPlanRecordDo);
return activityPlanRecordDo.getId();
}
}
package com.wangxiaolu.promotion.domain.activityplanv2.mapper;
import com.alibaba.fastjson.JSONArray;
import com.wangxiaolu.promotion.domain.activityplanv2.mapper.entity.ActivityPlanInfoDo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.Date;
/**
* @author a02200059
* @description 针对表【activity_plan_info(活动计划列表)】的数据库操作Mapper
* @createDate 2025-01-21 14:41:08
* @Entity com.wangxiaolu.promotion.domain.activityplanv2.mapper.entity.ActivityPlanInfo
*/
@Mapper
@Repository
public interface ActivityPlanInfoMapper extends BaseMapper<ActivityPlanInfoDo> {
void saveList(@Param("table") JSONArray table,@Param("recordId") Long recordId);
ActivityPlanInfoDo selectPlan(String storeCode, Date date);
}
package com.wangxiaolu.promotion.domain.activityplanv2.mapper;
import com.wangxiaolu.promotion.domain.activityplanv2.mapper.entity.ActivityPlanRecordDo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
/**
* @author a02200059
* @description 针对表【activity_plan_record(活动计划店铺excel导入记录)】的数据库操作Mapper
* @createDate 2025-02-05 11:51:57
* @Entity com.wangxiaolu.promotion.domain.activityplanv2.mapper.entity.ActivityPlanRecord
*/
@Mapper
@Repository
public interface ActivityPlanRecordMapper extends BaseMapper<ActivityPlanRecordDo> {
}
package com.wangxiaolu.promotion.domain.activityplanv2.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.math.BigDecimal;
import java.util.Date;
import lombok.Data;
/**
* 活动计划列表
* @TableName activity_plan_info
*/
@TableName(value ="activity_plan_info")
@Data
public class ActivityPlanInfoDo implements Serializable {
/**
* 主键id
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 活动计划表上传记录id
*/
private Long planFileId;
/**
* promotion_manage_employee表id
*/
private Integer employeeId;
/**
* 姓名
*/
private String employeeName;
/**
* 员工工号
*/
private String employeeNo;
/**
* 年份
*/
private Integer year;
/**
* 月份
*/
private Integer month;
/**
* 日期
*/
private Date date;
/**
* 系统名称
*/
private String lineName;
/**
* 门店名称
*/
private String storeName;
/**
* 门店编码
*/
private String storeCode;
/**
* 战区-勤策ID
*/
private String orgQcId;
/**
* 战区名称
*/
private String orgName;
/**
* 活动模式id
*/
private Integer patternId;
/**
* 活动模式
*/
private String pattern;
/**
* 经销商编码
*/
private String dealerId;
/**
* 经销商名称
*/
private String dealerName;
/**
* 是否双T门店
*/
private String bothT;
/**
* 门店所属行政区域-省份名称,如:北京市、江苏省
*/
private String province;
/**
* 门店所属行政区域-城市名称,如:南京市
*/
private String city;
/**
* 门店所属行政区域-区县名称,如:鼓楼区
*/
private String area;
/**
* 门店所在地址
*/
private String addr;
/**
* 上班时间
*/
private Date clockInTime;
/**
* 下班时间
*/
private Date clockOutTime;
/**
* 工资
*/
private BigDecimal salary;
/**
* 杂费
*/
private BigDecimal incidentals;
/**
* 是否执行:1:执行;0:未执行;
*/
private Integer planStatus;
/**
*
*/
private Date createTime;
/**
*
*/
private Date modifyTime;
/**
* 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.activityplanv2.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;
/**
* 活动计划店铺excel导入记录
* @TableName activity_plan_record
*/
@TableName(value ="activity_plan_record")
@Data
public class ActivityPlanRecordDo implements Serializable {
/**
* 主键id
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* promotion_manage_employee表id
*/
private Integer employeeId;
/**
* 姓名
*/
private String employeeName;
/**
* 员工工号
*/
private String employeeNo;
/**
* 文件http地址
*/
private String excelUrl;
/**
* 文件ID(云存储中的id)
*/
private String excelFiledId;
/**
* 创建时间
*/
private Date createTime;
/**
* 修改时间
*/
private Date modifyTime;
/**
* 1:有效;0:删除;
*/
private Integer isDelete;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
...@@ -45,6 +45,11 @@ public class ActivityPlanInfoWrapper { ...@@ -45,6 +45,11 @@ public class ActivityPlanInfoWrapper {
*/ */
private Date activityStartDate; private Date activityStartDate;
/**
* 活动结束日期
*/
private Date activityEndDate;
/** /**
* 城市 * 城市
*/ */
......
...@@ -24,4 +24,7 @@ public interface QinCeEmployeeDao { ...@@ -24,4 +24,7 @@ public interface QinCeEmployeeDao {
QinCeEmployeeDto selectOntByQcId(String qcId); QinCeEmployeeDto selectOntByQcId(String qcId);
List<QinCeEmployeeDto> getEmployeeList(EmployeeWrapper ew); List<QinCeEmployeeDto> getEmployeeList(EmployeeWrapper ew);
QinCeEmployeeDto getEmployeeOne(EmployeeWrapper ew);
Integer count(EmployeeWrapper ew);
} }
...@@ -52,6 +52,7 @@ public class QinCeClienteleStoreDaoImpl implements QinCeClienteleStoreDao { ...@@ -52,6 +52,7 @@ public class QinCeClienteleStoreDaoImpl implements QinCeClienteleStoreDao {
qinCeShopDO.setDealersName(dealers.get(0).getString("dealer_name")); qinCeShopDO.setDealersName(dealers.get(0).getString("dealer_name"));
qinCeShopDO.setDealerId(dealers.get(0).getString("dealer_code")); qinCeShopDO.setDealerId(dealers.get(0).getString("dealer_code"));
} }
qinCeShopDO.setExt();
qw.eq(QinCeClienteleStoreDO::getQcId, qinCeShopDO.getQcId()); qw.eq(QinCeClienteleStoreDO::getQcId, qinCeShopDO.getQcId());
QinCeClienteleStoreDO doExist = qinCeClienteleStoreMapper.selectOne(qw); QinCeClienteleStoreDO doExist = qinCeClienteleStoreMapper.selectOne(qw);
...@@ -96,9 +97,14 @@ public class QinCeClienteleStoreDaoImpl implements QinCeClienteleStoreDao { ...@@ -96,9 +97,14 @@ public class QinCeClienteleStoreDaoImpl implements QinCeClienteleStoreDao {
// 指定字段查询 // 指定字段查询
qw.select(QinCeClienteleStoreDO::getQcId, qw.select(QinCeClienteleStoreDO::getQcId,
QinCeClienteleStoreDO::getStoreName, QinCeClienteleStoreDO::getStoreName,
QinCeClienteleStoreDO::getStoreAddr,
QinCeClienteleStoreDO::getDealersName, QinCeClienteleStoreDO::getDealersName,
QinCeClienteleStoreDO::getDealerId); QinCeClienteleStoreDO::getDealerId,
QinCeClienteleStoreDO::getLineName,
QinCeClienteleStoreDO::getStoreMssProvince,
QinCeClienteleStoreDO::getStoreMssCity,
QinCeClienteleStoreDO::getStoreMssArea,
QinCeClienteleStoreDO::getStoreAddr
);
QinCeClienteleStoreDO qinCeClienteleStoreDO = qinCeClienteleStoreMapper.selectOne(qw); QinCeClienteleStoreDO qinCeClienteleStoreDO = qinCeClienteleStoreMapper.selectOne(qw);
return transitionDto(qinCeClienteleStoreDO); return transitionDto(qinCeClienteleStoreDO);
......
...@@ -3,6 +3,7 @@ package com.wangxiaolu.promotion.domain.user.dao.impl; ...@@ -3,6 +3,7 @@ package com.wangxiaolu.promotion.domain.user.dao.impl;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wangxiaolu.promotion.common.enums.StatusType;
import com.wangxiaolu.promotion.domain.user.dao.QinCeEmployeeDao; import com.wangxiaolu.promotion.domain.user.dao.QinCeEmployeeDao;
import com.wangxiaolu.promotion.domain.user.mapper.QinceEmployeeMapper; import com.wangxiaolu.promotion.domain.user.mapper.QinceEmployeeMapper;
import com.wangxiaolu.promotion.domain.user.mapper.entity.QinCeDepartmentDO; import com.wangxiaolu.promotion.domain.user.mapper.entity.QinCeDepartmentDO;
...@@ -75,18 +76,34 @@ public class QinCeEmployeeDaoImpl implements QinCeEmployeeDao { ...@@ -75,18 +76,34 @@ public class QinCeEmployeeDaoImpl implements QinCeEmployeeDao {
return transitionDtos(qinCeEmployeeDOS); return transitionDtos(qinCeEmployeeDOS);
} }
@Override
public QinCeEmployeeDto getEmployeeOne(EmployeeWrapper ew) {
LambdaQueryWrapper<QinCeEmployeeDO> qw = buildWrapper(ew);
QinCeEmployeeDO qinCeEmployeeDO = qinceEmployeeMapper.selectOne(qw);
return transitionDto(qinCeEmployeeDO);
}
@Override
public Integer count(EmployeeWrapper ew) {
LambdaQueryWrapper<QinCeEmployeeDO> qw = buildWrapper(ew);
return qinceEmployeeMapper.selectCount(qw);
}
private LambdaQueryWrapper<QinCeEmployeeDO> buildWrapper(EmployeeWrapper ew){ private LambdaQueryWrapper<QinCeEmployeeDO> buildWrapper(EmployeeWrapper ew){
LambdaQueryWrapper<QinCeEmployeeDO> qw = new LambdaQueryWrapper<>(); LambdaQueryWrapper<QinCeEmployeeDO> qw = new LambdaQueryWrapper<>();
if (StringUtils.isNotBlank(ew.getWaiqin365OrgId())){ if (StringUtils.isNotBlank(ew.getWaiqin365OrgId())){
qw.eq(QinCeEmployeeDO::getWaiqin365OrgId,ew.getWaiqin365OrgId()); qw.eq(QinCeEmployeeDO::getWaiqin365OrgId,ew.getWaiqin365OrgId());
} }
if (StringUtils.isNotBlank(ew.getEmpCode())){
qw.eq(QinCeEmployeeDO::getEmpCode,ew.getEmpCode());
}
if (StringUtils.isNotBlank(ew.getEmpName())){ if (StringUtils.isNotBlank(ew.getEmpName())){
qw.like(QinCeEmployeeDO::getEmpName,ew.getEmpName()); qw.like(QinCeEmployeeDO::getEmpName,ew.getEmpName());
} }
if (StringUtils.isNotBlank(ew.getQcId())){ if (StringUtils.isNotBlank(ew.getQcId())){
qw.eq(QinCeEmployeeDO::getQcId,ew.getQcId()); qw.eq(QinCeEmployeeDO::getQcId,ew.getQcId());
} }
qw.eq(QinCeEmployeeDO::getEmpStatus,1); qw.eq(QinCeEmployeeDO::getEmpStatus, StatusType.VALID.getType());
qw.last("limit 50"); qw.last("limit 50");
return qw; return qw;
} }
......
...@@ -5,13 +5,12 @@ import com.baomidou.mybatisplus.annotation.IdType; ...@@ -5,13 +5,12 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data; import lombok.Data;
import java.io.Serializable;
import java.util.List;
/** /**
* 勤策-客户管理-终端 * 勤策-客户管理-终端
* @TableName qc_clientele_shop * @TableName qc_clientele_shop
...@@ -192,6 +191,15 @@ public class QinCeClienteleStoreDO implements Serializable { ...@@ -192,6 +191,15 @@ public class QinCeClienteleStoreDO implements Serializable {
@JsonProperty("store_approval_status") @JsonProperty("store_approval_status")
private String storeApprovalStatus; private String storeApprovalStatus;
/**
* 系统名称
*/
private String lineName;
/**
* 是否双T门店
*/
private String bothT;
/** /**
* 经销商名称 * 经销商名称
*/ */
...@@ -202,6 +210,14 @@ public class QinCeClienteleStoreDO implements Serializable { ...@@ -202,6 +210,14 @@ public class QinCeClienteleStoreDO implements Serializable {
@JsonProperty("dealers") @JsonProperty("dealers")
private List<JSONObject> dealers; private List<JSONObject> dealers;
/**
* "store_ext_key": "系统名称",
* "store_ext_value": "永辉超市"
*/
@TableField(exist = false)
@JsonProperty("exts")
private List<Exts> exts;
/** /**
* 门店删除状态。0:删除,1:正常 * 门店删除状态。0:删除,1:正常
*/ */
...@@ -216,4 +232,23 @@ public class QinCeClienteleStoreDO implements Serializable { ...@@ -216,4 +232,23 @@ public class QinCeClienteleStoreDO implements Serializable {
@TableField(exist = false) @TableField(exist = false)
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@Data
public class Exts{
@JsonProperty("store_ext_key")
private String storeExtKey;
@JsonProperty("store_ext_value")
private String storeExtValue;
}
public void setExt() {
for (Exts e : exts) {
if ("系统名称".equals(e.getStoreExtKey())) {
this.lineName = e.getStoreExtValue();
}
if ("是否双T门店".equals(e.getStoreExtKey())) {
this.bothT = e.getStoreExtValue();
}
}
}
} }
\ No newline at end of file
...@@ -24,6 +24,7 @@ public class EmployeeWrapper { ...@@ -24,6 +24,7 @@ public class EmployeeWrapper {
private String waiqin365OrgId; private String waiqin365OrgId;
private String qcId; private String qcId;
private String empName; private String empName;
private String empCode;
/** /**
* 员工账号状态。0:销户,1:正常,2:停用 * 员工账号状态。0:销户,1:正常,2:停用
......
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.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.Objects;
/**
* 活动计划
*/
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@Data
public class ActivityPlanInfoDto implements Serializable {
/**
* 主键id
*/
private Long id;
/**
* 活动计划表上传记录id
*/
private Long planFileId;
/**
* promotion_manage_employee表id
*/
private Integer employeeId;
/**
* 姓名
*/
private String employeeName;
/**
* 员工工号
*/
private String employeeNo;
/**
* 年份
*/
private Integer year;
/**
* 月份
*/
private Integer month;
/**
* 日期
*/
private Date date;
/**
* 系统名称
*/
private String lineName;
/**
* 门店名称
*/
private String storeName;
/**
* 门店编码
*/
private String storeCode;
/**
* 战区-勤策ID
*/
private String orgQcId;
/**
* 战区名称
*/
private String orgName;
/**
* 活动模式id
*/
private Integer patternId;
/**
* 活动模式
*/
private String pattern;
/**
* 经销商编码
*/
private String dealerId;
/**
* 经销商名称
*/
private String dealerName;
/**
* 是否双T门店
*/
private String bothT;
/**
* 门店所属行政区域-省份名称,如:北京市、江苏省
*/
private String province;
/**
* 门店所属行政区域-城市名称,如:南京市
*/
private String city;
/**
* 门店所属行政区域-区县名称,如:鼓楼区
*/
private String area;
/**
* 门店所在地址
*/
private String addr;
/**
* 上班时间
*/
private LocalDateTime clockInTime;
/**
* 下班时间
*/
private LocalDateTime clockOutTime;
/**
* 工资
*/
private BigDecimal salary;
/**
* 杂费
*/
private BigDecimal incidentals;
/**
* 是否执行:1:执行;0:未执行;
*/
private Integer planStatus;
private Integer index;
private Date createTime;
/**
* 当前行错误,不可保存
* 错误信息
*/
private String errorMsg;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
public void setErrorMsg(String errorMsg) {
if (Objects.isNull(this.errorMsg)) {
this.errorMsg = errorMsg;
} else {
this.errorMsg += errorMsg;
}
}
}
\ 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;
/**
* 活动计划店铺excel导入记录
*/
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@Data
public class ActivityPlanRecordDto implements Serializable {
/**
* 主键id
*/
private Long id;
/**
* promotion_manage_employee表id
*/
private Integer employeeId;
/**
* 姓名
*/
private String employeeName;
/**
* 员工工号
*/
private String employeeNo;
/**
* 文件http地址
*/
private String excelUrl;
/**
* 文件ID(云存储中的id)
*/
private String excelFiledId;
/**
* 创建时间
*/
private Date createTime;
/**
* 修改时间
*/
private Date modifyTime;
/**
* 1:有效;0:删除;
*/
private Integer isDelete;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
...@@ -35,25 +35,8 @@ public class ActivityPlanVo { ...@@ -35,25 +35,8 @@ public class ActivityPlanVo {
* 文件http地址 * 文件http地址
*/ */
private String excelUrl; private String excelUrl;
/**
* 活动月份YYYY-MM
*/
// private String activityMonth;
/**
* 月份第几周
*/
// private Integer monthWeekNumber;
/** private String excelId;
* 月结束日期
*/
// private Date monthStartDate;
/**
* 月结束日期
*/
// private Date monthEndDate;
private Integer originalEmpId; private Integer originalEmpId;
private Integer transferEmpId; private Integer transferEmpId;
......
...@@ -15,15 +15,13 @@ import lombok.experimental.Accessors; ...@@ -15,15 +15,13 @@ import lombok.experimental.Accessors;
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
public class QinCeClienteleStoreDto { public class QinCeClienteleStoreDto {
/**
* 勤策的门店唯一ID
*/
private String qcId; private String qcId;
private String storeName; private String storeName;
private String storeAddr;
private String dealersName; private String dealersName;
private String dealerId; private String dealerId;
private String lineName;
private String storeMssProvince;
private String storeMssCity;
private String storeMssArea;
private String storeAddr;
} }
...@@ -8,8 +8,6 @@ import lombok.NoArgsConstructor; ...@@ -8,8 +8,6 @@ import lombok.NoArgsConstructor;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import javax.validation.constraints.NotBlank;
/** /**
* @author : liqiulin * @author : liqiulin
* @date : 2024-03-28 18 * @date : 2024-03-28 18
...@@ -24,8 +22,25 @@ public class UserLoginParam { ...@@ -24,8 +22,25 @@ public class UserLoginParam {
String loginName; String loginName;
String password; String password;
/**
* 1, 'oneself', '个人权限'
* 2, 'admin', '超管权限'
*/
Integer privilegeId;
/**
* 0正常 1停用
*/
private String status;
public void validate(){ public void validate(){
if (StringUtils.isBlank(loginName) || StringUtils.isBlank(password)){ if (StringUtils.isAnyBlank(loginName,password)){
throw new ParamException(RCode.LOGIN_PARAM_ERROR,null);
}
}
public void valLoginName(){
if (StringUtils.isBlank(loginName)){
throw new ParamException(RCode.LOGIN_PARAM_ERROR,null); throw new ParamException(RCode.LOGIN_PARAM_ERROR,null);
} }
} }
......
package com.wangxiaolu.promotion.service.activity.manage.impl; package com.wangxiaolu.promotion.service.activity.manage.impl;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.wangxiaolu.promotion.common.excel.FileUtils;
import com.wangxiaolu.promotion.common.excel.ReadExcelUtils; import com.wangxiaolu.promotion.common.excel.ReadExcelUtils;
import com.wangxiaolu.promotion.common.redis.RedisKeys; import com.wangxiaolu.promotion.common.redis.RedisKeys;
import com.wangxiaolu.promotion.common.redis.service.RedisCache; import com.wangxiaolu.promotion.common.redis.service.RedisCache;
...@@ -82,7 +83,7 @@ public class ActivityPlanRecordCoreServiceImpl implements ActivityPlanRecordCore ...@@ -82,7 +83,7 @@ public class ActivityPlanRecordCoreServiceImpl implements ActivityPlanRecordCore
private void saveActivityPlanInfo(ActivityPlanVo activityPlanVo, EmployeeActivityPlanRecordDto planDto) throws Exception { private void saveActivityPlanInfo(ActivityPlanVo activityPlanVo, EmployeeActivityPlanRecordDto planDto) throws Exception {
// 下载 // 下载
String filePath = "/home/" + planDto.getExcelFiledId(); String filePath = "/home/" + planDto.getExcelFiledId();
downloadExcel(activityPlanVo.getExcelUrl(), filePath); FileUtils.downloadExcel(activityPlanVo.getExcelUrl(), filePath);
// 读取 // 读取
List<EmployeeActivityPlanInfoDto> planInfoDtos = readSheet0(filePath, activityPlanVo, planDto); List<EmployeeActivityPlanInfoDto> planInfoDtos = readSheet0(filePath, activityPlanVo, planDto);
...@@ -90,21 +91,21 @@ public class ActivityPlanRecordCoreServiceImpl implements ActivityPlanRecordCore ...@@ -90,21 +91,21 @@ public class ActivityPlanRecordCoreServiceImpl implements ActivityPlanRecordCore
employeeActivityPlanInfoDao.saveList(planInfoDtos); employeeActivityPlanInfoDao.saveList(planInfoDtos);
} }
private void downloadExcel(String urlStr, String filePath) throws Exception { // private void downloadExcel(String urlStr, String filePath) throws Exception {
// 保存文件 // // 保存文件
URL url = new URL(urlStr); // URL url = new URL(urlStr);
URLConnection urlConnection = url.openConnection(); // URLConnection urlConnection = url.openConnection();
InputStream inputStream = urlConnection.getInputStream(); // InputStream inputStream = urlConnection.getInputStream();
FileOutputStream fileOutputStream = new FileOutputStream(filePath); // FileOutputStream fileOutputStream = new FileOutputStream(filePath);
// 调大小 // // 调大小
byte[] buffer = new byte[102400]; // byte[] buffer = new byte[102400];
int bytesRead; // int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) { // while ((bytesRead = inputStream.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, bytesRead); // fileOutputStream.write(buffer, 0, bytesRead);
} // }
fileOutputStream.close(); // fileOutputStream.close();
inputStream.close(); // inputStream.close();
} // }
private List<EmployeeActivityPlanInfoDto> readSheet0(String filePath, ActivityPlanVo activityPlanVo, EmployeeActivityPlanRecordDto planDto) throws Exception { private List<EmployeeActivityPlanInfoDto> readSheet0(String filePath, ActivityPlanVo activityPlanVo, EmployeeActivityPlanRecordDto planDto) throws Exception {
// 1、解析表格数据 // 1、解析表格数据
......
package com.wangxiaolu.promotion.service.activityplanv2;
import com.wangxiaolu.promotion.exception.DataException;
import com.wangxiaolu.promotion.pojo.activity.manage.vo.ActivityPlanVo;
import java.util.Map;
/**
* @author : liqiulin
* @date : 2025-01-21 13
* @describe :
*/
public interface PromPlanCoreService {
Map<String,Object> selfPlanUp(ActivityPlanVo activityPlanVo, String filePath) throws DataException;
void selfPlanAf(String planUuid);
}
package com.wangxiaolu.promotion.service.activityplanv2;
import com.wangxiaolu.promotion.pojo.PageInfo;
/**
* @author : liqiulin
* @date : 2025-02-06 16
* @describe :
*/
public interface PromPlanQueryService {
void queryPage(PageInfo pageInfo);
}
package com.wangxiaolu.promotion.service.activityplanv2.impl;
import com.alibaba.fastjson.JSONObject;
import com.wangxiaolu.promotion.domain.activityplanv2.dao.ActivityPlanInfoDao;
import com.wangxiaolu.promotion.domain.manage.wrapperQo.ActivityPlanInfoWrapper;
import com.wangxiaolu.promotion.pojo.PageInfo;
import com.wangxiaolu.promotion.service.activityplanv2.PromPlanQueryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author : liqiulin
* @date : 2025-02-06 16
* @describe :
*/
@Service
public class PromPlanQueryServiceImpl implements PromPlanQueryService {
@Autowired
private ActivityPlanInfoDao activityPlanInfoDao;
@Override
public void queryPage(PageInfo pageInfo) {
ActivityPlanInfoWrapper wrapper = JSONObject.parseObject(JSONObject.toJSONString(pageInfo.getQueryParams()), ActivityPlanInfoWrapper.class);
activityPlanInfoDao.page(pageInfo,wrapper);
}
}
package com.wangxiaolu.promotion.service.user; package com.wangxiaolu.promotion.service.user;
import com.wangxiaolu.promotion.pojo.user.vo.LoginVo;
import com.wangxiaolu.promotion.pojo.user.vo.UserLoginParam; import com.wangxiaolu.promotion.pojo.user.vo.UserLoginParam;
/** /**
* @author : liqiulin * @author : liqiulin
* @date : 2024-05-29 13 * @date : 2025-01-13 14
* @describe : * @describe :
*/ */
public interface WangxlEmployeeQueryService { public interface ManageEmployeeCoreService {
void openAccount(UserLoginParam param);
LoginVo employeeLoginVerify(UserLoginParam userLoginParam); void putAccount(UserLoginParam param);
} }
...@@ -2,6 +2,8 @@ package com.wangxiaolu.promotion.service.user; ...@@ -2,6 +2,8 @@ package com.wangxiaolu.promotion.service.user;
import com.wangxiaolu.promotion.pojo.activity.manage.vo.ManageEmployeeVo; import com.wangxiaolu.promotion.pojo.activity.manage.vo.ManageEmployeeVo;
import com.wangxiaolu.promotion.pojo.user.dto.ManageEmployeeInfoDto; import com.wangxiaolu.promotion.pojo.user.dto.ManageEmployeeInfoDto;
import com.wangxiaolu.promotion.pojo.user.vo.LoginVo;
import com.wangxiaolu.promotion.pojo.user.vo.UserLoginParam;
import java.util.List; import java.util.List;
...@@ -11,8 +13,14 @@ import java.util.List; ...@@ -11,8 +13,14 @@ import java.util.List;
* @describe : * @describe :
*/ */
public interface ManageEmployeeQueryService { public interface ManageEmployeeQueryService {
LoginVo employeeLoginVerify(UserLoginParam userLoginParam);
ManageEmployeeInfoDto findOne(ManageEmployeeVo manageEmployeeVo); ManageEmployeeInfoDto findOne(ManageEmployeeVo manageEmployeeVo);
List<ManageEmployeeInfoDto> findList(ManageEmployeeVo manageEmployeeVo); List<ManageEmployeeInfoDto> findList(ManageEmployeeVo manageEmployeeVo);
boolean hasByEmpNo(String employeeNo);
boolean isOneSelf(Integer employeeId);
} }
package com.wangxiaolu.promotion.service.user.impl;
import com.wangxiaolu.promotion.domain.activity.dao.ManageEmployeeInfoDao;
import com.wangxiaolu.promotion.domain.user.dao.QinCeEmployeeDao;
import com.wangxiaolu.promotion.domain.user.wrapperQo.EmployeeWrapper;
import com.wangxiaolu.promotion.exception.DataException;
import com.wangxiaolu.promotion.pojo.activity.temporary.dto.QinCeEmployeeDto;
import com.wangxiaolu.promotion.pojo.user.vo.UserLoginParam;
import com.wangxiaolu.promotion.result.basedata.RCode;
import com.wangxiaolu.promotion.service.user.ManageEmployeeCoreService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Objects;
/**
* @author : liqiulin
* @date : 2025-01-13 14
* @describe :
*/
@Service
public class ManageEmployeeCoreServiceImpl implements ManageEmployeeCoreService {
@Autowired
ManageEmployeeInfoDao manageEmployeeInfoDao;
@Autowired
QinCeEmployeeDao qinCeEmployeeDao;
@Override
public void openAccount(UserLoginParam param) {
// todo 判断账号在勤策中是否存在
int count = qinCeEmployeeDao.count(new EmployeeWrapper().setEmpCode(param.getLoginName()));
if (count <= 0){
throw new DataException(RCode.QC_USER_IS_NULL_ERROR);
}
manageEmployeeInfoDao.openAccount(param.getLoginName(),param.getPrivilegeId());
}
/**
* 修改账号的状态,权限
*/
@Override
public void putAccount(UserLoginParam param) {
manageEmployeeInfoDao.updateAccount(param.getLoginName(), param.getPrivilegeId(), param.getStatus());
}
}
package com.wangxiaolu.promotion.service.user.impl; package com.wangxiaolu.promotion.service.user.impl;
import com.wangxiaolu.promotion.common.redis.RedisKeys;
import com.wangxiaolu.promotion.common.redis.service.RedisCache;
import com.wangxiaolu.promotion.common.util.JwtUtils;
import com.wangxiaolu.promotion.domain.activity.dao.ManageEmployeeInfoDao; import com.wangxiaolu.promotion.domain.activity.dao.ManageEmployeeInfoDao;
import com.wangxiaolu.promotion.domain.activity.wrapperQo.ManageEmployeeWrapper; import com.wangxiaolu.promotion.domain.activity.wrapperQo.ManageEmployeeWrapper;
import com.wangxiaolu.promotion.pojo.activity.manage.vo.ManageEmployeeVo; import com.wangxiaolu.promotion.pojo.activity.manage.vo.ManageEmployeeVo;
import com.wangxiaolu.promotion.pojo.user.dto.ManageEmployeeInfoDto; import com.wangxiaolu.promotion.pojo.user.dto.ManageEmployeeInfoDto;
import com.wangxiaolu.promotion.pojo.user.vo.LoginVo;
import com.wangxiaolu.promotion.pojo.user.vo.UserLoginParam;
import com.wangxiaolu.promotion.service.user.ManageEmployeeQueryService; import com.wangxiaolu.promotion.service.user.ManageEmployeeQueryService;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -18,10 +23,22 @@ import java.util.List; ...@@ -18,10 +23,22 @@ import java.util.List;
*/ */
@Service @Service
public class ManageEmployeeQueryServiceImpl implements ManageEmployeeQueryService { public class ManageEmployeeQueryServiceImpl implements ManageEmployeeQueryService {
@Autowired
RedisCache redisCache;
@Autowired
JwtUtils jwtUtils;
@Autowired @Autowired
ManageEmployeeInfoDao manageEmployeeInfoDao; ManageEmployeeInfoDao manageEmployeeInfoDao;
@Override
public LoginVo employeeLoginVerify(UserLoginParam userLoginParam) {
ManageEmployeeInfoDto employeeDto = manageEmployeeInfoDao.loginByEmployeeNo(userLoginParam.getLoginName(),userLoginParam.getPassword());
String loginToken = jwtUtils.getEmployeeToken(userLoginParam.getLoginName(), userLoginParam.getPassword());
redisCache.addToJsonToMinute(RedisKeys.UserKeys.TEMPORARY_TOKEN.getKey()+loginToken,employeeDto,360);
LoginVo loginVo = new LoginVo<>(employeeDto,loginToken);
return loginVo;
}
@Override @Override
public ManageEmployeeInfoDto findOne(ManageEmployeeVo manageEmployeeVo) { public ManageEmployeeInfoDto findOne(ManageEmployeeVo manageEmployeeVo) {
ManageEmployeeWrapper ewrap = new ManageEmployeeWrapper(); ManageEmployeeWrapper ewrap = new ManageEmployeeWrapper();
...@@ -35,4 +52,14 @@ public class ManageEmployeeQueryServiceImpl implements ManageEmployeeQueryServic ...@@ -35,4 +52,14 @@ public class ManageEmployeeQueryServiceImpl implements ManageEmployeeQueryServic
BeanUtils.copyProperties(manageEmployeeVo,wrap); BeanUtils.copyProperties(manageEmployeeVo,wrap);
return manageEmployeeInfoDao.selectList(wrap); return manageEmployeeInfoDao.selectList(wrap);
} }
@Override
public boolean hasByEmpNo(String employeeNo) {
return manageEmployeeInfoDao.hasByEmpNo(employeeNo);
}
@Override
public boolean isOneSelf(Integer employeeId) {
return manageEmployeeInfoDao.isOneSelf(employeeId);
}
} }
package com.wangxiaolu.promotion.service.user.impl;
import com.wangxiaolu.promotion.common.redis.RedisKeys;
import com.wangxiaolu.promotion.common.redis.service.RedisCache;
import com.wangxiaolu.promotion.common.util.JwtUtils;
import com.wangxiaolu.promotion.domain.activity.dao.ManageEmployeeInfoDao;
import com.wangxiaolu.promotion.pojo.user.dto.ManageEmployeeInfoDto;
import com.wangxiaolu.promotion.pojo.user.vo.LoginVo;
import com.wangxiaolu.promotion.pojo.user.vo.UserLoginParam;
import com.wangxiaolu.promotion.service.user.WangxlEmployeeQueryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author : liqiulin
* @date : 2024-05-29 13
* @describe :
*/
@Service
@Slf4j
public class WangxlEmployeeQueryServiceImpl implements WangxlEmployeeQueryService {
@Autowired
RedisCache redisCache;
@Autowired
JwtUtils jwtUtils;
@Autowired
ManageEmployeeInfoDao manageEmployeeInfoDao;
@Override
public LoginVo employeeLoginVerify(UserLoginParam userLoginParam) {
ManageEmployeeInfoDto employeeDto = manageEmployeeInfoDao.loginByEmployeeNo(userLoginParam.getLoginName(),userLoginParam.getPassword());
String loginToken = jwtUtils.getEmployeeToken(userLoginParam.getLoginName(), userLoginParam.getPassword());
redisCache.addToJsonToMinute(RedisKeys.UserKeys.TEMPORARY_TOKEN.getKey()+loginToken,employeeDto,360);
LoginVo loginVo = new LoginVo<>(employeeDto,loginToken);
return loginVo;
}
}
package com.wangxiaolu.promotion.utils;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.oss.common.utils.BinaryUtil;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.codec.binary.Base64;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.auth.sts.AssumeRoleRequest;
import com.aliyuncs.auth.sts.AssumeRoleResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author : liqiulin
* @date : 2025-02-06 13
* @describe :
*/
@Component
public class AliyunUtils {
@Value("${aliyun.access-key-id}")
private String OSS_ACCESS_KEY_ID;
@Value("${aliyun.access-key-secret}")
private String OSS_ACCESS_KEY_SECRET;
@Value("${aliyun.oss.sts-role-arm}")
private String OSS_STS_ROLE_ARN;
@Value("${aliyun.oss.region-id}")
private String REGION_ID;
@Value("${aliyun.oss.session-name}")
private String YOUR_ROLE_SESSION_NAME;
@Value("${aliyun.oss.bucket-name}")
private String BUCKET_NAME;
@Value("${aliyun.oss.web-js-link}")
private String WEB_JS_LIN;
public JSONObject getSignature() throws JsonProcessingException {
//获取发送STS请求基础信息
//环境变量中获取access_key_id
String accessKeyId = OSS_ACCESS_KEY_ID;
//环境变量中获取access_key_secret
String accessKeySecret = OSS_ACCESS_KEY_SECRET;
//环境变量中获取ARN
String roleArnForOssUpload = OSS_STS_ROLE_ARN;
//色会话名称,用来区分不同的令牌,可自定义
String roleSessionName = YOUR_ROLE_SESSION_NAME;
//临时访问凭证的有效时间
Long durationSeconds = 3600L;
//初始化客户端
DefaultProfile profile = DefaultProfile.getProfile(REGION_ID, accessKeyId, accessKeySecret);
IAcsClient client = new DefaultAcsClient(profile);
AssumeRoleRequest request = new AssumeRoleRequest();
request.setRoleArn(roleArnForOssUpload);
request.setRoleSessionName(roleSessionName);
request.setDurationSeconds(durationSeconds);
//定义STS临时访问凭证变量
String STSaccessKeyId = null;
String STSsecretAccessKey = null;
String securityToken = null;
try {
AssumeRoleResponse response = client.getAcsResponse(request);
//将请求返回的STS临时访问凭证赋值到自定义变量中
STSaccessKeyId = response.getCredentials().getAccessKeyId();
STSsecretAccessKey = response.getCredentials().getAccessKeySecret();
securityToken = response.getCredentials().getSecurityToken();
} catch (ClientException e) {
e.printStackTrace();
}
//格式化请求日期
long now = System.currentTimeMillis() / 1000;
ZonedDateTime dtObj = ZonedDateTime.ofInstant(Instant.ofEpochSecond(now), ZoneId.of("UTC"));
ZonedDateTime dtObjPlus3h = dtObj.plusHours(3);
//请求时间
DateTimeFormatter dtObj1Formatter = DateTimeFormatter.ofPattern("yyyyMMdd'T'HHmmss'Z'");
String dtObj1 = dtObj.format(dtObj1Formatter);
//请求日期
DateTimeFormatter dtObj2Formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
String dtObj2 = dtObj.format(dtObj2Formatter);
//请求过期时间
DateTimeFormatter expirationTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
String expirationTime = dtObjPlus3h.format(expirationTimeFormatter);
// 创建policy
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> policy = new HashMap<>();
policy.put("expiration", expirationTime);
List<Object> conditions = new ArrayList<>();
Map<String, String> bucketCondition = new HashMap<>();
bucketCondition.put("bucket", BUCKET_NAME); //请替换为目标bucket名称
conditions.add(bucketCondition);
Map<String, String> signatureVersionCondition = new HashMap<>();
signatureVersionCondition.put("x-oss-signature-version", "OSS4-HMAC-SHA256");
conditions.add(signatureVersionCondition);
Map<String, String> credentialCondition = new HashMap<>();
// 替换为实际的 access key id
credentialCondition.put("x-oss-credential", STSaccessKeyId + "/" + dtObj2 + "/"+REGION_ID+"/oss/aliyun_v4_request");
conditions.add(credentialCondition);
Map<String, String> token = new HashMap<>();
token.put("x-oss-security-token", securityToken);
conditions.add(token);
Map<String, String> dateCondition = new HashMap<>();
dateCondition.put("x-oss-date", dtObj1);
conditions.add(dateCondition);
policy.put("conditions", conditions);
String jsonPolicy = mapper.writeValueAsString(policy);
//构造待签名字符串(StringToSign)
String stringToSign = new String(Base64.encodeBase64(jsonPolicy.getBytes()));
//计算SigningKey
byte[] dateKey = hmacsha256(("aliyun_v4" + STSsecretAccessKey).getBytes(), dtObj2);
byte[] dateRegionKey = hmacsha256(dateKey, REGION_ID);
byte[] dateRegionServiceKey = hmacsha256(dateRegionKey, "oss");
byte[] signingKey = hmacsha256(dateRegionServiceKey, "aliyun_v4_request");
//计算Signature
byte[] result = hmacsha256(signingKey, stringToSign);
String signature = BinaryUtil.toHex(result);
Map<String, String> messageMap = new HashMap<>();
messageMap.put("security_token", securityToken);
messageMap.put("signature", signature);
messageMap.put("x_oss_date", dtObj1);
messageMap.put("x_oss_credential", STSaccessKeyId + "/" + dtObj2 + "/"+REGION_ID+"/oss/aliyun_v4_request");
messageMap.put("x_oss_signature_version", "OSS4-HMAC-SHA256");
messageMap.put("policy", stringToSign);
messageMap.put("web_js_link", WEB_JS_LIN);
ObjectMapper objectMapper = new ObjectMapper();
String signatureStr = objectMapper.writeValueAsString(messageMap);
return JSONObject.parseObject(signatureStr);
}
/**
* 使用HMAC-SHA256算法计算给定密钥和数据的哈希值的静态方法
*
* @param key
* @param data
* @return
*/
public static byte[] hmacsha256(byte[] key, String data) {
try {
SecretKeySpec secretKeySpec = new SecretKeySpec(key, "HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(secretKeySpec);
byte[] hmacBytes = mac.doFinal(data.getBytes());
return hmacBytes;
} catch (Exception e) {
throw new RuntimeException("Failed to calculate HMAC-SHA256", e);
}
}
}
\ No newline at end of file
...@@ -2,10 +2,14 @@ package com.wangxiaolu.promotion.utils; ...@@ -2,10 +2,14 @@ package com.wangxiaolu.promotion.utils;
import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import org.apache.commons.lang3.StringUtils;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Date; import java.util.Date;
import java.util.Locale;
/** /**
* @author : liqiulin * @author : liqiulin
...@@ -29,4 +33,21 @@ public class DateUtils { ...@@ -29,4 +33,21 @@ public class DateUtils {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
} }
public static LocalTime parseLocalTimeByEmdtime(String emdtimeStr) {
if (StringUtils.isBlank(emdtimeStr)) {
return null;
}
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH);
return LocalTime.parse(emdtimeStr, formatter);
}
public static Date parseDateBylocalDate(LocalDate localDate) {
if (localDate == null) {
return null;
}
ZonedDateTime zonedDateTime = localDate.atStartOfDay(ZoneId.systemDefault());
Instant instant = zonedDateTime.toInstant();
return Date.from(instant);
}
} }
...@@ -108,12 +108,13 @@ public class QinCeUtils { ...@@ -108,12 +108,13 @@ public class QinCeUtils {
*/ */
public Map<String, Object> queryShopParam(Integer pageNum) { public Map<String, Object> queryShopParam(Integer pageNum) {
HashMap<String, Object> params = new HashMap<>(); HashMap<String, Object> params = new HashMap<>();
// 分页页码,默认1 //todo 分页页码,默认1
params.put("page_number", pageNum); params.put("page_number", pageNum);
params.put("store_code", "POS00038442");
// after_modify_date:更新时间之后,查询更新时间之后的门店数据。格式:yyyy-MM-dd HH:mm:SS //todo after_modify_date:更新时间之后,查询更新时间之后的门店数据。格式:yyyy-MM-dd HH:mm:SS
DateTime dateTime = DateUtil.offsetDay(new Date(), -2); // DateTime dateTime = DateUtil.offsetDay(new Date(), -2);
params.put("after_modify_date", DateUtil.format(dateTime, DatePattern.NORM_DATETIME_PATTERN)); // params.put("after_modify_date", DateUtil.format(dateTime, DatePattern.NORM_DATETIME_PATTERN));
return params; return params;
} }
...@@ -161,8 +162,8 @@ public class QinCeUtils { ...@@ -161,8 +162,8 @@ public class QinCeUtils {
params.put("status", "1"); params.put("status", "1");
// 全量数据同步后,再开启指定日期同步 // 全量数据同步后,再开启指定日期同步
DateTime dateTime = DateUtil.offsetDay(new Date(), -2); //todo DateTime dateTime = DateUtil.offsetDay(new Date(), -2);
params.put("after_create_date", DateUtil.format(dateTime, DatePattern.NORM_DATETIME_PATTERN)); // params.put("after_create_date", DateUtil.format(dateTime, DatePattern.NORM_DATETIME_PATTERN));
return params; return params;
} }
} }
...@@ -7,10 +7,10 @@ spring: ...@@ -7,10 +7,10 @@ spring:
username: root username: root
password: Zt%68Dsuv&M password: Zt%68Dsuv&M
redis: redis:
port: 21101 port: 6379
host: bj-crs-oyzhz3c6.sql.tencentcdb.com host: 192.168.100.40
database: 0 database: 0
password: u)R3jrHk(qwt~mv$Tg=U password: QjL6H5nH
main: main:
web-application-type: reactive web-application-type: reactive
...@@ -18,8 +18,8 @@ spring: ...@@ -18,8 +18,8 @@ spring:
cloud: cloud:
nacos: nacos:
discovery: discovery:
server-addr: 42.193.103.153:8848 server-addr: 192.168.100.38:8848
namespace: dd681f3c-0d21-42e5-a96e-14863a7cdcdb namespace: 68c8d97c-715a-4983-99b7-9df9b99f89e7
group: promotion group: promotion
logging: logging:
...@@ -92,4 +92,14 @@ xxl: ...@@ -92,4 +92,14 @@ xxl:
logretentiondays: 30 logretentiondays: 30
address: address:
ip: ip:
logpath: /Users/a02200059/Desktop/wangxiaolu-sfa/log/xxl_job # 执行器日志路径 logpath: /Users/a02200059/Desktop/wangxiaolu-sfa/log/xxl_job # 执行器日志路径
\ No newline at end of file
aliyun:
access-key-id: LTAI5tEvDG8hMRf9tBt9kB3s
access-key-secret: TnH1qRJr95t62pNcVLNopeEhpPxiqe
oss:
region-id: cn-shanghai
sts-role-arm: acs:ram::1819206190412770:role/oss-admin-role
session-name: promotion-dev-miniapp
bucket-name: link-promotion-dev
web-js-link: link-promotion-dev.oss-cn-shanghai.aliyuncs.com
\ No newline at end of file
...@@ -84,4 +84,15 @@ xxl: ...@@ -84,4 +84,15 @@ xxl:
logretentiondays: 30 logretentiondays: 30
address: address:
ip: ip:
logpath: /var/logs/xxl_job # 执行器日志路径 logpath: /var/logs/xxl_job # 执行器日志路径
\ No newline at end of file
aliyun:
access-key-id: LTAI5tEvDG8hMRf9tBt9kB3s
access-key-secret: TnH1qRJr95t62pNcVLNopeEhpPxiqe
oss:
region-id: cn-shanghai
sts-role-arm: acs:ram::1819206190412770:role/oss-admin-role
session-name: promotion-live-miniapp
bucket-name: link-promotion
web-js-link: link-promotion.oss-cn-shanghai.aliyuncs.com
\ No newline at end of file
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
# url: jdbc:mysql://bj-cdb-j8ppdy86.sql.tencentcdb.com:63569/promotion_dev?autoReconnect=true
url: jdbc:mysql://192.168.100.39:25301/promotion_dev?autoReconnect=true
username: root
password: Zt%68Dsuv&M
redis:
port: 6379
host: 192.168.100.40
database: 0
password: QjL6H5nH
main:
web-application-type: reactive
cloud:
nacos:
discovery:
server-addr: 192.168.100.38:8848
namespace: 3b774c2d-b03b-4816-8fe8-a41f458ebbcc
group: promotion
logging:
config: classpath:logback-spring.xml
async:
executor:
thread:
core_pool_size: 4
name:
prefix: promotion-
wx:
miniapp:
configs:
- appid: wxac14dc7765484d7d
secret: b3315e66608a397f88e7e82b8f950bcd
token: #微信小程序消息服务器配置的token
aesKey: #微信小程序消息服务器配置的EncodingAESKey
msgDataFormat: JSON
temporary:
token_secret: sXwHPj#U#xmim^ts
employee:
token_secret: xZq%kXASSPD$UtL
tengxunyun:
# 腾讯云个人账号信息
secret_d: AKIDVt353sWyY0GXn0ANa0YyGdwDIBtjQwGS
secret_key: SBqJcrxypSxeGOPF81mLgsANXo3ALhz7
sms:
#指定接入地域域名,默认就近地域接入域名为 sms.tencentcloudapi.com
endpoint_beijing: sms.ap-beijing.tencentcloudapi.com
#地域信息
ap_beijing: ap-beijing
#应用ID(默认应用)
sdk_app_id_defult: 1400903035
#签名内容
sign_name_a: 北京王小卤
#模板ID
template_id_a: 2127434
#验证码过期时间(分钟)
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: 8546408787259919799
app_key: oV0FHfMt81Tii2_kst
# mybatis-plus 控制台打印sql日志
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# xxl-job配置
xxl:
job:
accessToken: default_token
admin:
addresses: http://192.168.100.38:9001/xxl-job-admin
executor:
appname: promotion-dev
port: 9996
logretentiondays: 30
address:
ip:
logpath: /Users/a02200059/Desktop/wangxiaolu-sfa/log/xxl_job # 执行器日志路径
aliyun:
access-key-id: LTAI5tEvDG8hMRf9tBt9kB3s
access-key-secret: TnH1qRJr95t62pNcVLNopeEhpPxiqe
oss:
region-id: cn-shanghai
sts-role-arm: acs:ram::1819206190412770:role/oss-admin-role
session-name: promotion-dev-miniapp
bucket-name: link-promotion-dev
web-js-link: link-promotion-dev.oss-cn-shanghai.aliyuncs.com
\ No newline at end of file
...@@ -18,16 +18,57 @@ ...@@ -18,16 +18,57 @@
</collection> </collection>
</resultMap> </resultMap>
<!-- <sql id="Base_Column_List">--> <!-- <sql id="Base_Column_List">-->
<!-- id--> <!-- id-->
<!-- ,name,employee_no,--> <!-- ,name,employee_no,-->
<!-- passwork--> <!-- passwork-->
<!-- </sql>--> <!-- </sql>-->
<select id="selectToLogin" resultMap="BaseResultMap"> <select id="selectToLogin" resultMap="BaseResultMap">
select pme.*, merp.privilege select pme.*, merp.privilege
from manage_employee_info pme from manage_employee_info pme
left join manage_employee_ref_privilege merp on pme.id = merp.employee_id left join manage_employee_ref_privilege merp on pme.id = merp.employee_id
where employee_no = #{employeeNo}; where pme.employee_no = #{employeeNo}
and pme.status = '0';
</select>
<select id="hasByEmpNo" resultType="integer">
select id
from manage_employee_info
where employee_no = #{employeeNo}
</select>
<insert id="insertOne" useGeneratedKeys="true" keyProperty="id">
INSERT INTO manage_employee_info (qc_id, name, employee_no, passwork, dept_qc_id, dept_qc_name)
select qe.qc_id, qe.emp_name, qe.emp_code, "", qd.qc_id, qd.org_name
from qince_employee qe
inner join qince_department qd on qe.waiqin365_org_id = qd.qc_id
where qe.emp_code = #{employeeNo}
and qe.emp_status = '1';
</insert>
<insert id="addPrivilege">
INSERT INTO manage_employee_ref_privilege (employee_id, privilege_id, privilege)
select ${empId}, id, privilege
from manage_ref_privilege
where id = #{privilegeId}
</insert>
<update id="updateByEmployeeNo">
update manage_employee_info
set status = #{status}
where employee_no = #{employeeNo}
</update>
<update id="updatePrivilege">
update manage_employee_ref_privilege
set privilege_id = #{privilegeId},
privilege = (select privilege from manage_ref_privilege where id = #{privilegeId})
where employee_id = (select id from manage_employee_info where employee_no = #{employeeNo});
</update>
<select id="isOneSelf" resultType="boolean">
select count(*) > 0
from manage_employee_ref_privilege where employee_id = #{employeeId} and privilege_id = 1;
</select> </select>
</mapper> </mapper>
...@@ -18,15 +18,17 @@ ...@@ -18,15 +18,17 @@
<insert id="saveList"> <insert id="saveList">
insert into qince_dealer insert into qince_dealer
(dealer_id, dealer_name, dealer_cooperate_status, create_time) (dealer_id, dealer_name, dealer_cooperate_status, create_time,dealer_dept_waiqin365_id,dealer_dept_name)
VALUES VALUES
<foreach collection="dealerJsons" item="item" separator=","> <foreach collection="dealerJsons" item="item" separator=",">
(#{item.dealer_id}, #{item.dealer_name}, (#{item.dealer_id}, #{item.dealer_name},
#{item.dealer_cooperate_status},#{item.create_time}) #{item.dealer_cooperate_status},#{item.create_time},#{item.dealer_dept_waiqin365_id},#{item.dealer_dept_name})
</foreach> </foreach>
ON DUPLICATE KEY UPDATE ON DUPLICATE KEY UPDATE
dealer_name = values(dealer_name), dealer_name = values(dealer_name),
dealer_cooperate_status = values(dealer_cooperate_status); dealer_cooperate_status = values(dealer_cooperate_status),
dealer_dept_waiqin365_id = values(dealer_dept_waiqin365_id),
dealer_dept_name = values(dealer_dept_name);
</insert> </insert>
</mapper> </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.activityplanv2.mapper.ActivityPlanInfoMapper">
<resultMap id="BaseResultMap" type="com.wangxiaolu.promotion.domain.activityplanv2.mapper.entity.ActivityPlanInfoDo">
<id property="id" column="id" jdbcType="BIGINT"/>
<result property="planFileId" column="plan_file_id" jdbcType="BIGINT"/>
<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="year" column="year" jdbcType="INTEGER"/>
<result property="month" column="month" jdbcType="INTEGER"/>
<result property="date" column="date" jdbcType="DATE"/>
<result property="lineName" column="line_name" jdbcType="VARCHAR"/>
<result property="storeName" column="store_name" jdbcType="VARCHAR"/>
<result property="storeCode" column="store_code" jdbcType="VARCHAR"/>
<result property="orgQcId" column="org_qc_id" jdbcType="VARCHAR"/>
<result property="orgName" column="org_name" jdbcType="VARCHAR"/>
<result property="patternId" column="pattern_id" jdbcType="INTEGER"/>
<result property="pattern" column="pattern" jdbcType="VARCHAR"/>
<result property="dealerId" column="dealer_id" jdbcType="VARCHAR"/>
<result property="dealerName" column="dealer_name" jdbcType="VARCHAR"/>
<result property="bothT" column="both_t" jdbcType="VARCHAR"/>
<result property="province" column="province" jdbcType="VARCHAR"/>
<result property="city" column="city" jdbcType="VARCHAR"/>
<result property="area" column="area" jdbcType="VARCHAR"/>
<result property="addr" column="addr" jdbcType="VARCHAR"/>
<result property="planStatus" column="plan_status" jdbcType="INTEGER"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="modifyTime" column="modify_time" jdbcType="TIMESTAMP"/>
<result property="isDelete" column="is_delete" jdbcType="INTEGER"/>
</resultMap>
<resultMap id="PlanBase" type="com.wangxiaolu.promotion.domain.activityplanv2.mapper.entity.ActivityPlanInfoDo">
<id property="id" column="id" jdbcType="BIGINT"/>
<result property="employeeName" column="employee_name" jdbcType="VARCHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
</resultMap>
<sql id="Base_Column_List">
id,plan_file_id,employee_id,
employee_name,employee_no,year,
month,date,line_name,
store_name,store_code,org_qc_id,
org_name,pattern_id,pattern,
dealer_id,dealer_name,both_t,
province,city,area,
street,addr,plan_status,
create_time,modify_time,is_delete
</sql>
<insert id="saveList">
INSERT INTO activity_plan_info
(plan_file_id,employee_id,employee_name,employee_no,year,month,date,line_name,store_name,store_code,org_qc_id,org_name,pattern_id,pattern,dealer_id,dealer_name,both_t,province,city,area,addr,clock_in_time,clock_out_time,salary,incidentals)
VALUES
<foreach collection="table" item="item" index="index" separator=",">
(#{recordId}, #{item.employeeId}, #{item.employeeName}, #{item.employeeNo}, #{item.year},
#{item.month}, FROM_UNIXTIME(#{item.date} / 1000), #{item.lineName}, #{item.storeName}, #{item.storeCode},
#{item.orgQcId},#{item.orgName}, 0, #{item.pattern}, #{item.dealerId}, #{item.dealerName}, '未确定',
#{item.province}, #{item.city}, #{item.area}, #{item.addr},
FROM_UNIXTIME(#{item.clockInTime} / 1000), FROM_UNIXTIME(#{item.clockOutTime} / 1000), #{item.salary},
#{item.incidentals})
</foreach>
</insert>
<select id="selectPlan" resultMap="BaseResultMap">
select employee_name, create_time
from activity_plan_info
where date = #{date} and store_code = #{storeCode} and is_delete = 1;
</select>
</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.activityplanv2.mapper.ActivityPlanRecordMapper">
<resultMap id="BaseResultMap" type="com.wangxiaolu.promotion.domain.activityplanv2.mapper.entity.ActivityPlanRecordDo">
<id property="id" column="id" jdbcType="BIGINT"/>
<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="excelUrl" column="excel_url" jdbcType="VARCHAR"/>
<result property="excelFiledId" column="excel_filed_id" jdbcType="VARCHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="modifyTime" column="modify_time" jdbcType="TIMESTAMP"/>
<result property="isDelete" column="is_delete" jdbcType="INTEGER"/>
</resultMap>
<sql id="Base_Column_List">
id,employee_id,employee_name,
employee_no,excel_url,excel_filed_id,
create_time,modify_time,is_delete
</sql>
</mapper>
package com.wangxiaolu.promotion.service.activityplanv2.impl;
import com.wangxiaolu.promotion.service.activityplanv2.PromPlanCoreService;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
/**
* @author : liqiulin
* @date : 2025-01-21 15
* @describe :
*/
@SpringBootTest
@RunWith(SpringRunner.class)
class PromPlanCoreServiceImplTest {
@Autowired
private PromPlanCoreService service;
@Test
void selfPlan() {
// service.selfPlan(null,"/Users/a02200059/Desktop/测试新增v3.xlsx");
}
}
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论