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
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<ProjectBaseInfoMappe | @@ -111,13 +112,15 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<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<ProjectBaseInfoMappe | @@ -129,7 +132,7 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<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<ProjectBaseInfoMappe | @@ -163,7 +166,17 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<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<ProjectBaseInfoMappe | @@ -319,12 +332,39 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<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<ProjectBaseInfoMappe | @@ -411,7 +451,6 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<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)); |