Commit 580848c00b9dc8491569c08c3ef3e041129097e6

Authored by 谢茂盛
1 parent f45fdb3a

fix: 计算利润率/修复联调bug

src/main/java/com/order/erp/common/utils/ProfitUtils.java 0 → 100644
  1 +package com.order.erp.common.utils;
  2 +
  3 +import com.order.erp.domain.vo.order.ProfitCalculateVO;
  4 +
  5 +import java.math.BigDecimal;
  6 +
  7 +/**
  8 + * @author: xms
  9 + * @description: TODO
  10 + * @date: 2023/10/23 10:51
  11 + * @version: 1.0
  12 + */
  13 +public class ProfitUtils {
  14 +
  15 + /**
  16 + * 计算利润率
  17 + * 1 - (生产科总价/汇率 + 包装费用总价)/客单总价
  18 + *
  19 + * @param calculateVO
  20 + * @return
  21 + */
  22 + public static double calculateProfitRate(ProfitCalculateVO calculateVO) {
  23 + BigDecimal productionDepartmentTotalPrice = new BigDecimal(calculateVO.getProductionDepartmentTotalPrice());
  24 +
  25 + BigDecimal exchangeRate = new BigDecimal(calculateVO.getExchangeRate());
  26 +
  27 + BigDecimal packetTotalPrice = new BigDecimal(calculateVO.getPacketTotalPrice());
  28 +
  29 + BigDecimal customerTotalPrice = new BigDecimal(calculateVO.getCustomerTotalPrice());
  30 +
  31 + return new BigDecimal(1).subtract((productionDepartmentTotalPrice.divide(exchangeRate).add(packetTotalPrice)).divide(customerTotalPrice)).doubleValue();
  32 + }
  33 +}
... ...
src/main/java/com/order/erp/common/utils/SecurityUtils.java
... ... @@ -18,7 +18,7 @@ public class SecurityUtils {
18 18 try {
19 19 userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
20 20 } catch (Exception e) {
21   - throw new BusinessException(ServerResultCode.PARAM_ERROR);
  21 + throw new BusinessException(ServerResultCode.UNAUTHENTICATION);
22 22 }
23 23 return userDetails;
24 24 }
... ...
src/main/java/com/order/erp/controller/OrderController.java
... ... @@ -3,10 +3,7 @@ package com.order.erp.controller;
3 3 import com.order.erp.common.annotation.AnonymousAccess;
4 4 import com.order.erp.common.constant.ServerResult;
5 5 import com.order.erp.common.excel4j.exceptions.Excel4JException;
6   -import com.order.erp.domain.vo.order.OrderAddVO;
7   -import com.order.erp.domain.vo.order.OrderBaseInfoQueryVO;
8   -import com.order.erp.domain.vo.order.OrderBaseInfoVO;
9   -import com.order.erp.domain.vo.order.OrderUnlockFieldApplyVO;
  6 +import com.order.erp.domain.vo.order.*;
10 7 import com.order.erp.service.order.OrderBaseInfoService;
11 8 import org.springframework.validation.annotation.Validated;
12 9 import org.springframework.web.bind.annotation.PostMapping;
... ... @@ -96,12 +93,12 @@ public class OrderController {
96 93 /**
97 94 * 编辑数据
98 95 *
99   - * @param orderBaseInfoVO 数据VO
  96 + * @param updateVO 数据VO
100 97 * @return 编辑结果
101 98 */
102 99 @PostMapping("/edit")
103   - public ServerResult edit(@RequestBody OrderBaseInfoVO orderBaseInfoVO) {
104   - return orderBaseInfoService.edit(orderBaseInfoVO);
  100 + public ServerResult edit(@RequestBody OrderUpdateVO updateVO) {
  101 + return orderBaseInfoService.edit(updateVO);
105 102 }
106 103  
107 104 /**
... ...
src/main/java/com/order/erp/domain/vo/order/OrderUpdateVO.java 0 → 100644
  1 +package com.order.erp.domain.vo.order;
  2 +
  3 +import lombok.*;
  4 +import lombok.experimental.SuperBuilder;
  5 +
  6 +import java.io.Serializable;
  7 +
  8 +/**
  9 + * 订单基础信息表(OrderBaseInfo)实体类
  10 + *
  11 + * @author makejava
  12 + * @since 2023-09-08 15:26:43
  13 + */
  14 +@Data
  15 +@AllArgsConstructor
  16 +@ToString
  17 +@NoArgsConstructor
  18 +@EqualsAndHashCode(callSuper = false)
  19 +@SuperBuilder
  20 +public class OrderUpdateVO implements Serializable {
  21 +
  22 + /**
  23 + * 订单id
  24 + */
  25 + private Long orderId;
  26 +
  27 + /**
  28 + * 订单基础信息
  29 + */
  30 + private OrderBaseInfoVO baseInfo;
  31 +
  32 + /**
  33 + * 利润分析信息
  34 + */
  35 + private OrderProfitAnalysisVO profitAnalysisInfo;
  36 +
  37 + /**
  38 + * 项目完成报告信息
  39 + */
  40 + private OrderCompletionReportVO reportInfo;
  41 +
  42 + /**
  43 + * 跟单信息
  44 + */
  45 + private OrderTrackStageVO trackStageInfo;
  46 +
  47 + /**
  48 + * 质检信息
  49 + */
  50 + private OrderInspectionStageVO inspectionStageInfo;
  51 +
  52 +}
... ...
src/main/java/com/order/erp/domain/vo/order/ProfitCalculateVO.java 0 → 100644
  1 +package com.order.erp.domain.vo.order;
  2 +
  3 +import lombok.*;
  4 +import lombok.experimental.SuperBuilder;
  5 +
  6 +import java.io.Serializable;
  7 +
  8 +/**
  9 + * 订单利润分析表(OrderProfitAnalysis)实体类
  10 + *
  11 + * @author makejava
  12 + * @since 2023-09-08 15:26:47
  13 + */
  14 +@Data
  15 +@AllArgsConstructor
  16 +@ToString
  17 +@NoArgsConstructor
  18 +@EqualsAndHashCode(callSuper = false)
  19 +@SuperBuilder
  20 +public class ProfitCalculateVO implements Serializable {
  21 +
  22 + /**
  23 + * 客户总价$
  24 + */
  25 + private Double customerTotalPrice;
  26 + /**
  27 + * 生成科总价¥
  28 + */
  29 + private Double productionDepartmentTotalPrice;
  30 + /**
  31 + * 包装费用合计¥
  32 + */
  33 + private Double packetTotalPrice;
  34 + /**
  35 + * 汇率
  36 + */
  37 + private Double exchangeRate;
  38 +
  39 +
  40 +}
... ...
src/main/java/com/order/erp/service/order/OrderBaseInfoService.java
... ... @@ -67,10 +67,10 @@ public interface OrderBaseInfoService extends IService<OrderBaseInfoDO> {
67 67 /**
68 68 * 修改数据
69 69 *
70   - * @param orderBaseInfoVO 数据VO
  70 + * @param updateVO 数据VO
71 71 * @return 编辑结果
72 72 */
73   - ServerResult edit(OrderBaseInfoVO orderBaseInfoVO);
  73 + ServerResult edit(OrderUpdateVO updateVO);
74 74  
75 75 /**
76 76 * 通过主键删除数据
... ...
src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java
... ... @@ -10,13 +10,14 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
10 10 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
11 11 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
12 12 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
13   -import com.order.erp.common.constant.ServerResultCode;
14 13 import com.order.erp.common.constant.Constant;
15 14 import com.order.erp.common.constant.ServerResult;
  15 +import com.order.erp.common.constant.ServerResultCode;
16 16 import com.order.erp.common.excel4j.ExcelUtils;
17 17 import com.order.erp.common.excel4j.exceptions.Excel4JException;
18 18 import com.order.erp.common.exception.BusinessException;
19 19 import com.order.erp.common.utils.OrderFieldUtils;
  20 +import com.order.erp.common.utils.ProfitUtils;
20 21 import com.order.erp.config.DataScope;
21 22 import com.order.erp.domain.ApplyStatusEnum;
22 23 import com.order.erp.domain.ApplyTypeEnum;
... ... @@ -390,6 +391,7 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O
390 391 .eq(StringUtils.isNotBlank(queryVO.getProductStyle()), OrderBaseInfoDO::getProductStyle, queryVO.getProductStyle())
391 392 .eq(StringUtils.isNotBlank(queryVO.getOutboundType()), OrderBaseInfoDO::getOutboundType, queryVO.getOutboundType())
392 393 .eq(StringUtils.isNotBlank(queryVO.getPacketType()), OrderBaseInfoDO::getPacketType, queryVO.getPacketType())
  394 + .orderByDesc(OrderBaseInfoDO::getId)
393 395 ;
394 396 }
395 397  
... ... @@ -416,6 +418,11 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O
416 418 BeanUtils.copyProperties(profitAnalysisVO, profitAnalysisDO);
417 419 profitAnalysisDO.setOrderId(baseInfoDO.getId());
418 420 profitAnalysisDO.setOrderStatus(OrderStatusEnum.PROFIT_WAIT_AUDIT.getStatus());
  421 + profitAnalysisDO.setProfitRate(ProfitUtils.calculateProfitRate(ProfitCalculateVO.builder()
  422 + .customerTotalPrice(profitAnalysisDO.getCustomerTotalPrice())
  423 + .exchangeRate(profitAnalysisDO.getExchangeRate())
  424 + .packetTotalPrice(profitAnalysisDO.getPacketTotalPrice())
  425 + .productionDepartmentTotalPrice(profitAnalysisDO.getProductionDepartmentTotalPrice()).build()));
419 426 profitAnalysisService.save(profitAnalysisDO);
420 427 }
421 428  
... ... @@ -452,18 +459,74 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O
452 459 /**
453 460 * 修改数据
454 461 *
455   - * @param orderBaseInfoVO 实例对象
  462 + * @param updateVO 实例对象
456 463 * @return 实例对象
457 464 */
458 465 @Override
459   - public ServerResult edit(OrderBaseInfoVO orderBaseInfoVO) {
  466 + public ServerResult edit(OrderUpdateVO updateVO) {
460 467 //todo 校验
461   - if (Objects.isNull(orderBaseInfoVO.getId())) {
  468 + if (Objects.isNull(updateVO.getOrderId())) {
462 469 return ServerResult.fail("id 不能为空");
463 470 }
464   - OrderBaseInfoDO orderBaseInfoDo = BeanUtil.copyProperties(orderBaseInfoVO, OrderBaseInfoDO.class);
  471 + if (Objects.nonNull(updateVO.getBaseInfo())) {
  472 + OrderBaseInfoDO orderBaseInfoDo = BeanUtil.copyProperties(updateVO.getBaseInfo(), OrderBaseInfoDO.class);
  473 + orderBaseInfoDo.setId(updateVO.getOrderId());
  474 + updateById(orderBaseInfoDo);
  475 + }
  476 + if (Objects.nonNull(updateVO.getProfitAnalysisInfo())) {
  477 + OrderProfitAnalysisDO profitAnalysisDO = profitAnalysisService.getOne(new LambdaQueryWrapper<OrderProfitAnalysisDO>()
  478 + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  479 + .eq(OrderProfitAnalysisDO::getOrderId, updateVO.getOrderId()));
  480 + if (Objects.nonNull(profitAnalysisDO)) {
  481 + BeanUtils.copyProperties(updateVO.getProfitAnalysisInfo(), profitAnalysisDO);
  482 + profitAnalysisDO.setOrderId(updateVO.getOrderId());
  483 + profitAnalysisDO.setOrderStatus(OrderStatusEnum.PROFIT_WAIT_AUDIT.getStatus());
  484 + profitAnalysisDO.setProfitRate(ProfitUtils.calculateProfitRate(ProfitCalculateVO.builder()
  485 + .customerTotalPrice(profitAnalysisDO.getCustomerTotalPrice())
  486 + .exchangeRate(profitAnalysisDO.getExchangeRate())
  487 + .packetTotalPrice(profitAnalysisDO.getPacketTotalPrice())
  488 + .productionDepartmentTotalPrice(profitAnalysisDO.getProductionDepartmentTotalPrice()).build()));
  489 + profitAnalysisService.updateById(profitAnalysisDO);
  490 + }
  491 + }
  492 +
  493 + if (Objects.nonNull(updateVO.getReportInfo())) {
  494 + OrderCompletionReportDO reportDO = reportService.getOne(new LambdaQueryWrapper<OrderCompletionReportDO>()
  495 + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  496 + .eq(OrderCompletionReportDO::getOrderId, updateVO.getOrderId()));
  497 + if (Objects.nonNull(reportDO)) {
  498 + BeanUtils.copyProperties(updateVO.getReportInfo(), reportDO);
  499 + reportDO.setOrderId(updateVO.getOrderId());
  500 + reportDO.setOrderStatus(OrderStatusEnum.REPORT_WAIT_AUDIT.getStatus());
  501 + reportService.updateById(reportDO);
  502 + }
  503 + }
465 504  
466   - updateById(orderBaseInfoDo);
  505 + if (Objects.nonNull(updateVO.getTrackStageInfo())) {
  506 + OrderTrackStageDO trackStageDO = trackStageService.getOne(new LambdaQueryWrapper<OrderTrackStageDO>()
  507 + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  508 + .eq(OrderTrackStageDO::getOrderId, updateVO.getOrderId()));
  509 + if (Objects.nonNull(trackStageDO)) {
  510 + BeanUtils.copyProperties(updateVO.getTrackStageInfo(), trackStageDO);
  511 + trackStageDO.setOrderId(updateVO.getOrderId());
  512 + trackStageDO.setOrderStatus(OrderStatusEnum.TRACK_ING.getStatus());
  513 + trackStageService.updateById(trackStageDO);
  514 + }
  515 +
  516 + }
  517 +
  518 + if (Objects.nonNull(updateVO.getInspectionStageInfo())) {
  519 + OrderInspectionStageDO inspectionStageDO = inspectionStageService.getOne(new LambdaQueryWrapper<OrderInspectionStageDO>()
  520 + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  521 + .eq(OrderInspectionStageDO::getOrderId, updateVO.getOrderId()));
  522 + if (Objects.nonNull(inspectionStageDO)) {
  523 + BeanUtils.copyProperties(updateVO.getInspectionStageInfo(), inspectionStageDO);
  524 + inspectionStageDO.setOrderId(updateVO.getOrderId());
  525 + inspectionStageDO.setOrderStatus(OrderStatusEnum.INSPECT_ING.getStatus());
  526 + inspectionStageService.updateById(inspectionStageDO);
  527 + }
  528 +
  529 + }
467 530  
468 531 return ServerResult.success();
469 532 }
... ...
src/main/resources/application-local.yml
... ... @@ -129,7 +129,7 @@ jwt:
129 129 # 必须使用最少88位的Base64对该令牌进行编码
130 130 base64-secret: ZmQ0ZGI5NjQ0MDQwY2I4MjMxY2Y3ZmI3MjdhN2ZmMjNhODViOTg1ZGE0NTBjMGM4NDA5NzYxMjdjOWMwYWRmZTBlZjlhNGY3ZTg4Y2U3YTE1ODVkZDU5Y2Y3OGYwZWE1NzUzNWQ2YjFjZDc0NGMxZWU2MmQ3MjY1NzJmNTE0MzI=
131 131 # 令牌过期时间 此处单位/毫秒 ,默认2小时,可在此网站生成 https://www.convertworld.com/zh-hans/time/milliseconds.html
132   - token-validity-in-seconds: 7200000
  132 + token-validity-in-seconds: 720000000
133 133 # 在线用户key
134 134 online-key: online-token
135 135 # 验证码
... ...