From ea62f287b3a734958ff5325343f78e3fdbe60fa8 Mon Sep 17 00:00:00 2001 From: zhongnanhuang <zhongnanhuang@canrd.com> Date: Tue, 24 Oct 2023 10:44:08 +0800 Subject: [PATCH] 利润分析接口和首页数据展示接口 --- src/main/java/com/order/erp/common/utils/ProfitUtils.java | 2 +- src/main/java/com/order/erp/controller/IndexController.java | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/order/erp/controller/OrderProfitController.java | 42 ++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/order/erp/domain/vo/IndexDataVO.java | 45 +++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/order/erp/domain/vo/OrderCountVO.java | 22 ++++++++++++++++++++++ src/main/java/com/order/erp/mapper/order/OrderBaseInfoMapper.java | 10 ++++++++++ src/main/java/com/order/erp/mapper/order/OrderCompletionReportMapper.java | 3 +++ src/main/java/com/order/erp/mapper/order/OrderInspectionStageMapper.java | 3 +++ src/main/java/com/order/erp/mapper/order/OrderProfitAnalysisMapper.java | 3 +++ src/main/java/com/order/erp/service/order/OrderBaseInfoService.java | 6 ++++++ src/main/java/com/order/erp/service/order/OrderCompletionReportService.java | 4 ++++ src/main/java/com/order/erp/service/order/OrderInspectionStageService.java | 5 +++++ src/main/java/com/order/erp/service/order/OrderProfitAnalysisService.java | 6 ++++++ src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++----------------------- src/main/java/com/order/erp/service/order/impl/OrderCompletionReportServiceImpl.java | 12 ++++++++++++ src/main/java/com/order/erp/service/order/impl/OrderInspectionStageServiceImpl.java | 12 ++++++++++++ src/main/java/com/order/erp/service/order/impl/OrderProfitAnalysisServiceImpl.java | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 17 files changed, 355 insertions(+), 24 deletions(-) create mode 100644 src/main/java/com/order/erp/controller/IndexController.java create mode 100644 src/main/java/com/order/erp/controller/OrderProfitController.java create mode 100644 src/main/java/com/order/erp/domain/vo/IndexDataVO.java create mode 100644 src/main/java/com/order/erp/domain/vo/OrderCountVO.java diff --git a/src/main/java/com/order/erp/common/utils/ProfitUtils.java b/src/main/java/com/order/erp/common/utils/ProfitUtils.java index 97f1082..5715a24 100644 --- a/src/main/java/com/order/erp/common/utils/ProfitUtils.java +++ b/src/main/java/com/order/erp/common/utils/ProfitUtils.java @@ -28,6 +28,6 @@ public class ProfitUtils { BigDecimal customerTotalPrice = new BigDecimal(calculateVO.getCustomerTotalPrice()); - return new BigDecimal(1).subtract((productionDepartmentTotalPrice.divide(exchangeRate).add(packetTotalPrice)).divide(customerTotalPrice)).doubleValue(); + return new BigDecimal(1).subtract((productionDepartmentTotalPrice.divide(exchangeRate,4,BigDecimal.ROUND_HALF_UP).add(packetTotalPrice)).divide(customerTotalPrice,4,BigDecimal.ROUND_HALF_UP)).doubleValue(); } } diff --git a/src/main/java/com/order/erp/controller/IndexController.java b/src/main/java/com/order/erp/controller/IndexController.java new file mode 100644 index 0000000..8b4c79f --- /dev/null +++ b/src/main/java/com/order/erp/controller/IndexController.java @@ -0,0 +1,75 @@ +package com.order.erp.controller; + +import com.order.erp.common.constant.ServerResult; +import com.order.erp.domain.OrderStatusEnum; +import com.order.erp.domain.vo.IndexDataVO; +import com.order.erp.service.order.OrderBaseInfoService; +import com.order.erp.service.order.OrderCompletionReportService; +import com.order.erp.service.order.OrderInspectionStageService; +import com.order.erp.service.order.OrderProfitAnalysisService; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * @author zhongnanhuang + * @version 1.0 + * @project order-erp + * @description 首页 + * @date 2023/10/23 16:44:55 + */ +@RestController +@RequestMapping("/order/erp/index") +public class IndexController { + + @Resource + OrderBaseInfoService orderBaseInfoService; + + @Resource + OrderInspectionStageService orderInspectionStageService; + + @Resource + OrderProfitAnalysisService orderProfitAnalysisService; + + @Resource + OrderCompletionReportService orderCompletionReportService; + + @GetMapping("/data") + public ServerResult getData(){ + //订单总完成数 + long orderTotalFinished = orderBaseInfoService.countByOrderStatus(OrderStatusEnum.ORDER_FINISH.getStatus()); + //订单当月完成数 + long orderRecentMonthFinished = orderBaseInfoService.countRecentMonthByOrderStatus(OrderStatusEnum.ORDER_FINISH.getStatus()); + + + //跟单和质检中 + long inspecting = orderInspectionStageService.countByOrderStatus(OrderStatusEnum.INSPECT_ING.getStatus()); + long recentMonthInspecting = orderInspectionStageService.countRecentMonthByOrderStatus(OrderStatusEnum.INSPECT_ING.getStatus()); + + //利润分析表待审核 + long orderProfitWaitAudit = orderProfitAnalysisService.countByOrderStatus(OrderStatusEnum.PROFIT_WAIT_AUDIT.getStatus()); + long orderRecentWeekProfitWaitAudit = orderProfitAnalysisService.countRecentWeekByOrderStatus(OrderStatusEnum.PROFIT_WAIT_AUDIT.getStatus()); + + //项目报告书待审核 + long orderReport = orderCompletionReportService.countByOrderStatus(OrderStatusEnum.REPORT_WAIT_AUDIT.getStatus()); + long orderYearReport = orderCompletionReportService.countYearByOrderStatus(OrderStatusEnum.REPORT_WAIT_AUDIT.getStatus()); + + //当天订单数据 + IndexDataVO.ChartData chartData = orderBaseInfoService.countHoursFromDay(); + + IndexDataVO indexDataVo = new IndexDataVO(); + indexDataVo.setOrderFinishedCount(orderTotalFinished); + indexDataVo.setOrderRecentMonthFinishedCount(orderRecentMonthFinished); + indexDataVo.setOrderInspectingCount(inspecting); + indexDataVo.setOrderRecentMonthInspectingCount(recentMonthInspecting); + indexDataVo.setOrderProfitWaitAuditCount(orderProfitWaitAudit); + indexDataVo.setOrderRecentWeekProfitWaitAuditCount(orderRecentWeekProfitWaitAudit); + indexDataVo.setOrderReportWaitAuditCount(orderReport); + indexDataVo.setOrderReportRecentYearWaitAuditCount(orderYearReport); + indexDataVo.setChartData(chartData); + + return ServerResult.success(indexDataVo); + } +} diff --git a/src/main/java/com/order/erp/controller/OrderProfitController.java b/src/main/java/com/order/erp/controller/OrderProfitController.java new file mode 100644 index 0000000..96d3940 --- /dev/null +++ b/src/main/java/com/order/erp/controller/OrderProfitController.java @@ -0,0 +1,42 @@ +package com.order.erp.controller; + +import com.order.erp.common.constant.ServerResult; +import com.order.erp.domain.dto.order.OrderProfitAnalysisDO; +import com.order.erp.service.order.OrderProfitAnalysisService; +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; +import java.util.List; + +/** + * @author zhongnanhuang + * @version 1.0 + * @project order-erp + * @description 订单利润表控制层 + * @date 2023/10/23 11:48:36 + */ +@RestController +@RequestMapping("/order/erp/profit") +public class OrderProfitController { + + @Resource + OrderProfitAnalysisService orderProfitAnalysisService; + + @PostMapping("/analysis") + public ServerResult analysis(@RequestBody List<Long> orderIds){ + if (orderIds==null||orderIds.size()<=0){ + return ServerResult.fail("订单不能为空"); + } + + OrderProfitAnalysisDO orderProfitAnalysisDO = orderProfitAnalysisService.analysisByOrderIds(orderIds); + + if (orderProfitAnalysisDO==null){ + return ServerResult.fail("找不到订单信息"); + } + + return ServerResult.success(orderProfitAnalysisDO); + } +} diff --git a/src/main/java/com/order/erp/domain/vo/IndexDataVO.java b/src/main/java/com/order/erp/domain/vo/IndexDataVO.java new file mode 100644 index 0000000..f583c19 --- /dev/null +++ b/src/main/java/com/order/erp/domain/vo/IndexDataVO.java @@ -0,0 +1,45 @@ +package com.order.erp.domain.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +/** + * @author zhongnanhuang + * @version 1.0 + * @project order-erp + * @description 首页数据展示 + * @date 2023/10/24 09:03:20 + */ +@Data +@AllArgsConstructor +@ToString +@NoArgsConstructor +public class IndexDataVO { + private Long orderFinishedCount; + + private Long orderRecentMonthFinishedCount; + + private Long orderInspectingCount; + + private Long orderRecentMonthInspectingCount; + + private Long orderProfitWaitAuditCount; + + private Long orderRecentWeekProfitWaitAuditCount; + + private Long orderReportWaitAuditCount; + + private Long orderReportRecentYearWaitAuditCount; + + private ChartData chartData; + + @Data + @AllArgsConstructor + @NoArgsConstructor + public static class ChartData{ + private String[] x;//小时 + private int[] y;//订单量 + } +} diff --git a/src/main/java/com/order/erp/domain/vo/OrderCountVO.java b/src/main/java/com/order/erp/domain/vo/OrderCountVO.java new file mode 100644 index 0000000..8f606c7 --- /dev/null +++ b/src/main/java/com/order/erp/domain/vo/OrderCountVO.java @@ -0,0 +1,22 @@ +package com.order.erp.domain.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +/** + * @author zhongnanhuang + * @version 1.0 + * @project order-erp + * @description 订单每日数据 + * @date 2023/10/24 10:28:59 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class OrderCountVO { + private String hour; + private Integer count; +} diff --git a/src/main/java/com/order/erp/mapper/order/OrderBaseInfoMapper.java b/src/main/java/com/order/erp/mapper/order/OrderBaseInfoMapper.java index d78cb76..e4bc0ee 100644 --- a/src/main/java/com/order/erp/mapper/order/OrderBaseInfoMapper.java +++ b/src/main/java/com/order/erp/mapper/order/OrderBaseInfoMapper.java @@ -1,7 +1,12 @@ package com.order.erp.mapper.order; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.order.erp.domain.OrderStatusEnum; import com.order.erp.domain.dto.order.OrderBaseInfoDO; +import com.order.erp.domain.vo.OrderCountVO; +import org.apache.ibatis.annotations.Select; + +import java.util.List; /** * 订单基础信息表(OrderBaseInfo)表数据库访问层 @@ -12,5 +17,10 @@ import com.order.erp.domain.dto.order.OrderBaseInfoDO; public interface OrderBaseInfoMapper extends BaseMapper<OrderBaseInfoDO> { + @Select("SELECT count(*) FROM order_base_info WHERE order_status=#{orderStatus} and DATE_SUB(CURDATE(), INTERVAL 1 MONTH) <= date(create_time);") + long countRecentMonthByOrderStatus(Integer orderStatus); + + @Select("SELECT HOUR(create_time) AS hour, COUNT(*) AS count FROM order_base_info WHERE create_time >= DATE_SUB(NOW(), INTERVAL 1 DAY) GROUP BY HOUR(create_time);") + List<OrderCountVO> countHoursFromDay(); } diff --git a/src/main/java/com/order/erp/mapper/order/OrderCompletionReportMapper.java b/src/main/java/com/order/erp/mapper/order/OrderCompletionReportMapper.java index 297dbb7..a1800c7 100644 --- a/src/main/java/com/order/erp/mapper/order/OrderCompletionReportMapper.java +++ b/src/main/java/com/order/erp/mapper/order/OrderCompletionReportMapper.java @@ -2,6 +2,7 @@ package com.order.erp.mapper.order; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.order.erp.domain.dto.order.OrderCompletionReportDO; +import org.apache.ibatis.annotations.Select; /** * 订单-项目完成报告书(OrderCompletionReport)表数据库访问层 @@ -12,5 +13,7 @@ import com.order.erp.domain.dto.order.OrderCompletionReportDO; public interface OrderCompletionReportMapper extends BaseMapper<OrderCompletionReportDO> { + @Select("SELECT count(*) FROM order_completion_report WHERE order_status=20 and create_time >= DATE_SUB(NOW(), INTERVAL 1 YEAR);SELECT * FROM order_completion_report WHERE order_status=#{status} and create_time >= DATE_SUB(NOW(), INTERVAL 1 YEAR);") + long countYearByOrderStatus(Integer status); } diff --git a/src/main/java/com/order/erp/mapper/order/OrderInspectionStageMapper.java b/src/main/java/com/order/erp/mapper/order/OrderInspectionStageMapper.java index 9062559..7b34792 100644 --- a/src/main/java/com/order/erp/mapper/order/OrderInspectionStageMapper.java +++ b/src/main/java/com/order/erp/mapper/order/OrderInspectionStageMapper.java @@ -2,6 +2,7 @@ package com.order.erp.mapper.order; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.order.erp.domain.dto.order.OrderInspectionStageDO; +import org.apache.ibatis.annotations.Select; /** * 订单-质检环节(OrderInspectionStage)表数据库访问层 @@ -12,5 +13,7 @@ import com.order.erp.domain.dto.order.OrderInspectionStageDO; public interface OrderInspectionStageMapper extends BaseMapper<OrderInspectionStageDO> { + @Select("SELECT count(*) FROM order_inspection_stage WHERE order_status=#{status} and DATE_SUB(CURDATE(), INTERVAL 1 MONTH) <= date(create_time);") + long countRecentMonthByOrderStatus(Integer status); } diff --git a/src/main/java/com/order/erp/mapper/order/OrderProfitAnalysisMapper.java b/src/main/java/com/order/erp/mapper/order/OrderProfitAnalysisMapper.java index 0b70295..3852a63 100644 --- a/src/main/java/com/order/erp/mapper/order/OrderProfitAnalysisMapper.java +++ b/src/main/java/com/order/erp/mapper/order/OrderProfitAnalysisMapper.java @@ -2,6 +2,7 @@ package com.order.erp.mapper.order; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.order.erp.domain.dto.order.OrderProfitAnalysisDO; +import org.apache.ibatis.annotations.Select; /** * 订单利润分析表(OrderProfitAnalysis)表数据库访问层 @@ -12,5 +13,7 @@ import com.order.erp.domain.dto.order.OrderProfitAnalysisDO; public interface OrderProfitAnalysisMapper extends BaseMapper<OrderProfitAnalysisDO> { + @Select("SELECT count(*) FROM order_profit_analysis WHERE order_status=#{status} and create_time >= DATE_SUB(NOW(), INTERVAL 1 WEEK);") + long countRecentWeekByOrderStatus(Integer status); } 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 ac010dd..cc9de94 100644 --- a/src/main/java/com/order/erp/service/order/OrderBaseInfoService.java +++ b/src/main/java/com/order/erp/service/order/OrderBaseInfoService.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.order.erp.common.constant.ServerResult; import com.order.erp.common.excel4j.exceptions.Excel4JException; import com.order.erp.domain.dto.order.OrderBaseInfoDO; +import com.order.erp.domain.vo.IndexDataVO; import com.order.erp.domain.vo.order.*; import javax.servlet.http.HttpServletResponse; @@ -80,4 +81,9 @@ public interface OrderBaseInfoService extends IService<OrderBaseInfoDO> { */ ServerResult deleteById(OrderBaseInfoQueryVO orderBaseInfoQueryVO); + long countByOrderStatus(Integer orderFinish); + + long countRecentMonthByOrderStatus(Integer orderFinish); + + IndexDataVO.ChartData countHoursFromDay(); } 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 1117487..2abaf5f 100644 --- a/src/main/java/com/order/erp/service/order/OrderCompletionReportService.java +++ b/src/main/java/com/order/erp/service/order/OrderCompletionReportService.java @@ -59,4 +59,8 @@ public interface OrderCompletionReportService extends IService<OrderCompletionRe boolean deleteByOrderId(Long orderId); boolean deleteByOrderIds(List<Long> orderIds); + + long countByOrderStatus(Integer status); + + long countYearByOrderStatus(Integer status); } diff --git a/src/main/java/com/order/erp/service/order/OrderInspectionStageService.java b/src/main/java/com/order/erp/service/order/OrderInspectionStageService.java index 2ebbdde..625753d 100644 --- a/src/main/java/com/order/erp/service/order/OrderInspectionStageService.java +++ b/src/main/java/com/order/erp/service/order/OrderInspectionStageService.java @@ -2,6 +2,7 @@ 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.OrderStatusEnum; import com.order.erp.domain.dto.order.OrderInspectionStageDO; import com.order.erp.domain.vo.order.OrderInspectionStageQueryVO; import com.order.erp.domain.vo.order.OrderInspectionStageVO; @@ -59,4 +60,8 @@ public interface OrderInspectionStageService extends IService<OrderInspectionSta boolean deleteByOrderId(Long orderId); boolean deleteByOrderIds(List<Long> orderIds); + + long countByOrderStatus(Integer orderStatus); + + long countRecentMonthByOrderStatus(Integer status); } diff --git a/src/main/java/com/order/erp/service/order/OrderProfitAnalysisService.java b/src/main/java/com/order/erp/service/order/OrderProfitAnalysisService.java index eb4579a..0a88689 100644 --- a/src/main/java/com/order/erp/service/order/OrderProfitAnalysisService.java +++ b/src/main/java/com/order/erp/service/order/OrderProfitAnalysisService.java @@ -59,4 +59,10 @@ public interface OrderProfitAnalysisService extends IService<OrderProfitAnalysis boolean deleteByOrderId(Long orderId); boolean deleteByOrderIds(List<Long> orderIds); + + OrderProfitAnalysisDO analysisByOrderIds(List<Long> orderIds); + + long countByOrderStatus(Integer status); + + long countRecentWeekByOrderStatus(Integer status); } 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 b56e99a..1d42f7d 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 @@ -26,20 +26,20 @@ import com.order.erp.domain.OrderStatusEnum; import com.order.erp.domain.dto.BaseDO; import com.order.erp.domain.dto.order.*; import com.order.erp.domain.excel.OrderExcelVO; +import com.order.erp.domain.vo.IndexDataVO; +import com.order.erp.domain.vo.OrderCountVO; import com.order.erp.domain.vo.order.*; import com.order.erp.mapper.order.OrderBaseInfoMapper; import com.order.erp.service.order.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; +import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -553,6 +553,7 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O * @return 是否成功 */ @Override + @Transactional public ServerResult deleteById(OrderBaseInfoQueryVO orderBaseInfoQueryVO) { List<Long> ids = orderBaseInfoQueryVO.getIds(); if (CollUtil.isEmpty(ids)) { @@ -571,39 +572,65 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O //删除订单关联信息 - this.deleteRelationInfoByOrderId(ids); - - - return ServerResult.success(); - } - - /** - * 删除订单关联信息 - * @param orderId - */ - private void deleteRelationInfoByOrderId(List<Long> orderIds) { //订单审批日志 - orderAuditLogService.deleteByOrderIds(orderIds); + orderAuditLogService.deleteByOrderIds(ids); //订单-项目完成报告书 - orderCompletionReportService.deleteByOrderIds(orderIds); + orderCompletionReportService.deleteByOrderIds(ids); //用户订单-字段锁定申请表 - orderFieldLockApplyService.deleteByOrderIds(orderIds); + orderFieldLockApplyService.deleteByOrderIds(ids); //用户订单-字段锁定记录表 - orderFieldLockRecordService.deleteByOrderIds(orderIds); + orderFieldLockRecordService.deleteByOrderIds(ids); //订单-质检环节 - orderInspectionStageService.deleteByOrderIds(orderIds); + orderInspectionStageService.deleteByOrderIds(ids); //用户订单操作日志表 - orderOptLogService.deleteByOrderIds(orderIds); + orderOptLogService.deleteByOrderIds(ids); //订单利润分析表 - profitAnalysisService.deleteByOrderIds(orderIds); + profitAnalysisService.deleteByOrderIds(ids); //订单-跟单环节 - trackStageService.deleteByOrderIds(orderIds); + trackStageService.deleteByOrderIds(ids); + + + return ServerResult.success(); + } + + /** + * 根据订单状态统计订单数量 + * @param orderStatus + * @return + */ + @Override + public long countByOrderStatus(Integer orderStatus) { + return this.count(new LambdaQueryWrapper<OrderBaseInfoDO>().eq(OrderBaseInfoDO::getOrderStatus,orderStatus)); } + + @Override + public long countRecentMonthByOrderStatus(Integer orderStatus) { + return this.baseMapper.countRecentMonthByOrderStatus(orderStatus); + } + + @Override + public IndexDataVO.ChartData countHoursFromDay() { + List<OrderCountVO> orderCountVOS = this.baseMapper.countHoursFromDay(); + Map<String,Integer> countValueMap = new HashMap<>(); + if (orderCountVOS!=null&& orderCountVOS.size()>0){ + for (OrderCountVO orderCountVO : orderCountVOS) { + countValueMap.put(orderCountVO.getHour(),orderCountVO.getCount()); + } + } + String[] x = new String[24]; + int[] y = new int[24]; + for (int i = 0; i < 24; i++) { + x[i] = i+":00"; + y[i] = countValueMap.get(i+"")==null?0:countValueMap.get(i+""); + } + return new IndexDataVO.ChartData(x,y); + } + } 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 3931ac5..bea954c 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 @@ -2,6 +2,7 @@ package com.order.erp.service.order.impl; 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.extension.service.impl.ServiceImpl; import com.order.erp.common.constant.Constant; @@ -143,4 +144,15 @@ public class OrderCompletionReportServiceImpl extends ServiceImpl<OrderCompletio return update(updateWrapper); } + + @Override + public long countByOrderStatus(Integer status) { + return baseMapper.selectCount(new LambdaQueryWrapper<OrderCompletionReportDO>() + .eq(OrderCompletionReportDO::getOrderStatus, status)); + } + + @Override + public long countYearByOrderStatus(Integer status) { + return baseMapper.countYearByOrderStatus(status); + } } diff --git a/src/main/java/com/order/erp/service/order/impl/OrderInspectionStageServiceImpl.java b/src/main/java/com/order/erp/service/order/impl/OrderInspectionStageServiceImpl.java index 29d0c5f..e3dd8b8 100644 --- a/src/main/java/com/order/erp/service/order/impl/OrderInspectionStageServiceImpl.java +++ b/src/main/java/com/order/erp/service/order/impl/OrderInspectionStageServiceImpl.java @@ -2,10 +2,12 @@ package com.order.erp.service.order.impl; 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.extension.service.impl.ServiceImpl; import com.order.erp.common.constant.Constant; import com.order.erp.common.constant.ServerResult; +import com.order.erp.domain.OrderStatusEnum; import com.order.erp.domain.dto.order.OrderInspectionStageDO; import com.order.erp.domain.vo.order.OrderInspectionStageQueryVO; import com.order.erp.domain.vo.order.OrderInspectionStageVO; @@ -136,4 +138,14 @@ public class OrderInspectionStageServiceImpl extends ServiceImpl<OrderInspection .set(OrderInspectionStageDO::getEnableFlag, Constant.UNABLE_TWENTY); return update(updateWrapper); } + + @Override + public long countByOrderStatus(Integer orderStatus) { + return this.count(new LambdaQueryWrapper<OrderInspectionStageDO>().eq(OrderInspectionStageDO::getOrderStatus,orderStatus)); + } + + @Override + public long countRecentMonthByOrderStatus(Integer status) { + return this.baseMapper.countRecentMonthByOrderStatus(status); + } } diff --git a/src/main/java/com/order/erp/service/order/impl/OrderProfitAnalysisServiceImpl.java b/src/main/java/com/order/erp/service/order/impl/OrderProfitAnalysisServiceImpl.java index bea4d13..389ff91 100644 --- a/src/main/java/com/order/erp/service/order/impl/OrderProfitAnalysisServiceImpl.java +++ b/src/main/java/com/order/erp/service/order/impl/OrderProfitAnalysisServiceImpl.java @@ -2,18 +2,26 @@ package com.order.erp.service.order.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 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.ProfitUtils; import com.order.erp.domain.dto.order.OrderProfitAnalysisDO; import com.order.erp.domain.vo.order.OrderProfitAnalysisQueryVO; import com.order.erp.domain.vo.order.OrderProfitAnalysisVO; +import com.order.erp.domain.vo.order.ProfitCalculateVO; import com.order.erp.mapper.order.OrderProfitAnalysisMapper; import com.order.erp.service.order.OrderProfitAnalysisService; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.util.Arrays; import java.util.List; import java.util.Objects; @@ -141,4 +149,52 @@ public class OrderProfitAnalysisServiceImpl extends ServiceImpl<OrderProfitAnaly .set(OrderProfitAnalysisDO::getEnableFlag, Constant.UNABLE_TWENTY); return update(updateWrapper); } + + @Override + public OrderProfitAnalysisDO analysisByOrderIds(List<Long> orderIds) { + //查询订单id的利润分析数据 + QueryWrapper queryWrapper = new QueryWrapper<OrderProfitAnalysisVO>().in("order_id", orderIds); + List<OrderProfitAnalysisDO> orderProfits = list(queryWrapper); + + + if (orderProfits==null||orderProfits.isEmpty()){ + return null; + } + + BigDecimal packetTotalPrice = new BigDecimal("0"); + BigDecimal customerTotalPrice = new BigDecimal("0"); + BigDecimal productionDepartmentTotalPrice = new BigDecimal("0"); + double profits = 0; + //分别计算每个orderProfit的利润率,通过ProfitUtils的calculateProfitRate方法计算 + for (OrderProfitAnalysisDO orderProfit : orderProfits) { + ProfitCalculateVO profitCalculateVO = new ProfitCalculateVO(); + BeanUtils.copyProperties(orderProfit,profitCalculateVO); + double profit = ProfitUtils.calculateProfitRate(profitCalculateVO); + + packetTotalPrice = packetTotalPrice.add(new BigDecimal(orderProfit.getPacketTotalPrice())); + customerTotalPrice = customerTotalPrice.add(new BigDecimal(orderProfit.getCustomerTotalPrice())); + productionDepartmentTotalPrice = productionDepartmentTotalPrice.add(new BigDecimal(orderProfit.getProductionDepartmentTotalPrice())); + profits+=profit; + } + + profits = (profits / orderProfits.size()); + + OrderProfitAnalysisDO orderProfitAnalysisDO = new OrderProfitAnalysisDO(); + orderProfitAnalysisDO.setPacketTotalPrice(packetTotalPrice.doubleValue()); + orderProfitAnalysisDO.setCustomerTotalPrice(customerTotalPrice.doubleValue()); + orderProfitAnalysisDO.setProductionDepartmentTotalPrice(productionDepartmentTotalPrice.doubleValue()); + orderProfitAnalysisDO.setProfitRate(profits); + + return orderProfitAnalysisDO; + } + + @Override + public long countByOrderStatus(Integer status) { + return this.count(new LambdaQueryWrapper<OrderProfitAnalysisDO>().eq(OrderProfitAnalysisDO::getOrderStatus,status)); + } + + @Override + public long countRecentWeekByOrderStatus(Integer status) { + return this.baseMapper.countRecentWeekByOrderStatus(status); + } } -- libgit2 0.23.3