Commit 1b7ae743dd761726c009a22b69711c63a825f692
1 parent
32e5b9d5
feat(order): 新增订单和项目基础信息锁定功能
- 在 OrderCostInfoServiceImpl 和 ProjectBaseInfoServiceImpl 中添加字段锁定逻辑 - 在 OrderBaseInfoVO 和 ProjectBaseInfoVO 中添加 createTime 字段 - 更新 application-test.yml 中的 Redis配置 - 新增 ProjectFieldEditType 枚举类
Showing
6 changed files
with
136 additions
and
35 deletions
src/main/java/com/order/erp/domain/ProjectFieldEditType.java
0 → 100644
1 | +package com.order.erp.domain; | |
2 | + | |
3 | +import com.order.erp.domain.vo.order.BusinessProfitInfoVO; | |
4 | +import lombok.AllArgsConstructor; | |
5 | +import lombok.Getter; | |
6 | +import lombok.NoArgsConstructor; | |
7 | + | |
8 | +/** | |
9 | + * @author zgt | |
10 | + * @project order-erp | |
11 | + * @description | |
12 | + * @date 2025/3/27 | |
13 | + */ | |
14 | +@Getter | |
15 | +@AllArgsConstructor | |
16 | +@NoArgsConstructor | |
17 | +public enum ProjectFieldEditType { | |
18 | + InnerProfitInfo("内部表编辑"), | |
19 | + BusinessProfitInfo("业务利润表编辑"); | |
20 | + private String Text; | |
21 | +} | ... | ... |
src/main/java/com/order/erp/domain/vo/order/OrderBaseInfoVO.java
... | ... | @@ -4,6 +4,7 @@ import lombok.*; |
4 | 4 | import lombok.experimental.SuperBuilder; |
5 | 5 | |
6 | 6 | import java.io.Serializable; |
7 | +import java.time.LocalDateTime; | |
7 | 8 | |
8 | 9 | /** |
9 | 10 | * 订单基础信息表(OrderBaseInfo)实体类 |
... | ... | @@ -26,6 +27,8 @@ public class OrderBaseInfoVO implements Serializable { |
26 | 27 | */ |
27 | 28 | private String invoiceNo; |
28 | 29 | |
30 | + private LocalDateTime createTime; | |
31 | + | |
29 | 32 | /** |
30 | 33 | * 生产科对账单号 如果要在首页添加生产科对账单号列数,就需要在这里加上。 |
31 | 34 | */ | ... | ... |
src/main/java/com/order/erp/domain/vo/order/ProjectBaseInfoVO.java
src/main/java/com/order/erp/service/order/impl/OrderCostInfoServiceImpl.java
... | ... | @@ -34,6 +34,7 @@ import com.order.erp.service.order.OrderFieldLockRecordService; |
34 | 34 | import org.springframework.beans.BeanUtils; |
35 | 35 | import org.springframework.beans.factory.annotation.Autowired; |
36 | 36 | import org.springframework.stereotype.Service; |
37 | +import org.springframework.transaction.annotation.Transactional; | |
37 | 38 | |
38 | 39 | import javax.annotation.Resource; |
39 | 40 | import java.math.BigDecimal; |
... | ... | @@ -65,6 +66,7 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O |
65 | 66 | private SystemSettingService systemSettingService; |
66 | 67 | |
67 | 68 | @Override |
69 | + @Transactional(rollbackFor = Exception.class) | |
68 | 70 | public ServerResult edit(OrderCostInfoVO vo) { |
69 | 71 | Long id = vo.getOrderId(); |
70 | 72 | Optional<OrderCostInfoDO> orderCostInfoDOOpt = this.lambdaQuery() |
... | ... | @@ -78,6 +80,26 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O |
78 | 80 | orderCostInfoDO = orderCostInfoDOOpt.get(); |
79 | 81 | BeanUtil.copyProperties(vo, orderCostInfoDO, CopyOptions.create().ignoreNullValue()); |
80 | 82 | } |
83 | + Optional<OrderCostFieldLockRecord> orderCostFieldLockRecordOpt = orderCostFieldLockRecordService | |
84 | + .lambdaQuery() | |
85 | + .eq(OrderCostFieldLockRecord::getOrderId, id) | |
86 | + .last(" limit 1 ") | |
87 | + .oneOpt(); | |
88 | + OrderCostFieldLockRecord orderCostFieldLockRecord = orderCostFieldLockRecordOpt.orElse( | |
89 | + OrderCostFieldLockRecord.builder() | |
90 | + .orderId(id) | |
91 | + .userId(dataScope.getLoginUserId()) | |
92 | + .build() | |
93 | + ); | |
94 | + OrderCostInfolockFieldVO originOrderCostInfolockFieldVO = JSONObject.parseObject(Optional.ofNullable(orderCostFieldLockRecord.getFields()).orElse("{}"), OrderCostInfolockFieldVO.class); | |
95 | + if(Objects.nonNull(vo.getPacketActualRmbTotalPrice())){ | |
96 | + originOrderCostInfolockFieldVO.setPacketActualRmbTotalPrice(OrderLockFieldEnum.LOCKED.name()); | |
97 | + }else if(Objects.nonNull(vo.getProductionActualPrice())||Objects.nonNull(vo.getProductionDepartmentPredictPrice())) { | |
98 | + originOrderCostInfolockFieldVO.setProductionActualPrice(OrderLockFieldEnum.LOCKED.name()); | |
99 | + originOrderCostInfolockFieldVO.setProductionDepartmentPredictPrice(OrderLockFieldEnum.LOCKED.name()); | |
100 | + } | |
101 | + orderCostFieldLockRecord.setFields(JSONObject.toJSONString(originOrderCostInfolockFieldVO)); | |
102 | + orderCostFieldLockRecordService.saveOrUpdate(orderCostFieldLockRecord); | |
81 | 103 | return ServerResult.success(this.saveOrUpdate(orderCostInfoDO)); |
82 | 104 | } |
83 | 105 | |
... | ... | @@ -137,6 +159,18 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O |
137 | 159 | })); |
138 | 160 | List<InnerProfitDetailVO> innerProfitRatioResultVOs = records.stream().map(record -> { |
139 | 161 | OrderCostInfoVO orderCostInfo = record.getOrderCostInfo(); |
162 | + OrderCostInfolockFieldVO lockFields = Optional.ofNullable(orderId2fieldMapMap.get(record.getId())) | |
163 | + .orElse(new OrderCostInfolockFieldVO() | |
164 | + ); | |
165 | + if(Objects.isNull(lockFields.getPacketActualRmbTotalPrice())){ | |
166 | + lockFields.setPacketActualRmbTotalPrice(Objects.isNull(orderCostInfo) || Objects.isNull(orderCostInfo.getPacketActualRmbTotalPrice()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name()); | |
167 | + } | |
168 | + if(Objects.isNull(lockFields.getProductionActualPrice())){ | |
169 | + lockFields.setProductionActualPrice(Objects.isNull(orderCostInfo) || Objects.isNull(orderCostInfo.getProductionActualPrice()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name()); | |
170 | + } | |
171 | + if(Objects.isNull(lockFields.getProductionDepartmentPredictPrice())){ | |
172 | + lockFields.setProductionDepartmentPredictPrice(Objects.isNull(orderCostInfo) || Objects.isNull(orderCostInfo.getProductionDepartmentPredictPrice()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name()); | |
173 | + } | |
140 | 174 | InnerProfitDetailVO vo = InnerProfitDetailVO.builder() |
141 | 175 | .orderId(record.getId()) |
142 | 176 | .customerCode(record.getCustomerCode()) |
... | ... | @@ -149,14 +183,7 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O |
149 | 183 | .productionDepartmentTotalPrice(Objects.isNull(record.getProfitAnalysisInfo()) ? null : record.getProfitAnalysisInfo().getProductionDepartmentTotalPrice()) |
150 | 184 | .productionDepartmentPredictPrice(Objects.isNull(record.getOrderCostInfo()) ? null : record.getOrderCostInfo().getProductionDepartmentPredictPrice()) |
151 | 185 | .productionActualPrice(Objects.isNull(record.getOrderCostInfo()) ? null : record.getOrderCostInfo().getProductionActualPrice()) |
152 | - .lockFields(Optional.ofNullable(orderId2fieldMapMap.get(record.getId())) | |
153 | - .orElse(OrderCostInfolockFieldVO | |
154 | - .builder() | |
155 | - .packetActualRmbTotalPrice(Objects.isNull(orderCostInfo)||Objects.isNull(orderCostInfo.getPacketActualRmbTotalPrice()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name()) | |
156 | - .productionActualPrice(Objects.isNull(orderCostInfo)||Objects.isNull(orderCostInfo.getProductionActualPrice()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name()) | |
157 | - .productionDepartmentPredictPrice(Objects.isNull(orderCostInfo)||Objects.isNull(orderCostInfo.getProductionDepartmentPredictPrice()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name()) | |
158 | - .build() | |
159 | - )) | |
186 | + .lockFields(lockFields) | |
160 | 187 | .build(); |
161 | 188 | |
162 | 189 | if (Objects.nonNull(vo.getProductionDepartmentPredictPrice()) |
... | ... | @@ -222,8 +249,21 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O |
222 | 249 | } |
223 | 250 | })); |
224 | 251 | BigDecimal exchangeRate = systemSettingService.getExchangeRate(); |
252 | + | |
225 | 253 | List<BusinessProfitDetailVO> innerProfitRatioResultVOs = records.stream().map(record -> { |
226 | 254 | OrderCostInfoVO orderCostInfo = record.getOrderCostInfo(); |
255 | + OrderCostInfolockFieldVO lockFields = Optional.ofNullable(orderId2fieldMapMap.get(record.getId())).orElse( | |
256 | + new OrderCostInfolockFieldVO() | |
257 | + ); | |
258 | + if(Objects.isNull(lockFields.getPacketActualRmbTotalPrice())){ | |
259 | + lockFields.setPacketActualRmbTotalPrice(Objects.isNull(orderCostInfo) || Objects.isNull(orderCostInfo.getPacketActualRmbTotalPrice()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name()); | |
260 | + } | |
261 | + if(Objects.isNull(lockFields.getProductionActualPrice())){ | |
262 | + lockFields.setProductionActualPrice(Objects.isNull(orderCostInfo) || Objects.isNull(orderCostInfo.getProductionActualPrice()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name()); | |
263 | + } | |
264 | + if(Objects.isNull(lockFields.getProductionDepartmentPredictPrice())){ | |
265 | + lockFields.setProductionDepartmentPredictPrice(Objects.isNull(orderCostInfo) || Objects.isNull(orderCostInfo.getProductionDepartmentPredictPrice()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name()); | |
266 | + } | |
227 | 267 | BusinessProfitDetailVO vo = BusinessProfitDetailVO.builder() |
228 | 268 | .orderId(record.getId()) |
229 | 269 | .customerCode(record.getCustomerCode()) |
... | ... | @@ -235,12 +275,7 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O |
235 | 275 | .packetPrice(Objects.isNull(record.getProfitAnalysisInfo()) ? null : record.getProfitAnalysisInfo().getPacketPrice()) |
236 | 276 | .packetTotalPrice(Objects.isNull(record.getProfitAnalysisInfo()) ? null : record.getProfitAnalysisInfo().getPacketTotalPrice()) |
237 | 277 | .packetActualRmbTotalPrice(Objects.isNull(record.getOrderCostInfo()) ? null : record.getOrderCostInfo().getPacketActualRmbTotalPrice()) |
238 | - .lockFields(Optional.ofNullable(orderId2fieldMapMap.get(record.getId())).orElse(OrderCostInfolockFieldVO.builder() | |
239 | - .packetActualRmbTotalPrice(Objects.isNull(orderCostInfo)||Objects.isNull(orderCostInfo.getPacketActualRmbTotalPrice()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name()) | |
240 | - .productionActualPrice(Objects.isNull(orderCostInfo)||Objects.isNull(orderCostInfo.getProductionActualPrice()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name()) | |
241 | - .productionDepartmentPredictPrice(Objects.isNull(orderCostInfo)||Objects.isNull(orderCostInfo.getProductionDepartmentPredictPrice()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name()) | |
242 | - .build() | |
243 | - )) | |
278 | + .lockFields(lockFields) | |
244 | 279 | .build(); |
245 | 280 | if (Objects.nonNull(vo.getPacketTotalPrice())) { |
246 | 281 | //包装费用合计 = 包装费合计*汇率 | ... | ... |
src/main/java/com/order/erp/service/order/impl/ProjectBaseInfoServiceImpl.java
... | ... | @@ -18,6 +18,7 @@ import com.order.erp.config.DataScope; |
18 | 18 | import com.order.erp.domain.ApplyStatusEnum; |
19 | 19 | import com.order.erp.domain.OrderLockFieldEnum; |
20 | 20 | import com.order.erp.domain.ProjectApplyTypeEnum; |
21 | +import com.order.erp.domain.ProjectFieldEditType; | |
21 | 22 | import com.order.erp.domain.dto.BaseDO; |
22 | 23 | import com.order.erp.domain.dto.SystemSettingDO; |
23 | 24 | import com.order.erp.domain.dto.order.OrderBaseInfoDO; |
... | ... | @@ -91,6 +92,41 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe |
91 | 92 | } else { |
92 | 93 | projectBaseInfoDO = BeanUtil.copyProperties(vo, ProjectBaseInfoDO.class); |
93 | 94 | } |
95 | + ProjectFieldLockRecord recordDO = projectionFieldLockRecordService.getOne(new LambdaQueryWrapper<ProjectFieldLockRecord>() | |
96 | + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) | |
97 | + .eq(ProjectFieldLockRecord::getProjectNoPrefix, projectNoPrefix) | |
98 | + .eq(ProjectFieldLockRecord::getUserId, dataScope.getLoginUserId()) | |
99 | + .orderByDesc(ProjectFieldLockRecord::getId) | |
100 | + .last("limit 1")); | |
101 | + if (Objects.isNull(recordDO)) { | |
102 | + recordDO = ProjectFieldLockRecord.builder() | |
103 | + .projectNoPrefix(projectNoPrefix) | |
104 | + .userId(dataScope.getLoginUserId()) | |
105 | + .build(); | |
106 | + } | |
107 | + ProjectBaseInfoLockFieldVO recordLockFieldVO = JSONObject.parseObject(Optional.ofNullable(recordDO.getFields()).orElse("{}"), ProjectBaseInfoLockFieldVO.class); | |
108 | + if (Objects.nonNull(vo.getProjectStartTime())|| | |
109 | + Objects.nonNull(vo.getProjectEndTime())|| | |
110 | + Objects.nonNull(vo.getDevelopmentCopyRmbTotalPrice())|| | |
111 | + Objects.nonNull(vo.getSpainPaidRmbCommission())|| | |
112 | + Objects.nonNull(vo.getPaidRmbCommission())|| | |
113 | + Objects.nonNull(vo.getActualExchangeRate())) { | |
114 | + recordLockFieldVO.setProjectStartTime("LOCKED"); | |
115 | + recordLockFieldVO.setProjectEndTime("LOCKED"); | |
116 | + recordLockFieldVO.setDevelopmentCopyRmbTotalPrice("LOCKED"); | |
117 | + recordLockFieldVO.setSpainPaidRmbCommission("LOCKED"); | |
118 | + recordLockFieldVO.setPaidRmbCommission("LOCKED"); | |
119 | + recordLockFieldVO.setActualExchangeRate("LOCKED"); | |
120 | + } else if (Objects.nonNull(vo.getProjectInnerProfitInfoStartTime()) || Objects.nonNull(vo.getProjectInnerProfitInfoEndTime())) { | |
121 | + recordLockFieldVO.setProjectInnerProfitInfoStartTime("LOCKED"); | |
122 | + recordLockFieldVO.setProjectInnerProfitInfoEndTime("LOCKED"); | |
123 | + } | |
124 | + recordDO.setFields(JSONObject.toJSONString(recordLockFieldVO)); | |
125 | + if (Objects.isNull(recordDO.getId())) { | |
126 | + projectionFieldLockRecordService.save(recordDO); | |
127 | + } else { | |
128 | + projectionFieldLockRecordService.updateById(recordDO); | |
129 | + } | |
94 | 130 | return ServerResult.success(this.saveOrUpdate(projectBaseInfoDO)); |
95 | 131 | } |
96 | 132 | |
... | ... | @@ -98,7 +134,7 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe |
98 | 134 | public ServerResult applyEditFileds(ProjectBaseInfoLockFieldVO vo) { |
99 | 135 | List<ProjectApplyDO> applyDOS = projectFieldLockApplyService.list(new LambdaQueryWrapper<ProjectApplyDO>() |
100 | 136 | .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) |
101 | - .eq(ProjectApplyDO::getType,vo.getType()) | |
137 | + .eq(ProjectApplyDO::getType, vo.getType()) | |
102 | 138 | .eq(ProjectApplyDO::getProjectNoPrefix, vo.getProjectNoPrefix()) |
103 | 139 | .eq(ProjectApplyDO::getApplyUserId, dataScope.getLoginUserId()) |
104 | 140 | .eq(ProjectApplyDO::getStatus, ApplyStatusEnum.WAIT_AUDIT.getStatus())); |
... | ... | @@ -132,7 +168,7 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe |
132 | 168 | public ServerResult pageProjectLockFieldApply(QueryProjectLockFieldVO vo) { |
133 | 169 | Page<ProjectApplyDO> page = projectFieldLockApplyService.lambdaQuery() |
134 | 170 | .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) |
135 | - .eq(Objects.nonNull(vo.getType()),ProjectApplyDO::getType, vo.getType()) | |
171 | + .eq(Objects.nonNull(vo.getType()), ProjectApplyDO::getType, vo.getType()) | |
136 | 172 | .eq(ProjectApplyDO::getStatus, StringUtils.isBlank(vo.getStatus()) ? ApplyStatusEnum.WAIT_AUDIT.getStatus() : vo.getStatus()) |
137 | 173 | .orderByDesc(ProjectApplyDO::getCreateTime) |
138 | 174 | .page(new Page<>(vo.getPage(), vo.getPageSize())); |
... | ... | @@ -168,11 +204,11 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe |
168 | 204 | } |
169 | 205 | ProjectBaseInfoLockFieldVO applyLockFieldVO = JSONObject.parseObject(applyDO.getFields(), ProjectBaseInfoLockFieldVO.class); |
170 | 206 | ProjectBaseInfoLockFieldVO recordLockFieldVO = JSONObject.parseObject(Optional.ofNullable(recordDO.getFields()).orElse("{}"), ProjectBaseInfoLockFieldVO.class); |
171 | - if(ProjectApplyTypeEnum.FIELD_EDIT_APPLY.name().equals(applyDO.getType())){ | |
207 | + if (ProjectApplyTypeEnum.FIELD_EDIT_APPLY.name().equals(applyDO.getType())) { | |
172 | 208 | ProjectBaseInfoLockFieldVO projectBaseInfoLockFieldVO = Optional.ofNullable(recordLockFieldVO).orElse(new ProjectBaseInfoLockFieldVO()); |
173 | - BeanUtil.copyProperties(applyLockFieldVO, projectBaseInfoLockFieldVO, CopyOptions.create().setIgnoreProperties("projectInnerProfitInfoStartTime","projectInnerProfitInfoEndTime").ignoreNullValue()); | |
209 | + BeanUtil.copyProperties(applyLockFieldVO, projectBaseInfoLockFieldVO, CopyOptions.create().setIgnoreProperties("projectInnerProfitInfoStartTime", "projectInnerProfitInfoEndTime").ignoreNullValue()); | |
174 | 210 | recordLockFieldVO = projectBaseInfoLockFieldVO; |
175 | - }else if(ProjectApplyTypeEnum.INNER_PROFIT_FIELD_EDIT_APPLY.name().equals(applyDO.getType())){ | |
211 | + } else if (ProjectApplyTypeEnum.INNER_PROFIT_FIELD_EDIT_APPLY.name().equals(applyDO.getType())) { | |
176 | 212 | recordLockFieldVO.setProjectInnerProfitInfoStartTime(applyLockFieldVO.getProjectInnerProfitInfoStartTime()); |
177 | 213 | recordLockFieldVO.setProjectInnerProfitInfoEndTime(applyLockFieldVO.getProjectInnerProfitInfoEndTime()); |
178 | 214 | } |
... | ... | @@ -245,7 +281,6 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe |
245 | 281 | } |
246 | 282 | |
247 | 283 | |
248 | - | |
249 | 284 | /** |
250 | 285 | * 查询订单列表 |
251 | 286 | */ |
... | ... | @@ -356,15 +391,19 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe |
356 | 391 | return orderBaseInfoDOSGroupByProjectNoPre.entrySet().stream().map(entry -> { |
357 | 392 | ProjectBaseInfoDO projectBaseInfoDO = no2ProjectInfoMap.get(entry.getKey()); |
358 | 393 | List<OrderInfoResultVO> details = entry.getValue(); |
394 | + ProjectBaseInfoLockFieldVO lockFields = Optional.ofNullable(prjectNo2LockRecordMap.get(entry.getKey())).orElse( | |
395 | + new ProjectBaseInfoLockFieldVO()); | |
396 | + if(Objects.isNull(lockFields.getProjectInnerProfitInfoStartTime())){ | |
397 | + lockFields.setProjectInnerProfitInfoStartTime(Objects.isNull(projectBaseInfoDO) || Objects.isNull(projectBaseInfoDO.getProjectInnerProfitInfoStartTime()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name()); | |
398 | + } | |
399 | + if(Objects.isNull(lockFields.getProjectInnerProfitInfoEndTime())){ | |
400 | + lockFields.setProjectInnerProfitInfoEndTime(Objects.isNull(projectBaseInfoDO) || Objects.isNull(projectBaseInfoDO.getProjectInnerProfitInfoEndTime()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name()); | |
401 | + } | |
359 | 402 | InnerProfitInfoVO innerProfitInfoVO = InnerProfitInfoVO.builder() |
360 | 403 | .customerCode(details.get(0).getCustomerCode()) |
361 | 404 | .projectNoPrefix(entry.getKey()) |
362 | 405 | .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())) | |
406 | + .lockFields(lockFields) | |
368 | 407 | .build(); |
369 | 408 | |
370 | 409 | //数量 |
... | ... | @@ -445,7 +484,8 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe |
445 | 484 | |
446 | 485 | //hod时间差 |
447 | 486 | LocalDateTime earliest = Optional.ofNullable(no2ProjectInfoMap.get(entry.getKey())).map(ProjectBaseInfoDO::getProjectInnerProfitInfoStartTime).orElse(null); |
448 | - LocalDateTime latest = Optional.ofNullable(no2ProjectInfoMap.get(entry.getKey())).map(ProjectBaseInfoDO::getProjectInnerProfitInfoEndTime).orElse(null);; | |
487 | + LocalDateTime latest = Optional.ofNullable(no2ProjectInfoMap.get(entry.getKey())).map(ProjectBaseInfoDO::getProjectInnerProfitInfoEndTime).orElse(null); | |
488 | + ; | |
449 | 489 | innerProfitInfoVO.setProduceStartTime(earliest); |
450 | 490 | innerProfitInfoVO.setProduceEndTime(latest); |
451 | 491 | SystemSettingDO systemSettingDO = systemSettingDOSMap.get(innerProfitInfoVO.getCustomerCode()); |
... | ... | @@ -470,16 +510,17 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe |
470 | 510 | && Objects.nonNull(latest)) { |
471 | 511 | Duration duration = Duration.between(earliest, latest); |
472 | 512 | //内部生产固定成本¥ |
473 | - innerProfitInfoVO.setInnerProductionFixedCost(BigDecimal.valueOf((duration.toDays()+1) * Double.parseDouble(fixCostValue))); | |
513 | + innerProfitInfoVO.setInnerProductionFixedCost(BigDecimal.valueOf((duration.toDays() + 1) * Double.parseDouble(fixCostValue))); | |
474 | 514 | } |
475 | 515 | if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(ratioValue) |
476 | 516 | && Objects.nonNull(innerProfitInfoVO.getPredictRatio()) |
477 | 517 | && innerProfitInfoVO.getPredictRatio().compareTo(BigDecimal.valueOf(1.05)) < 0) { |
478 | 518 | //内部生产提成¥ |
519 | + String finalRatioValue = ratioValue; | |
479 | 520 | innerProfitInfoVO.setInnerProductionCommission( |
480 | 521 | details.stream() |
481 | 522 | .map(detail -> BigDecimal.valueOf(detail.getOrderCount()) |
482 | - .multiply(BigDecimal.valueOf(Optional.ofNullable(detail.getProfitAnalysisInfo()).map(OrderProfitAnalysisVO::getCustomerRmbPrice).orElse(0.0)))) | |
523 | + .multiply(BigDecimal.valueOf(Optional.ofNullable(finalRatioValue).map(Double::valueOf).orElse(0.0)))) | |
483 | 524 | .reduce(BigDecimal.ZERO, BigDecimal::add) |
484 | 525 | ); |
485 | 526 | } |
... | ... | @@ -657,8 +698,7 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe |
657 | 698 | |
658 | 699 | //hod时间差 |
659 | 700 | LocalDateTime earliest = details.stream() |
660 | - .map(OrderInfoResultVO::getOrderHodTime) | |
661 | - .map(hodTime -> LocalDateTime.parse(hodTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))) | |
701 | + .map(OrderInfoResultVO::getCreateTime) | |
662 | 702 | .min(Comparator.naturalOrder()) |
663 | 703 | .orElse(null); |
664 | 704 | LocalDateTime latest = details.stream() |
... | ... | @@ -710,7 +750,7 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe |
710 | 750 | } |
711 | 751 | } |
712 | 752 | //固定成本 |
713 | - businessProfitInfoVO.setFixedCost(BigDecimal.valueOf((between+1) * Double.parseDouble(fixCostValue)).setScale(2, RoundingMode.HALF_UP)); | |
753 | + businessProfitInfoVO.setFixedCost(BigDecimal.valueOf((between + 1) * Double.parseDouble(fixCostValue)).setScale(2, RoundingMode.HALF_UP)); | |
714 | 754 | if (Objects.nonNull(spainRatio) |
715 | 755 | && Objects.nonNull(businessProfitInfoVO.getCustomerRmbTotalPrice())) { |
716 | 756 | //西班牙提成 |
... | ... | @@ -944,7 +984,7 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe |
944 | 984 | String projectStartTime = Optional.ofNullable(vo.getProduceStartTime()).map(dateTimeFormatter::format).orElse("-"); |
945 | 985 | String projectEndTime = Optional.ofNullable(vo.getProduceEndTime()).map(dateTimeFormatter::format).orElse("-"); |
946 | 986 | String duration = (vo.getProduceStartTime() != null && vo.getProduceEndTime() != null) |
947 | - ? String.valueOf(Duration.between(vo.getProduceStartTime(), vo.getProduceEndTime()).toDays()+1) | |
987 | + ? String.valueOf(Duration.between(vo.getProduceStartTime(), vo.getProduceEndTime()).toDays() + 1) | |
948 | 988 | : "-"; |
949 | 989 | createMergedRow(sheet, cellStyle, 6, 7, 0, 1, ""); |
950 | 990 | createMergedRow(sheet, cellStyle, 6, 7, 2, 3, "生产起止时间"); |
... | ... | @@ -978,7 +1018,7 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe |
978 | 1018 | |
979 | 1019 | // 第六部分:毛利润 |
980 | 1020 | createMergedRow(sheet, cellStyle, 16, 17, 0, 3, "内部生产毛利润"); |
981 | - createMergedRow(sheet, cellStyle, 16, 17, 4, 5, "¥" + Optional.ofNullable(vo.getBeforeGrossProfit()).orElse(BigDecimal.ZERO)); | |
1021 | + createMergedRow(sheet, cellStyle, 16, 17, 4, 5, "¥" + Optional.ofNullable(vo.getGrossProfit()).orElse(BigDecimal.ZERO)); | |
982 | 1022 | createMergedRow(sheet, cellStyle, 16, 16, 6, 7, "事前毛利润"); |
983 | 1023 | createMergedRow(sheet, cellStyle, 16, 16, 8, 9, "事前毛利率"); |
984 | 1024 | createMergedRow(sheet, cellStyle, 17, 17, 6, 7, Optional.ofNullable(vo.getBeforeGrossProfit()).orElse(BigDecimal.ZERO).toString()); | ... | ... |
src/main/resources/application-test.yml
... | ... | @@ -63,7 +63,7 @@ spring: |
63 | 63 | username: root |
64 | 64 | redis: |
65 | 65 | database: 0 |
66 | - host: 47.104.8.35 | |
66 | + host: 39.108.227.113 | |
67 | 67 | lettuce: |
68 | 68 | pool: |
69 | 69 | max-active: 2000 |
... | ... | @@ -72,7 +72,7 @@ spring: |
72 | 72 | min-idle: 3 |
73 | 73 | time-between-eviction-runs: 100 |
74 | 74 | password: '' |
75 | - port: 6380 | |
75 | + port: 6379 | |
76 | 76 | timeout: 2000 |
77 | 77 | mail: |
78 | 78 | # 配置 SMTP 服务器地址 | ... | ... |