Commit 472f3b61e241cc812942253366bed1740d68ee73

Authored by 曾国涛
1 parent 637c27de

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

- 新增内部利润字段编辑申请类型- 实现内部利润字段锁定申请的提交和审核功能
-优化项目基础信息页面,支持显示锁定字段信息
- 重构项目锁定记录查询逻辑,提高查询效率
src/main/java/com/order/erp/config/MybatisPlusConfig.java
1 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 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 16 public enum ProjectApplyTypeEnum {
17 17  
18 18 FIELD_EDIT_APPLY(0, "字段编辑申请"),
  19 + INNER_PROFIT_FIELD_EDIT_APPLY(1, "内部利润字段编辑申请"),
19 20 ;
20   - @EnumValue
21   - @JsonValue
  21 +
22 22 private Integer type;
23 23  
24 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 52 private String fields;
53 53  
54 54 @ApiModelProperty(value = "锁定字段 json字符串")
55   - private ProjectApplyTypeEnum type;
  55 + private String type;
56 56  
57 57 @ApiModelProperty(value = "状态:0 待审批,1 通过,2 拒绝")
58 58 private Integer status;
... ... @@ -67,4 +67,5 @@ public class ProjectApplyDO extends BaseDO implements Serializable {
67 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 53  
54 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 48  
49 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 98 public ServerResult applyEditFileds(ProjectBaseInfoLockFieldVO vo) {
99 99 List<ProjectApplyDO> applyDOS = projectFieldLockApplyService.list(new LambdaQueryWrapper<ProjectApplyDO>()
100 100 .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  101 + .eq(ProjectApplyDO::getType,vo.getType())
101 102 .eq(ProjectApplyDO::getProjectNoPrefix, vo.getProjectNoPrefix())
102 103 .eq(ProjectApplyDO::getApplyUserId, dataScope.getLoginUserId())
103 104 .eq(ProjectApplyDO::getStatus, ApplyStatusEnum.WAIT_AUDIT.getStatus()));
... ... @@ -111,13 +112,15 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl&lt;ProjectBaseInfoMappe
111 112 .spainPaidRmbCommission(vo.getSpainPaidRmbCommission())
112 113 .paidRmbCommission(vo.getPaidRmbCommission())
113 114 .actualExchangeRate(vo.getActualExchangeRate())
  115 + .projectInnerProfitInfoEndTime(vo.getProjectInnerProfitInfoEndTime())
  116 + .projectInnerProfitInfoStartTime(vo.getProjectInnerProfitInfoStartTime())
114 117 .build();
115 118 ProjectApplyDO build = ProjectApplyDO.builder()
116 119 .projectNoPrefix(vo.getProjectNoPrefix())
117 120 .applyUserId(dataScope.getLoginUserId())
118 121 .applyRemark(vo.getApplyRemark())
119 122 .fields(JSONObject.toJSONString(projectBaseInfoLockFieldVO))
120   - .type(ProjectApplyTypeEnum.FIELD_EDIT_APPLY)
  123 + .type(vo.getType())
121 124 .status(ApplyStatusEnum.WAIT_AUDIT.getStatus())
122 125 .build();
123 126 projectFieldLockApplyService.save(build);
... ... @@ -129,7 +132,7 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl&lt;ProjectBaseInfoMappe
129 132 public ServerResult pageProjectLockFieldApply(QueryProjectLockFieldVO vo) {
130 133 Page<ProjectApplyDO> page = projectFieldLockApplyService.lambdaQuery()
131 134 .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
132   - .eq(ProjectApplyDO::getType, ProjectApplyTypeEnum.FIELD_EDIT_APPLY.getType())
  135 + .eq(ProjectApplyDO::getType, vo.getType())
133 136 .eq(ProjectApplyDO::getStatus, StringUtils.isBlank(vo.getStatus()) ? ApplyStatusEnum.WAIT_AUDIT.getStatus() : vo.getStatus())
134 137 .orderByDesc(ProjectApplyDO::getCreateTime)
135 138 .page(new Page<>(vo.getPage(), vo.getPageSize()));
... ... @@ -163,7 +166,17 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl&lt;ProjectBaseInfoMappe
163 166 .userId(applyDO.getApplyUserId())
164 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 180 if (Objects.isNull(recordDO.getId())) {
168 181 projectionFieldLockRecordService.save(recordDO);
169 182 } else {
... ... @@ -319,12 +332,39 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl&lt;ProjectBaseInfoMappe
319 332 .list();
320 333 Map<String, SystemSettingDO> systemSettingDOSMap = systemSettingDOS.stream()
321 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 356 return orderBaseInfoDOSGroupByProjectNoPre.entrySet().stream().map(entry -> {
  357 + ProjectBaseInfoDO projectBaseInfoDO = no2ProjectInfoMap.get(entry.getKey());
323 358 List<OrderInfoResultVO> details = entry.getValue();
324 359 InnerProfitInfoVO innerProfitInfoVO = InnerProfitInfoVO.builder()
325 360 .customerCode(details.get(0).getCustomerCode())
326 361 .projectNoPrefix(entry.getKey())
327 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 368 .build();
329 369  
330 370 //数量
... ... @@ -411,7 +451,6 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl&lt;ProjectBaseInfoMappe
411 451 SystemSettingDO systemSettingDO = systemSettingDOSMap.get(innerProfitInfoVO.getCustomerCode());
412 452 if (Objects.nonNull(systemSettingDO)) {
413 453 String relationValue = systemSettingDO.getRelationValue();
414   - ObjectMapper objectMapper = new ObjectMapper();
415 454 try {
416 455 // 将 JSON 字符串解析为 List<Map<String, String>>
417 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 3  
4 4 spring:
5 5 profiles:
6   - active: test
7 6 \ No newline at end of file
  7 + active: test
... ...