Commit 472f3b61e241cc812942253366bed1740d68ee73

Authored by 曾国涛
1 parent 637c27de

feat(order): 增加内部利润字段锁定申请功能

- 新增内部利润字段编辑申请类型- 实现内部利润字段锁定申请的提交和审核功能
-优化项目基础信息页面,支持显示锁定字段信息
- 重构项目锁定记录查询逻辑,提高查询效率
src/main/java/com/order/erp/config/MybatisPlusConfig.java
1 package com.order.erp.config; 1 package com.order.erp.config;
2 2
  3 +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
  4 +import org.apache.ibatis.session.SqlSessionFactory;
  5 +import org.springframework.context.annotation.Bean;
3 import org.springframework.context.annotation.Configuration; 6 import org.springframework.context.annotation.Configuration;
4 7
5 8
src/main/java/com/order/erp/domain/ProjectApplyTypeEnum.java
@@ -16,9 +16,9 @@ import lombok.Getter; @@ -16,9 +16,9 @@ import lombok.Getter;
16 public enum ProjectApplyTypeEnum { 16 public enum ProjectApplyTypeEnum {
17 17
18 FIELD_EDIT_APPLY(0, "字段编辑申请"), 18 FIELD_EDIT_APPLY(0, "字段编辑申请"),
  19 + INNER_PROFIT_FIELD_EDIT_APPLY(1, "内部利润字段编辑申请"),
19 ; 20 ;
20 - @EnumValue  
21 - @JsonValue 21 +
22 private Integer type; 22 private Integer type;
23 23
24 private String desc; 24 private String desc;
src/main/java/com/order/erp/domain/model/ProjectApplyDO.java
@@ -52,7 +52,7 @@ public class ProjectApplyDO extends BaseDO implements Serializable { @@ -52,7 +52,7 @@ public class ProjectApplyDO extends BaseDO implements Serializable {
52 private String fields; 52 private String fields;
53 53
54 @ApiModelProperty(value = "锁定字段 json字符串") 54 @ApiModelProperty(value = "锁定字段 json字符串")
55 - private ProjectApplyTypeEnum type; 55 + private String type;
56 56
57 @ApiModelProperty(value = "状态:0 待审批,1 通过,2 拒绝") 57 @ApiModelProperty(value = "状态:0 待审批,1 通过,2 拒绝")
58 private Integer status; 58 private Integer status;
@@ -67,4 +67,5 @@ public class ProjectApplyDO extends BaseDO implements Serializable { @@ -67,4 +67,5 @@ public class ProjectApplyDO extends BaseDO implements Serializable {
67 private String applyRemark; 67 private String applyRemark;
68 68
69 69
  70 +
70 } 71 }
src/main/java/com/order/erp/domain/vo/order/ProjectBaseInfoLockFieldVO.java
@@ -53,5 +53,10 @@ public class ProjectBaseInfoLockFieldVO implements Serializable { @@ -53,5 +53,10 @@ public class ProjectBaseInfoLockFieldVO implements Serializable {
53 53
54 private String actualExchangeRate; 54 private String actualExchangeRate;
55 55
  56 + private String projectInnerProfitInfoStartTime;
  57 +
  58 + private String projectInnerProfitInfoEndTime;
  59 +
  60 + private String type;
56 61
57 } 62 }
src/main/java/com/order/erp/domain/vo/order/QueryProjectLockFieldVO.java
@@ -48,5 +48,7 @@ public class QueryProjectLockFieldVO extends BasePageVO implements Serializable @@ -48,5 +48,7 @@ public class QueryProjectLockFieldVO extends BasePageVO implements Serializable
48 48
49 private String packetActualRmbTotalPrice; 49 private String packetActualRmbTotalPrice;
50 50
  51 + private Integer type;
  52 +
51 53
52 } 54 }
src/main/java/com/order/erp/service/order/impl/ProjectBaseInfoServiceImpl.java
@@ -98,6 +98,7 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe @@ -98,6 +98,7 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe
98 public ServerResult applyEditFileds(ProjectBaseInfoLockFieldVO vo) { 98 public ServerResult applyEditFileds(ProjectBaseInfoLockFieldVO vo) {
99 List<ProjectApplyDO> applyDOS = projectFieldLockApplyService.list(new LambdaQueryWrapper<ProjectApplyDO>() 99 List<ProjectApplyDO> applyDOS = projectFieldLockApplyService.list(new LambdaQueryWrapper<ProjectApplyDO>()
100 .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) 100 .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  101 + .eq(ProjectApplyDO::getType,vo.getType())
101 .eq(ProjectApplyDO::getProjectNoPrefix, vo.getProjectNoPrefix()) 102 .eq(ProjectApplyDO::getProjectNoPrefix, vo.getProjectNoPrefix())
102 .eq(ProjectApplyDO::getApplyUserId, dataScope.getLoginUserId()) 103 .eq(ProjectApplyDO::getApplyUserId, dataScope.getLoginUserId())
103 .eq(ProjectApplyDO::getStatus, ApplyStatusEnum.WAIT_AUDIT.getStatus())); 104 .eq(ProjectApplyDO::getStatus, ApplyStatusEnum.WAIT_AUDIT.getStatus()));
@@ -111,13 +112,15 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl&lt;ProjectBaseInfoMappe @@ -111,13 +112,15 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl&lt;ProjectBaseInfoMappe
111 .spainPaidRmbCommission(vo.getSpainPaidRmbCommission()) 112 .spainPaidRmbCommission(vo.getSpainPaidRmbCommission())
112 .paidRmbCommission(vo.getPaidRmbCommission()) 113 .paidRmbCommission(vo.getPaidRmbCommission())
113 .actualExchangeRate(vo.getActualExchangeRate()) 114 .actualExchangeRate(vo.getActualExchangeRate())
  115 + .projectInnerProfitInfoEndTime(vo.getProjectInnerProfitInfoEndTime())
  116 + .projectInnerProfitInfoStartTime(vo.getProjectInnerProfitInfoStartTime())
114 .build(); 117 .build();
115 ProjectApplyDO build = ProjectApplyDO.builder() 118 ProjectApplyDO build = ProjectApplyDO.builder()
116 .projectNoPrefix(vo.getProjectNoPrefix()) 119 .projectNoPrefix(vo.getProjectNoPrefix())
117 .applyUserId(dataScope.getLoginUserId()) 120 .applyUserId(dataScope.getLoginUserId())
118 .applyRemark(vo.getApplyRemark()) 121 .applyRemark(vo.getApplyRemark())
119 .fields(JSONObject.toJSONString(projectBaseInfoLockFieldVO)) 122 .fields(JSONObject.toJSONString(projectBaseInfoLockFieldVO))
120 - .type(ProjectApplyTypeEnum.FIELD_EDIT_APPLY) 123 + .type(vo.getType())
121 .status(ApplyStatusEnum.WAIT_AUDIT.getStatus()) 124 .status(ApplyStatusEnum.WAIT_AUDIT.getStatus())
122 .build(); 125 .build();
123 projectFieldLockApplyService.save(build); 126 projectFieldLockApplyService.save(build);
@@ -129,7 +132,7 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl&lt;ProjectBaseInfoMappe @@ -129,7 +132,7 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl&lt;ProjectBaseInfoMappe
129 public ServerResult pageProjectLockFieldApply(QueryProjectLockFieldVO vo) { 132 public ServerResult pageProjectLockFieldApply(QueryProjectLockFieldVO vo) {
130 Page<ProjectApplyDO> page = projectFieldLockApplyService.lambdaQuery() 133 Page<ProjectApplyDO> page = projectFieldLockApplyService.lambdaQuery()
131 .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) 134 .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
132 - .eq(ProjectApplyDO::getType, ProjectApplyTypeEnum.FIELD_EDIT_APPLY.getType()) 135 + .eq(ProjectApplyDO::getType, vo.getType())
133 .eq(ProjectApplyDO::getStatus, StringUtils.isBlank(vo.getStatus()) ? ApplyStatusEnum.WAIT_AUDIT.getStatus() : vo.getStatus()) 136 .eq(ProjectApplyDO::getStatus, StringUtils.isBlank(vo.getStatus()) ? ApplyStatusEnum.WAIT_AUDIT.getStatus() : vo.getStatus())
134 .orderByDesc(ProjectApplyDO::getCreateTime) 137 .orderByDesc(ProjectApplyDO::getCreateTime)
135 .page(new Page<>(vo.getPage(), vo.getPageSize())); 138 .page(new Page<>(vo.getPage(), vo.getPageSize()));
@@ -163,7 +166,17 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl&lt;ProjectBaseInfoMappe @@ -163,7 +166,17 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl&lt;ProjectBaseInfoMappe
163 .userId(applyDO.getApplyUserId()) 166 .userId(applyDO.getApplyUserId())
164 .build(); 167 .build();
165 } 168 }
166 - recordDO.setFields(applyDO.getFields()); 169 + ProjectBaseInfoLockFieldVO applyLockFieldVO = JSONObject.parseObject(applyDO.getFields(), ProjectBaseInfoLockFieldVO.class);
  170 + ProjectBaseInfoLockFieldVO recordLockFieldVO = JSONObject.parseObject(recordDO.getFields(), ProjectBaseInfoLockFieldVO.class);
  171 + if(ProjectApplyTypeEnum.FIELD_EDIT_APPLY.name().equals(applyDO.getType())){
  172 + ProjectBaseInfoLockFieldVO projectBaseInfoLockFieldVO = Optional.ofNullable(recordLockFieldVO).orElse(new ProjectBaseInfoLockFieldVO());
  173 + BeanUtil.copyProperties(applyLockFieldVO, projectBaseInfoLockFieldVO, CopyOptions.create().setIgnoreProperties("projectInnerProfitInfoStartTime","projectInnerProfitInfoEndTime").ignoreNullValue());
  174 + recordLockFieldVO = projectBaseInfoLockFieldVO;
  175 + }else if(ProjectApplyTypeEnum.INNER_PROFIT_FIELD_EDIT_APPLY.name().equals(applyDO.getType())){
  176 + recordLockFieldVO.setProjectInnerProfitInfoStartTime(applyLockFieldVO.getProjectInnerProfitInfoStartTime());
  177 + recordLockFieldVO.setProjectInnerProfitInfoEndTime(applyLockFieldVO.getProjectInnerProfitInfoEndTime());
  178 + }
  179 + recordDO.setFields(JSONObject.toJSONString(recordLockFieldVO));
167 if (Objects.isNull(recordDO.getId())) { 180 if (Objects.isNull(recordDO.getId())) {
168 projectionFieldLockRecordService.save(recordDO); 181 projectionFieldLockRecordService.save(recordDO);
169 } else { 182 } else {
@@ -319,12 +332,39 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl&lt;ProjectBaseInfoMappe @@ -319,12 +332,39 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl&lt;ProjectBaseInfoMappe
319 .list(); 332 .list();
320 Map<String, SystemSettingDO> systemSettingDOSMap = systemSettingDOS.stream() 333 Map<String, SystemSettingDO> systemSettingDOSMap = systemSettingDOS.stream()
321 .collect(Collectors.toMap(SystemSettingDO::getSettingValue, Function.identity(), (x, y) -> x)); 334 .collect(Collectors.toMap(SystemSettingDO::getSettingValue, Function.identity(), (x, y) -> x));
  335 + List<ProjectFieldLockRecord> lockRecords = projectionFieldLockRecordService
  336 + .lambdaQuery()
  337 + .func(query -> {
  338 + Set<String> projectNoPrefixs = list.stream().map(ProjectBaseInfoDO::getProjectNoPrefix).collect(Collectors.toSet());
  339 + if (CollUtil.isNotEmpty(projectNoPrefixs)) {
  340 + query.in(ProjectFieldLockRecord::getProjectNoPrefix, projectNoPrefixs);
  341 +
  342 + } else {
  343 + query.apply("1!=1");
  344 + }
  345 + })
  346 + .list();
  347 + ObjectMapper objectMapper = new ObjectMapper();
  348 + Map<String, ProjectBaseInfoLockFieldVO> prjectNo2LockRecordMap = lockRecords.stream()
  349 + .collect(Collectors.toMap(ProjectFieldLockRecord::getProjectNoPrefix, record -> {
  350 + try {
  351 + return objectMapper.readValue(record.getFields(), ProjectBaseInfoLockFieldVO.class);
  352 + } catch (JsonProcessingException e) {
  353 + throw new RuntimeException(e);
  354 + }
  355 + }));
322 return orderBaseInfoDOSGroupByProjectNoPre.entrySet().stream().map(entry -> { 356 return orderBaseInfoDOSGroupByProjectNoPre.entrySet().stream().map(entry -> {
  357 + ProjectBaseInfoDO projectBaseInfoDO = no2ProjectInfoMap.get(entry.getKey());
323 List<OrderInfoResultVO> details = entry.getValue(); 358 List<OrderInfoResultVO> details = entry.getValue();
324 InnerProfitInfoVO innerProfitInfoVO = InnerProfitInfoVO.builder() 359 InnerProfitInfoVO innerProfitInfoVO = InnerProfitInfoVO.builder()
325 .customerCode(details.get(0).getCustomerCode()) 360 .customerCode(details.get(0).getCustomerCode())
326 .projectNoPrefix(entry.getKey()) 361 .projectNoPrefix(entry.getKey())
327 .productionDepartment(details.get(0).getProductionDepartment()) 362 .productionDepartment(details.get(0).getProductionDepartment())
  363 + .lockFields(Optional.ofNullable(prjectNo2LockRecordMap.get(entry.getKey())).orElse(
  364 + ProjectBaseInfoLockFieldVO.builder()
  365 + .projectInnerProfitInfoStartTime(Objects.isNull(projectBaseInfoDO) || Objects.isNull(projectBaseInfoDO.getProjectInnerProfitInfoStartTime()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name())
  366 + .projectInnerProfitInfoEndTime(Objects.isNull(projectBaseInfoDO) || Objects.isNull(projectBaseInfoDO.getProjectInnerProfitInfoEndTime()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name())
  367 + .build()))
328 .build(); 368 .build();
329 369
330 //数量 370 //数量
@@ -411,7 +451,6 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl&lt;ProjectBaseInfoMappe @@ -411,7 +451,6 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl&lt;ProjectBaseInfoMappe
411 SystemSettingDO systemSettingDO = systemSettingDOSMap.get(innerProfitInfoVO.getCustomerCode()); 451 SystemSettingDO systemSettingDO = systemSettingDOSMap.get(innerProfitInfoVO.getCustomerCode());
412 if (Objects.nonNull(systemSettingDO)) { 452 if (Objects.nonNull(systemSettingDO)) {
413 String relationValue = systemSettingDO.getRelationValue(); 453 String relationValue = systemSettingDO.getRelationValue();
414 - ObjectMapper objectMapper = new ObjectMapper();  
415 try { 454 try {
416 // 将 JSON 字符串解析为 List<Map<String, String>> 455 // 将 JSON 字符串解析为 List<Map<String, String>>
417 List<Map<String, String>> relations = objectMapper.readValue(relationValue, objectMapper.getTypeFactory().constructCollectionType(List.class, Map.class)); 456 List<Map<String, String>> relations = objectMapper.readValue(relationValue, objectMapper.getTypeFactory().constructCollectionType(List.class, Map.class));
src/main/resources/application.yml
@@ -3,4 +3,4 @@ server: @@ -3,4 +3,4 @@ server:
3 3
4 spring: 4 spring:
5 profiles: 5 profiles:
6 - active: test  
7 \ No newline at end of file 6 \ No newline at end of file
  7 + active: test