Commit 60b81195047f6aef99f4318ef46795f585dd6e5a

Authored by 曾国涛
1 parent 10fec827

feat(order): 增加申请编辑字段的备注功能

- 在 OrderCostInfolockFieldVO 和 ProjectBaseInfoLockFieldVO 中添加 applyRemark 字段
- 在 OrderCostInfoServiceImpl 和 ProjectBaseInfoServiceImpl 中处理申请备注
- 优化逻辑 ProjectBaseInfoServiceImpl 中的字段锁定
src/main/java/com/order/erp/controller/OrderCostController.java
... ... @@ -53,7 +53,7 @@ public class OrderCostController {
53 53  
54 54 @PostMapping("/applyEditFileds")
55 55 @ApiOperation("申请编辑字段")
56   - public ServerResult applyEditFileds(OrderCostInfolockFieldVO vo) throws Exception {
  56 + public ServerResult applyEditFileds(@RequestBody OrderCostInfolockFieldVO vo) throws Exception {
57 57 return orderCostInfoService.applyEditFileds(vo);
58 58 }
59 59  
... ...
src/main/java/com/order/erp/domain/vo/order/OrderCostInfolockFieldVO.java
... ... @@ -41,5 +41,5 @@ public class OrderCostInfolockFieldVO implements Serializable {
41 41  
42 42 private String packetActualRmbTotalPrice;
43 43  
44   -
  44 + private String applyRemark;
45 45 }
... ...
src/main/java/com/order/erp/domain/vo/order/ProjectBaseInfoLockFieldVO.java
... ... @@ -38,6 +38,8 @@ public class ProjectBaseInfoLockFieldVO implements Serializable {
38 38  
39 39 private String projectNoPrefix;
40 40  
  41 + private String applyRemark;
  42 +
41 43 private String developmentCopyRmbTotalPrice;
42 44  
43 45 private String projectStartTime;
... ...
src/main/java/com/order/erp/service/order/impl/OrderCostInfoServiceImpl.java
... ... @@ -100,6 +100,7 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O
100 100 OrderFieldLockApplyDO build = OrderFieldLockApplyDO.builder()
101 101 .orderId(vo.getOrderId())
102 102 .applyUserId(dataScope.getLoginUserId())
  103 + .applyRemark(vo.getApplyRemark())
103 104 .fields(JSONObject.toJSONString(lockField))
104 105 .status(ApplyStatusEnum.WAIT_AUDIT.getStatus())
105 106 .type(vo.getType())
... ...
src/main/java/com/order/erp/service/order/impl/ProjectBaseInfoServiceImpl.java
... ... @@ -56,7 +56,7 @@ import java.util.stream.Collectors;
56 56  
57 57 /**
58 58 * <p>
59   - * 服务实现类
  59 + * 服务实现类
60 60 * </p>
61 61 *
62 62 * @author author
... ... @@ -87,12 +87,13 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl&lt;ProjectBaseInfoMappe
87 87 ProjectBaseInfoDO projectBaseInfoDO = null;
88 88 if (projectBaseInfoDOOpt.isPresent()) {
89 89 projectBaseInfoDO = projectBaseInfoDOOpt.get();
90   - BeanUtil.copyProperties(vo, projectBaseInfoDO,"id");
91   - }else {
  90 + BeanUtil.copyProperties(vo, projectBaseInfoDO, "id");
  91 + } else {
92 92 projectBaseInfoDO = BeanUtil.copyProperties(vo, ProjectBaseInfoDO.class);
93 93 }
94 94 return ServerResult.success(this.saveOrUpdate(projectBaseInfoDO));
95 95 }
  96 +
96 97 @Override
97 98 public ServerResult applyEditFileds(ProjectBaseInfoLockFieldVO vo) {
98 99 List<ProjectApplyDO> applyDOS = projectFieldLockApplyService.list(new LambdaQueryWrapper<ProjectApplyDO>()
... ... @@ -103,12 +104,19 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl&lt;ProjectBaseInfoMappe
103 104 if (CollectionUtils.isNotEmpty(applyDOS)) {
104 105 throw new BusinessException(ServerResultCode.APPLY_UNLOCK_FIELD_EXIST);
105 106 }
106   - String projectNoPrefix = vo.getProjectNoPrefix();
107   - vo.setProjectNoPrefix(null);
  107 + ProjectBaseInfoLockFieldVO projectBaseInfoLockFieldVO = ProjectBaseInfoLockFieldVO.builder()
  108 + .developmentCopyRmbTotalPrice(vo.getDevelopmentCopyRmbTotalPrice())
  109 + .projectStartTime(vo.getProjectStartTime())
  110 + .projectEndTime(vo.getProjectEndTime())
  111 + .spainPaidRmbCommission(vo.getSpainPaidRmbCommission())
  112 + .paidRmbCommission(vo.getPaidRmbCommission())
  113 + .actualExchangeRate(vo.getActualExchangeRate())
  114 + .build();
108 115 ProjectApplyDO build = ProjectApplyDO.builder()
109   - .projectNoPrefix(projectNoPrefix)
  116 + .projectNoPrefix(vo.getProjectNoPrefix())
110 117 .applyUserId(dataScope.getLoginUserId())
111   - .fields(JSONObject.toJSONString(vo))
  118 + .applyRemark(vo.getApplyRemark())
  119 + .fields(JSONObject.toJSONString(projectBaseInfoLockFieldVO))
112 120 .type(ProjectApplyTypeEnum.FIELD_EDIT_APPLY)
113 121 .status(ApplyStatusEnum.WAIT_AUDIT.getStatus())
114 122 .build();
... ... @@ -117,18 +125,16 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl&lt;ProjectBaseInfoMappe
117 125 }
118 126  
119 127  
120   -
121   -
122 128 @Override
123 129 public ServerResult pageProjectLockFieldApply(QueryProjectLockFieldVO vo) {
124 130 Page<ProjectApplyDO> page = projectFieldLockApplyService.lambdaQuery()
125 131 .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
126 132 .eq(ProjectApplyDO::getType, ProjectApplyTypeEnum.FIELD_EDIT_APPLY.getType())
127   - .eq(ProjectApplyDO::getStatus, StringUtils.isNotBlank(vo.getStatus())? ApplyStatusEnum.WAIT_AUDIT.getStatus():vo.getStatus())
  133 + .eq(ProjectApplyDO::getStatus, StringUtils.isBlank(vo.getStatus()) ? ApplyStatusEnum.WAIT_AUDIT.getStatus() : vo.getStatus())
128 134 .orderByDesc(ProjectApplyDO::getCreateTime)
129 135 .page(new Page<>(vo.getPage(), vo.getPageSize()));
130 136 List<ProjectApplyDO> records = page.getRecords();
131   - if(CollectionUtils.isEmpty(records)){
  137 + if (CollectionUtils.isEmpty(records)) {
132 138 return buildPageResult(page, Collections.emptyList());
133 139 }
134 140 List<ProjectApplyVO> collect = records.stream().map(e -> {
... ... @@ -142,28 +148,28 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl&lt;ProjectBaseInfoMappe
142 148 public ServerResult audit(AuditVO vo) {
143 149 ProjectApplyDO applyDO = projectFieldLockApplyService.getById(vo.getId());
144 150 applyDO.setAuditUserId(dataScope.getLoginUserId());
145   -
146   - if(ApplyStatusEnum.AUDIT_PASS.getStatus().equals(vo.getStatus())){
147   - applyDO.setStatus(ApplyStatusEnum.AUDIT_PASS.getStatus());
148   - ProjectFieldLockRecord recordDO = projectionFieldLockRecordService.getOne(new LambdaQueryWrapper<ProjectFieldLockRecord>()
149   - .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
150   - .eq(ProjectFieldLockRecord::getProjectNoPrefix, applyDO.getProjectNoPrefix())
151   - .eq(ProjectFieldLockRecord::getUserId, applyDO.getApplyUserId())
152   - .orderByDesc(ProjectFieldLockRecord::getId)
153   - .last("limit 1"));
154   - if (Objects.isNull(recordDO)) {
155   - recordDO = ProjectFieldLockRecord.builder()
156   - .projectNoPrefix(applyDO.getProjectNoPrefix())
157   - .userId(applyDO.getApplyUserId())
158   - .build();
159   - }
160   - recordDO.setFields(applyDO.getFields());
161   - if (Objects.isNull(recordDO.getId())) {
162   - projectionFieldLockRecordService.save(recordDO);
163   - } else {
164   - projectionFieldLockRecordService.updateById(recordDO);
165   - }
166   - }
  151 + applyDO.setAuditRemark(vo.getRefuseRemark());
  152 + if (ApplyStatusEnum.AUDIT_PASS.getStatus().equals(vo.getStatus())) {
  153 + applyDO.setStatus(ApplyStatusEnum.AUDIT_PASS.getStatus());
  154 + ProjectFieldLockRecord recordDO = projectionFieldLockRecordService.getOne(new LambdaQueryWrapper<ProjectFieldLockRecord>()
  155 + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  156 + .eq(ProjectFieldLockRecord::getProjectNoPrefix, applyDO.getProjectNoPrefix())
  157 + .eq(ProjectFieldLockRecord::getUserId, applyDO.getApplyUserId())
  158 + .orderByDesc(ProjectFieldLockRecord::getId)
  159 + .last("limit 1"));
  160 + if (Objects.isNull(recordDO)) {
  161 + recordDO = ProjectFieldLockRecord.builder()
  162 + .projectNoPrefix(applyDO.getProjectNoPrefix())
  163 + .userId(applyDO.getApplyUserId())
  164 + .build();
  165 + }
  166 + recordDO.setFields(applyDO.getFields());
  167 + if (Objects.isNull(recordDO.getId())) {
  168 + projectionFieldLockRecordService.save(recordDO);
  169 + } else {
  170 + projectionFieldLockRecordService.updateById(recordDO);
  171 + }
  172 + }
167 173 projectFieldLockApplyService.updateById(applyDO);
168 174 return ServerResult.success();
169 175 }
... ... @@ -215,15 +221,14 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl&lt;ProjectBaseInfoMappe
215 221 .collect(Collectors.toList());
216 222  
217 223 List<OrderBaseInfoDO> orderBaseInfoDOS = orderBaseInfoService.list(orderBaseInfoService.buildQueryByParam(queryVO)
218   - .and(CollUtil.isNotEmpty(projectNoPrefix),query -> {
  224 + .and(CollUtil.isNotEmpty(projectNoPrefix), query -> {
219 225 for (int i = 0; i < projectNoPrefix.size(); i++) {
220 226 query.likeRight(OrderBaseInfoDO::getProjectNo, projectNoPrefix.get(i));
221 227 if (i != projectNoPrefix.size() - 1) {
222 228 query.or();
223 229 }
224 230 }
225   - }))
226   - ;
  231 + }));
227 232  
228 233 return orderBaseInfoService.wrapperOrderResultList(true, orderBaseInfoDOS);
229 234 }
... ... @@ -239,7 +244,7 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl&lt;ProjectBaseInfoMappe
239 244 }
240 245  
241 246 private List<InnerProfitInfoVO> buildInnerProfitInfos(List<OrderInfoResultVO> orderInfoResultVOS) {
242   - if(CollUtil.isEmpty(orderInfoResultVOS)){
  247 + if (CollUtil.isEmpty(orderInfoResultVOS)) {
243 248 return Collections.emptyList();
244 249 }
245 250 Map<String, List<OrderInfoResultVO>> orderBaseInfoDOSGroupByProjectNoPre = orderInfoResultVOS.stream()
... ... @@ -437,16 +442,16 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl&lt;ProjectBaseInfoMappe
437 442 List<ProjectFieldLockRecord> lockRecords = projectionFieldLockRecordService
438 443 .lambdaQuery()
439 444 .func(query -> {
440   - Set<String> projectNoPrefixs = list.stream().map(ProjectBaseInfoDO::getProjectNoPrefix).collect(Collectors.toSet());
441   - if(CollUtil.isNotEmpty(projectNoPrefixs)){
442   - query.in(ProjectFieldLockRecord::getProjectNoPrefix,projectNoPrefixs);
  445 + Set<String> projectNoPrefixs = list.stream().map(ProjectBaseInfoDO::getProjectNoPrefix).collect(Collectors.toSet());
  446 + if (CollUtil.isNotEmpty(projectNoPrefixs)) {
  447 + query.in(ProjectFieldLockRecord::getProjectNoPrefix, projectNoPrefixs);
443 448  
444   - }else {
  449 + } else {
445 450 query.apply("1!=1");
446 451 }
447 452 })
448 453 .list();
449   - Map<String,ProjectBaseInfoLockFieldVO> prjectNo2LockRecordMap = lockRecords.stream()
  454 + Map<String, ProjectBaseInfoLockFieldVO> prjectNo2LockRecordMap = lockRecords.stream()
450 455 .collect(Collectors.toMap(ProjectFieldLockRecord::getProjectNoPrefix, record -> {
451 456 try {
452 457 return objectMapper.readValue(record.getFields(), ProjectBaseInfoLockFieldVO.class);
... ... @@ -462,12 +467,12 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl&lt;ProjectBaseInfoMappe
462 467 .customerCode(details.get(0).getCustomerCode())
463 468 .projectNoPrefix(entry.getKey())
464 469 .lockFields(Optional.ofNullable(prjectNo2LockRecordMap.get(entry.getKey())).orElse(ProjectBaseInfoLockFieldVO.builder()
465   - .actualExchangeRate( Objects.isNull(projectBaseInfoDO)|| Objects.isNull(projectBaseInfoDO.getActualExchangeRate()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name())
466   - .developmentCopyRmbTotalPrice(Objects.isNull(projectBaseInfoDO)|| Objects.isNull(projectBaseInfoDO.getDevelopmentCopyRmbTotalPrice()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name())
467   - .paidRmbCommission(Objects.isNull(projectBaseInfoDO)|| Objects.isNull(projectBaseInfoDO.getPaidRmbCommission()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name())
468   - .projectEndTime(Objects.isNull(projectBaseInfoDO)|| Objects.isNull(projectBaseInfoDO.getProjectEndTime()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name())
469   - .projectStartTime(Objects.isNull(projectBaseInfoDO)|| Objects.isNull(projectBaseInfoDO.getProjectStartTime()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name())
470   - .spainPaidRmbCommission(Objects.isNull(projectBaseInfoDO)|| Objects.isNull(projectBaseInfoDO.getSpainPaidRmbCommission()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name())
  470 + .actualExchangeRate(Objects.isNull(projectBaseInfoDO) || Objects.isNull(projectBaseInfoDO.getActualExchangeRate()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name())
  471 + .developmentCopyRmbTotalPrice(Objects.isNull(projectBaseInfoDO) || Objects.isNull(projectBaseInfoDO.getDevelopmentCopyRmbTotalPrice()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name())
  472 + .paidRmbCommission(Objects.isNull(projectBaseInfoDO) || Objects.isNull(projectBaseInfoDO.getPaidRmbCommission()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name())
  473 + .projectEndTime(Objects.isNull(projectBaseInfoDO) || Objects.isNull(projectBaseInfoDO.getProjectEndTime()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name())
  474 + .projectStartTime(Objects.isNull(projectBaseInfoDO) || Objects.isNull(projectBaseInfoDO.getProjectStartTime()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name())
  475 + .spainPaidRmbCommission(Objects.isNull(projectBaseInfoDO) || Objects.isNull(projectBaseInfoDO.getSpainPaidRmbCommission()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name())
471 476 .build()))
472 477 .build();
473 478  
... ... @@ -513,7 +518,7 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl&lt;ProjectBaseInfoMappe
513 518  
514 519 //包装费用合计¥
515 520 businessProfitInfoVO.setPacketRmbTotalPrice(Optional.ofNullable(businessProfitInfoVO.getPacketTotalPrice())
516   - .orElse(0.0) *exchangeRate.doubleValue());
  521 + .orElse(0.0) * exchangeRate.doubleValue());
517 522 //包装费用实际金额
518 523 details.stream()
519 524 .map(OrderInfoResultVO::getOrderCostInfo)
... ... @@ -676,6 +681,7 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl&lt;ProjectBaseInfoMappe
676 681 BusinessProfitInfoVO businessProfitInfoVO = orderInfoResultVOS.get(0);
677 682 exportBusinessProfitExcel(response, businessProfitInfoVO);
678 683 }
  684 +
679 685 public void exportBusinessProfitExcel(HttpServletResponse response, BusinessProfitInfoVO businessProfitInfoVO) throws Exception {
680 686 DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
681 687 XSSFWorkbook workbook = new XSSFWorkbook();
... ... @@ -718,67 +724,67 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl&lt;ProjectBaseInfoMappe
718 724 createMergedRow(sheet, cellStyle, 12, 13, 7, 9, Optional.ofNullable(businessProfitInfoVO.getCustomerTotalPrice()).map(price -> "$" + price).orElse("-"));
719 725 createMergedRow(sheet, cellStyle, 14, 15, 0, 4, "生产科总价合计");
720 726 createMergedRow(sheet, cellStyle, 14, 15, 5, 6, Optional.ofNullable(businessProfitInfoVO.getProductionDepartmentTotalPrice()).map(price -> "¥" + price).orElse("-"));
721   - createMergedRow(sheet, cellStyle, 14, 15, 7, 9,"");
  727 + createMergedRow(sheet, cellStyle, 14, 15, 7, 9, "");
722 728 createMergedRow(sheet, cellStyle, 16, 17, 0, 4, "包装费用合计");
723 729 createMergedRow(sheet, cellStyle, 16, 17, 5, 6, Optional.ofNullable(businessProfitInfoVO.getPacketRmbTotalPrice()).map(price -> "¥" + price).orElse("-"));
724 730 createMergedRow(sheet, cellStyle, 16, 17, 7, 9, Optional.ofNullable(businessProfitInfoVO.getPacketTotalPrice()).map(price -> "$" + price).orElse("-"));
725 731 createMergedRow(sheet, cellStyle, 18, 19, 0, 4, "研发复制费合计");
726 732 createMergedRow(sheet, cellStyle, 18, 19, 5, 6, Optional.ofNullable(businessProfitInfoVO.getDevelopmentCopyRmbTotalPrice()).map(price -> "¥" + price).orElse("-"));
727   - createMergedRow(sheet, cellStyle, 18, 19, 7, 9,"");
  733 + createMergedRow(sheet, cellStyle, 18, 19, 7, 9, "");
728 734 createMergedRow(sheet, cellStyle, 20, 21, 0, 4, "固定成本");
729 735 createMergedRow(sheet, cellStyle, 20, 21, 5, 6, Optional.ofNullable(businessProfitInfoVO.getFixedCost()).map(price -> "¥" + price).orElse("-"));
730   - createMergedRow(sheet, cellStyle, 20, 21, 7, 9,"");
  736 + createMergedRow(sheet, cellStyle, 20, 21, 7, 9, "");
731 737 createMergedRow(sheet, cellStyle, 22, 23, 0, 4, "西班牙提成");
732 738 createMergedRow(sheet, cellStyle, 22, 23, 5, 6, Optional.ofNullable(businessProfitInfoVO.getSpainRmbCommission()).map(price -> "¥" + price).orElse("-"));
733   - createMergedRow(sheet, cellStyle, 22, 23, 7, 9,"");
  739 + createMergedRow(sheet, cellStyle, 22, 23, 7, 9, "");
734 740 createMergedRow(sheet, cellStyle, 24, 25, 0, 4, "中国团队提成");
735 741 createMergedRow(sheet, cellStyle, 24, 25, 5, 6, Optional.ofNullable(businessProfitInfoVO.getRmbCommission()).map(price -> "¥" + price).orElse("-"));
736   - createMergedRow(sheet, cellStyle, 24, 25, 7, 9,"");
  742 + createMergedRow(sheet, cellStyle, 24, 25, 7, 9, "");
737 743 createMergedRow(sheet, cellStyle, 26, 27, 0, 4, "支出合计");
738 744 createMergedRow(sheet, cellStyle, 26, 27, 5, 6, Optional.ofNullable(businessProfitInfoVO.getRmbTotalExpense()).map(price -> "¥" + price).orElse("-"));
739   - createMergedRow(sheet, cellStyle, 26, 27, 7, 9,"");
  745 + createMergedRow(sheet, cellStyle, 26, 27, 7, 9, "");
740 746 createMergedRow(sheet, cellStyle, 28, 29, 0, 4, "毛利润");
741 747 createMergedRow(sheet, cellStyle, 28, 29, 5, 6, Optional.ofNullable(businessProfitInfoVO.getProfit()).map(price -> "¥" + price).orElse("-"));
742   - createMergedRow(sheet, cellStyle, 28, 29, 7, 9,"");
  748 + createMergedRow(sheet, cellStyle, 28, 29, 7, 9, "");
743 749 createMergedRow(sheet, cellStyle, 30, 31, 0, 4, "毛利率");
744 750 createMergedRow(sheet, cellStyle, 30, 31, 5, 6, Optional.ofNullable(businessProfitInfoVO.getProfitRate()).map(rate -> rate.multiply(new BigDecimal(100)) + "%").orElse("-"));
745   - createMergedRow(sheet, cellStyle, 30, 31, 7, 9,"");
  751 + createMergedRow(sheet, cellStyle, 30, 31, 7, 9, "");
746 752 createMergedRow(sheet, cellStyle, 32, 33, 0, 4, "研发贸易净利润");
747 753 createMergedRow(sheet, cellStyle, 32, 33, 5, 6, Optional.ofNullable(businessProfitInfoVO.getDevelopmentProfit()).map(price -> "¥" + price).orElse("-"));
748   - createMergedRow(sheet, cellStyle, 32, 33, 7, 9,"");
  754 + createMergedRow(sheet, cellStyle, 32, 33, 7, 9, "");
749 755 createMergedRow(sheet, cellStyle, 34, 35, 0, 4, "研发贸易净利润率");
750 756 createMergedRow(sheet, cellStyle, 34, 35, 5, 6, Optional.ofNullable(businessProfitInfoVO.getDevelopmentProfitRate()).map(rate -> rate.multiply(new BigDecimal(100)) + "%").orElse("-"));
751   - createMergedRow(sheet, cellStyle, 34, 35, 7, 9,"");
  757 + createMergedRow(sheet, cellStyle, 34, 35, 7, 9, "");
752 758 createMergedRow(sheet, cellStyle, 36, 37, 0, 4, "包装费用合计金额");
753 759 createMergedRow(sheet, cellStyle, 36, 37, 5, 6, Optional.ofNullable(businessProfitInfoVO.getPacketRmbTotalPrice()).map(price -> "¥" + price).orElse("-"));
754   - createMergedRow(sheet, cellStyle, 36, 37, 7, 9,"");
  760 + createMergedRow(sheet, cellStyle, 36, 37, 7, 9, "");
755 761 createMergedRow(sheet, cellStyle, 38, 39, 0, 4, "包装费用实际金额");
756 762 createMergedRow(sheet, cellStyle, 38, 39, 5, 6, Optional.ofNullable(businessProfitInfoVO.getPacketActualRmbTotalPrice()).map(price -> "¥" + price).orElse("-"));
757   - createMergedRow(sheet, cellStyle, 38, 39, 7, 9,"");
  763 + createMergedRow(sheet, cellStyle, 38, 39, 7, 9, "");
758 764 createMergedRow(sheet, cellStyle, 40, 41, 0, 4, "订单总数量");
759 765 createMergedRow(sheet, cellStyle, 40, 41, 5, 6, Optional.ofNullable(businessProfitInfoVO.getOrderCount()).map(String::valueOf).orElse("-"));
760   - createMergedRow(sheet, cellStyle, 40, 41, 7, 9,"");
  766 + createMergedRow(sheet, cellStyle, 40, 41, 7, 9, "");
761 767 createMergedRow(sheet, cellStyle, 42, 43, 0, 4, "实际跟单单价=实际跟单费用/件数");
762 768 createMergedRow(sheet, cellStyle, 42, 43, 5, 6, Optional.ofNullable(businessProfitInfoVO.getActualOrderRmbPrice()).map(price -> "¥" + price).orElse("-"));
763   - createMergedRow(sheet, cellStyle, 42, 43, 7, 9,"");
  769 + createMergedRow(sheet, cellStyle, 42, 43, 7, 9, "");
764 770 createMergedRow(sheet, cellStyle, 44, 45, 0, 4, "实际跟单单价折算美金");
765 771 createMergedRow(sheet, cellStyle, 44, 45, 5, 6, Optional.ofNullable(businessProfitInfoVO.getActualOrderPrice()).map(price -> "$" + price).orElse("-"));
766   - createMergedRow(sheet, cellStyle, 44, 45, 7, 9,"");
  772 + createMergedRow(sheet, cellStyle, 44, 45, 7, 9, "");
767 773 createMergedRow(sheet, cellStyle, 46, 47, 0, 4, "包装费用收益");
768 774 createMergedRow(sheet, cellStyle, 46, 47, 5, 6, Optional.ofNullable(businessProfitInfoVO.getPacketProfitRmbPrice()).map(price -> "¥" + price).orElse("-"));
769   - createMergedRow(sheet, cellStyle, 46, 47, 7, 9,"");
  775 + createMergedRow(sheet, cellStyle, 46, 47, 7, 9, "");
770 776 createMergedRow(sheet, cellStyle, 48, 49, 0, 4, "包装费用净利润率");
771 777 createMergedRow(sheet, cellStyle, 48, 49, 5, 6, Optional.ofNullable(businessProfitInfoVO.getPacketProfitRate()).map(rate -> rate.multiply(new BigDecimal(100)) + "%").orElse("-"));
772   - createMergedRow(sheet, cellStyle, 48, 49, 7, 9,"");
  778 + createMergedRow(sheet, cellStyle, 48, 49, 7, 9, "");
773 779 createMergedRow(sheet, cellStyle, 50, 51, 0, 4, "实际汇率");
774 780 createMergedRow(sheet, cellStyle, 50, 51, 5, 6, Optional.ofNullable(businessProfitInfoVO.getActualExchangeRate()).map(String::valueOf).orElse("-"));
775   - createMergedRow(sheet, cellStyle, 50, 51, 7, 9,"");
  781 + createMergedRow(sheet, cellStyle, 50, 51, 7, 9, "");
776 782 createMergedRow(sheet, cellStyle, 52, 53, 0, 4, "汇率收益");
777 783 createMergedRow(sheet, cellStyle, 52, 53, 5, 6, Optional.ofNullable(businessProfitInfoVO.getExchangeRateProfit()).map(price -> "¥" + price).orElse("-"));
778   - createMergedRow(sheet, cellStyle, 52, 53, 7, 9,"");
  784 + createMergedRow(sheet, cellStyle, 52, 53, 7, 9, "");
779 785 createMergedRow(sheet, cellStyle, 54, 55, 0, 4, "综合收益");
780 786 createMergedRow(sheet, cellStyle, 54, 55, 5, 6, Optional.ofNullable(businessProfitInfoVO.getComprehensiveProfit()).map(price -> "¥" + price).orElse("-"));
781   - createMergedRow(sheet, cellStyle, 54, 55, 7, 9,"");
  787 + createMergedRow(sheet, cellStyle, 54, 55, 7, 9, "");
782 788  
783 789 // 设置响应头
784 790 response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
... ...