From 6d2520e650271159207826d8d81b27c8500f3997 Mon Sep 17 00:00:00 2001 From: 谢茂盛 <A807732> Date: Fri, 8 Dec 2023 10:52:09 +0800 Subject: [PATCH] feat: 问题修复项 1、项目报告书字段拆分 2、设计师权重占比计算 --- src/main/java/com/order/erp/controller/OrderReportController.java | 34 ++++++++++++++++++++++++++++++++++ src/main/java/com/order/erp/domain/vo/OrderReportAnalysisResultVo.java | 27 +++++++++++++++++++++++++++ src/main/java/com/order/erp/domain/vo/OrderReportAnalysisVo.java | 36 ++++++++++++++++++++++++++++++++++++ src/main/java/com/order/erp/domain/vo/order/OrderBaseInfoQueryVO.java | 29 +++++++++++++++++++++++++++-- src/main/java/com/order/erp/job/OrderJob.java | 46 ++++++++++++++++++++++++---------------------- src/main/java/com/order/erp/service/admin/impl/DictionaryServiceImpl.java | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++- src/main/java/com/order/erp/service/order/OrderBaseInfoService.java | 8 ++++++++ src/main/java/com/order/erp/service/order/OrderCompletionReportService.java | 9 +++++++++ src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------- src/main/java/com/order/erp/service/order/impl/OrderCompletionReportServiceImpl.java | 37 ++++++++++++++++++++++++++++++++++++- 10 files changed, 330 insertions(+), 47 deletions(-) create mode 100644 src/main/java/com/order/erp/controller/OrderReportController.java create mode 100644 src/main/java/com/order/erp/domain/vo/OrderReportAnalysisResultVo.java create mode 100644 src/main/java/com/order/erp/domain/vo/OrderReportAnalysisVo.java diff --git a/src/main/java/com/order/erp/controller/OrderReportController.java b/src/main/java/com/order/erp/controller/OrderReportController.java new file mode 100644 index 0000000..13f6450 --- /dev/null +++ b/src/main/java/com/order/erp/controller/OrderReportController.java @@ -0,0 +1,34 @@ +package com.order.erp.controller; + +import com.order.erp.common.constant.ServerResult; +import com.order.erp.domain.vo.OrderReportAnalysisVo; +import com.order.erp.domain.vo.order.OrderBaseInfoQueryVO; +import com.order.erp.domain.vo.order.OrderProfitAnalysisVO; +import com.order.erp.service.order.OrderCompletionReportService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * @author xms + * @version 1.0 + * @project order-erp + * @description 订单项目报告书表控制层 + * @date 2023/10/23 11:48:36 + */ +@RestController +@RequestMapping("/order/erp/report") +public class OrderReportController { + + @Resource + OrderCompletionReportService orderCompletionReportService; + + @PostMapping("/analysis") + public ServerResult<OrderProfitAnalysisVO> analysis(@RequestBody @Validated OrderBaseInfoQueryVO queryVO) { + return orderCompletionReportService.analysis(queryVO); + } +} diff --git a/src/main/java/com/order/erp/domain/vo/OrderReportAnalysisResultVo.java b/src/main/java/com/order/erp/domain/vo/OrderReportAnalysisResultVo.java new file mode 100644 index 0000000..10b454f --- /dev/null +++ b/src/main/java/com/order/erp/domain/vo/OrderReportAnalysisResultVo.java @@ -0,0 +1,27 @@ +package com.order.erp.domain.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +import java.io.Serializable; + +/** + * @author zhongnanhuang + * @version 1.0 + * @project order-erp + * @description 利润分析传参 + * @date 2023/10/30 10:19:26 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class OrderReportAnalysisResultVo implements Serializable { + + /** + * 占比 + */ + private Double rate; +} diff --git a/src/main/java/com/order/erp/domain/vo/OrderReportAnalysisVo.java b/src/main/java/com/order/erp/domain/vo/OrderReportAnalysisVo.java new file mode 100644 index 0000000..8d4aae1 --- /dev/null +++ b/src/main/java/com/order/erp/domain/vo/OrderReportAnalysisVo.java @@ -0,0 +1,36 @@ +package com.order.erp.domain.vo; + +import com.order.erp.domain.vo.order.OrderBaseInfoQueryVO; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.io.Serializable; +import java.util.List; + +/** + * @author zhongnanhuang + * @version 1.0 + * @project order-erp + * @description 利润分析传参 + * @date 2023/10/30 10:19:26 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class OrderReportAnalysisVo implements Serializable { + + /** + * 查询vo + */ + private OrderBaseInfoQueryVO queryVo; + + /** + * 设计师 + */ + private String designer; +} diff --git a/src/main/java/com/order/erp/domain/vo/order/OrderBaseInfoQueryVO.java b/src/main/java/com/order/erp/domain/vo/order/OrderBaseInfoQueryVO.java index 84ce7fc..244ea58 100644 --- a/src/main/java/com/order/erp/domain/vo/order/OrderBaseInfoQueryVO.java +++ b/src/main/java/com/order/erp/domain/vo/order/OrderBaseInfoQueryVO.java @@ -106,9 +106,34 @@ public class OrderBaseInfoQueryVO extends BasePageVO implements Serializable { private String ideaSource; /** - * 手工初型 + * 想法来源占比 */ - private String manualPreform; + private Double ideaSourceRate; + + /** + * 设计师 + */ + private String designer; + + /** + * 手工初型1 + */ + private String manualPreform1; + + /** + * 手工初型1占比 + */ + private Double manualPreform1Rate; + + /** + * 手工初型2 + */ + private String manualPreform2; + + /** + * 手工初型2占比 + */ + private Double manualPreform2Rate; /** * pp样品确认意见 diff --git a/src/main/java/com/order/erp/job/OrderJob.java b/src/main/java/com/order/erp/job/OrderJob.java index 60e9f1e..57577a6 100644 --- a/src/main/java/com/order/erp/job/OrderJob.java +++ b/src/main/java/com/order/erp/job/OrderJob.java @@ -67,28 +67,30 @@ public class OrderJob { List<OrderInfoResultVO> orderInfoResultVOS = orderBaseInfoService.wrapperOrderResultList(false, ordersDOS); if (CollectionUtils.isNotEmpty(orderInfoResultVOS)) { Set<Long> orderIds = orderInfoResultVOS.stream().filter(x -> Objects.nonNull(x.getSchedule()) && Constant.ONE == x.getSchedule()).map(OrderInfoResultVO::getId).collect(Collectors.toSet()); - LambdaUpdateWrapper<OrderBaseInfoDO> orderBaseUpdateWrapper = new LambdaUpdateWrapper<OrderBaseInfoDO>() - .in(OrderBaseInfoDO::getId, orderIds).set(OrderBaseInfoDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus()); - - LambdaUpdateWrapper<OrderCompletionReportDO> reportUpdateWrapper = new LambdaUpdateWrapper<OrderCompletionReportDO>() - .in(OrderCompletionReportDO::getOrderId, orderIds).set(OrderCompletionReportDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus()); - - LambdaUpdateWrapper<OrderProfitAnalysisDO> profitUpdateWrapper = new LambdaUpdateWrapper<OrderProfitAnalysisDO>() - .in(OrderProfitAnalysisDO::getOrderId, orderIds).set(OrderProfitAnalysisDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus()); - - LambdaUpdateWrapper<OrderTrackStageDO> trackUpdateWrapper = new LambdaUpdateWrapper<OrderTrackStageDO>() - .in(OrderTrackStageDO::getOrderId, orderIds).set(OrderTrackStageDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus()); - - LambdaUpdateWrapper<OrderInspectionStageDO> inspectUpdateWrapper = new LambdaUpdateWrapper<OrderInspectionStageDO>() - .in(OrderInspectionStageDO::getOrderId, orderIds).set(OrderInspectionStageDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus()); - - transactionHelper.run(() -> { - orderBaseInfoService.update(orderBaseUpdateWrapper); - reportService.update(reportUpdateWrapper); - profitAnalysisService.update(profitUpdateWrapper); - trackStageService.update(trackUpdateWrapper); - inspectionStageService.update(inspectUpdateWrapper); - }); + if (CollectionUtils.isNotEmpty(orderIds)) { + LambdaUpdateWrapper<OrderBaseInfoDO> orderBaseUpdateWrapper = new LambdaUpdateWrapper<OrderBaseInfoDO>() + .in(OrderBaseInfoDO::getId, orderIds).set(OrderBaseInfoDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus()); + + LambdaUpdateWrapper<OrderCompletionReportDO> reportUpdateWrapper = new LambdaUpdateWrapper<OrderCompletionReportDO>() + .in(OrderCompletionReportDO::getOrderId, orderIds).set(OrderCompletionReportDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus()); + + LambdaUpdateWrapper<OrderProfitAnalysisDO> profitUpdateWrapper = new LambdaUpdateWrapper<OrderProfitAnalysisDO>() + .in(OrderProfitAnalysisDO::getOrderId, orderIds).set(OrderProfitAnalysisDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus()); + + LambdaUpdateWrapper<OrderTrackStageDO> trackUpdateWrapper = new LambdaUpdateWrapper<OrderTrackStageDO>() + .in(OrderTrackStageDO::getOrderId, orderIds).set(OrderTrackStageDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus()); + + LambdaUpdateWrapper<OrderInspectionStageDO> inspectUpdateWrapper = new LambdaUpdateWrapper<OrderInspectionStageDO>() + .in(OrderInspectionStageDO::getOrderId, orderIds).set(OrderInspectionStageDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus()); + + transactionHelper.run(() -> { + orderBaseInfoService.update(orderBaseUpdateWrapper); + reportService.update(reportUpdateWrapper); + profitAnalysisService.update(profitUpdateWrapper); + trackStageService.update(trackUpdateWrapper); + inspectionStageService.update(inspectUpdateWrapper); + }); + } } log.info("执行结束时间:{}", DateTime.now().toString("yyyy-MM-dd HH:mm:ss")); } diff --git a/src/main/java/com/order/erp/service/admin/impl/DictionaryServiceImpl.java b/src/main/java/com/order/erp/service/admin/impl/DictionaryServiceImpl.java index 42d6e81..0a1c2fd 100644 --- a/src/main/java/com/order/erp/service/admin/impl/DictionaryServiceImpl.java +++ b/src/main/java/com/order/erp/service/admin/impl/DictionaryServiceImpl.java @@ -11,17 +11,22 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.order.erp.common.constant.Constant; import com.order.erp.common.constant.ServerResult; +import com.order.erp.common.utils.TransactionHelper; import com.order.erp.domain.dto.BaseDO; +import com.order.erp.domain.dto.SystemSettingDO; import com.order.erp.domain.dto.admin.DictionaryDO; import com.order.erp.domain.vo.admin.DictionaryQueryVO; import com.order.erp.domain.vo.admin.DictionaryResultVO; import com.order.erp.domain.vo.admin.DictionaryVO; import com.order.erp.mapper.admin.DictionaryMapper; +import com.order.erp.service.SystemSettingService; import com.order.erp.service.admin.DictionaryService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @@ -37,6 +42,12 @@ import java.util.stream.Collectors; public class DictionaryServiceImpl extends ServiceImpl<DictionaryMapper, DictionaryDO> implements DictionaryService { + @Resource + private TransactionHelper transactionHelper; + + @Resource + private SystemSettingService systemSettingService; + /** * 通过ID查询单条数据 * <p> @@ -127,12 +138,52 @@ public class DictionaryServiceImpl extends ServiceImpl<DictionaryMapper, Diction } DictionaryDO dictionaryDo = BeanUtil.copyProperties(dictionaryVO, DictionaryDO.class); - save(dictionaryDo); + List<SystemSettingDO> systemSettingDOS = new ArrayList<>(); + // 客户编码 + if ("customerCode".equals(dictionaryDo.getDictCode())) { + systemSettingDOS = initSettings(dictionaryDo); + } + + List<SystemSettingDO> finalSystemSettingDOS = systemSettingDOS; + transactionHelper.run(() -> { + if (CollectionUtils.isNotEmpty(finalSystemSettingDOS)) { + systemSettingService.saveBatch(finalSystemSettingDOS); + } + save(dictionaryDo); + }); + return ServerResult.success(); } /** + * @param dictionaryDo + * @return + */ + private List<SystemSettingDO> initSettings(DictionaryDO dictionaryDo) { + List<SystemSettingDO> systemSettingDOS = new ArrayList<>(); + systemSettingDOS.add(SystemSettingDO.builder() + .settingCode(dictionaryDo.getDictCode()) + .settingName(dictionaryDo.getDictName()) + .settingValue(dictionaryDo.getDictValue()) + .settingType(Constant.ONE) + .relationCode("packetPrice") + .relationName("包装费用") + .relationValue("0.55") + .build()); + systemSettingDOS.add(SystemSettingDO.builder() + .settingCode(dictionaryDo.getDictCode()) + .settingName(dictionaryDo.getDictName()) + .settingValue(dictionaryDo.getDictValue()) + .settingType(Constant.ONE) + .relationCode("profitRate") + .relationName("利润率") + .relationValue("0.3") + .build()); + return systemSettingDOS; + } + + /** * 修改数据 * * @param dictionaryVO 实例对象 diff --git a/src/main/java/com/order/erp/service/order/OrderBaseInfoService.java b/src/main/java/com/order/erp/service/order/OrderBaseInfoService.java index a9a92d7..c5e6510 100644 --- a/src/main/java/com/order/erp/service/order/OrderBaseInfoService.java +++ b/src/main/java/com/order/erp/service/order/OrderBaseInfoService.java @@ -1,5 +1,6 @@ package com.order.erp.service.order; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.IService; import com.order.erp.common.constant.ServerResult; import com.order.erp.common.excel4j.exceptions.Excel4JException; @@ -20,6 +21,13 @@ import java.util.Map; public interface OrderBaseInfoService extends IService<OrderBaseInfoDO> { /** + * + * @param queryVO + * @return + */ + LambdaQueryWrapper<OrderBaseInfoDO> buildQueryByParam(OrderBaseInfoQueryVO queryVO); + + /** * 通过ID查询单条数据 * * @param orderBaseInfoQueryVO 主键 diff --git a/src/main/java/com/order/erp/service/order/OrderCompletionReportService.java b/src/main/java/com/order/erp/service/order/OrderCompletionReportService.java index 2abaf5f..d518ef5 100644 --- a/src/main/java/com/order/erp/service/order/OrderCompletionReportService.java +++ b/src/main/java/com/order/erp/service/order/OrderCompletionReportService.java @@ -3,6 +3,8 @@ package com.order.erp.service.order; import com.baomidou.mybatisplus.extension.service.IService; import com.order.erp.common.constant.ServerResult; import com.order.erp.domain.dto.order.OrderCompletionReportDO; +import com.order.erp.domain.vo.OrderReportAnalysisVo; +import com.order.erp.domain.vo.order.OrderBaseInfoQueryVO; import com.order.erp.domain.vo.order.OrderCompletionReportQueryVO; import com.order.erp.domain.vo.order.OrderCompletionReportVO; @@ -32,6 +34,13 @@ public interface OrderCompletionReportService extends IService<OrderCompletionRe */ ServerResult list(OrderCompletionReportQueryVO orderCompletionReportQueryVO); + + /** + * @param reportAnalysisVo + * @return + */ + ServerResult analysis(OrderBaseInfoQueryVO queryVO); + /** * 新增数据 * diff --git a/src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java b/src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java index 76fb013..60452c1 100644 --- a/src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java +++ b/src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java @@ -24,10 +24,12 @@ import com.order.erp.common.utils.ProfitUtils; import com.order.erp.config.DataScope; import com.order.erp.domain.*; import com.order.erp.domain.dto.BaseDO; +import com.order.erp.domain.dto.SystemSettingDO; import com.order.erp.domain.dto.admin.AdminUserDO; import com.order.erp.domain.dto.order.*; import com.order.erp.domain.vo.order.*; import com.order.erp.mapper.order.OrderBaseInfoMapper; +import com.order.erp.service.SystemSettingService; import com.order.erp.service.admin.AdminUserService; import com.order.erp.service.order.*; import lombok.extern.slf4j.Slf4j; @@ -101,6 +103,9 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O @Resource private AdminUserService userService; + @Resource + private SystemSettingService systemSettingService; + /** * 通过ID查询单条数据 * <p> @@ -609,21 +614,11 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O /** - * @param profitAnalysisVO + * @param profitAnalysisFieldVO * @param userId * @return */ - private OrderFieldLockApplyDO buildProfitFieldLockApplyDO(OrderBaseInfoDO orderBaseInfoDO, OrderProfitAnalysisVO profitAnalysisVO, Long userId) { - if (Objects.nonNull(profitAnalysisVO.getCustomerPrice())) { - profitAnalysisVO.setCustomerTotalPrice(profitAnalysisVO.getCustomerPrice() * orderBaseInfoDO.getOrderCount()); - } - if (Objects.nonNull(profitAnalysisVO.getPacketPrice())) { - profitAnalysisVO.setPacketTotalPrice(profitAnalysisVO.getPacketPrice() * orderBaseInfoDO.getOrderCount()); - } - if (Objects.nonNull(profitAnalysisVO.getProductionDepartmentPrice())) { - profitAnalysisVO.setProductionDepartmentTotalPrice(profitAnalysisVO.getProductionDepartmentPrice() * orderBaseInfoDO.getOrderCount()); - } - OrderProfitAnalysisFieldVO profitAnalysisFieldVO = profitAnalysis2profitAnalysisField(profitAnalysisVO); + private OrderFieldLockApplyDO buildProfitFieldLockApplyDO(OrderProfitAnalysisFieldVO profitAnalysisFieldVO, Long userId) { return OrderFieldLockApplyDO.builder() .applyUserId(userId) .auditUserId(null) @@ -639,7 +634,16 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O * @param profitAnalysisVO * @return */ - private OrderProfitAnalysisFieldVO profitAnalysis2profitAnalysisField(OrderProfitAnalysisVO profitAnalysisVO) { + private OrderProfitAnalysisFieldVO profitAnalysis2profitAnalysisField(OrderBaseInfoDO orderBaseInfoDO, OrderProfitAnalysisVO profitAnalysisVO) { + if (Objects.nonNull(profitAnalysisVO.getCustomerPrice())) { + profitAnalysisVO.setCustomerTotalPrice(profitAnalysisVO.getCustomerPrice() * orderBaseInfoDO.getOrderCount()); + } + if (Objects.nonNull(profitAnalysisVO.getPacketPrice())) { + profitAnalysisVO.setPacketTotalPrice(profitAnalysisVO.getPacketPrice() * orderBaseInfoDO.getOrderCount()); + } + if (Objects.nonNull(profitAnalysisVO.getProductionDepartmentPrice())) { + profitAnalysisVO.setProductionDepartmentTotalPrice(profitAnalysisVO.getProductionDepartmentPrice() * orderBaseInfoDO.getOrderCount()); + } Double profitRate = null; if (Objects.nonNull(profitAnalysisVO.getCustomerTotalPrice()) && Objects.nonNull(profitAnalysisVO.getExchangeRate()) @@ -665,7 +669,7 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O .productionDepartmentTotalPrice(Objects.nonNull(profitAnalysisVO.getProductionDepartmentTotalPrice()) ? profitAnalysisVO.getProductionDepartmentTotalPrice().toString() : null) .productionDepartmentCurrency(profitAnalysisVO.getProductionDepartmentCurrency()) .exchangeRate(Objects.nonNull(profitAnalysisVO.getExchangeRate()) ? profitAnalysisVO.getExchangeRate().toString() : null) - .profitRate(Objects.nonNull(profitRate) ? profitRate.toString() : null).build(); + .profitRate(Objects.nonNull(profitRate) ? profitRate.toString() : "0").build(); } /** @@ -1066,7 +1070,8 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O * @param queryVO * @return */ - private LambdaQueryWrapper<OrderBaseInfoDO> buildQueryByParam(OrderBaseInfoQueryVO queryVO) { + @Override + public LambdaQueryWrapper<OrderBaseInfoDO> buildQueryByParam(OrderBaseInfoQueryVO queryVO) { RoleEnum roleEnum = dataScope.getRole(); // 跟单员 if (Objects.nonNull(roleEnum) && roleEnum.getId().equals(RoleEnum.TRACKER_USER.getId())) { @@ -1095,11 +1100,33 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O } } - if (StringUtils.isNotBlank(queryVO.getIdeaSource()) || StringUtils.isNotBlank(queryVO.getManualPreform())) { + if (StringUtils.isNotBlank(queryVO.getDesigner())) { + List<OrderCompletionReportDO> reportDOS = reportService.list(new LambdaQueryWrapper<OrderCompletionReportDO>() + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) + .and(q -> q.eq(OrderCompletionReportDO::getIdeaSource, queryVO.getDesigner()).or() + .eq(OrderCompletionReportDO::getManualPreform1, queryVO.getDesigner()).or() + .eq(OrderCompletionReportDO::getManualPreform2, queryVO.getDesigner()))); + if (CollectionUtils.isNotEmpty(reportDOS)) { + Set<Long> reportOrderIds = reportDOS.stream().map(OrderCompletionReportDO::getOrderId).collect(Collectors.toSet()); + if (CollectionUtils.isNotEmpty(orderIds)) { + Collection<Long> set = CollectionUtil.intersection(orderIds, reportOrderIds); + if (CollectionUtils.isEmpty(set)) { + orderIds.add(-1L); + } else { + orderIds.addAll(set); + } + } else { + orderIds.addAll(reportOrderIds); + } + } else { + orderIds.add(-1L); + } + } else if (StringUtils.isNotBlank(queryVO.getIdeaSource()) || StringUtils.isNotBlank(queryVO.getManualPreform1()) || StringUtils.isNotBlank(queryVO.getManualPreform2())) { List<OrderCompletionReportDO> reportDOS = reportService.list(new LambdaQueryWrapper<OrderCompletionReportDO>() .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) .eq(StringUtils.isNotBlank(queryVO.getIdeaSource()), OrderCompletionReportDO::getIdeaSource, queryVO.getIdeaSource()) - .eq(StringUtils.isNotBlank(queryVO.getManualPreform()), OrderCompletionReportDO::getManualPreform1, queryVO.getManualPreform())); + .eq(StringUtils.isNotBlank(queryVO.getManualPreform2()), OrderCompletionReportDO::getManualPreform2, queryVO.getManualPreform2()) + .eq(StringUtils.isNotBlank(queryVO.getManualPreform1()), OrderCompletionReportDO::getManualPreform1, queryVO.getManualPreform1())); if (CollectionUtils.isNotEmpty(reportDOS)) { Set<Long> reportOrderIds = reportDOS.stream().map(OrderCompletionReportDO::getOrderId).collect(Collectors.toSet()); if (CollectionUtils.isNotEmpty(orderIds)) { @@ -1291,6 +1318,36 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O } /** + * @param profitAnalysisVO + * @param orderBaseInfoDo + * @param userId + */ + public OrderFieldLockApplyDO handlerProfitRate(OrderProfitAnalysisVO profitAnalysisVO, OrderBaseInfoDO orderBaseInfoDo, Long userId) { + OrderProfitAnalysisFieldVO profitAnalysisFieldVO = profitAnalysis2profitAnalysisField(orderBaseInfoDo, profitAnalysisVO); + + SystemSettingDO systemSettingDO = systemSettingService.getOne(new LambdaQueryWrapper<SystemSettingDO>() + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) + .eq(SystemSettingDO::getSettingCode, "customerCode") + .eq(SystemSettingDO::getSettingValue, orderBaseInfoDo.getCustomerCode()) + .eq(SystemSettingDO::getRelationCode, "profitRate").last("limit 1")); + + double profitRate = Objects.nonNull(systemSettingDO) ? Double.parseDouble(systemSettingDO.getRelationValue()) : 0.3; + checkApply(profitAnalysisVO.getOrderId(), userId); + OrderFieldLockApplyDO orderFieldLockApplyDO = buildProfitFieldLockApplyDO(profitAnalysisFieldVO, userId); + orderFieldLockApplyService.save(orderFieldLockApplyDO); + + if (Double.parseDouble(profitAnalysisFieldVO.getProfitRate()) >= profitRate) { + // 直接通过 + orderFieldLockApplyService.doAudit(AuditVO.builder() + .id(orderFieldLockApplyDO.getId()) + .status(ApplyStatusEnum.AUDIT_PASS.getStatus()) + .build()); + orderFieldLockApplyDO.setStatus(ApplyStatusEnum.AUDIT_PASS.getStatus()); + } + return orderFieldLockApplyDO; + } + + /** * 修改数据 * * @param updateVO 实例对象 @@ -1317,11 +1374,10 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O optLogDO = buildOrderOptLogDo(updateVO.getOrderId(), userId, OrderOptTypeEnum.ORDER_EDIT.getDesc(), JSONObject.toJSONString(updateVO)); } if (Objects.nonNull(updateVO.getProfitAnalysisInfo())) { - checkApply(updateVO.getOrderId(), userId); - OrderFieldLockApplyDO orderFieldLockApplyDO = buildProfitFieldLockApplyDO(orderBaseInfoDo, updateVO.getProfitAnalysisInfo(), userId); - orderFieldLockApplyService.save(orderFieldLockApplyDO); + OrderFieldLockApplyDO orderFieldLockApplyDO = handlerProfitRate(updateVO.getProfitAnalysisInfo(), orderBaseInfoDo, userId); - orderBaseInfoDo.setOrderStatus(OrderStatusEnum.PROFIT_WAIT_AUDIT.getStatus()); + orderBaseInfoDo.setOrderStatus(ApplyStatusEnum.AUDIT_PASS.getStatus().equals(orderFieldLockApplyDO.getStatus()) ? OrderStatusEnum.PROFIT_AUDIT_PASS.getStatus() + : OrderStatusEnum.PROFIT_WAIT_AUDIT.getStatus()); optLogDO = buildOrderOptLogDo(updateVO.getOrderId(), userId, OrderOptTypeEnum.ORDER_PROFIT_EDIT_APPLY.getDesc(), orderFieldLockApplyDO.getFields()); } diff --git a/src/main/java/com/order/erp/service/order/impl/OrderCompletionReportServiceImpl.java b/src/main/java/com/order/erp/service/order/impl/OrderCompletionReportServiceImpl.java index 1c1d3cb..3a198ba 100644 --- a/src/main/java/com/order/erp/service/order/impl/OrderCompletionReportServiceImpl.java +++ b/src/main/java/com/order/erp/service/order/impl/OrderCompletionReportServiceImpl.java @@ -4,19 +4,28 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.order.erp.common.constant.Constant; import com.order.erp.common.constant.ServerResult; +import com.order.erp.domain.dto.order.OrderBaseInfoDO; import com.order.erp.domain.dto.order.OrderCompletionReportDO; +import com.order.erp.domain.vo.OrderReportAnalysisResultVo; +import com.order.erp.domain.vo.order.OrderBaseInfoQueryVO; import com.order.erp.domain.vo.order.OrderCompletionReportQueryVO; import com.order.erp.domain.vo.order.OrderCompletionReportVO; import com.order.erp.mapper.order.OrderCompletionReportMapper; +import com.order.erp.service.order.OrderBaseInfoService; import com.order.erp.service.order.OrderCompletionReportService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.List; import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; /** * 订单-项目完成报告书(OrderCompletionReport)表服务实现类 @@ -29,6 +38,9 @@ import java.util.Objects; public class OrderCompletionReportServiceImpl extends ServiceImpl<OrderCompletionReportMapper, OrderCompletionReportDO> implements OrderCompletionReportService { + @Resource + private OrderBaseInfoService orderBaseInfoService; + /** * 通过ID查询单条数据 * <p> @@ -60,6 +72,28 @@ public class OrderCompletionReportServiceImpl extends ServiceImpl<OrderCompletio return ServerResult.success(); } + @Override + public ServerResult analysis(OrderBaseInfoQueryVO queryVO) { + LambdaQueryWrapper<OrderBaseInfoDO> queryWrapper = orderBaseInfoService.buildQueryByParam(queryVO); + List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.list(queryWrapper); + OrderReportAnalysisResultVo resultVo = new OrderReportAnalysisResultVo(); + if (CollectionUtils.isNotEmpty(orderBaseInfoDOList)) { + Set<Long> orderIds = orderBaseInfoDOList.stream().map(OrderBaseInfoDO::getId).collect(Collectors.toSet()); + List<OrderCompletionReportDO> reportDOS = list(new LambdaQueryWrapper<OrderCompletionReportDO>().in(OrderCompletionReportDO::getOrderId, orderIds)); + BigDecimal sum = new BigDecimal(0); + if (CollectionUtils.isNotEmpty(reportDOS)) { + for (OrderCompletionReportDO reportDO : reportDOS) { + Double ideaSourceRate = queryVO.getDesigner().equals(reportDO.getIdeaSource()) && Objects.nonNull(reportDO.getIdeaSourceRate()) ? reportDO.getIdeaSourceRate() : 0; + Double manualPreform1Rate = queryVO.getDesigner().equals(reportDO.getManualPreform1()) && Objects.nonNull(reportDO.getManualPreform1Rate()) ? reportDO.getManualPreform1Rate() : 0; + Double manualPreform2Rate = queryVO.getDesigner().equals(reportDO.getManualPreform2()) && Objects.nonNull(reportDO.getManualPreform2Rate()) ? reportDO.getManualPreform2Rate() : 0; + sum = sum.add(new BigDecimal(ideaSourceRate)).add(new BigDecimal(manualPreform1Rate)).add(new BigDecimal(manualPreform2Rate)); + } + } + resultVo.setRate(sum.divide(new BigDecimal(orderBaseInfoDOList.size())).doubleValue()); + } + return ServerResult.success(resultVo); + } + /** * 新增数据 * @@ -124,6 +158,7 @@ public class OrderCompletionReportServiceImpl extends ServiceImpl<OrderCompletio /** * 通过订单id逻辑删除 + * * @param orderId * @return */ @@ -149,7 +184,7 @@ public class OrderCompletionReportServiceImpl extends ServiceImpl<OrderCompletio public long countByOrderStatus(Integer status) { return baseMapper.selectCount(new LambdaQueryWrapper<OrderCompletionReportDO>() .eq(OrderCompletionReportDO::getOrderStatus, status) - .eq(OrderCompletionReportDO::getEnableFlag,Constant.ENABLE_TEN)); + .eq(OrderCompletionReportDO::getEnableFlag, Constant.ENABLE_TEN)); } @Override -- libgit2 0.23.3