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,6 +4,7 @@ import lombok.*; | ||
4 | import lombok.experimental.SuperBuilder; | 4 | import lombok.experimental.SuperBuilder; |
5 | 5 | ||
6 | import java.io.Serializable; | 6 | import java.io.Serializable; |
7 | +import java.time.LocalDateTime; | ||
7 | 8 | ||
8 | /** | 9 | /** |
9 | * 订单基础信息表(OrderBaseInfo)实体类 | 10 | * 订单基础信息表(OrderBaseInfo)实体类 |
@@ -26,6 +27,8 @@ public class OrderBaseInfoVO implements Serializable { | @@ -26,6 +27,8 @@ public class OrderBaseInfoVO implements Serializable { | ||
26 | */ | 27 | */ |
27 | private String invoiceNo; | 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,6 +34,7 @@ import com.order.erp.service.order.OrderFieldLockRecordService; | ||
34 | import org.springframework.beans.BeanUtils; | 34 | import org.springframework.beans.BeanUtils; |
35 | import org.springframework.beans.factory.annotation.Autowired; | 35 | import org.springframework.beans.factory.annotation.Autowired; |
36 | import org.springframework.stereotype.Service; | 36 | import org.springframework.stereotype.Service; |
37 | +import org.springframework.transaction.annotation.Transactional; | ||
37 | 38 | ||
38 | import javax.annotation.Resource; | 39 | import javax.annotation.Resource; |
39 | import java.math.BigDecimal; | 40 | import java.math.BigDecimal; |
@@ -65,6 +66,7 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | @@ -65,6 +66,7 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | ||
65 | private SystemSettingService systemSettingService; | 66 | private SystemSettingService systemSettingService; |
66 | 67 | ||
67 | @Override | 68 | @Override |
69 | + @Transactional(rollbackFor = Exception.class) | ||
68 | public ServerResult edit(OrderCostInfoVO vo) { | 70 | public ServerResult edit(OrderCostInfoVO vo) { |
69 | Long id = vo.getOrderId(); | 71 | Long id = vo.getOrderId(); |
70 | Optional<OrderCostInfoDO> orderCostInfoDOOpt = this.lambdaQuery() | 72 | Optional<OrderCostInfoDO> orderCostInfoDOOpt = this.lambdaQuery() |
@@ -78,6 +80,26 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | @@ -78,6 +80,26 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | ||
78 | orderCostInfoDO = orderCostInfoDOOpt.get(); | 80 | orderCostInfoDO = orderCostInfoDOOpt.get(); |
79 | BeanUtil.copyProperties(vo, orderCostInfoDO, CopyOptions.create().ignoreNullValue()); | 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 | return ServerResult.success(this.saveOrUpdate(orderCostInfoDO)); | 103 | return ServerResult.success(this.saveOrUpdate(orderCostInfoDO)); |
82 | } | 104 | } |
83 | 105 | ||
@@ -137,6 +159,18 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | @@ -137,6 +159,18 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | ||
137 | })); | 159 | })); |
138 | List<InnerProfitDetailVO> innerProfitRatioResultVOs = records.stream().map(record -> { | 160 | List<InnerProfitDetailVO> innerProfitRatioResultVOs = records.stream().map(record -> { |
139 | OrderCostInfoVO orderCostInfo = record.getOrderCostInfo(); | 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 | InnerProfitDetailVO vo = InnerProfitDetailVO.builder() | 174 | InnerProfitDetailVO vo = InnerProfitDetailVO.builder() |
141 | .orderId(record.getId()) | 175 | .orderId(record.getId()) |
142 | .customerCode(record.getCustomerCode()) | 176 | .customerCode(record.getCustomerCode()) |
@@ -149,14 +183,7 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | @@ -149,14 +183,7 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | ||
149 | .productionDepartmentTotalPrice(Objects.isNull(record.getProfitAnalysisInfo()) ? null : record.getProfitAnalysisInfo().getProductionDepartmentTotalPrice()) | 183 | .productionDepartmentTotalPrice(Objects.isNull(record.getProfitAnalysisInfo()) ? null : record.getProfitAnalysisInfo().getProductionDepartmentTotalPrice()) |
150 | .productionDepartmentPredictPrice(Objects.isNull(record.getOrderCostInfo()) ? null : record.getOrderCostInfo().getProductionDepartmentPredictPrice()) | 184 | .productionDepartmentPredictPrice(Objects.isNull(record.getOrderCostInfo()) ? null : record.getOrderCostInfo().getProductionDepartmentPredictPrice()) |
151 | .productionActualPrice(Objects.isNull(record.getOrderCostInfo()) ? null : record.getOrderCostInfo().getProductionActualPrice()) | 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 | .build(); | 187 | .build(); |
161 | 188 | ||
162 | if (Objects.nonNull(vo.getProductionDepartmentPredictPrice()) | 189 | if (Objects.nonNull(vo.getProductionDepartmentPredictPrice()) |
@@ -222,8 +249,21 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | @@ -222,8 +249,21 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | ||
222 | } | 249 | } |
223 | })); | 250 | })); |
224 | BigDecimal exchangeRate = systemSettingService.getExchangeRate(); | 251 | BigDecimal exchangeRate = systemSettingService.getExchangeRate(); |
252 | + | ||
225 | List<BusinessProfitDetailVO> innerProfitRatioResultVOs = records.stream().map(record -> { | 253 | List<BusinessProfitDetailVO> innerProfitRatioResultVOs = records.stream().map(record -> { |
226 | OrderCostInfoVO orderCostInfo = record.getOrderCostInfo(); | 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 | BusinessProfitDetailVO vo = BusinessProfitDetailVO.builder() | 267 | BusinessProfitDetailVO vo = BusinessProfitDetailVO.builder() |
228 | .orderId(record.getId()) | 268 | .orderId(record.getId()) |
229 | .customerCode(record.getCustomerCode()) | 269 | .customerCode(record.getCustomerCode()) |
@@ -235,12 +275,7 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | @@ -235,12 +275,7 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | ||
235 | .packetPrice(Objects.isNull(record.getProfitAnalysisInfo()) ? null : record.getProfitAnalysisInfo().getPacketPrice()) | 275 | .packetPrice(Objects.isNull(record.getProfitAnalysisInfo()) ? null : record.getProfitAnalysisInfo().getPacketPrice()) |
236 | .packetTotalPrice(Objects.isNull(record.getProfitAnalysisInfo()) ? null : record.getProfitAnalysisInfo().getPacketTotalPrice()) | 276 | .packetTotalPrice(Objects.isNull(record.getProfitAnalysisInfo()) ? null : record.getProfitAnalysisInfo().getPacketTotalPrice()) |
237 | .packetActualRmbTotalPrice(Objects.isNull(record.getOrderCostInfo()) ? null : record.getOrderCostInfo().getPacketActualRmbTotalPrice()) | 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 | .build(); | 279 | .build(); |
245 | if (Objects.nonNull(vo.getPacketTotalPrice())) { | 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,6 +18,7 @@ import com.order.erp.config.DataScope; | ||
18 | import com.order.erp.domain.ApplyStatusEnum; | 18 | import com.order.erp.domain.ApplyStatusEnum; |
19 | import com.order.erp.domain.OrderLockFieldEnum; | 19 | import com.order.erp.domain.OrderLockFieldEnum; |
20 | import com.order.erp.domain.ProjectApplyTypeEnum; | 20 | import com.order.erp.domain.ProjectApplyTypeEnum; |
21 | +import com.order.erp.domain.ProjectFieldEditType; | ||
21 | import com.order.erp.domain.dto.BaseDO; | 22 | import com.order.erp.domain.dto.BaseDO; |
22 | import com.order.erp.domain.dto.SystemSettingDO; | 23 | import com.order.erp.domain.dto.SystemSettingDO; |
23 | import com.order.erp.domain.dto.order.OrderBaseInfoDO; | 24 | import com.order.erp.domain.dto.order.OrderBaseInfoDO; |
@@ -91,6 +92,41 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | @@ -91,6 +92,41 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | ||
91 | } else { | 92 | } else { |
92 | projectBaseInfoDO = BeanUtil.copyProperties(vo, ProjectBaseInfoDO.class); | 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 | return ServerResult.success(this.saveOrUpdate(projectBaseInfoDO)); | 130 | return ServerResult.success(this.saveOrUpdate(projectBaseInfoDO)); |
95 | } | 131 | } |
96 | 132 | ||
@@ -98,7 +134,7 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | @@ -98,7 +134,7 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | ||
98 | public ServerResult applyEditFileds(ProjectBaseInfoLockFieldVO vo) { | 134 | public ServerResult applyEditFileds(ProjectBaseInfoLockFieldVO vo) { |
99 | List<ProjectApplyDO> applyDOS = projectFieldLockApplyService.list(new LambdaQueryWrapper<ProjectApplyDO>() | 135 | List<ProjectApplyDO> applyDOS = projectFieldLockApplyService.list(new LambdaQueryWrapper<ProjectApplyDO>() |
100 | .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) | 136 | .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) |
101 | - .eq(ProjectApplyDO::getType,vo.getType()) | 137 | + .eq(ProjectApplyDO::getType, vo.getType()) |
102 | .eq(ProjectApplyDO::getProjectNoPrefix, vo.getProjectNoPrefix()) | 138 | .eq(ProjectApplyDO::getProjectNoPrefix, vo.getProjectNoPrefix()) |
103 | .eq(ProjectApplyDO::getApplyUserId, dataScope.getLoginUserId()) | 139 | .eq(ProjectApplyDO::getApplyUserId, dataScope.getLoginUserId()) |
104 | .eq(ProjectApplyDO::getStatus, ApplyStatusEnum.WAIT_AUDIT.getStatus())); | 140 | .eq(ProjectApplyDO::getStatus, ApplyStatusEnum.WAIT_AUDIT.getStatus())); |
@@ -132,7 +168,7 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | @@ -132,7 +168,7 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | ||
132 | public ServerResult pageProjectLockFieldApply(QueryProjectLockFieldVO vo) { | 168 | public ServerResult pageProjectLockFieldApply(QueryProjectLockFieldVO vo) { |
133 | Page<ProjectApplyDO> page = projectFieldLockApplyService.lambdaQuery() | 169 | Page<ProjectApplyDO> page = projectFieldLockApplyService.lambdaQuery() |
134 | .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) | 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 | .eq(ProjectApplyDO::getStatus, StringUtils.isBlank(vo.getStatus()) ? ApplyStatusEnum.WAIT_AUDIT.getStatus() : vo.getStatus()) | 172 | .eq(ProjectApplyDO::getStatus, StringUtils.isBlank(vo.getStatus()) ? ApplyStatusEnum.WAIT_AUDIT.getStatus() : vo.getStatus()) |
137 | .orderByDesc(ProjectApplyDO::getCreateTime) | 173 | .orderByDesc(ProjectApplyDO::getCreateTime) |
138 | .page(new Page<>(vo.getPage(), vo.getPageSize())); | 174 | .page(new Page<>(vo.getPage(), vo.getPageSize())); |
@@ -168,11 +204,11 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | @@ -168,11 +204,11 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | ||
168 | } | 204 | } |
169 | ProjectBaseInfoLockFieldVO applyLockFieldVO = JSONObject.parseObject(applyDO.getFields(), ProjectBaseInfoLockFieldVO.class); | 205 | ProjectBaseInfoLockFieldVO applyLockFieldVO = JSONObject.parseObject(applyDO.getFields(), ProjectBaseInfoLockFieldVO.class); |
170 | ProjectBaseInfoLockFieldVO recordLockFieldVO = JSONObject.parseObject(Optional.ofNullable(recordDO.getFields()).orElse("{}"), ProjectBaseInfoLockFieldVO.class); | 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 | ProjectBaseInfoLockFieldVO projectBaseInfoLockFieldVO = Optional.ofNullable(recordLockFieldVO).orElse(new ProjectBaseInfoLockFieldVO()); | 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 | recordLockFieldVO = projectBaseInfoLockFieldVO; | 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 | recordLockFieldVO.setProjectInnerProfitInfoStartTime(applyLockFieldVO.getProjectInnerProfitInfoStartTime()); | 212 | recordLockFieldVO.setProjectInnerProfitInfoStartTime(applyLockFieldVO.getProjectInnerProfitInfoStartTime()); |
177 | recordLockFieldVO.setProjectInnerProfitInfoEndTime(applyLockFieldVO.getProjectInnerProfitInfoEndTime()); | 213 | recordLockFieldVO.setProjectInnerProfitInfoEndTime(applyLockFieldVO.getProjectInnerProfitInfoEndTime()); |
178 | } | 214 | } |
@@ -245,7 +281,6 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | @@ -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,15 +391,19 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | ||
356 | return orderBaseInfoDOSGroupByProjectNoPre.entrySet().stream().map(entry -> { | 391 | return orderBaseInfoDOSGroupByProjectNoPre.entrySet().stream().map(entry -> { |
357 | ProjectBaseInfoDO projectBaseInfoDO = no2ProjectInfoMap.get(entry.getKey()); | 392 | ProjectBaseInfoDO projectBaseInfoDO = no2ProjectInfoMap.get(entry.getKey()); |
358 | List<OrderInfoResultVO> details = entry.getValue(); | 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 | InnerProfitInfoVO innerProfitInfoVO = InnerProfitInfoVO.builder() | 402 | InnerProfitInfoVO innerProfitInfoVO = InnerProfitInfoVO.builder() |
360 | .customerCode(details.get(0).getCustomerCode()) | 403 | .customerCode(details.get(0).getCustomerCode()) |
361 | .projectNoPrefix(entry.getKey()) | 404 | .projectNoPrefix(entry.getKey()) |
362 | .productionDepartment(details.get(0).getProductionDepartment()) | 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 | .build(); | 407 | .build(); |
369 | 408 | ||
370 | //数量 | 409 | //数量 |
@@ -445,7 +484,8 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | @@ -445,7 +484,8 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | ||
445 | 484 | ||
446 | //hod时间差 | 485 | //hod时间差 |
447 | LocalDateTime earliest = Optional.ofNullable(no2ProjectInfoMap.get(entry.getKey())).map(ProjectBaseInfoDO::getProjectInnerProfitInfoStartTime).orElse(null); | 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 | innerProfitInfoVO.setProduceStartTime(earliest); | 489 | innerProfitInfoVO.setProduceStartTime(earliest); |
450 | innerProfitInfoVO.setProduceEndTime(latest); | 490 | innerProfitInfoVO.setProduceEndTime(latest); |
451 | SystemSettingDO systemSettingDO = systemSettingDOSMap.get(innerProfitInfoVO.getCustomerCode()); | 491 | SystemSettingDO systemSettingDO = systemSettingDOSMap.get(innerProfitInfoVO.getCustomerCode()); |
@@ -470,16 +510,17 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | @@ -470,16 +510,17 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | ||
470 | && Objects.nonNull(latest)) { | 510 | && Objects.nonNull(latest)) { |
471 | Duration duration = Duration.between(earliest, latest); | 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 | if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(ratioValue) | 515 | if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(ratioValue) |
476 | && Objects.nonNull(innerProfitInfoVO.getPredictRatio()) | 516 | && Objects.nonNull(innerProfitInfoVO.getPredictRatio()) |
477 | && innerProfitInfoVO.getPredictRatio().compareTo(BigDecimal.valueOf(1.05)) < 0) { | 517 | && innerProfitInfoVO.getPredictRatio().compareTo(BigDecimal.valueOf(1.05)) < 0) { |
478 | //内部生产提成¥ | 518 | //内部生产提成¥ |
519 | + String finalRatioValue = ratioValue; | ||
479 | innerProfitInfoVO.setInnerProductionCommission( | 520 | innerProfitInfoVO.setInnerProductionCommission( |
480 | details.stream() | 521 | details.stream() |
481 | .map(detail -> BigDecimal.valueOf(detail.getOrderCount()) | 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 | .reduce(BigDecimal.ZERO, BigDecimal::add) | 524 | .reduce(BigDecimal.ZERO, BigDecimal::add) |
484 | ); | 525 | ); |
485 | } | 526 | } |
@@ -657,8 +698,7 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | @@ -657,8 +698,7 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | ||
657 | 698 | ||
658 | //hod时间差 | 699 | //hod时间差 |
659 | LocalDateTime earliest = details.stream() | 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 | .min(Comparator.naturalOrder()) | 702 | .min(Comparator.naturalOrder()) |
663 | .orElse(null); | 703 | .orElse(null); |
664 | LocalDateTime latest = details.stream() | 704 | LocalDateTime latest = details.stream() |
@@ -710,7 +750,7 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | @@ -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 | if (Objects.nonNull(spainRatio) | 754 | if (Objects.nonNull(spainRatio) |
715 | && Objects.nonNull(businessProfitInfoVO.getCustomerRmbTotalPrice())) { | 755 | && Objects.nonNull(businessProfitInfoVO.getCustomerRmbTotalPrice())) { |
716 | //西班牙提成 | 756 | //西班牙提成 |
@@ -944,7 +984,7 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | @@ -944,7 +984,7 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | ||
944 | String projectStartTime = Optional.ofNullable(vo.getProduceStartTime()).map(dateTimeFormatter::format).orElse("-"); | 984 | String projectStartTime = Optional.ofNullable(vo.getProduceStartTime()).map(dateTimeFormatter::format).orElse("-"); |
945 | String projectEndTime = Optional.ofNullable(vo.getProduceEndTime()).map(dateTimeFormatter::format).orElse("-"); | 985 | String projectEndTime = Optional.ofNullable(vo.getProduceEndTime()).map(dateTimeFormatter::format).orElse("-"); |
946 | String duration = (vo.getProduceStartTime() != null && vo.getProduceEndTime() != null) | 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 | createMergedRow(sheet, cellStyle, 6, 7, 0, 1, ""); | 989 | createMergedRow(sheet, cellStyle, 6, 7, 0, 1, ""); |
950 | createMergedRow(sheet, cellStyle, 6, 7, 2, 3, "生产起止时间"); | 990 | createMergedRow(sheet, cellStyle, 6, 7, 2, 3, "生产起止时间"); |
@@ -978,7 +1018,7 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | @@ -978,7 +1018,7 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | ||
978 | 1018 | ||
979 | // 第六部分:毛利润 | 1019 | // 第六部分:毛利润 |
980 | createMergedRow(sheet, cellStyle, 16, 17, 0, 3, "内部生产毛利润"); | 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 | createMergedRow(sheet, cellStyle, 16, 16, 6, 7, "事前毛利润"); | 1022 | createMergedRow(sheet, cellStyle, 16, 16, 6, 7, "事前毛利润"); |
983 | createMergedRow(sheet, cellStyle, 16, 16, 8, 9, "事前毛利率"); | 1023 | createMergedRow(sheet, cellStyle, 16, 16, 8, 9, "事前毛利率"); |
984 | createMergedRow(sheet, cellStyle, 17, 17, 6, 7, Optional.ofNullable(vo.getBeforeGrossProfit()).orElse(BigDecimal.ZERO).toString()); | 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,7 +63,7 @@ spring: | ||
63 | username: root | 63 | username: root |
64 | redis: | 64 | redis: |
65 | database: 0 | 65 | database: 0 |
66 | - host: 47.104.8.35 | 66 | + host: 39.108.227.113 |
67 | lettuce: | 67 | lettuce: |
68 | pool: | 68 | pool: |
69 | max-active: 2000 | 69 | max-active: 2000 |
@@ -72,7 +72,7 @@ spring: | @@ -72,7 +72,7 @@ spring: | ||
72 | min-idle: 3 | 72 | min-idle: 3 |
73 | time-between-eviction-runs: 100 | 73 | time-between-eviction-runs: 100 |
74 | password: '' | 74 | password: '' |
75 | - port: 6380 | 75 | + port: 6379 |
76 | timeout: 2000 | 76 | timeout: 2000 |
77 | mail: | 77 | mail: |
78 | # 配置 SMTP 服务器地址 | 78 | # 配置 SMTP 服务器地址 |