Commit 472f3b61e241cc812942253366bed1740d68ee73
1 parent
637c27de
feat(order): 增加内部利润字段锁定申请功能
- 新增内部利润字段编辑申请类型- 实现内部利润字段锁定申请的提交和审核功能 -优化项目基础信息页面,支持显示锁定字段信息 - 重构项目锁定记录查询逻辑,提高查询效率
Showing
7 changed files
with
58 additions
and
8 deletions
src/main/java/com/order/erp/config/MybatisPlusConfig.java
src/main/java/com/order/erp/domain/ProjectApplyTypeEnum.java
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
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<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<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<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<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<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)); | ... | ... |