Commit 5c716366612e64e7ad25dfcd2fc7658faf2e1518

Authored by chenhang4442024
2 parents a12271e6 5985ab52

Merge branch 'develop-test' into develop

# Conflicts:
#	src/main/java/com/order/erp/common/constant/Constant.java
#	src/main/java/com/order/erp/service/order/OrderProfitAnalysisService.java
#	src/main/java/com/order/erp/service/order/impl/InvoiceBillOrderServiceImpl.java
#	src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java
#	src/main/java/com/order/erp/service/order/impl/OrderFieldLockApplyServiceImpl.java
#	src/main/java/com/order/erp/service/order/impl/OrderProfitAnalysisServiceImpl.java
#	src/main/java/com/order/erp/service/order/impl/ProducePaymentCheckBillOrderServiceImpl.java
#	src/main/resources/application.yml
Showing 82 changed files with 4062 additions and 86 deletions

Too many changes to show.

To preserve performance only 82 of 87 files are displayed.

src/main/java/com/order/erp/common/constant/Constant.java
... ... @@ -162,6 +162,7 @@ public class Constant {
162 162 public static final int SEVEN = 7;
163 163 public static final int FOURTEEN= 14;
164 164 public static final Integer THIRTY = 30;
  165 +
165 166 public static final int SIXTY = 60;
166 167 public static final int TWENTY_FIRST = 21;
167 168  
... ...
src/main/java/com/order/erp/config/MybatisPlusConfig.java
1 1 package com.order.erp.config;
2 2  
  3 +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
  4 +import org.apache.ibatis.session.SqlSessionFactory;
  5 +import org.springframework.context.annotation.Bean;
3 6 import org.springframework.context.annotation.Configuration;
4 7  
5 8  
... ...
src/main/java/com/order/erp/controller/OrderCostController.java 0 → 100644
  1 +package com.order.erp.controller;
  2 +
  3 +import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  4 +import com.order.erp.common.constant.ServerResult;
  5 +import com.order.erp.domain.vo.OrderProfitAnalysisVo;
  6 +import com.order.erp.domain.vo.order.*;
  7 +import com.order.erp.service.order.IOrderCostInfoService;
  8 +import com.order.erp.service.order.OrderProfitAnalysisService;
  9 +import io.swagger.annotations.Api;
  10 +import io.swagger.annotations.ApiOperation;
  11 +import org.springframework.beans.factory.annotation.Autowired;
  12 +import org.springframework.validation.annotation.Validated;
  13 +import org.springframework.web.bind.annotation.*;
  14 +
  15 +import javax.annotation.Resource;
  16 +import javax.servlet.http.HttpServletResponse;
  17 +import java.util.Collections;
  18 +
  19 +/**
  20 + * @author zhongnanhuang
  21 + * @version 1.0
  22 + * @project order-erp
  23 + * @description 订单利润表控制层
  24 + * @date 2023/10/23 11:48:36
  25 + */
  26 +@RestController
  27 +@RequestMapping("/order/cost")
  28 +@Api(tags = "订单费用表")
  29 +public class OrderCostController {
  30 +
  31 + @Resource
  32 + OrderProfitAnalysisService orderProfitAnalysisService;
  33 + @Autowired
  34 + IOrderCostInfoService orderCostInfoService;
  35 +
  36 +
  37 + @PostMapping("/InnerProfitDetail/listByPage")
  38 + @ApiOperation("内部生产费用明细表")
  39 + public ServerResult<Page<InnerProfitDetailVO>> listInnerProfitDetailByPage(@RequestBody @Validated OrderBaseInfoQueryVO queryVO) {
  40 + queryVO.setProductionDepartment(Collections.singletonList("内部"));
  41 + return orderCostInfoService.listInnerProfitDetailByPage(queryVO);
  42 + }
  43 +
  44 + @PostMapping("/BusinessProfitDetail/listByPage")
  45 + @ApiOperation("包装费用明细表")
  46 + public ServerResult<Page<BusinessProfitDetailVO>> listBusinessProfitDetailsByPage(@RequestBody @Validated OrderBaseInfoQueryVO queryVO) {
  47 + return orderCostInfoService.listBusinessProfitDetailByPage(queryVO);
  48 + }
  49 +
  50 + @PostMapping("/edit")
  51 + @ApiOperation("编辑")
  52 + public ServerResult edit(@RequestBody OrderCostInfoVO vo) throws Exception {
  53 + return orderCostInfoService.edit(vo);
  54 + }
  55 +
  56 + @PostMapping("/applyEditFileds")
  57 + @ApiOperation("申请编辑字段")
  58 + public ServerResult applyEditFileds(@RequestBody OrderCostInfolockFieldVO vo) {
  59 + return orderCostInfoService.applyEditFileds(vo);
  60 + }
  61 +
  62 + @PostMapping("/businessProfitDetail/exportExcel")
  63 + @ApiOperation("包装费用明细表多个导出")
  64 + public void exportBusinessProfitDetailExcel(HttpServletResponse response, @RequestBody ProjectBaseInfoQueryVO queryVO) throws Exception {
  65 + orderCostInfoService.exportBusinessProfitDetailExcel(response, queryVO);
  66 + }
  67 +
  68 + @PostMapping("/innerProfitDetail/exportExcel")
  69 + @ApiOperation("内部生产费用明细表多个导出")
  70 + public void exportInnerProfitDetailExcel(HttpServletResponse response, @RequestBody ProjectBaseInfoQueryVO queryVO) throws Exception {
  71 + orderCostInfoService.exportInnerProfitDetailExcel(response, queryVO);
  72 + }
  73 +
  74 + @PostMapping("/setPackStatus")
  75 + @ApiOperation("设置包装费用明细表的状态")
  76 + public void setPackStatus(@RequestBody OrderCostInfoVO vo) {
  77 + orderCostInfoService.setPackStatus(vo);
  78 + }
  79 +
  80 +
  81 + @PostMapping("/setInnerStatus")
  82 + @ApiOperation("设置内部生产明细表的状态")
  83 + public void setInnerProduceStatus(@RequestBody OrderCostInfoVO vo) {
  84 + orderCostInfoService.setInnerProduceStatus(vo);
  85 + }
  86 +
  87 +}
... ...
src/main/java/com/order/erp/controller/OrderCostDetailedOptLogController.java 0 → 100644
  1 +package com.order.erp.controller;
  2 +
  3 +import com.order.erp.common.constant.ServerResult;
  4 +import com.order.erp.domain.vo.order.OrderCostDetailedOptedLogQueryVO;
  5 +import com.order.erp.service.order.OrderCostDetailedOptLogService;
  6 +import org.springframework.beans.factory.annotation.Autowired;
  7 +import org.springframework.web.bind.annotation.PostMapping;
  8 +import org.springframework.web.bind.annotation.RequestBody;
  9 +import org.springframework.web.bind.annotation.RequestMapping;
  10 +import org.springframework.web.bind.annotation.RestController;
  11 +
  12 +/**
  13 + * 净利润分析板块(包装费用明细表/内部生产明细表)--用户操作日志记录
  14 + * */
  15 +@RestController
  16 +@RequestMapping("/orderCostDetailedOptLog")
  17 +public class OrderCostDetailedOptLogController {
  18 + @Autowired
  19 + private OrderCostDetailedOptLogService orderCostDetailedOptLogService;
  20 + @PostMapping("/listByPage")
  21 + public ServerResult listByPage(@RequestBody OrderCostDetailedOptedLogQueryVO queryVO){
  22 + return orderCostDetailedOptLogService.listByPage(queryVO);
  23 + }
  24 +}
... ...
src/main/java/com/order/erp/controller/OrderProfitController.java
... ... @@ -2,16 +2,20 @@ package com.order.erp.controller;
2 2  
3 3 import com.order.erp.common.constant.ServerResult;
4 4 import com.order.erp.domain.vo.OrderProfitAnalysisVo;
5   -import com.order.erp.domain.vo.order.OrderProfitAnalysisVO;
6   -import com.order.erp.domain.vo.order.ProfitCalculateVO;
  5 +import com.order.erp.domain.vo.order.*;
  6 +import com.order.erp.service.order.IOrderCostInfoService;
7 7 import com.order.erp.service.order.OrderProfitAnalysisService;
  8 +import io.swagger.annotations.Api;
  9 +import io.swagger.annotations.ApiOperation;
  10 +import org.springframework.beans.factory.annotation.Autowired;
8 11 import org.springframework.validation.annotation.Validated;
9   -import org.springframework.web.bind.annotation.PostMapping;
10   -import org.springframework.web.bind.annotation.RequestBody;
11   -import org.springframework.web.bind.annotation.RequestMapping;
12   -import org.springframework.web.bind.annotation.RestController;
  12 +import org.springframework.web.bind.annotation.*;
13 13  
14 14 import javax.annotation.Resource;
  15 +import javax.servlet.http.HttpServletResponse;
  16 +import java.io.IOException;
  17 +import java.util.Arrays;
  18 +import java.util.Collections;
15 19  
16 20 /**
17 21 * @author zhongnanhuang
... ... @@ -36,4 +40,5 @@ public class OrderProfitController {
36 40 public ServerResult calculate(@RequestBody @Validated ProfitCalculateVO calculateVO) {
37 41 return orderProfitAnalysisService.calculate(calculateVO);
38 42 }
  43 +
39 44 }
... ...
src/main/java/com/order/erp/controller/ProjectBaseDevelopOptLogController.java 0 → 100644
  1 +package com.order.erp.controller;
  2 +
  3 +import com.order.erp.common.constant.ServerResult;
  4 +import com.order.erp.domain.vo.order.ProjectOptLogQueryVO;
  5 +
  6 +import com.order.erp.service.order.ProjectBaseDevelopOptLogService;
  7 +import org.springframework.beans.factory.annotation.Autowired;
  8 +import org.springframework.web.bind.annotation.PostMapping;
  9 +import org.springframework.web.bind.annotation.RequestBody;
  10 +import org.springframework.web.bind.annotation.RequestMapping;
  11 +import org.springframework.web.bind.annotation.RestController;
  12 +
  13 +/**
  14 + * 净利润分析板块(业务研发净利润/内部生产净利润)--用户操作日志记录
  15 + * */
  16 +@RestController
  17 +@RequestMapping("/projectOptLog")
  18 +public class ProjectBaseDevelopOptLogController {
  19 + @Autowired
  20 + private ProjectBaseDevelopOptLogService projectBaseDevelopOptLogService;
  21 + /**
  22 + * 分页查询
  23 + * */
  24 + @PostMapping("/listByPage")
  25 + public ServerResult listByPage(@RequestBody ProjectOptLogQueryVO queryVO){
  26 + return projectBaseDevelopOptLogService.listByPage(queryVO);
  27 + }
  28 +
  29 +}
... ...
src/main/java/com/order/erp/controller/ProjectController.java 0 → 100644
  1 +package com.order.erp.controller;
  2 +
  3 +import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  4 +import com.order.erp.common.constant.ServerResult;
  5 +import com.order.erp.domain.vo.OrderProfitAnalysisVo;
  6 +import com.order.erp.domain.vo.order.*;
  7 +import com.order.erp.service.order.IOrderCostInfoService;
  8 +import com.order.erp.service.order.IProjectBaseInfoService;
  9 +import com.order.erp.service.order.OrderProfitAnalysisService;
  10 +import io.swagger.annotations.Api;
  11 +import io.swagger.annotations.ApiOperation;
  12 +import org.springframework.beans.factory.annotation.Autowired;
  13 +import org.springframework.validation.annotation.Validated;
  14 +import org.springframework.web.bind.annotation.*;
  15 +
  16 +import javax.annotation.Resource;
  17 +import javax.servlet.http.HttpServletResponse;
  18 +import java.util.Collections;
  19 +
  20 +/**
  21 + * @author zhongnanhuang
  22 + * @version 1.0
  23 + * @project order-erp
  24 + * @description 订单利润表控制层
  25 + * @date 2023/10/23 11:48:36
  26 + */
  27 +@RestController
  28 +@RequestMapping("/project")
  29 +@Api(tags = "项目信息")
  30 +public class ProjectController {
  31 + @Autowired
  32 + IOrderCostInfoService orderCostInfoService;
  33 + @Autowired
  34 + IProjectBaseInfoService projectBaseInfoService;
  35 +
  36 + @PostMapping("/edit")
  37 + @ApiOperation("编辑")
  38 + public ServerResult<OrderProfitAnalysisVO> edit(@RequestBody @Validated ProjectBaseInfoVO vo) {
  39 + return projectBaseInfoService.edit(vo);
  40 + }
  41 +
  42 + @PostMapping("/applyEditFileds")
  43 + @ApiOperation("申请修改")
  44 + public ServerResult<OrderProfitAnalysisVO> applyEditFileds(@RequestBody @Validated ProjectBaseInfoLockFieldVO vo) {
  45 + return projectBaseInfoService.applyEditFileds(vo);
  46 + }
  47 +
  48 + @PostMapping("/pageProjectLockFieldApply")
  49 + @ApiOperation("分页查询项目字段申请记录")
  50 + public ServerResult<OrderProfitAnalysisVO> pageProjectLockFieldApply(@RequestBody @Validated QueryProjectLockFieldVO vo) {
  51 + return projectBaseInfoService.pageProjectLockFieldApply(vo);
  52 + }
  53 +
  54 + @PostMapping("/audit")
  55 + @ApiOperation("审核")
  56 + public ServerResult<OrderProfitAnalysisVO> audit(@RequestBody @Validated AuditVO vo) {
  57 + return projectBaseInfoService.audit(vo);
  58 + }
  59 + @PostMapping("/InnerProfitInfo/listByPage")
  60 + @ApiOperation("内部生产利润分析表")
  61 + public ServerResult<Page<InnerProfitInfoVO>> listInnerProfitInfoByPage(@RequestBody @Validated OrderBaseInfoQueryVO queryVO) {
  62 + queryVO.setProductionDepartment(Collections.singletonList("内部"));
  63 + return projectBaseInfoService.listInnerProfitInfoByPage(queryVO);
  64 + }
  65 +
  66 + @PostMapping("/BusinessProfitInfo/listByPage")
  67 + @ApiOperation("业务研发净利润分析表")
  68 + public ServerResult<Page<BusinessProfitInfoVO>> listBusinessProfitInfosByPage(@RequestBody @Validated OrderBaseInfoQueryVO queryVO) {
  69 + return projectBaseInfoService.listBusinessProfitInfoByPage(queryVO);
  70 + }
  71 +
  72 + @PostMapping("/businessProfit/export")
  73 + @ApiOperation("业务研发净利润分析表单个导出")
  74 + public void exportBusinessProfitInfo(HttpServletResponse response, @RequestParam("projectNoPrefix") String projectNoPrefix) throws Exception {
  75 + projectBaseInfoService.exportBusinessProfitInfo(response, projectNoPrefix);
  76 + }
  77 +
  78 + @PostMapping("/innerProfit/export")
  79 + @ApiOperation("内部研发净利润分析表导出")
  80 + public void exportInnerProfitInfo(HttpServletResponse response, @RequestParam("projectNoPrefix") String projectNoPrefix) throws Exception {
  81 + projectBaseInfoService.exportInnerProfitInfo(response, projectNoPrefix);
  82 + }
  83 +
  84 + //直接通过查询传递多个projectNo去查询。
  85 + @PostMapping("/businessProfit/exportExcel")
  86 + @ApiOperation("业务研发净利润分析表多个导出")
  87 + public void exportBusinessProfitExcel(HttpServletResponse response, @RequestBody ProjectBaseInfoQueryVO queryVO) throws Exception {
  88 + projectBaseInfoService.exportBusinessProfitExcel(response, queryVO);
  89 + }
  90 + //直接通过查询传递多个projectNo去查询。
  91 + @PostMapping("/innerProfitInfo/exportExcel")
  92 + @ApiOperation("内部生产净利润分析表多个导出")
  93 + public void exportInnerProfitInfoExcel(HttpServletResponse response, @RequestBody ProjectBaseInfoQueryVO queryVO) throws Exception {
  94 + projectBaseInfoService.exportInnerProfitInfoExcel(response, queryVO);
  95 + }
  96 +
  97 + @PostMapping("/businessProfit/setStatus")
  98 + @ApiOperation("业务研发净利润分析表审核状态设置")
  99 + public void setProjectBaseInfoDevelopmentStatus(@RequestBody OrderBaseInfoVO vo) {
  100 + projectBaseInfoService.setProjectBaseInfoDevelopmentStatus(vo);
  101 + }
  102 + //直接通过查询传递多个projectNo去查询。
  103 + @PostMapping("/innerProfitInfo/setStatus")
  104 + @ApiOperation("内部生产净利润分析表审核状态设置")
  105 + public void setInnerProductionStatus(@RequestBody OrderBaseInfoVO vo) {
  106 + projectBaseInfoService.setInnerProductionStatus(vo);
  107 + }
  108 +
  109 +}
... ...
src/main/java/com/order/erp/domain/ApplyTypeEnum.java
... ... @@ -32,4 +32,13 @@ public enum ApplyTypeEnum {
32 32 private Integer type;
33 33  
34 34 private String desc;
  35 +
  36 + public static String getNameByType(Integer type) {
  37 + for (ApplyTypeEnum value : ApplyTypeEnum.values()) {
  38 + if (value.getType().equals(type)) {
  39 + return value.getDesc();
  40 + }
  41 + }
  42 + return null;
  43 + }
35 44 }
... ...
src/main/java/com/order/erp/domain/OrderCostApplyTpeEnum.java 0 → 100644
  1 +package com.order.erp.domain;
  2 +
  3 +import lombok.AllArgsConstructor;
  4 +import lombok.Getter;
  5 +
  6 +@Getter
  7 +@AllArgsConstructor
  8 +public enum OrderCostApplyTpeEnum {
  9 +
  10 + ORDER_PACKET_COST_FIELD_EDIT_APPLY(60,"订单包装费用明细字段申请"),
  11 +
  12 + ORDER_PRODUCTION_COST_FIELD_EDIT_APPLY(70,"订单生产费用明细字段申请"),
  13 + ;
  14 +
  15 + private Integer type;
  16 + private String desc;
  17 +
  18 + public static String getNameByType(Integer type) {
  19 + for (OrderCostApplyTpeEnum e : OrderCostApplyTpeEnum.values()) {
  20 + if (e.getType().equals(type)) {
  21 + return e.getDesc();
  22 + }
  23 + }
  24 + return null;
  25 + }
  26 +}
... ...
src/main/java/com/order/erp/domain/OrderOptTypeEnum.java
... ... @@ -29,6 +29,21 @@ public enum OrderOptTypeEnum {
29 29  
30 30 ORDER_INSPECT_EDIT_APPLY(60, "质检信息编辑"),
31 31  
  32 + //后续添加部分(净利润分析板块)
  33 + PROJECT_DEVELOPMENT_PROFIT_EDIT(70,"业务研发净利润编辑"),
  34 + PROJECT_DEVELOPMENT_PROFIT_ADD(75,"业务研发净利润创建"),
  35 +// PROJECT_DEVELOPMENT_FIELD_EDIT_APPLY(77,"业务研发净利润字段编辑申请"),
  36 + PROJECT_COST_EDIT(80,"包装费用明细编辑"),
  37 + PROJECT_COST_ADD(85,"包装费用明细创建"),
  38 +// PROJECT_COST_FIELD_EDIT_APPLY(87,"包装费用明细表字段编辑申请"),
  39 + PROJECT_INNER_PRODUCE_EDIT(90,"内部生产净利润编辑"),
  40 + PROJECT_INNER_PRODUCE_ADD(95,"内部生产净利润创建"),
  41 +// PROJECT_INNER_PRODUCE_FIELD_EDIT_APPLY(97,"内部生产净利润字段编辑申请"),
  42 + PROJECT_INNER_PRODUCE_PROFIT_EDIT(100,"内部生产明细表编辑"),
  43 + PROJECT_INNER_PRODUCE_PROFIT_ADD(105,"内部生产明细表创建"),
  44 +// PROJECT_INNER_PRODUCE_PROFIT_FIELD_EDIT_APPLY(107,"内部研发净明细表字段编辑申请"),
  45 +
  46 +
32 47 ;
33 48 private Integer type;
34 49  
... ...
src/main/java/com/order/erp/domain/ProfitStatusEnum.java 0 → 100644
  1 +package com.order.erp.domain;
  2 +
  3 +import lombok.AllArgsConstructor;
  4 +import lombok.Getter;
  5 +/**
  6 + * 净利润板块的各个表的状态字段。
  7 + * */
  8 +@Getter
  9 +@AllArgsConstructor
  10 +public enum ProfitStatusEnum {
  11 + Not_COMPLETED(-1, "未完成"),
  12 + PENDING_APPROVAL(0, "待审核"),
  13 + APPROVED(1, "已审核"),
  14 + ;
  15 + private Integer status;
  16 + private String desc;
  17 +}
... ...
src/main/java/com/order/erp/domain/ProjectApplyTypeEnum.java 0 → 100644
  1 +package com.order.erp.domain;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.EnumValue;
  4 +import com.fasterxml.jackson.annotation.JsonValue;
  5 +import lombok.AllArgsConstructor;
  6 +import lombok.Getter;
  7 +
  8 +/**
  9 + * @author: xms
  10 + * @description: TODO
  11 + * @date: 2023/9/13 18:05
  12 + * @version: 1.0
  13 + */
  14 +@Getter
  15 +@AllArgsConstructor
  16 +public enum ProjectApplyTypeEnum {
  17 +
  18 + FIELD_EDIT_APPLY(0, "业务利润字段编辑申请"),
  19 + INNER_PROFIT_FIELD_EDIT_APPLY(1, "内部利润字段编辑申请"),
  20 + ;
  21 +
  22 + private Integer type;
  23 +
  24 + private String desc;
  25 + public static String getDescByName(String type) {
  26 + for (ProjectApplyTypeEnum value : ProjectApplyTypeEnum.values()) {
  27 + if (value.name().equals(type)) {
  28 + return value.getDesc();
  29 + }
  30 + }
  31 + return null;
  32 + }
  33 +}
... ...
src/main/java/com/order/erp/domain/ProjectBaseSettingTypeEnum.java 0 → 100644
  1 +package com.order.erp.domain;
  2 +
  3 +import lombok.AllArgsConstructor;
  4 +import lombok.Getter;
  5 +
  6 +@Getter
  7 +@AllArgsConstructor
  8 +public enum ProjectBaseSettingTypeEnum {
  9 + COMMISSION_COST(1, "提成成本配置"),
  10 + FIXED_COST_OF_PRODUCTION_DEPARTMENT(2, "生产科固定成本配置"),
  11 + ;
  12 + private Integer type;
  13 +
  14 + private String desc;
  15 +}
... ...
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/ProjectOptTypeEnum.java 0 → 100644
  1 +package com.order.erp.domain;
  2 +
  3 +import lombok.AllArgsConstructor;
  4 +import lombok.Getter;
  5 +/**
  6 + * 净利润分析板块下的项目类型枚举
  7 + */
  8 +@Getter
  9 +@AllArgsConstructor
  10 +public enum ProjectOptTypeEnum {
  11 + BUSINESS_NET_PROFIT_TYPE(10, "业务研发净利润类型"),
  12 +
  13 + PACKAGING_COST_TYPE(20, "包装费用类型"),
  14 +
  15 + INTERNAL_BUSINESS_NET_PROFIT_TYPE(30, "内部生产净利润类型"),
  16 +
  17 + INTERNAL_PRODUCE_DETAILS_TYPE(40, "内部生产明细表类型"),
  18 + ;
  19 +
  20 + private Integer type;
  21 +
  22 + private String desc;
  23 +}
... ...
src/main/java/com/order/erp/domain/dto/order/OrderCostDetailedOptLogDO.java 0 → 100644
  1 +package com.order.erp.domain.dto.order;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.TableName;
  4 +import com.order.erp.domain.dto.BaseDO;
  5 +import lombok.*;
  6 +import lombok.experimental.SuperBuilder;
  7 +
  8 +import java.io.Serializable;
  9 +
  10 +/**
  11 + * 包装费用,内部生产明细操作日志表(OrderCostDetailedOptLogDO)实体类
  12 + *
  13 + * @author makejava
  14 + * @since 2023-09-08 15:14:46
  15 + */
  16 +@TableName("order_cost_detailed_opt_log")
  17 +@Data
  18 +@AllArgsConstructor
  19 +@ToString
  20 +@NoArgsConstructor
  21 +@EqualsAndHashCode(callSuper = false)
  22 +@SuperBuilder
  23 +public class OrderCostDetailedOptLogDO extends BaseDO implements Serializable {
  24 + private Long id;
  25 + private Long orderId;
  26 + /**
  27 + * 用户id
  28 + */
  29 + private Long userId;
  30 + /**
  31 + * 操作类型
  32 + */
  33 + private Integer type;
  34 +
  35 + /**
  36 + * 操作类型描述
  37 + */
  38 + private String optType;
  39 + /**
  40 + * 操作字段 json字符串
  41 + */
  42 + private String fields;
  43 +}
... ...
src/main/java/com/order/erp/domain/dto/order/OrderCostInfoDO.java 0 → 100644
  1 +package com.order.erp.domain.dto.order;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.TableName;
  4 +import com.baomidou.mybatisplus.annotation.IdType;
  5 +import com.baomidou.mybatisplus.annotation.TableId;
  6 +import java.io.Serializable;
  7 +import java.math.BigDecimal;
  8 +
  9 +import com.order.erp.domain.dto.BaseDO;
  10 +import io.swagger.annotations.ApiModel;
  11 +import lombok.AllArgsConstructor;
  12 +import lombok.Data;
  13 +import lombok.EqualsAndHashCode;
  14 +import lombok.NoArgsConstructor;
  15 +import lombok.experimental.SuperBuilder;
  16 +
  17 +/**
  18 + * <p>
  19 + *
  20 + * </p>
  21 + *
  22 + * @author author
  23 + * @since 2024-12-22
  24 + */
  25 +@Data
  26 +@EqualsAndHashCode(callSuper = false)
  27 +@SuperBuilder
  28 +@AllArgsConstructor
  29 +@NoArgsConstructor
  30 +@TableName("order_cost_info")
  31 +@ApiModel(value="OrderCostinfo对象", description="")
  32 +public class OrderCostInfoDO extends BaseDO implements Serializable {
  33 +
  34 + private static final long serialVersionUID = 1L;
  35 +
  36 + @TableId(value = "id", type = IdType.AUTO)
  37 + private Long id;
  38 +
  39 + private Long orderId;
  40 +
  41 + private BigDecimal productionDepartmentPredictPrice;
  42 +
  43 + private BigDecimal productionActualPrice;
  44 +
  45 + private BigDecimal packetActualRmbTotalPrice;
  46 + //包装费用明细表状态。
  47 + private Integer packStatus;
  48 + //内部生产明细表状态。
  49 + private Integer innerProduceStatus;
  50 +
  51 +}
... ...
src/main/java/com/order/erp/domain/dto/order/OrderProfitAnalysisDO.java
... ... @@ -6,6 +6,7 @@ import lombok.*;
6 6 import lombok.experimental.SuperBuilder;
7 7  
8 8 import java.io.Serializable;
  9 +import java.math.BigDecimal;
9 10  
10 11 /**
11 12 * 订单利润分析表(OrderProfitAnalysis)实体类
... ...
src/main/java/com/order/erp/domain/dto/order/ProjectBaseAfterReviewSettingDO.java 0 → 100644
  1 +package com.order.erp.domain.dto.order;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.TableName;
  4 +import lombok.*;
  5 +import lombok.experimental.SuperBuilder;
  6 +
  7 +import java.math.BigDecimal;
  8 +/**
  9 + * 存储,内部业务研发净利润审核通过的配置,以及内部生产净利润审核通过的配置 因为这个配置是每年都会改变,所以需要保存当时审核年份的配置,防止切换到其他年份配置更改之后,之前的数据又会被重新计算。
  10 + * */
  11 +@TableName("project_base_after_review_setting")
  12 +@Data
  13 +@AllArgsConstructor
  14 +@ToString
  15 +@NoArgsConstructor
  16 +@EqualsAndHashCode(callSuper = false)
  17 +@SuperBuilder
  18 +public class ProjectBaseAfterReviewSettingDO {
  19 + private Long id;
  20 + /**
  21 + * 存储项目号,可能存储项目号的前八位(业务研发净利润专属),也可能存储完整的项目号(内部生产净利润)
  22 + * */
  23 + private String projectNoPrefix;
  24 + /**
  25 + * type=1代表为提成成本配置,type=2代表为生产科固定成本配置
  26 + * */
  27 + private Integer type;
  28 +
  29 + /**
  30 + * 审核通过时的配置数据。 --提成成本配置或者生产科固定成本中的固定成本。 type=1代表为提成成本配置,type=2代表为生产科固定成本配置
  31 + * */
  32 + private BigDecimal fixedCost;
  33 + /**
  34 + * 审核通过时的配置数据。 --提成成本配置中的提成比例。
  35 + * */
  36 + private BigDecimal commissionRate;
  37 +
  38 + /**
  39 + * 审核通过时的配置数据。 --提成成本配置中的西班牙提成比例。
  40 + * */
  41 + private BigDecimal spainCommissionRate;
  42 +
  43 + /**
  44 + * 审核通过时的配置数据。 --生产科固定成本配置中的提成单价。
  45 + * */
  46 + private BigDecimal commissionUnitPrice;
  47 +}
... ...
src/main/java/com/order/erp/domain/dto/order/ProjectBaseDevelopOptLogDO.java 0 → 100644
  1 +package com.order.erp.domain.dto.order;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.TableName;
  4 +import com.order.erp.domain.dto.BaseDO;
  5 +import lombok.*;
  6 +import lombok.experimental.SuperBuilder;
  7 +
  8 +import java.io.Serializable;
  9 +
  10 +/**
  11 + * 用户业务研发,内部生产操作日志表(ProjectBaseDevelopOptLogDO)实体类
  12 + *
  13 + * @author makejava
  14 + * @since 2023-09-08 15:14:46
  15 + */
  16 +@TableName("project_base_develop_opt_log")
  17 +@Data
  18 +@AllArgsConstructor
  19 +@ToString
  20 +@NoArgsConstructor
  21 +@EqualsAndHashCode(callSuper = false)
  22 +@SuperBuilder
  23 +public class ProjectBaseDevelopOptLogDO extends BaseDO implements Serializable {
  24 + private static final long serialVersionUID = -79481441736960701L;
  25 +
  26 + private Long id;
  27 + /**
  28 + * 项目号前八位前缀 或者前十位前缀
  29 + */
  30 + private String projectNoPrefix;
  31 + /**
  32 + * 用户id
  33 + */
  34 + private Long userId;
  35 + /**
  36 + * 操作类型
  37 + */
  38 + private Integer type;
  39 +
  40 + /**
  41 + * 操作类型描述
  42 + */
  43 + private String optType;
  44 + /**
  45 + * 操作字段 json字符串
  46 + */
  47 + private String fields;
  48 +
  49 +}
... ...
src/main/java/com/order/erp/domain/dto/order/ProjectBaseInfoDO.java 0 → 100644
  1 +package com.order.erp.domain.dto.order;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.TableName;
  4 +import com.baomidou.mybatisplus.annotation.IdType;
  5 +import com.baomidou.mybatisplus.annotation.TableId;
  6 +
  7 +import java.math.BigDecimal;
  8 +import java.time.LocalDateTime;
  9 +import java.io.Serializable;
  10 +
  11 +import com.order.erp.domain.dto.BaseDO;
  12 +import io.swagger.annotations.ApiModel;
  13 +import lombok.Data;
  14 +import lombok.EqualsAndHashCode;
  15 +import lombok.experimental.Accessors;
  16 +
  17 +/**
  18 + * <p>
  19 + *
  20 + * </p>
  21 + *
  22 + * @author author
  23 + * @since 2024-12-18
  24 + */
  25 +@Data
  26 +@EqualsAndHashCode(callSuper = false)
  27 +@Accessors(chain = true)
  28 +@TableName("project_base_info")
  29 +@ApiModel(value="ProjectBaseInfoDO", description="")
  30 +public class ProjectBaseInfoDO extends BaseDO implements Serializable {
  31 +
  32 + private static final long serialVersionUID = 1L;
  33 +
  34 + @TableId(value = "id", type = IdType.AUTO)
  35 + private Long id;
  36 + /**
  37 + * 项目号的前缀 例如:A05-2303-2391,projectNoPrefix就是A05-2303。
  38 + * */
  39 + private String projectNoPrefix;
  40 + /**
  41 + * 研发复制费合计¥
  42 + * */
  43 + private BigDecimal developmentCopyRmbTotalPrice;
  44 + /**
  45 + * 项目开始时间
  46 + * */
  47 + private LocalDateTime projectStartTime;
  48 + /**
  49 + * 项目结束时间
  50 + * */
  51 + private LocalDateTime projectEndTime;
  52 +
  53 + private LocalDateTime projectInnerProfitInfoStartTime;
  54 +
  55 + private LocalDateTime projectInnerProfitInfoEndTime;
  56 +
  57 + /**
  58 + * 西班牙已发提成
  59 + * */
  60 + private BigDecimal spainPaidRmbCommission;
  61 + /**
  62 + * 中国团队已发提成
  63 + * */
  64 + private BigDecimal paidRmbCommission;
  65 + /**
  66 + * 实际汇率
  67 + * */
  68 + private BigDecimal actualExchangeRate;
  69 +
  70 + /**
  71 + * 业务研发净利润分析表审核状态
  72 + * */
  73 + private Integer developmentStatus;
  74 + /**
  75 + * 内部生产净利润分析表审核状态
  76 + * */
  77 + private Integer innerProductionStatus;
  78 +
  79 +}
... ...
src/main/java/com/order/erp/domain/model/OrderCostFieldLockRecord.java 0 → 100644
  1 +package com.order.erp.domain.model;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.TableName;
  4 +import com.baomidou.mybatisplus.annotation.IdType;
  5 +import com.baomidou.mybatisplus.annotation.TableId;
  6 +import java.time.LocalDateTime;
  7 +import com.baomidou.mybatisplus.annotation.FieldFill;
  8 +import com.baomidou.mybatisplus.annotation.TableField;
  9 +import java.io.Serializable;
  10 +
  11 +import com.order.erp.domain.dto.BaseDO;
  12 +import io.swagger.annotations.ApiModel;
  13 +import io.swagger.annotations.ApiModelProperty;
  14 +import lombok.AllArgsConstructor;
  15 +import lombok.Data;
  16 +import lombok.EqualsAndHashCode;
  17 +import lombok.NoArgsConstructor;
  18 +import lombok.experimental.Accessors;
  19 +import lombok.experimental.SuperBuilder;
  20 +
  21 +/**
  22 + * <p>
  23 + *
  24 + * </p>
  25 + *
  26 + * @author author
  27 + * @since 2024-12-22
  28 + */
  29 +@Data
  30 +@EqualsAndHashCode(callSuper = false)
  31 +@SuperBuilder
  32 +@NoArgsConstructor
  33 +@AllArgsConstructor
  34 +@TableName("order_cost_field_lock_record")
  35 +@ApiModel(value="OrderCostFieldLockRecord对象", description="")
  36 +public class OrderCostFieldLockRecord extends BaseDO implements Serializable {
  37 +
  38 + private static final long serialVersionUID = 1L;
  39 +
  40 + @TableId(value = "id", type = IdType.AUTO)
  41 + private Long id;
  42 +
  43 + private String fields;
  44 +
  45 + private Long userId;
  46 +
  47 + private Long orderId;
  48 +
  49 +
  50 +
  51 +}
... ...
src/main/java/com/order/erp/domain/model/ProjectApplyDO.java 0 → 100644
  1 +package com.order.erp.domain.model;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.TableName;
  4 +import com.baomidou.mybatisplus.annotation.IdType;
  5 +import com.baomidou.mybatisplus.annotation.TableId;
  6 +
  7 +import java.io.Serializable;
  8 +
  9 +import com.order.erp.domain.ProjectApplyTypeEnum;
  10 +import com.order.erp.domain.dto.BaseDO;
  11 +import io.swagger.annotations.ApiModel;
  12 +import io.swagger.annotations.ApiModelProperty;
  13 +import lombok.AllArgsConstructor;
  14 +import lombok.Data;
  15 +import lombok.EqualsAndHashCode;
  16 +import lombok.NoArgsConstructor;
  17 +import lombok.experimental.SuperBuilder;
  18 +
  19 +/**
  20 + * <p>
  21 + * 项目-字段锁定申请表
  22 + * </p>
  23 + *
  24 + * @author author
  25 + * @since 2024-12-22
  26 + */
  27 +@Data
  28 +@EqualsAndHashCode(callSuper = false)
  29 +@SuperBuilder
  30 +@AllArgsConstructor
  31 +@NoArgsConstructor
  32 +@TableName("project_apply")
  33 +@ApiModel(value="ProjectFieldLockApply对象", description="项目-字段锁定申请表")
  34 +public class ProjectApplyDO extends BaseDO implements Serializable {
  35 +
  36 + private static final long serialVersionUID = 1L;
  37 +
  38 + @TableId(value = "id", type = IdType.AUTO)
  39 + private Long id;
  40 +
  41 + @ApiModelProperty(value = "项目号")
  42 + private String projectNoPrefix;
  43 +
  44 +
  45 + @ApiModelProperty(value = "申请用户id")
  46 + private Long applyUserId;
  47 +
  48 + @ApiModelProperty(value = "审批用户id")
  49 + private Long auditUserId;
  50 +
  51 + @ApiModelProperty(value = "锁定字段 json字符串")
  52 + private String fields;
  53 +
  54 + @ApiModelProperty(value = "锁定字段 json字符串")
  55 + private String type;
  56 +
  57 + @ApiModelProperty(value = "状态:0 待审批,1 通过,2 拒绝")
  58 + private Integer status;
  59 +
  60 + @ApiModelProperty(value = "审核备注")
  61 + private String auditRemark;
  62 +
  63 + @ApiModelProperty(value = "审批角色code集合,分割")
  64 + private String auditRoleCodes;
  65 +
  66 + @ApiModelProperty(value = "申请原因")
  67 + private String applyRemark;
  68 +
  69 +
  70 +
  71 +}
... ...
src/main/java/com/order/erp/domain/model/ProjectFieldLockRecord.java 0 → 100644
  1 +package com.order.erp.domain.model;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.TableName;
  4 +import com.baomidou.mybatisplus.annotation.IdType;
  5 +import com.baomidou.mybatisplus.annotation.TableId;
  6 +import java.time.LocalDateTime;
  7 +import com.baomidou.mybatisplus.annotation.FieldFill;
  8 +import com.baomidou.mybatisplus.annotation.TableField;
  9 +import java.io.Serializable;
  10 +
  11 +import com.order.erp.domain.dto.BaseDO;
  12 +import io.swagger.annotations.ApiModel;
  13 +import io.swagger.annotations.ApiModelProperty;
  14 +import lombok.AllArgsConstructor;
  15 +import lombok.Data;
  16 +import lombok.EqualsAndHashCode;
  17 +import lombok.NoArgsConstructor;
  18 +import lombok.experimental.Accessors;
  19 +import lombok.experimental.SuperBuilder;
  20 +
  21 +/**
  22 + * <p>
  23 + * 项目-字段锁定记录表
  24 + * </p>
  25 + *
  26 + * @author author
  27 + * @since 2024-12-22
  28 + */
  29 +@Data
  30 +@EqualsAndHashCode(callSuper = false)
  31 +@AllArgsConstructor
  32 +@NoArgsConstructor
  33 +@SuperBuilder
  34 +@TableName("project_field_lock_record")
  35 +@ApiModel(value="ProjectFieldLockRecord对象", description="项目-字段锁定记录表")
  36 +public class ProjectFieldLockRecord extends BaseDO implements Serializable {
  37 +
  38 + private static final long serialVersionUID = 1L;
  39 +
  40 + @TableId(value = "id", type = IdType.AUTO)
  41 + private Long id;
  42 +
  43 +
  44 + @ApiModelProperty(value = "项目号")
  45 + private String projectNoPrefix;
  46 +
  47 + @ApiModelProperty(value = "用户id")
  48 + private Long userId;
  49 +
  50 + @ApiModelProperty(value = "锁定字段 json字符串")
  51 + private String fields;
  52 +
  53 +
  54 +
  55 +}
... ...
src/main/java/com/order/erp/domain/vo/order/AuditVO.java
1 1 package com.order.erp.domain.vo.order;
2 2  
3 3 import com.order.erp.domain.vo.BasePageVO;
  4 +import io.swagger.annotations.ApiModelProperty;
4 5 import lombok.*;
5 6 import lombok.experimental.SuperBuilder;
6 7  
... ... @@ -17,23 +18,26 @@ import java.io.Serializable;
17 18 @NoArgsConstructor
18 19 @EqualsAndHashCode(callSuper = false)
19 20 @SuperBuilder
20   -public class AuditVO extends BasePageVO implements Serializable {
  21 +public class AuditVO implements Serializable {
21 22  
22 23 /**
23 24 * 申请id
24 25 */
25 26 @NotNull(message = "申请id不能为空")
  27 + @ApiModelProperty(value = "申请id", required = true)
26 28 private Long id;
27 29  
28 30 /**
29 31 * 状态:1 通过,2 拒绝
30 32 */
31 33 @NotNull(message = "状态不能为空")
  34 + @ApiModelProperty(value = "状态:1 通过,2 拒绝", required = true)
32 35 private Integer status;
33 36  
34 37 /**
35 38 * 拒绝原因备注
36 39 */
  40 + @ApiModelProperty(value = "拒绝原因备注")
37 41 private String refuseRemark;
38 42 }
39 43  
... ...
src/main/java/com/order/erp/domain/vo/order/BusinessCostExportSelect.java 0 → 100644
  1 +package com.order.erp.domain.vo.order;
  2 +
  3 +import io.swagger.annotations.ApiModelProperty;
  4 +import lombok.*;
  5 +import lombok.experimental.SuperBuilder;
  6 +
  7 +
  8 +
  9 +@Data
  10 +@AllArgsConstructor
  11 +@ToString
  12 +@NoArgsConstructor
  13 +@EqualsAndHashCode(callSuper = false)
  14 +@SuperBuilder
  15 +public class BusinessCostExportSelect {
  16 + /**
  17 + * 包装费用$
  18 + */
  19 + @ApiModelProperty(value = "包装费用(美元)")
  20 + private String packetPrice;
  21 +
  22 + /**
  23 + * 包装费用合计$
  24 + */
  25 + @ApiModelProperty(value = "包装费用合计(美元)")
  26 + private String packetTotalPrice;
  27 +
  28 + /**
  29 + * 包装费用合计¥
  30 + */
  31 + @ApiModelProperty(value = "包装费用合计(人民币)")
  32 + private String packetRmbTotalPrice;
  33 +
  34 + /**
  35 + * 包装费用实际金额
  36 + */
  37 + @ApiModelProperty(value = "包装费用实际金额(人民币)")
  38 + private String packetActualRmbTotalPrice;
  39 +
  40 + /**
  41 + * 实际跟单单价¥
  42 + */
  43 + @ApiModelProperty(value = "实际跟单单价(人民币)")
  44 + private String packetActualRmbPrice;
  45 +
  46 + /**
  47 + * 实际跟单单价$
  48 + */
  49 + @ApiModelProperty(value = "实际跟单单价(美元)")
  50 + private String packetActualPrice;
  51 +
  52 + /**
  53 + * 包装费用收益
  54 + */
  55 + @ApiModelProperty(value = "包装费用收益(人民币)")
  56 + private String packetProfitRmbPrice;
  57 +
  58 + /**
  59 + * 包装费用利润率
  60 + */
  61 + @ApiModelProperty(value = "包装费用利润率")
  62 + private String packetProfitRate;
  63 +
  64 +}
... ...
src/main/java/com/order/erp/domain/vo/order/BusinessProfitDetailVO.java 0 → 100644
  1 +package com.order.erp.domain.vo.order;
  2 +
  3 +import io.swagger.annotations.ApiModelProperty;
  4 +import lombok.*;
  5 +import lombok.experimental.SuperBuilder;
  6 +
  7 +import java.io.Serializable;
  8 +import java.math.BigDecimal;
  9 +
  10 +/**
  11 + * 业务/研发净利润分析
  12 + *
  13 + * @author makejava
  14 + * @since 2024-08-05 16:26:34
  15 + */
  16 +@Data
  17 +@AllArgsConstructor
  18 +@ToString
  19 +@NoArgsConstructor
  20 +@EqualsAndHashCode(callSuper = false)
  21 +@SuperBuilder
  22 +public class BusinessProfitDetailVO implements Serializable {
  23 +
  24 +
  25 + /**
  26 + * 客户编码
  27 + */
  28 + @ApiModelProperty(value = "客户编码")
  29 + private String customerCode;
  30 +
  31 + /**
  32 + * 项目号
  33 + */
  34 + @ApiModelProperty(value = "订单id")
  35 + private Long orderId;
  36 +
  37 + /**
  38 + * 项目号
  39 + */
  40 + @ApiModelProperty(value = "项目号")
  41 + private String projectNo;
  42 +
  43 + /**
  44 + * 生产科
  45 + */
  46 + @ApiModelProperty(value = "生产部门")
  47 + private String productionDepartment;
  48 +
  49 + /**
  50 + * 内部编号
  51 + */
  52 + @ApiModelProperty(value = "内部编号")
  53 + private String innerNo;
  54 +
  55 + /**
  56 + * pic图片地址
  57 + */
  58 + @ApiModelProperty(value = "图片地址")
  59 + private String picUrl;
  60 +
  61 + /**
  62 + * 订单数量
  63 + */
  64 + @ApiModelProperty(value = "订单数量")
  65 + private Integer orderCount;
  66 +
  67 + /**
  68 + * 包装费用$
  69 + */
  70 + @ApiModelProperty(value = "包装费用(美元)")
  71 + private Double packetPrice;
  72 +
  73 + /**
  74 + * 包装费用合计$
  75 + */
  76 + @ApiModelProperty(value = "包装费用合计(美元)")
  77 + private Double packetTotalPrice;
  78 +
  79 + /**
  80 + * 包装费用合计¥
  81 + */
  82 + @ApiModelProperty(value = "包装费用合计(人民币)")
  83 + private Double packetRmbTotalPrice;
  84 +
  85 + /**
  86 + * 包装费用实际金额
  87 + */
  88 + @ApiModelProperty(value = "包装费用实际金额(人民币)")
  89 + private BigDecimal packetActualRmbTotalPrice;
  90 +
  91 + /**
  92 + * 实际跟单单价¥
  93 + */
  94 + @ApiModelProperty(value = "实际跟单单价(人民币)")
  95 + private BigDecimal packetActualRmbPrice;
  96 +
  97 + /**
  98 + * 实际跟单单价$
  99 + */
  100 + @ApiModelProperty(value = "实际跟单单价(美元)")
  101 + private BigDecimal packetActualPrice;
  102 +
  103 + /**
  104 + * 包装费用收益
  105 + */
  106 + @ApiModelProperty(value = "包装费用收益(人民币)")
  107 + private BigDecimal packetProfitRmbPrice;
  108 +
  109 + /**
  110 + * 包装费用利润率
  111 + */
  112 + @ApiModelProperty(value = "包装费用利润率")
  113 + private BigDecimal packetProfitRate;
  114 + /**
  115 + * 包装费用明细表状态
  116 + */
  117 + @ApiModelProperty(value = "包装费用明细表状态")
  118 + private Integer packStatus;
  119 +
  120 + /**
  121 + * 锁定字段信息
  122 + */
  123 + @ApiModelProperty(value = "锁定字段信息")
  124 + private OrderCostInfolockFieldVO lockFields;
  125 +
  126 +
  127 +}
  128 +
... ...
src/main/java/com/order/erp/domain/vo/order/BusinessProfitInfoVO.java 0 → 100644
  1 +package com.order.erp.domain.vo.order;
  2 +
  3 +import io.swagger.annotations.ApiModelProperty;
  4 +import lombok.*;
  5 +import lombok.experimental.SuperBuilder;
  6 +
  7 +import java.io.Serializable;
  8 +import java.math.BigDecimal;
  9 +import java.time.LocalDateTime;
  10 +import java.util.List;
  11 +import java.util.Set;
  12 +
  13 +/**
  14 + * 业务/研发净利润分析
  15 + *
  16 + * @author makejava
  17 + * @since 2024-08-05 16:26:34
  18 + */
  19 +@Data
  20 +@AllArgsConstructor
  21 +@ToString
  22 +@NoArgsConstructor
  23 +@EqualsAndHashCode(callSuper = false)
  24 +@SuperBuilder
  25 +public class BusinessProfitInfoVO implements Serializable {
  26 +
  27 +
  28 + /**
  29 + * 客户编码
  30 + */
  31 + @ApiModelProperty(value = "客户编码")
  32 + private String customerCode;
  33 +
  34 + /**
  35 + * 项目号
  36 + */
  37 + @ApiModelProperty(value = "项目号")
  38 + private String projectNoPrefix;
  39 +
  40 + @ApiModelProperty(value = "完整项目号,用于当做id来使用,因为没有返回id所以无法确实操作的是那一条数据,所以需要完整的项目号来确认是哪一条数据")
  41 + private Set<String> detailProjectNo;
  42 +
  43 + /**
  44 + * 客户总价¥
  45 + */
  46 + @ApiModelProperty(value = "客户总价(人民币)")
  47 + private Double customerRmbTotalPrice;
  48 +
  49 + /**
  50 + * 客户总价¥
  51 + */
  52 + @ApiModelProperty(value = "客户总价")
  53 + private Double customerTotalPrice;
  54 +
  55 + /**
  56 + * 生成科总价¥
  57 + */
  58 + @ApiModelProperty(value = "生产部门总价")
  59 + private Double productionDepartmentTotalPrice;
  60 +
  61 + /**
  62 + * 生产科
  63 + */
  64 + @ApiModelProperty(value = "生产部门")
  65 + private String productionDepartment;
  66 +
  67 + /**
  68 + * 内部编号
  69 + */
  70 + @ApiModelProperty(value = "内部编号")
  71 + private String innerNo;
  72 +
  73 + /**
  74 + * pic图片地址
  75 + */
  76 + @ApiModelProperty(value = "图片地址")
  77 + private String picUrl;
  78 +
  79 + /**
  80 + * 订单数量
  81 + */
  82 + @ApiModelProperty(value = "订单数量")
  83 + private Integer orderCount;
  84 +
  85 + /**
  86 + * 包装费用$
  87 + */
  88 + @ApiModelProperty(value = "包装费用(美元)")
  89 + private Double packetPrice;
  90 +
  91 + /**
  92 + * 包装费用合计$
  93 + */
  94 + @ApiModelProperty(value = "包装费用合计(美元)")
  95 + private Double packetTotalPrice;
  96 +
  97 + /**
  98 + * 包装费用合计¥
  99 + */
  100 + @ApiModelProperty(value = "包装费用合计(人民币)")
  101 + private Double packetRmbTotalPrice;
  102 +
  103 + /**
  104 + * 包装费用实际金额
  105 + */
  106 + @ApiModelProperty(value = "包装费用实际金额(人民币)")
  107 + private BigDecimal packetActualRmbTotalPrice;
  108 +
  109 + /**
  110 + * 包装费用实际金额¥
  111 + */
  112 + @ApiModelProperty(value = "包装费用实际金额(人民币)")
  113 + private BigDecimal packetActualRmbPrice;
  114 +
  115 + /**
  116 + * 包装费用实际金额$
  117 + */
  118 + @ApiModelProperty(value = "包装费用实际金额(美元)")
  119 + private BigDecimal packetActualPrice;
  120 +
  121 + /**
  122 + * 包装费用收益
  123 + */
  124 + @ApiModelProperty(value = "包装费用收益(人民币)")
  125 + private BigDecimal packetProfitRmbPrice;
  126 +
  127 + /**
  128 + * 包装费用利润率
  129 + */
  130 + @ApiModelProperty(value = "包装费用利润率")
  131 + private BigDecimal packetProfitRate;
  132 +
  133 + /**
  134 + * 研发复制费合计¥
  135 + */
  136 + @ApiModelProperty(value = "研发复制费合计(人民币)")
  137 + private BigDecimal developmentCopyRmbTotalPrice;
  138 +
  139 + /**
  140 + * 固定成本
  141 + */
  142 + @ApiModelProperty(value = "固定成本")
  143 + private BigDecimal fixedCost;
  144 +
  145 + /**
  146 + * 西班牙已发提成¥
  147 + */
  148 + @ApiModelProperty(value = "西班牙已发提成(人民币)")
  149 + private BigDecimal spainPaidRmbCommission;
  150 +
  151 + /**
  152 + * 西班牙提成¥
  153 + */
  154 + @ApiModelProperty(value = "西班牙提成(人民币)")
  155 + private BigDecimal spainRmbCommission;
  156 +
  157 + /**
  158 + * 西班牙未发提成¥
  159 + */
  160 + @ApiModelProperty(value = "西班牙未发提成(人民币)")
  161 + private BigDecimal spainUnpaidRmbCommission;
  162 +
  163 + /**
  164 + * 已发提成¥
  165 + */
  166 + @ApiModelProperty(value = "已发提成(人民币)")
  167 + private BigDecimal paidRmbCommission;
  168 +
  169 + /**
  170 + * 提成¥
  171 + */
  172 + @ApiModelProperty(value = "提成(人民币)")
  173 + private BigDecimal rmbCommission;
  174 +
  175 + /**
  176 + * 未发提成¥
  177 + */
  178 + @ApiModelProperty(value = "未发提成(人民币)")
  179 + private BigDecimal unpaidRmbCommission;
  180 +
  181 + /**
  182 + * 实际汇率
  183 + */
  184 + @ApiModelProperty(value = "实际汇率")
  185 + private BigDecimal actualExchangeRate;
  186 +
  187 + /**
  188 + * 支出合计
  189 + */
  190 + @ApiModelProperty(value = "支出合计(人民币)")
  191 + private BigDecimal rmbTotalExpense;
  192 +
  193 + /**
  194 + * 毛利润
  195 + */
  196 + @ApiModelProperty(value = "毛利润")
  197 + private BigDecimal profit;
  198 +
  199 + /**
  200 + * 毛利率
  201 + */
  202 + @ApiModelProperty(value = "毛利率")
  203 + private BigDecimal profitRate;
  204 +
  205 + /**
  206 + * 研发净利润
  207 + */
  208 + @ApiModelProperty(value = "研发净利润")
  209 + private BigDecimal developmentProfit;
  210 +
  211 + /**
  212 + * 净利润率
  213 + */
  214 + @ApiModelProperty(value = "净利润率")
  215 + private BigDecimal developmentProfitRate;
  216 +
  217 + /**
  218 + * 实际跟单单价
  219 + */
  220 + @ApiModelProperty(value = "实际跟单单价(人民币)")
  221 + private BigDecimal actualOrderRmbPrice;
  222 +
  223 + /**
  224 + * 实际跟单单价$
  225 + */
  226 + @ApiModelProperty(value = "实际跟单单价(美元)")
  227 + private BigDecimal actualOrderPrice;
  228 +
  229 + /**
  230 + * 汇率收益
  231 + */
  232 + @ApiModelProperty(value = "汇率收益")
  233 + private BigDecimal exchangeRateProfit;
  234 +
  235 + /**
  236 + * 综合收益
  237 + */
  238 + @ApiModelProperty(value = "综合收益")
  239 + private BigDecimal comprehensiveProfit;
  240 +
  241 +
  242 + /**
  243 + * 业务研发净利润状态
  244 + */
  245 + @ApiModelProperty(value = "业务研发净利润状态")
  246 + private Integer developmentStatus;
  247 +
  248 + /**
  249 + * 内部生产净利润状态
  250 + */
  251 + @ApiModelProperty(value = "内部生产净利润状态")
  252 + private Integer innerProductionStatus;
  253 +
  254 + /**
  255 + * 项目开始时间
  256 + */
  257 + @ApiModelProperty(value = "项目开始时间")
  258 + private LocalDateTime projectStartTime;
  259 +
  260 + /**
  261 + * 项目结束时间
  262 + */
  263 + @ApiModelProperty(value = "项目结束时间")
  264 + private LocalDateTime projectEndTime;
  265 +
  266 + @ApiModelProperty(value = "生产开始时间")
  267 + private LocalDateTime produceStartTime;
  268 +
  269 + @ApiModelProperty(value = "生产结束时间")
  270 + private LocalDateTime produceEndTime;
  271 +
  272 + @ApiModelProperty(value = "锁定字段信息")
  273 + private ProjectBaseInfoLockFieldVO lockFields;
  274 +
  275 +
  276 +}
  277 +
... ...
src/main/java/com/order/erp/domain/vo/order/InnerProfitDetailExportSelect.java 0 → 100644
  1 +package com.order.erp.domain.vo.order;
  2 +
  3 +import io.swagger.annotations.ApiModelProperty;
  4 +import lombok.*;
  5 +import lombok.experimental.SuperBuilder;
  6 +
  7 +
  8 +@Data
  9 +@AllArgsConstructor
  10 +@ToString
  11 +@NoArgsConstructor
  12 +@EqualsAndHashCode(callSuper = false)
  13 +@SuperBuilder
  14 +public class InnerProfitDetailExportSelect {
  15 + /**
  16 + * 生产科预算金额由财务手动输入
  17 + */
  18 + @ApiModelProperty(value = "生产科预算金额")
  19 + private String productionDepartmentPredictPrice;
  20 +
  21 +
  22 + /**
  23 + * 实际发生费用 手动输入
  24 + */
  25 + @ApiModelProperty(value = "实际发生费用")
  26 + private String productionActualPrice;
  27 +
  28 + /**
  29 + * 生产科总价合计
  30 + */
  31 + @ApiModelProperty(value = "生产科总价")
  32 + private String productionDepartmentTotalPrice;
  33 + /**
  34 + * 生产科总价合计
  35 + */
  36 + @ApiModelProperty(value = "生产科单价")
  37 + private String productionDepartmentPrice;
  38 +
  39 +
  40 + /**
  41 + * 预算占比
  42 + * 预算占比计算(实际发生费用/预算金额
  43 + */
  44 + @ApiModelProperty(value = "预算占比")
  45 + private String predictRatio;
  46 +
  47 + /**
  48 + * 预算占比与实际占比差
  49 + * 预算占比与实际占比差计算(1-预算占比)
  50 + */
  51 + @ApiModelProperty(value = "预算占比与实际占比差")
  52 + private String predictAndActualRatio;
  53 +
  54 + /**
  55 + * 内部生产毛利润计算:生产科总价-预算金额
  56 + */
  57 + @ApiModelProperty(value = "事前毛利润")
  58 + private String beforeGrossProfit;
  59 +
  60 + /**
  61 + * 内部生产毛利润率计算:事前毛利润/生产科总价
  62 + */
  63 + @ApiModelProperty(value = "事前毛利率")
  64 + private String beforeGrossProfitRate;
  65 +
  66 + /**
  67 + * 内部生产毛利润计算:生产科总价-实际发生费用就是得出
  68 + */
  69 + @ApiModelProperty(value = "事后毛利润")
  70 + private String grossProfit;
  71 +
  72 + /**
  73 + * 内部生产毛利润率计算:事后毛利润/生产科总价
  74 + */
  75 + @ApiModelProperty(value = "事后毛利率")
  76 + private String grossProfitRate;
  77 +
  78 +}
... ...
src/main/java/com/order/erp/domain/vo/order/InnerProfitDetailVO.java 0 → 100644
  1 +package com.order.erp.domain.vo.order;
  2 +
  3 +import io.swagger.annotations.ApiModelProperty;
  4 +import lombok.*;
  5 +import lombok.experimental.SuperBuilder;
  6 +
  7 +import java.io.Serializable;
  8 +import java.math.BigDecimal;
  9 +import java.util.Map;
  10 +
  11 +/**
  12 + * 业务/研发净利润分析
  13 + *
  14 + * @author makejava
  15 + * @since 2024-08-05 16:26:34
  16 + */
  17 +@Data
  18 +@AllArgsConstructor
  19 +@ToString
  20 +@NoArgsConstructor
  21 +@EqualsAndHashCode(callSuper = false)
  22 +@SuperBuilder
  23 +public class InnerProfitDetailVO implements Serializable {
  24 +
  25 + /**
  26 + * 订单id
  27 + */
  28 + @ApiModelProperty(value = "订单id")
  29 + private Long orderId;
  30 + /**
  31 + * 客户编码
  32 + */
  33 + @ApiModelProperty(value = "客户编码")
  34 + private String customerCode;
  35 +
  36 + /**
  37 + * 项目号
  38 + */
  39 + @ApiModelProperty(value = "项目号")
  40 + private String projectNo;
  41 + @ApiModelProperty(value = "生产科")
  42 + private String productionDepartment;
  43 +
  44 + /**
  45 + * 内部编号
  46 + */
  47 + @ApiModelProperty(value = "内部编码")
  48 + private String innerNo;
  49 + /**
  50 + * pic图片地址
  51 + */
  52 + @ApiModelProperty(value = "图片")
  53 + private String picUrl;
  54 +
  55 + /**
  56 + * 订单数量
  57 + */
  58 + @ApiModelProperty(value = "数量")
  59 + private Integer orderCount;
  60 +
  61 + /**
  62 + * 生产科预算金额由财务手动输入
  63 + */
  64 + @ApiModelProperty(value = "生产科预算金额")
  65 + private BigDecimal productionDepartmentPredictPrice;
  66 +
  67 + /**
  68 + * 生产科预算单价,由生产科预算金额/数量。
  69 + */
  70 + @ApiModelProperty(value = "生产科预算金额")
  71 + private BigDecimal productionDepartmentPredictUnitprice;
  72 +
  73 +
  74 + /**
  75 + * 实际发生费用 手动输入
  76 + */
  77 + @ApiModelProperty(value = "实际发生费用")
  78 + private BigDecimal productionActualPrice;
  79 +
  80 + /**
  81 + * 生产科总价合计
  82 + */
  83 + @ApiModelProperty(value = "生产科总价")
  84 + private Double productionDepartmentTotalPrice;
  85 + /**
  86 + * 生产科总价合计
  87 + */
  88 + @ApiModelProperty(value = "生产科单价")
  89 + private Double productionDepartmentPrice;
  90 +
  91 +
  92 + /**
  93 + * 预算占比
  94 + * 预算占比计算(实际发生费用/预算金额
  95 + */
  96 + @ApiModelProperty(value = "预算占比")
  97 + private BigDecimal predictRatio;
  98 +
  99 + /**
  100 + * 预算占比与实际占比差
  101 + * 预算占比与实际占比差计算(1-预算占比)
  102 + */
  103 + @ApiModelProperty(value = "预算占比与实际占比差")
  104 + private BigDecimal predictAndActualRatio;
  105 +
  106 + /**
  107 + * 内部生产毛利润计算:生产科总价-预算金额
  108 + */
  109 + @ApiModelProperty(value = "事前毛利润")
  110 + private BigDecimal beforeGrossProfit;
  111 +
  112 + /**
  113 + * 内部生产毛利润率计算:事前毛利润/生产科总价
  114 + */
  115 + @ApiModelProperty(value = "事前毛利润")
  116 + private BigDecimal beforeGrossProfitRate;
  117 +
  118 + /**
  119 + * 内部生产毛利润计算:生产科总价-实际发生费用就是得出
  120 + */
  121 + @ApiModelProperty(value = "事后毛利润")
  122 + private BigDecimal grossProfit;
  123 +
  124 + /**
  125 + * 内部生产毛利润率计算:事后毛利润/生产科总价
  126 + */
  127 + @ApiModelProperty(value = "事后毛利润")
  128 + private BigDecimal grossProfitRate;
  129 + /**
  130 + * 内部生产明细表状态
  131 + */
  132 + @ApiModelProperty(value = "内部生产明细表状态")
  133 + private Integer innerProduceStatus ;
  134 +
  135 + private OrderCostInfolockFieldVO lockFields;
  136 +
  137 +}
  138 +
... ...
src/main/java/com/order/erp/domain/vo/order/InnerProfitInfoExportSelect.java 0 → 100644
  1 +package com.order.erp.domain.vo.order;
  2 +
  3 +import io.swagger.annotations.ApiModelProperty;
  4 +import lombok.*;
  5 +import lombok.experimental.SuperBuilder;
  6 +
  7 +
  8 +
  9 +@Data
  10 +@AllArgsConstructor
  11 +@ToString
  12 +@NoArgsConstructor
  13 +@EqualsAndHashCode(callSuper = false)
  14 +@SuperBuilder
  15 +public class InnerProfitInfoExportSelect {
  16 +
  17 +
  18 +
  19 + /**
  20 + * 生产科预算金额由财务手动输入
  21 + */
  22 + @ApiModelProperty(value = "生产科预算金额")
  23 + private String productionDepartmentPredictPrice;
  24 +
  25 +
  26 + /**
  27 + * 实际发生费用 手动输入
  28 + */
  29 + @ApiModelProperty(value = "实际发生费用")
  30 + private String productionActualPrice;
  31 +
  32 + /**
  33 + * 生产科总价合计
  34 + */
  35 + @ApiModelProperty(value = "生产科单价")
  36 + private String productionDepartmentUnitPrice;
  37 +
  38 + /**
  39 + * 生产科总价合计
  40 + */
  41 + @ApiModelProperty(value = "生产科总价")
  42 + private String productionDepartmentTotalPrice;
  43 +
  44 +
  45 + /**
  46 + * 预算占比
  47 + * 预算占比计算(实际发生费用/预算金额
  48 + */
  49 + @ApiModelProperty(value = "预算占比")
  50 + private String predictRatio;
  51 +
  52 + /**
  53 + * 预算占比与实际占比差
  54 + * 预算占比与实际占比差计算(1-预算占比)
  55 + */
  56 + @ApiModelProperty(value = "预算占比与实际占比差")
  57 + private String predictAndActualRatio;
  58 +
  59 + /**
  60 + * 内部生产毛利润计算:生产科总价-预算金额
  61 + */
  62 + @ApiModelProperty(value = "事前毛利润")
  63 + private String beforeGrossProfit;
  64 +
  65 + /**
  66 + * 内部生产毛利润率计算:事前毛利润/生产科总价
  67 + */
  68 + @ApiModelProperty(value = "事前毛利率")
  69 + private String beforeGrossProfitRate;
  70 +
  71 + /**
  72 + * 内部生产毛利润计算:生产科总价-实际发生费用就是得出
  73 + */
  74 + @ApiModelProperty(value = "事后毛利润")
  75 + private String grossProfit;
  76 +
  77 + /**
  78 + * 内部生产毛利润率计算:事后毛利润/生产科总价
  79 + */
  80 + @ApiModelProperty(value = "事后毛利率")
  81 + private String grossProfitRate;
  82 +
  83 + /**
  84 + * 内部生产固定成本
  85 + */
  86 + @ApiModelProperty(value = "内部生产固定成本")
  87 + private String innerProductionFixedCost;
  88 +
  89 + /**
  90 + * 内部生产提成
  91 + */
  92 + @ApiModelProperty(value = "内部生产提成")
  93 + private String innerProductionCommission;
  94 + /**
  95 + * 内部生产净利润
  96 + */
  97 + @ApiModelProperty(value = "内部生产净利润")
  98 + private String innerProductionProfit;
  99 + /**
  100 + * 内部生产净利润率
  101 + */
  102 + @ApiModelProperty(value = "内部生产净利润率")
  103 + private String innerProductionProfitRate;
  104 +}
... ...
src/main/java/com/order/erp/domain/vo/order/InnerProfitInfoVO.java 0 → 100644
  1 +package com.order.erp.domain.vo.order;
  2 +
  3 +import io.swagger.annotations.ApiModelProperty;
  4 +import lombok.*;
  5 +import lombok.experimental.SuperBuilder;
  6 +
  7 +import java.io.Serializable;
  8 +import java.math.BigDecimal;
  9 +import java.time.LocalDateTime;
  10 +
  11 +/**
  12 + * 业务/研发净利润分析
  13 + *
  14 + * @author makejava
  15 + * @since 2024-08-05 16:26:34
  16 + */
  17 +@Data
  18 +@AllArgsConstructor
  19 +@ToString
  20 +@NoArgsConstructor
  21 +@EqualsAndHashCode(callSuper = false)
  22 +@SuperBuilder
  23 +public class InnerProfitInfoVO implements Serializable {
  24 +
  25 +
  26 + /**
  27 + * 客户编码
  28 + */
  29 + @ApiModelProperty(value = "客户编码")
  30 + private String customerCode;
  31 +
  32 + /**
  33 + * 项目号
  34 + */
  35 + @ApiModelProperty(value = "项目号")
  36 + private String projectNoPrefix;
  37 + @ApiModelProperty(value = "生产科")
  38 + private String productionDepartment;
  39 +
  40 + /**
  41 + * 订单数量
  42 + */
  43 + @ApiModelProperty(value = "数量")
  44 + private Integer orderCount;
  45 +
  46 + /**
  47 + * 生产科预算金额由财务手动输入
  48 + */
  49 + @ApiModelProperty(value = "生产科预算金额")
  50 + private BigDecimal productionDepartmentPredictPrice;
  51 +
  52 +
  53 + /**
  54 + * 实际发生费用 手动输入
  55 + */
  56 + @ApiModelProperty(value = "实际发生费用")
  57 + private BigDecimal productionActualPrice;
  58 +
  59 + /**
  60 + * 生产科总价合计
  61 + */
  62 + @ApiModelProperty(value = "生产科单价")
  63 + private Double productionDepartmentUnitPrice;
  64 +
  65 + /**
  66 + * 生产科总价合计
  67 + */
  68 + @ApiModelProperty(value = "生产科总价")
  69 + private Double productionDepartmentTotalPrice;
  70 +
  71 +
  72 + /**
  73 + * 预算占比
  74 + * 预算占比计算(实际发生费用/预算金额
  75 + */
  76 + @ApiModelProperty(value = "预算占比")
  77 + private BigDecimal predictRatio;
  78 +
  79 + /**
  80 + * 预算占比与实际占比差
  81 + * 预算占比与实际占比差计算(1-预算占比)
  82 + */
  83 + @ApiModelProperty(value = "预算占比与实际占比差")
  84 + private BigDecimal predictAndActualRatio;
  85 +
  86 + /**
  87 + * 内部生产毛利润计算:生产科总价-预算金额
  88 + */
  89 + @ApiModelProperty(value = "事前毛利润")
  90 + private BigDecimal beforeGrossProfit;
  91 +
  92 + /**
  93 + * 内部生产毛利润率计算:事前毛利润/生产科总价
  94 + */
  95 + @ApiModelProperty(value = "事前毛利润")
  96 + private BigDecimal beforeGrossProfitRate;
  97 +
  98 + /**
  99 + * 内部生产毛利润计算:生产科总价-实际发生费用就是得出
  100 + */
  101 + @ApiModelProperty(value = "事后毛利润")
  102 + private BigDecimal grossProfit;
  103 +
  104 + /**
  105 + * 内部生产毛利润率计算:事后毛利润/生产科总价
  106 + */
  107 + @ApiModelProperty(value = "事后毛利润")
  108 + private BigDecimal grossProfitRate;
  109 +
  110 + /**
  111 + * 内部生产固定成本
  112 + */
  113 + @ApiModelProperty(value = "内部生产固定成本")
  114 + private BigDecimal innerProductionFixedCost;
  115 +
  116 + /**
  117 + * 内部生产提成
  118 + */
  119 + @ApiModelProperty(value = "内部生产提成")
  120 + private BigDecimal innerProductionCommission;
  121 + /**
  122 + * 内部生产净利润
  123 + */
  124 + @ApiModelProperty(value = "内部生产净利润")
  125 + private BigDecimal innerProductionProfit;
  126 + /**
  127 + * 内部生产净利润率
  128 + */
  129 + @ApiModelProperty(value = "内部生产净利润率")
  130 + private BigDecimal innerProductionProfitRate;
  131 +
  132 + /**
  133 + * 项目开始时间
  134 + */
  135 + @ApiModelProperty(value = "项目开始时间")
  136 + private LocalDateTime produceStartTime;
  137 + /**
  138 + * 项目结束时间
  139 + */
  140 + @ApiModelProperty(value = "项目结束时间")
  141 + private LocalDateTime produceEndTime;
  142 +
  143 + /**
  144 + * 内部生产净利润分析表状态
  145 + */
  146 + @ApiModelProperty(value = "内部生产净利润分析表状态")
  147 + private Integer innerProductionStatus;
  148 +
  149 + private ProjectBaseInfoLockFieldVO lockFields;
  150 +
  151 +}
  152 +
... ...
src/main/java/com/order/erp/domain/vo/order/OrderBaseInfoQueryVO.java
... ... @@ -61,6 +61,12 @@ public class OrderBaseInfoQueryVO extends BasePageVO implements Serializable {
61 61 private List<String> projectNo;
62 62  
63 63 /**
  64 + * 项目号右模糊
  65 + */
  66 + private String projectNoLikeRight;
  67 +
  68 +
  69 + /**
64 70 * 客户编码集合
65 71 */
66 72 private List<String> customerCode;
... ...
src/main/java/com/order/erp/domain/vo/order/OrderBaseInfoVO.java
... ... @@ -4,6 +4,7 @@ import lombok.*;
4 4 import lombok.experimental.SuperBuilder;
5 5  
6 6 import java.io.Serializable;
  7 +import java.time.LocalDateTime;
7 8  
8 9 /**
9 10 * 订单基础信息表(OrderBaseInfo)实体类
... ... @@ -26,6 +27,8 @@ public class OrderBaseInfoVO implements Serializable {
26 27 */
27 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/OrderCostDetailedOptedLogQueryVO.java 0 → 100644
  1 +package com.order.erp.domain.vo.order;
  2 +
  3 +import com.order.erp.domain.vo.BasePageVO;
  4 +import lombok.*;
  5 +import lombok.experimental.SuperBuilder;
  6 +
  7 +import java.io.Serializable;
  8 +import java.util.List;
  9 +@Data
  10 +@AllArgsConstructor
  11 +@ToString
  12 +@NoArgsConstructor
  13 +@EqualsAndHashCode(callSuper = false)
  14 +@SuperBuilder
  15 +public class OrderCostDetailedOptedLogQueryVO extends BasePageVO implements Serializable {
  16 +
  17 + private List<Long> ids;
  18 +
  19 + private Long id;
  20 +
  21 + /**
  22 + * 项目号前缀
  23 + * */
  24 + private Long orderId;
  25 +
  26 + /**
  27 + * 业务类型 20:包装费用明细表创建/编辑 40:对应内部生产明细表创建/编辑
  28 + * */
  29 + private Integer type;
  30 +}
... ...
src/main/java/com/order/erp/domain/vo/order/OrderCostInfoVO.java 0 → 100644
  1 +package com.order.erp.domain.vo.order;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.IdType;
  4 +import com.baomidou.mybatisplus.annotation.TableId;
  5 +import com.baomidou.mybatisplus.annotation.TableName;
  6 +import io.swagger.annotations.ApiModel;
  7 +import lombok.AllArgsConstructor;
  8 +import lombok.Data;
  9 +import lombok.EqualsAndHashCode;
  10 +import lombok.NoArgsConstructor;
  11 +import lombok.experimental.SuperBuilder;
  12 +
  13 +import java.io.Serializable;
  14 +import java.math.BigDecimal;
  15 +
  16 +/**
  17 + * <p>
  18 + *
  19 + * </p>
  20 + *
  21 + * @author author
  22 + * @since 2024-12-22
  23 + */
  24 +@Data
  25 +@EqualsAndHashCode(callSuper = false)
  26 +@SuperBuilder
  27 +@AllArgsConstructor
  28 +@NoArgsConstructor
  29 +@TableName("order_cost_info")
  30 +@ApiModel(value="OrderCostDetail对象", description="")
  31 +public class OrderCostInfoVO implements Serializable {
  32 +
  33 + private static final long serialVersionUID = 1L;
  34 +
  35 + @TableId(value = "id", type = IdType.AUTO)
  36 + private Long id;
  37 +
  38 + private Long orderId;
  39 +
  40 + private BigDecimal productionDepartmentPredictPrice;
  41 +
  42 + private BigDecimal productionActualPrice;
  43 +
  44 + private BigDecimal packetActualRmbTotalPrice;
  45 + private Integer orderCount;
  46 + //单价 之前前端是传递productionDepartmentPredictPrice,现在改为传递单价,所以传递productionDepartmentPredictUnitPrice。
  47 + private BigDecimal productionDepartmentPredictUnitPrice;
  48 +
  49 + //内部生产费用明细表状态。
  50 + private Integer innerProduceStatus;
  51 + //包装费用费用明细表状态。
  52 + private Integer packStatus;
  53 +
  54 +}
... ...
src/main/java/com/order/erp/domain/vo/order/OrderCostInfolockFieldVO.java 0 → 100644
  1 +package com.order.erp.domain.vo.order;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.TableName;
  4 +import io.swagger.annotations.ApiModel;
  5 +import lombok.AllArgsConstructor;
  6 +import lombok.Data;
  7 +import lombok.EqualsAndHashCode;
  8 +import lombok.NoArgsConstructor;
  9 +import lombok.experimental.SuperBuilder;
  10 +
  11 +import javax.validation.constraints.NotNull;
  12 +import java.io.Serializable;
  13 +
  14 +/**
  15 + * <p>
  16 + *
  17 + * </p>
  18 + *
  19 + * @author author
  20 + * @since 2024-12-22
  21 + */
  22 +@Data
  23 +@EqualsAndHashCode(callSuper = false)
  24 +@SuperBuilder
  25 +@AllArgsConstructor
  26 +@NoArgsConstructor
  27 +@TableName("order_cost_info")
  28 +@ApiModel(value="OrderCostDetail对象", description="")
  29 +public class OrderCostInfolockFieldVO implements Serializable {
  30 +
  31 + private static final long serialVersionUID = 1L;
  32 +
  33 + @NotNull
  34 + private Integer type;
  35 + @NotNull
  36 + private Long orderId;
  37 +
  38 + private String productionDepartmentPredictPrice;
  39 +
  40 + private String productionActualPrice;
  41 +
  42 + private String packetActualRmbTotalPrice;
  43 + /**
  44 + * 生产科预算单价。
  45 + * */
  46 + private String productionDepartmentPredictUnitPrice;
  47 +
  48 + private String applyRemark;
  49 +}
... ...
src/main/java/com/order/erp/domain/vo/order/OrderCostOptLogResultVO.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 +import java.time.LocalDateTime;
  8 +@Data
  9 +@AllArgsConstructor
  10 +@ToString
  11 +@NoArgsConstructor
  12 +@EqualsAndHashCode(callSuper = false)
  13 +@SuperBuilder
  14 +public class OrderCostOptLogResultVO implements Serializable {
  15 + private Long id;
  16 + /**
  17 + * 订单id
  18 + * */
  19 + private Long orderId;
  20 + /**
  21 + * 用户id
  22 + * */
  23 + private Long userId;
  24 + /**
  25 + * 用户名称
  26 + * */
  27 + private String userName;
  28 + /**
  29 + * 操作类型
  30 + * */
  31 + private String optType;
  32 + /**
  33 + * 操作字段 json字符串
  34 + * */
  35 + private String fields;
  36 +
  37 + private LocalDateTime createTime;
  38 +}
... ...
src/main/java/com/order/erp/domain/vo/order/OrderFieldLockApplyQueryVO.java
... ... @@ -59,6 +59,11 @@ public class OrderFieldLockApplyQueryVO extends BasePageVO implements Serializab
59 59 private Integer type;
60 60  
61 61 /**
  62 + * 申请类型:枚举类ApplyTypeEnum
  63 + */
  64 + private List<Integer> typeIn;
  65 +
  66 + /**
62 67 * 项目号
63 68 */
64 69 private List<String> projectNo;
... ...
src/main/java/com/order/erp/domain/vo/order/OrderInfoResultVO.java
... ... @@ -38,6 +38,10 @@ public class OrderInfoResultVO extends OrderBaseInfoVO implements Serializable {
38 38 * 质检信息
39 39 */
40 40 private OrderInspectionStageVO inspectionStageInfo;
  41 + /**
  42 + * 费用明细
  43 + */
  44 + private OrderCostInfoVO orderCostInfo;
41 45  
42 46 /**
43 47 * 字段锁定集合
... ...
src/main/java/com/order/erp/domain/vo/order/OrderLockFieldVO.java
... ... @@ -46,6 +46,11 @@ public class OrderLockFieldVO implements Serializable {
46 46 private OrderInspectionStageFieldVO inspectionStageFields;
47 47  
48 48 /**
  49 + * 费用字段
  50 + */
  51 + private OrderCostInfolockFieldVO costInfolockFieldVO;
  52 +
  53 + /**
49 54 * 应收款账单字段
50 55 */
51 56  
... ...
src/main/java/com/order/erp/domain/vo/order/OrderProfitAnalysisVO.java
... ... @@ -4,6 +4,7 @@ import lombok.*;
4 4 import lombok.experimental.SuperBuilder;
5 5  
6 6 import java.io.Serializable;
  7 +import java.math.BigDecimal;
7 8  
8 9 /**
9 10 * 订单利润分析表(OrderProfitAnalysis)实体类
... ... @@ -34,7 +35,6 @@ public class OrderProfitAnalysisVO implements Serializable {
34 35 */
35 36 private Double customerTotalPrice;
36 37  
37   -
38 38 /**
39 39 * 客户单价¥
40 40 */
... ... @@ -115,4 +115,6 @@ public class OrderProfitAnalysisVO implements Serializable {
115 115 */
116 116 private String endCheckResult;
117 117  
  118 +
  119 +
118 120 }
... ...
src/main/java/com/order/erp/domain/vo/order/OrderProfitQueryVO.java 0 → 100644
  1 +package com.order.erp.domain.vo.order;
  2 +
  3 +import com.order.erp.domain.vo.BasePageVO;
  4 +import lombok.*;
  5 +import lombok.experimental.SuperBuilder;
  6 +
  7 +import java.io.Serializable;
  8 +import java.util.List;
  9 +import java.util.Set;
  10 +
  11 +/**
  12 + * 订单基础信息表(OrderBaseInfo)实体类
  13 + *
  14 + * @author makejava
  15 + * @since 2023-09-08 15:26:43
  16 + */
  17 +@Data
  18 +@AllArgsConstructor
  19 +@ToString
  20 +@NoArgsConstructor
  21 +@EqualsAndHashCode(callSuper = false)
  22 +@SuperBuilder
  23 +public class OrderProfitQueryVO extends BasePageVO implements Serializable {
  24 + private static final long serialVersionUID = -84816007994858993L;
  25 +
  26 + private List<Long> ids;
  27 +
  28 + private Set<Long> orderIds;
  29 +
  30 +
  31 + private Long id;
  32 +
  33 + /**
  34 + * 生成开始时间
  35 + */
  36 + private String createStartTime;
  37 +
  38 + /**
  39 + * 生成结束时间
  40 + */
  41 + private String createEndTime;
  42 +
  43 + /**
  44 + * 单据状态
  45 + */
  46 + private List<String> orderStatus;
  47 +
  48 + /**
  49 + * 提交人名称
  50 + */
  51 + private String commitUserName;
  52 +
  53 + /**
  54 + * 提交人手机号码
  55 + */
  56 + private String commitUserPhone;
  57 +
  58 + /**
  59 + * 项目号
  60 + */
  61 + private List<String> projectNo;
  62 +
  63 + /**
  64 + * 客户编码集合
  65 + */
  66 + private List<String> customerCode;
  67 +
  68 + /**
  69 + * 客户STYLE#
  70 + */
  71 + private List<String> customerStyle;
  72 +
  73 + /**
  74 + * 内部编号
  75 + */
  76 + private List<String> innerNo;
  77 +
  78 + /**
  79 + * 生产科
  80 + */
  81 + private List<String> productionDepartment;
  82 +
  83 + /**
  84 + * 生成科拖货开始时间
  85 + */
  86 + private String productionDepartmentConsignStartTime;
  87 +
  88 + /**
  89 + * 生成科拖货结束时间
  90 + */
  91 + private String productionDepartmentConsignEndTime;
  92 +
  93 + /**
  94 + * 订单上HOD开始时间
  95 + */
  96 + private String orderHodStartTime;
  97 +
  98 + /**
  99 + * 订单上HOD结束时间
  100 + */
  101 + private String orderHodEndTime;
  102 +
  103 + /**
  104 + * 最小利润率
  105 + */
  106 + private Double profitRateLqt;
  107 +
  108 + /**
  109 + * 最大利润率
  110 + */
  111 + private Double profitRateGqt;
  112 +
  113 + /**
  114 + * 想法来源
  115 + */
  116 + private List<String> ideaSource;
  117 +
  118 + /**
  119 + * 想法来源占比
  120 + */
  121 + private Double ideaSourceRate;
  122 +
  123 + /**
  124 + * 设计师
  125 + */
  126 + private String designer;
  127 +
  128 + /**
  129 + * 手工初型1
  130 + */
  131 + private List<String> manualPreform1;
  132 +
  133 + /**
  134 + * 手工初型1占比
  135 + */
  136 + private Double manualPreform1Rate;
  137 +
  138 + /**
  139 + * 手工初型2
  140 + */
  141 + private List<String> manualPreform2;
  142 +
  143 + /**
  144 + * 手工初型2占比
  145 + */
  146 + private Double manualPreform2Rate;
  147 +
  148 + /**
  149 + * pp样品确认意见
  150 + */
  151 + private List<String> ppConfirmResult;
  152 +
  153 + /**
  154 + * 自测通过开始时间
  155 + */
  156 + private String selfTestPassStartTime;
  157 +
  158 + /**
  159 + * 自测通过结束时间
  160 + */
  161 + private String selfTestPassEndTime;
  162 +
  163 + /**
  164 + * 中期验货结果PASS / FAIL
  165 + */
  166 + private List<String> midCheckResult;
  167 +
  168 + /**
  169 + * 尾期验货结果PASS / FAIL
  170 + */
  171 + private List<String> endCheckResult;
  172 +
  173 + /**
  174 + * 选择的字段
  175 + */
  176 + private OrderLockFieldVO fieldVO;
  177 +
  178 + /**
  179 + * 创建人
  180 + */
  181 + private String createBy;
  182 +
  183 + /**
  184 + * 业务员
  185 + */
  186 + private List<String> businessPerson;
  187 +
  188 +
  189 + private List<Long> exportOrderIds;
  190 +
  191 + /**
  192 + * invoice 首页筛选invoice。
  193 + */
  194 + private List<String> invoiceNo;
  195 +
  196 + /**
  197 + * checkNo 首页筛选Check。
  198 + */
  199 + private List<String> CheckNo;
  200 + /**
  201 + * invoice invoice状态。
  202 + */
  203 + private Long invoiceStatus;
  204 + /**
  205 + * checkNo checkNo状态。
  206 + */
  207 + private Long checkNoStatus;
  208 +}
  209 +
... ...
src/main/java/com/order/erp/domain/vo/order/ProjectApplyVO.java 0 → 100644
  1 +package com.order.erp.domain.vo.order;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.IdType;
  4 +import com.baomidou.mybatisplus.annotation.TableId;
  5 +import com.baomidou.mybatisplus.annotation.TableName;
  6 +import com.order.erp.domain.dto.BaseDO;
  7 +import io.swagger.annotations.ApiModel;
  8 +import io.swagger.annotations.ApiModelProperty;
  9 +import lombok.AllArgsConstructor;
  10 +import lombok.Data;
  11 +import lombok.EqualsAndHashCode;
  12 +import lombok.NoArgsConstructor;
  13 +import lombok.experimental.SuperBuilder;
  14 +
  15 +import java.io.Serializable;
  16 +
  17 +/**
  18 + * <p>
  19 + * 项目-字段锁定申请表
  20 + * </p>
  21 + *
  22 + * @author author
  23 + * @since 2024-12-22
  24 + */
  25 +@Data
  26 +@EqualsAndHashCode(callSuper = false)
  27 +@SuperBuilder
  28 +@AllArgsConstructor
  29 +@NoArgsConstructor
  30 +@TableName("project_apply")
  31 +@ApiModel(value="ProjectApply对象", description="项目-字段锁定申请表")
  32 +public class ProjectApplyVO extends BaseDO implements Serializable {
  33 +
  34 + private static final long serialVersionUID = 1L;
  35 +
  36 + @TableId(value = "id", type = IdType.AUTO)
  37 + private Long id;
  38 +
  39 + @ApiModelProperty(value = "项目id")
  40 + private Long projectId;
  41 +
  42 + @ApiModelProperty(value = "项目号")
  43 + private String projectNoPrefix;
  44 +
  45 + @ApiModelProperty(value = "申请用户id")
  46 + private Long applyUserId;
  47 +
  48 + @ApiModelProperty(value = "审批用户id")
  49 + private Long auditUserId;
  50 +
  51 + @ApiModelProperty(value = "申请类型")
  52 + private String type;
  53 +
  54 + @ApiModelProperty(value = "锁定字段 json字符串")
  55 + private String fields;
  56 +
  57 + @ApiModelProperty(value = "状态:0 待审批,1 通过,2 拒绝")
  58 + private Integer status;
  59 +
  60 + @ApiModelProperty(value = "审核备注")
  61 + private String auditRemark;
  62 +
  63 + @ApiModelProperty(value = "审批角色code集合,分割")
  64 + private String auditRoleCodes;
  65 +
  66 + @ApiModelProperty(value = "申请原因")
  67 + private String applyRemark;
  68 +
  69 +
  70 +}
... ...
src/main/java/com/order/erp/domain/vo/order/ProjectBaseInfoAuditStatus.java 0 → 100644
  1 +package com.order.erp.domain.vo.order;
  2 +
  3 +import lombok.*;
  4 +import lombok.experimental.SuperBuilder;
  5 +
  6 +@Data
  7 +@AllArgsConstructor
  8 +@ToString
  9 +@NoArgsConstructor
  10 +@EqualsAndHashCode(callSuper = false)
  11 +@SuperBuilder
  12 +public class ProjectBaseInfoAuditStatus {
  13 + /**
  14 + * 设置状态时传递过来的projectNo可能只包含前八位(业务研发净利润分析),或者全部包含(内部生产净利润分析表)。
  15 + * */
  16 + private String projectNo;
  17 +
  18 + /**
  19 + * 类型,用来判断是业务研发净利润分析表还是内部生产净利润分析表
  20 + * */
  21 + private String type;
  22 +
  23 +}
... ...
src/main/java/com/order/erp/domain/vo/order/ProjectBaseInfoLockFieldVO.java 0 → 100644
  1 +package com.order.erp.domain.vo.order;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.IdType;
  4 +import com.baomidou.mybatisplus.annotation.TableId;
  5 +import com.baomidou.mybatisplus.annotation.TableName;
  6 +import com.order.erp.domain.dto.BaseDO;
  7 +import io.swagger.annotations.ApiModel;
  8 +import io.swagger.annotations.ApiModelProperty;
  9 +import lombok.AllArgsConstructor;
  10 +import lombok.Data;
  11 +import lombok.EqualsAndHashCode;
  12 +import lombok.NoArgsConstructor;
  13 +import lombok.experimental.Accessors;
  14 +import lombok.experimental.SuperBuilder;
  15 +
  16 +import java.io.Serializable;
  17 +import java.math.BigDecimal;
  18 +import java.time.LocalDateTime;
  19 +
  20 +/**
  21 + * <p>
  22 + * 项目-字段锁定申请表
  23 + * </p>
  24 + *
  25 + * @author author
  26 + * @since 2024-12-22
  27 + */
  28 +@Data
  29 +@EqualsAndHashCode(callSuper = false)
  30 +@SuperBuilder
  31 +@AllArgsConstructor
  32 +@NoArgsConstructor
  33 +@ApiModel(value="ProjectFieldLockApply对象", description="项目-字段锁定申请表")
  34 +public class ProjectBaseInfoLockFieldVO implements Serializable {
  35 +
  36 +
  37 + private Long projectId;
  38 +
  39 + private String projectNoPrefix;
  40 +
  41 + private String applyRemark;
  42 +
  43 + private String developmentCopyRmbTotalPrice;
  44 +
  45 + private String projectStartTime;
  46 +
  47 + private String projectEndTime;
  48 +
  49 +
  50 + private String spainPaidRmbCommission;
  51 +
  52 + private String paidRmbCommission;
  53 +
  54 + private String actualExchangeRate;
  55 +
  56 + private String projectInnerProfitInfoStartTime;
  57 +
  58 + private String projectInnerProfitInfoEndTime;
  59 +
  60 + private String type;
  61 +
  62 +}
... ...
src/main/java/com/order/erp/domain/vo/order/ProjectBaseInfoQueryVO.java 0 → 100644
  1 +package com.order.erp.domain.vo.order;
  2 +
  3 +import com.order.erp.domain.dto.BaseDO;
  4 +import lombok.*;
  5 +import lombok.experimental.SuperBuilder;
  6 +
  7 +import java.io.Serializable;
  8 +import java.util.List;
  9 +import java.util.Set;
  10 +
  11 +@Data
  12 +@AllArgsConstructor
  13 +@ToString
  14 +@NoArgsConstructor
  15 +@EqualsAndHashCode(callSuper = false)
  16 +@SuperBuilder
  17 +public class ProjectBaseInfoQueryVO extends BaseDO implements Serializable {
  18 + /**
  19 + * 业务研发净利润表以及内部生产明细表,用于条件查询的项目号,需要传递完整的项目号
  20 + * */
  21 + private List<String> detailProjectNo;
  22 +
  23 + /**
  24 + * 包装费用明细表以及内部生产明细表,用于条件查询。
  25 + * */
  26 + private Set<Long> orderIds;
  27 +
  28 + /**
  29 + * 筛选条件 不传orderId时就传递筛选条件 -客户编码。
  30 + * */
  31 + private List<String> customerCode;
  32 +
  33 + /**
  34 + * 筛选条件 不传orderId时就传递筛选条件 -内部编号。
  35 + * */
  36 + private List<String> innerNo;
  37 +
  38 + /**
  39 + * 筛选条件 不传orderId时就传递筛选条件 -生产科。
  40 + * */
  41 + private List<String> productionDepartment;
  42 +
  43 + /**
  44 + * 筛选条件 不传orderId时就传递筛选条件 -项目号。
  45 + * */
  46 + private List<String> projectNo;
  47 +
  48 + /**
  49 + * 业务研发净利润分析选择导出字段
  50 + * */
  51 + private ProjectExportSelect projectExportSelect;
  52 +
  53 + /**
  54 + * 内部研发净利润分析选择导出字段
  55 + * */
  56 + private InnerProfitInfoExportSelect innerProfitInfoExportSelect;
  57 +
  58 + /**
  59 + * 包装费用明细表选择导出字段
  60 + * */
  61 + private BusinessCostExportSelect businessCostExportSelect;
  62 +
  63 + /**
  64 + * 内部生产费用明细表选择导出字段
  65 + * */
  66 + private InnerProfitDetailExportSelect innerProfitDetailExportSelect;
  67 +
  68 +}
... ...
src/main/java/com/order/erp/domain/vo/order/ProjectBaseInfoVO.java 0 → 100644
  1 +package com.order.erp.domain.vo.order;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.IdType;
  4 +import com.baomidou.mybatisplus.annotation.TableId;
  5 +import com.baomidou.mybatisplus.annotation.TableName;
  6 +import io.swagger.annotations.ApiModel;
  7 +import lombok.Data;
  8 +import lombok.EqualsAndHashCode;
  9 +import lombok.experimental.Accessors;
  10 +
  11 +import java.io.Serializable;
  12 +import java.math.BigDecimal;
  13 +import java.time.LocalDateTime;
  14 +
  15 +/**
  16 + * <p>
  17 + *
  18 + * </p>
  19 + *
  20 + * @author author
  21 + * @since 2024-12-18
  22 + */
  23 +@Data
  24 +@EqualsAndHashCode(callSuper = false)
  25 +@Accessors(chain = true)
  26 +@TableName("project_base_info")
  27 +@ApiModel(value="ProjectBaseInfoDO", description="")
  28 +public class ProjectBaseInfoVO implements Serializable {
  29 +
  30 + private static final long serialVersionUID = 1L;
  31 +
  32 + @TableId(value = "id", type = IdType.AUTO)
  33 + private Long id;
  34 +
  35 + private String projectNoPrefix;
  36 +
  37 + private BigDecimal developmentCopyRmbTotalPrice;
  38 +
  39 + private LocalDateTime projectStartTime;
  40 +
  41 + private LocalDateTime projectEndTime;
  42 +
  43 + private LocalDateTime projectInnerProfitInfoStartTime;
  44 +
  45 + private LocalDateTime projectInnerProfitInfoEndTime;
  46 +
  47 + private BigDecimal spainPaidRmbCommission;
  48 +
  49 + private BigDecimal paidRmbCommission;
  50 +
  51 + private BigDecimal actualExchangeRate;
  52 +
  53 + private String fieldType;
  54 +
  55 +
  56 +}
... ...
src/main/java/com/order/erp/domain/vo/order/ProjectExportSelect.java 0 → 100644
  1 +package com.order.erp.domain.vo.order;
  2 +
  3 +import io.swagger.annotations.ApiModelProperty;
  4 +import lombok.*;
  5 +import lombok.experimental.SuperBuilder;
  6 +
  7 +@Data
  8 +@AllArgsConstructor
  9 +@ToString
  10 +@NoArgsConstructor
  11 +@EqualsAndHashCode(callSuper = false)
  12 +@SuperBuilder
  13 +public class ProjectExportSelect {
  14 + /**
  15 + * 客户总价¥
  16 + */
  17 + @ApiModelProperty(value = "客户总价(人民币)")
  18 + private String customerRmbTotalPrice;
  19 +
  20 + /**
  21 + * 客户总价$
  22 + */
  23 + @ApiModelProperty(value = "客户总价")
  24 + private String customerTotalPrice;
  25 +
  26 + /**
  27 + * 生成科总价¥
  28 + */
  29 + @ApiModelProperty(value = "生产部门总价")
  30 + private String productionDepartmentTotalPrice;
  31 +
  32 +
  33 +
  34 + /**
  35 + * 订单数量
  36 + */
  37 + @ApiModelProperty(value = "订单数量")
  38 + private String orderCount;
  39 +
  40 +
  41 + /**
  42 + * 包装费用合计$
  43 + */
  44 + @ApiModelProperty(value = "包装费用合计(美元)")
  45 + private String packetTotalPrice;
  46 +
  47 + /**
  48 + * 包装费用合计¥
  49 + */
  50 + @ApiModelProperty(value = "包装费用合计(人民币)")
  51 + private String packetRmbTotalPrice;
  52 +
  53 +
  54 + /**
  55 + * 包装费用实际金额$
  56 + */
  57 + @ApiModelProperty(value = "包装费用实际金额(人民币)")
  58 + private String packetActualRmbPrice;
  59 +
  60 +
  61 + /**
  62 + * 包装费用收益
  63 + */
  64 + @ApiModelProperty(value = "包装费用收益(人民币)")
  65 + private String packetProfitRmbPrice;
  66 +
  67 +
  68 + /**
  69 + * 研发复制费合计¥
  70 + */
  71 + @ApiModelProperty(value = "研发复制费合计(人民币)")
  72 + private String developmentCopyRmbTotalPrice;
  73 +
  74 + /**
  75 + * 固定成本
  76 + */
  77 + @ApiModelProperty(value = "固定成本")
  78 + private String fixedCost;
  79 +
  80 + /**
  81 + * 西班牙已发提成¥
  82 + */
  83 + @ApiModelProperty(value = "西班牙已发提成(人民币)")
  84 + private String spainPaidRmbCommission;
  85 +
  86 + /**
  87 + * 西班牙提成¥
  88 + */
  89 + @ApiModelProperty(value = "西班牙提成(人民币)")
  90 + private String spainRmbCommission;
  91 +
  92 + /**
  93 + * 西班牙未发提成¥
  94 + */
  95 + @ApiModelProperty(value = "西班牙未发提成(人民币)")
  96 + private String spainUnpaidRmbCommission;
  97 +
  98 + /**
  99 + * 已发提成¥
  100 + */
  101 + @ApiModelProperty(value = "已发提成(人民币)")
  102 + private String paidRmbCommission;
  103 +
  104 + /**
  105 + * 提成¥
  106 + */
  107 + @ApiModelProperty(value = "提成(人民币)")
  108 + private String rmbCommission;
  109 +
  110 + /**
  111 + * 未发提成¥
  112 + */
  113 + @ApiModelProperty(value = "未发提成(人民币)")
  114 + private String unpaidRmbCommission;
  115 +
  116 +
  117 + /**
  118 + * 支出合计
  119 + */
  120 + @ApiModelProperty(value = "支出合计(人民币)")
  121 + private String rmbTotalExpense;
  122 +
  123 + /**
  124 + * 毛利润
  125 + */
  126 + @ApiModelProperty(value = "毛利润")
  127 + private String profit;
  128 +
  129 + /**
  130 + * 毛利率
  131 + */
  132 + @ApiModelProperty(value = "毛利率")
  133 + private String profitRate;
  134 +
  135 + /**
  136 + * 研发净利润
  137 + */
  138 + @ApiModelProperty(value = "研发净利润")
  139 + private String developmentProfit;
  140 +
  141 + /**
  142 + * 净利润率
  143 + */
  144 + @ApiModelProperty(value = "净利润率")
  145 + private String developmentProfitRate;
  146 +
  147 + /**
  148 + * 实际跟单单价
  149 + */
  150 + @ApiModelProperty(value = "实际跟单单价(人民币)")
  151 + private String actualOrderRmbPrice;
  152 +
  153 + /**
  154 + * 实际跟单单价$
  155 + */
  156 + @ApiModelProperty(value = "实际跟单单价(美元)")
  157 + private String actualOrderPrice;
  158 +
  159 +
  160 + /**
  161 + * 综合收益
  162 + */
  163 + @ApiModelProperty(value = "综合收益")
  164 + private String comprehensiveProfit;
  165 +
  166 +}
... ...
src/main/java/com/order/erp/domain/vo/order/ProjectOptLogQueryVO.java 0 → 100644
  1 +package com.order.erp.domain.vo.order;
  2 +
  3 +import com.order.erp.domain.vo.BasePageVO;
  4 +import lombok.*;
  5 +import lombok.experimental.SuperBuilder;
  6 +
  7 +import java.io.Serializable;
  8 +import java.util.List;
  9 +@Data
  10 +@AllArgsConstructor
  11 +@ToString
  12 +@NoArgsConstructor
  13 +@EqualsAndHashCode(callSuper = false)
  14 +@SuperBuilder
  15 +public class ProjectOptLogQueryVO extends BasePageVO implements Serializable {
  16 + private static final long serialVersionUID = 1L;
  17 + private List<Long> ids;
  18 +
  19 + private Long id;
  20 +
  21 + /**
  22 + * 项目号前缀
  23 + * */
  24 + private String projectNoPrefix;
  25 +
  26 + /**
  27 + * 业务类型 10:对应业务研发净利润创建/编辑 30:对应内部生产净利润创建/编辑
  28 + * */
  29 + private Integer type;
  30 +}
... ...
src/main/java/com/order/erp/domain/vo/order/ProjectOptLogResultVO.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 +import java.time.LocalDateTime;
  8 +
  9 +@Data
  10 +@AllArgsConstructor
  11 +@ToString
  12 +@NoArgsConstructor
  13 +@EqualsAndHashCode(callSuper = false)
  14 +@SuperBuilder
  15 +public class ProjectOptLogResultVO implements Serializable {
  16 + private Long id;
  17 + /**
  18 + * 项目号前缀,前八位或者前十位。
  19 + */
  20 + private String projectNoPrefix;
  21 + /**
  22 + * 用户id
  23 + */
  24 + private Long userId;
  25 +
  26 + /**
  27 + * 用户名称
  28 + */
  29 + private String userName;
  30 + /**
  31 + * 操作类型
  32 + */
  33 + private String optType;
  34 + /**
  35 + * 操作字段 json字符串
  36 + */
  37 + private String fields;
  38 +
  39 + private LocalDateTime createTime;
  40 +
  41 +}
... ...
src/main/java/com/order/erp/domain/vo/order/QueryProjectLockFieldVO.java 0 → 100644
  1 +package com.order.erp.domain.vo.order;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.TableName;
  4 +import com.order.erp.domain.vo.BasePageVO;
  5 +import io.swagger.annotations.ApiModel;
  6 +import lombok.AllArgsConstructor;
  7 +import lombok.Data;
  8 +import lombok.EqualsAndHashCode;
  9 +import lombok.NoArgsConstructor;
  10 +import lombok.experimental.SuperBuilder;
  11 +
  12 +import java.io.Serializable;
  13 +
  14 +/**
  15 + * <p>
  16 + *
  17 + * </p>
  18 + *
  19 + * @author author
  20 + * @since 2024-12-22
  21 + */
  22 +@Data
  23 +@EqualsAndHashCode(callSuper = false)
  24 +@SuperBuilder
  25 +@AllArgsConstructor
  26 +@NoArgsConstructor
  27 +@TableName("order_cost_info")
  28 +@ApiModel(value="OrderCostDetail对象", description="")
  29 +public class QueryProjectLockFieldVO extends BasePageVO implements Serializable {
  30 +
  31 + private static final long serialVersionUID = 1L;
  32 +
  33 + private Long orderId;
  34 + /**
  35 + * NO_COMMIT(-1, "未提交审核"),
  36 + *
  37 + * WAIT_AUDIT(0, "待审批"),
  38 + *
  39 + * AUDIT_PASS(10, "已通过"),
  40 + *
  41 + * AUDIT_REFUSE(20, "已驳回")
  42 + */
  43 + private String status;
  44 +
  45 + private String productionDepartmentPredictPrice;
  46 +
  47 + private String productionActualPrice;
  48 +
  49 + private String packetActualRmbTotalPrice;
  50 +
  51 + private Integer type;
  52 +
  53 +
  54 +}
... ...
src/main/java/com/order/erp/mapper/OrderCostFieldLockRecordMapper.java 0 → 100644
  1 +package com.order.erp.mapper;
  2 +
  3 +import com.order.erp.domain.model.OrderCostFieldLockRecord;
  4 +import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  5 +
  6 +/**
  7 + * <p>
  8 + * Mapper 接口
  9 + * </p>
  10 + *
  11 + * @author author
  12 + * @since 2024-12-22
  13 + */
  14 +public interface OrderCostFieldLockRecordMapper extends BaseMapper<OrderCostFieldLockRecord> {
  15 +
  16 +}
... ...
src/main/java/com/order/erp/mapper/ProjectApplyMapper.java 0 → 100644
  1 +package com.order.erp.mapper;
  2 +
  3 +import com.order.erp.domain.model.ProjectApplyDO;
  4 +import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  5 +
  6 +/**
  7 + * <p>
  8 + * 项目-字段锁定申请表 Mapper 接口
  9 + * </p>
  10 + *
  11 + * @author author
  12 + * @since 2024-12-22
  13 + */
  14 +public interface ProjectApplyMapper extends BaseMapper<ProjectApplyDO> {
  15 +
  16 +}
... ...
src/main/java/com/order/erp/mapper/ProjectFieldLockRecordMapper.java 0 → 100644
  1 +package com.order.erp.mapper;
  2 +
  3 +import com.order.erp.domain.model.ProjectFieldLockRecord;
  4 +import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  5 +
  6 +/**
  7 + * <p>
  8 + * 项目-字段锁定记录表 Mapper 接口
  9 + * </p>
  10 + *
  11 + * @author author
  12 + * @since 2024-12-22
  13 + */
  14 +public interface ProjectFieldLockRecordMapper extends BaseMapper<ProjectFieldLockRecord> {
  15 +
  16 +}
... ...
src/main/java/com/order/erp/mapper/order/OrderCostDetailedOptLogMapper.java 0 → 100644
  1 +package com.order.erp.mapper.order;
  2 +
  3 +import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  4 +import com.order.erp.domain.dto.order.OrderCostDetailedOptLogDO;
  5 +
  6 +public interface OrderCostDetailedOptLogMapper extends BaseMapper<OrderCostDetailedOptLogDO> {
  7 +}
... ...
src/main/java/com/order/erp/mapper/order/OrderCostInfoMapper.java 0 → 100644
  1 +package com.order.erp.mapper.order;
  2 +
  3 +import com.order.erp.domain.dto.order.OrderCostInfoDO;
  4 +import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  5 +
  6 +/**
  7 + * <p>
  8 + * Mapper 接口
  9 + * </p>
  10 + *
  11 + * @author author
  12 + * @since 2024-12-22
  13 + */
  14 +public interface OrderCostInfoMapper extends BaseMapper<OrderCostInfoDO> {
  15 +
  16 +}
... ...
src/main/java/com/order/erp/mapper/order/ProjectBaseAfterReviewSettingMapper.java 0 → 100644
  1 +package com.order.erp.mapper.order;
  2 +
  3 +import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  4 +import com.order.erp.domain.dto.order.ProjectBaseAfterReviewSettingDO;
  5 +
  6 +public interface ProjectBaseAfterReviewSettingMapper extends BaseMapper<ProjectBaseAfterReviewSettingDO> {
  7 +}
... ...
src/main/java/com/order/erp/mapper/order/ProjectBaseDevelopOptLogMapper.java 0 → 100644
  1 +package com.order.erp.mapper.order;
  2 +
  3 +import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  4 +import com.order.erp.domain.dto.order.ProjectBaseDevelopOptLogDO;
  5 +
  6 +
  7 +public interface ProjectBaseDevelopOptLogMapper extends BaseMapper<ProjectBaseDevelopOptLogDO> {
  8 +}
... ...
src/main/java/com/order/erp/mapper/order/ProjectBaseInfoMapper.java 0 → 100644
  1 +package com.order.erp.mapper.order;
  2 +
  3 +import com.order.erp.domain.dto.order.ProjectBaseInfoDO;
  4 +import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  5 +
  6 +/**
  7 + * <p>
  8 + * Mapper 接口
  9 + * </p>
  10 + *
  11 + * @author author
  12 + * @since 2024-12-18
  13 + */
  14 +public interface ProjectBaseInfoMapper extends BaseMapper<ProjectBaseInfoDO> {
  15 +
  16 +}
... ...
src/main/java/com/order/erp/service/IOrderCostFieldLockRecordService.java 0 → 100644
  1 +package com.order.erp.service;
  2 +
  3 +import com.order.erp.domain.model.OrderCostFieldLockRecord;
  4 +import com.baomidou.mybatisplus.extension.service.IService;
  5 +
  6 +/**
  7 + * <p>
  8 + * 服务类
  9 + * </p>
  10 + *
  11 + * @author author
  12 + * @since 2024-12-22
  13 + */
  14 +public interface IOrderCostFieldLockRecordService extends IService<OrderCostFieldLockRecord> {
  15 +
  16 +}
... ...
src/main/java/com/order/erp/service/IProjectApplyService.java 0 → 100644
  1 +package com.order.erp.service;
  2 +
  3 +import com.order.erp.domain.model.ProjectApplyDO;
  4 +import com.baomidou.mybatisplus.extension.service.IService;
  5 +
  6 +/**
  7 + * <p>
  8 + * 项目-字段锁定申请表 服务类
  9 + * </p>
  10 + *
  11 + * @author author
  12 + * @since 2024-12-22
  13 + */
  14 +public interface IProjectApplyService extends IService<ProjectApplyDO> {
  15 +
  16 +}
... ...
src/main/java/com/order/erp/service/IProjectFieldLockRecordService.java 0 → 100644
  1 +package com.order.erp.service;
  2 +
  3 +import com.order.erp.domain.model.ProjectFieldLockRecord;
  4 +import com.baomidou.mybatisplus.extension.service.IService;
  5 +
  6 +/**
  7 + * <p>
  8 + * 项目-字段锁定记录表 服务类
  9 + * </p>
  10 + *
  11 + * @author author
  12 + * @since 2024-12-22
  13 + */
  14 +public interface IProjectFieldLockRecordService extends IService<ProjectFieldLockRecord> {
  15 +
  16 +}
... ...
src/main/java/com/order/erp/service/SystemSettingService.java
... ... @@ -6,6 +6,8 @@ import com.order.erp.domain.dto.SystemSettingDO;
6 6 import com.order.erp.domain.vo.SystemSettingQueryVO;
7 7 import com.order.erp.domain.vo.SystemSettingVO;
8 8  
  9 +import java.math.BigDecimal;
  10 +
9 11 /**
10 12 * 系统配置(SystemSetting)表服务接口
11 13 *
... ... @@ -37,6 +39,8 @@ public interface SystemSettingService extends IService&lt;SystemSettingDO&gt; {
37 39 */
38 40 ServerResult listByPage(SystemSettingQueryVO systemSettingQueryVO);
39 41  
  42 + BigDecimal getExchangeRate();
  43 +
40 44 /**
41 45 * 新增数据
42 46 *
... ...
src/main/java/com/order/erp/service/impl/OrderCostFieldLockRecordServiceImpl.java 0 → 100644
  1 +package com.order.erp.service.impl;
  2 +
  3 +import com.order.erp.domain.model.OrderCostFieldLockRecord;
  4 +import com.order.erp.mapper.OrderCostFieldLockRecordMapper;
  5 +import com.order.erp.service.IOrderCostFieldLockRecordService;
  6 +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  7 +import org.springframework.stereotype.Service;
  8 +
  9 +/**
  10 + * <p>
  11 + * 服务实现类
  12 + * </p>
  13 + *
  14 + * @author author
  15 + * @since 2024-12-22
  16 + */
  17 +@Service
  18 +public class OrderCostFieldLockRecordServiceImpl extends ServiceImpl<OrderCostFieldLockRecordMapper, OrderCostFieldLockRecord> implements IOrderCostFieldLockRecordService {
  19 +
  20 +}
... ...
src/main/java/com/order/erp/service/impl/ProjectApplyServiceImpl.java 0 → 100644
  1 +package com.order.erp.service.impl;
  2 +
  3 +import com.order.erp.domain.model.ProjectApplyDO;
  4 +import com.order.erp.mapper.ProjectApplyMapper;
  5 +import com.order.erp.service.IProjectApplyService;
  6 +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  7 +import org.springframework.stereotype.Service;
  8 +
  9 +/**
  10 + * <p>
  11 + * 项目-字段锁定申请表 服务实现类
  12 + * </p>
  13 + *
  14 + * @author author
  15 + * @since 2024-12-22
  16 + */
  17 +@Service
  18 +public class ProjectApplyServiceImpl extends ServiceImpl<ProjectApplyMapper, ProjectApplyDO> implements IProjectApplyService {
  19 +
  20 +}
... ...
src/main/java/com/order/erp/service/impl/ProjectFieldLockRecordServiceImpl.java 0 → 100644
  1 +package com.order.erp.service.impl;
  2 +
  3 +import com.order.erp.domain.model.ProjectFieldLockRecord;
  4 +import com.order.erp.mapper.ProjectFieldLockRecordMapper;
  5 +import com.order.erp.service.IProjectFieldLockRecordService;
  6 +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  7 +import org.springframework.stereotype.Service;
  8 +
  9 +/**
  10 + * <p>
  11 + * 项目-字段锁定记录表 服务实现类
  12 + * </p>
  13 + *
  14 + * @author author
  15 + * @since 2024-12-22
  16 + */
  17 +@Service
  18 +public class ProjectFieldLockRecordServiceImpl extends ServiceImpl<ProjectFieldLockRecordMapper, ProjectFieldLockRecord> implements IProjectFieldLockRecordService {
  19 +
  20 +}
... ...
src/main/java/com/order/erp/service/impl/SystemSettingServiceImpl.java
... ... @@ -24,7 +24,9 @@ import com.order.erp.service.SystemSettingService;
24 24 import lombok.extern.slf4j.Slf4j;
25 25 import org.springframework.beans.BeanUtils;
26 26 import org.springframework.stereotype.Service;
  27 +import springfox.documentation.annotations.Cacheable;
27 28  
  29 +import java.math.BigDecimal;
28 30 import java.util.List;
29 31 import java.util.Objects;
30 32 import java.util.stream.Collectors;
... ... @@ -110,6 +112,15 @@ public class SystemSettingServiceImpl extends ServiceImpl&lt;SystemSettingMapper, S
110 112 .eq(StringUtils.isNotBlank(queryVO.getRelationCode()), SystemSettingDO::getRelationCode, queryVO.getRelationCode());
111 113 }
112 114  
  115 + @Override
  116 + public BigDecimal getExchangeRate(){
  117 + SystemSettingDO exchangeRate = this.lambdaQuery()
  118 + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  119 + .eq(SystemSettingDO::getSettingCode, "exchangeRate")
  120 + .one();
  121 + return BigDecimal.valueOf(Double.parseDouble(exchangeRate.getSettingValue()));
  122 + }
  123 +
113 124  
114 125 /**
115 126 * 新增数据
... ...
src/main/java/com/order/erp/service/order/IOrderCostInfoService.java 0 → 100644
  1 +package com.order.erp.service.order;
  2 +
  3 +import com.order.erp.common.constant.ServerResult;
  4 +import com.order.erp.domain.dto.order.OrderCostInfoDO;
  5 +import com.baomidou.mybatisplus.extension.service.IService;
  6 +import com.order.erp.domain.vo.order.OrderBaseInfoQueryVO;
  7 +import com.order.erp.domain.vo.order.OrderCostInfoVO;
  8 +import com.order.erp.domain.vo.order.OrderCostInfolockFieldVO;
  9 +import com.order.erp.domain.vo.order.ProjectBaseInfoQueryVO;
  10 +
  11 +import javax.servlet.http.HttpServletResponse;
  12 +import java.io.IOException;
  13 +
  14 +/**
  15 + * <p>
  16 + * 服务类
  17 + * </p>
  18 + *
  19 + * @author author
  20 + * @since 2024-12-22
  21 + */
  22 +public interface IOrderCostInfoService extends IService<OrderCostInfoDO> {
  23 +
  24 + ServerResult edit(OrderCostInfoVO vo);
  25 +
  26 + ServerResult applyEditFileds(OrderCostInfolockFieldVO vo);
  27 +
  28 + ServerResult listInnerProfitDetailByPage(OrderBaseInfoQueryVO queryVO);
  29 +
  30 + ServerResult listBusinessProfitDetailByPage(OrderBaseInfoQueryVO queryVO);
  31 + void exportBusinessProfitDetailExcel(HttpServletResponse response,ProjectBaseInfoQueryVO queryVO) throws Exception;
  32 + void exportInnerProfitDetailExcel(HttpServletResponse response,ProjectBaseInfoQueryVO queryVO) throws Exception;
  33 + void setPackStatus(OrderCostInfoVO vo);
  34 + void setInnerProduceStatus(OrderCostInfoVO vo);
  35 +}
... ...
src/main/java/com/order/erp/service/order/IProjectBaseInfoService.java 0 → 100644
  1 +package com.order.erp.service.order;
  2 +
  3 +import com.order.erp.common.constant.ServerResult;
  4 +import com.order.erp.domain.dto.order.ProjectBaseInfoDO;
  5 +import com.baomidou.mybatisplus.extension.service.IService;
  6 +import com.order.erp.domain.vo.order.*;
  7 +
  8 +import javax.servlet.http.HttpServletResponse;
  9 +import java.io.IOException;
  10 +
  11 +/**
  12 + * <p>
  13 + * 服务类
  14 + * </p>
  15 + *
  16 + * @author author
  17 + * @since 2024-12-18
  18 + */
  19 +public interface IProjectBaseInfoService extends IService<ProjectBaseInfoDO> {
  20 +
  21 + ServerResult edit(ProjectBaseInfoVO vo);
  22 +
  23 + ServerResult applyEditFileds(ProjectBaseInfoLockFieldVO vo);
  24 +
  25 + ServerResult pageProjectLockFieldApply(QueryProjectLockFieldVO vo);
  26 +
  27 + ServerResult audit(AuditVO vo);
  28 +
  29 + ServerResult listInnerProfitInfoByPage(OrderBaseInfoQueryVO queryVO);
  30 +
  31 + ServerResult listBusinessProfitInfoByPage(OrderBaseInfoQueryVO queryVO);
  32 +
  33 + void exportBusinessProfitInfo(HttpServletResponse response, String projectNoPrefix) throws Exception;
  34 +
  35 + void exportInnerProfitInfo(HttpServletResponse response, String projectNoPrefix) throws Exception;
  36 + void exportBusinessProfitExcel(HttpServletResponse response, ProjectBaseInfoQueryVO queryVO) throws Exception;
  37 + void exportInnerProfitInfoExcel(HttpServletResponse response, ProjectBaseInfoQueryVO queryVO) throws Exception;
  38 +
  39 + void setProjectBaseInfoDevelopmentStatus(OrderBaseInfoVO vo);
  40 + void setInnerProductionStatus(OrderBaseInfoVO vo);
  41 +}
... ...
src/main/java/com/order/erp/service/order/OrderCostDetailedOptLogService.java 0 → 100644
  1 +package com.order.erp.service.order;
  2 +
  3 +import com.baomidou.mybatisplus.extension.service.IService;
  4 +import com.order.erp.common.constant.ServerResult;
  5 +import com.order.erp.domain.dto.order.OrderCostDetailedOptLogDO;
  6 +import com.order.erp.domain.vo.order.OrderCostDetailedOptedLogQueryVO;
  7 +
  8 +
  9 +public interface OrderCostDetailedOptLogService extends IService<OrderCostDetailedOptLogDO> {
  10 + ServerResult listByPage(OrderCostDetailedOptedLogQueryVO queryVO);
  11 +
  12 +}
... ...
src/main/java/com/order/erp/service/order/OrderProfitAnalysisService.java
... ... @@ -4,11 +4,10 @@ import com.baomidou.mybatisplus.extension.service.IService;
4 4 import com.order.erp.common.constant.ServerResult;
5 5 import com.order.erp.domain.dto.order.OrderProfitAnalysisDO;
6 6 import com.order.erp.domain.vo.OrderProfitAnalysisVo;
7   -import com.order.erp.domain.vo.order.OrderProfitAnalysisQueryVO;
8   -import com.order.erp.domain.vo.order.OrderProfitAnalysisVO;
9   -import com.order.erp.domain.vo.order.ProfitCalculateVO;
  7 +import com.order.erp.domain.vo.order.*;
10 8  
11 9 import java.time.LocalDate;
  10 +import javax.servlet.http.HttpServletResponse;
12 11 import java.util.List;
13 12  
14 13 /**
... ...
src/main/java/com/order/erp/service/order/ProjectBaseAfterReviewSettingService.java 0 → 100644
  1 +package com.order.erp.service.order;
  2 +
  3 +import com.baomidou.mybatisplus.extension.service.IService;
  4 +import com.order.erp.domain.dto.order.ProjectBaseAfterReviewSettingDO;
  5 +
  6 +public interface ProjectBaseAfterReviewSettingService extends IService<ProjectBaseAfterReviewSettingDO> {
  7 +}
... ...
src/main/java/com/order/erp/service/order/ProjectBaseDevelopOptLogService.java 0 → 100644
  1 +package com.order.erp.service.order;
  2 +
  3 +
  4 +import com.baomidou.mybatisplus.extension.service.IService;
  5 +import com.order.erp.common.constant.ServerResult;
  6 +
  7 +import com.order.erp.domain.dto.order.ProjectBaseDevelopOptLogDO;
  8 +import com.order.erp.domain.vo.order.ProjectOptLogQueryVO;
  9 +
  10 +import java.util.List;
  11 +
  12 +public interface ProjectBaseDevelopOptLogService extends IService<ProjectBaseDevelopOptLogDO> {
  13 + ServerResult listByPage(ProjectOptLogQueryVO queryVO);
  14 +}
... ...
src/main/java/com/order/erp/service/order/impl/CalculateProfitServiceImpl.java
... ... @@ -67,6 +67,10 @@ public class CalculateProfitServiceImpl {
67 67 */
68 68 public ServerResult businessProfitRatioExport(HttpServletResponse response, BusinessProfitRatioQueryVO queryVO) throws IOException {
69 69 BusinessProfitRatioResultVO resultVO = buildBusinessProfitRatioResultVO(queryVO);
  70 + return writeBusinessProfitRatioResult(response, resultVO);
  71 + }
  72 +
  73 + private ServerResult<Object> writeBusinessProfitRatioResult(HttpServletResponse response, BusinessProfitRatioResultVO resultVO) throws IOException {
70 74 //开始
71 75 Workbook workbook = new XSSFWorkbook();
72 76 Sheet sheet = workbook.createSheet("业务净利润分析表");
... ... @@ -90,7 +94,7 @@ public class CalculateProfitServiceImpl {
90 94  
91 95 // 第二行
92 96 createMergedCell(sheet, workbook, 4, 0, 4, 5, 0, 1, "项目号");
93   - createMergedCell(sheet, workbook, 4, 2, 4, 5, 2, 4, String.join(",",resultVO.getProjectNo()));
  97 + createMergedCell(sheet, workbook, 4, 2, 4, 5, 2, 4, String.join(",", resultVO.getProjectNo()));
94 98 createMergedCell(sheet, workbook, 4, 5, 4, 5, 5, 6, "开始时间");
95 99 createMergedCell(sheet, workbook, 4, 7, 4, 5, 7, 9, "结束时间");
96 100 // 第三行
... ... @@ -111,55 +115,55 @@ public class CalculateProfitServiceImpl {
111 115 createMergedCell(sheet, workbook, 10, 7, 10, 11, 7, 9, "备注");
112 116 //第六行
113 117 createMergedCell(sheet, workbook, 12, 0, 12, 13, 0, 4, "客户总金额计算");
114   - createMergedCell(sheet, workbook, 12, 5, 12, 13, 5, 6, "¥"+resultVO.getCustomerTotalPrice());
115   - createMergedCell(sheet, workbook, 12, 7, 12, 13, 7, 9, "$"+resultVO.getCustomerTotalPriceUsd());
  118 + createMergedCell(sheet, workbook, 12, 5, 12, 13, 5, 6, "¥"+ resultVO.getCustomerTotalPrice());
  119 + createMergedCell(sheet, workbook, 12, 7, 12, 13, 7, 9, "$"+ resultVO.getCustomerTotalPriceUsd());
116 120 ////第七行
117 121 createMergedCell(sheet, workbook, 14, 0, 14, 15, 0, 4, "生产科总价合计");
118   - createMergedCell(sheet, workbook, 14, 5, 14, 15, 5, 6, "¥"+resultVO.getProductionDepartmentTotalPrice());
119   - createMergedCell(sheet, workbook, 14, 7, 14, 15, 7, 9, "$"+resultVO.getProductionDepartmentTotalPriceUsd());
  122 + createMergedCell(sheet, workbook, 14, 5, 14, 15, 5, 6, "¥"+ resultVO.getProductionDepartmentTotalPrice());
  123 + createMergedCell(sheet, workbook, 14, 7, 14, 15, 7, 9, "$"+ resultVO.getProductionDepartmentTotalPriceUsd());
120 124 ////第八行
121 125 createMergedCell(sheet, workbook, 16, 0, 16, 17, 0, 4, "包装费用合计");
122   - createMergedCell(sheet, workbook, 16, 5, 16, 17, 5, 6, "¥"+resultVO.getPacketTotalPrice());
123   - createMergedCell(sheet, workbook, 16, 7, 16, 17, 7, 9, "$"+resultVO.getPacketTotalPriceUsd());
  126 + createMergedCell(sheet, workbook, 16, 5, 16, 17, 5, 6, "¥"+ resultVO.getPacketTotalPrice());
  127 + createMergedCell(sheet, workbook, 16, 7, 16, 17, 7, 9, "$"+ resultVO.getPacketTotalPriceUsd());
124 128 ////第九行
125 129 createMergedCell(sheet, workbook, 18, 0, 18, 19, 0, 4, "研发开发费合计");
126   - createMergedCell(sheet, workbook, 18, 5, 18, 19, 5, 6, "¥"+resultVO.getDevelopTotalPrice().setScale(2, RoundingMode.HALF_UP));
  130 + createMergedCell(sheet, workbook, 18, 5, 18, 19, 5, 6, "¥"+ resultVO.getDevelopTotalPrice().setScale(2, RoundingMode.HALF_UP));
127 131 createMergedCell(sheet, workbook, 18, 7, 18, 19, 7, 9, "");
128 132 ////第十行
129 133 createMergedCell(sheet, workbook, 20, 0, 20, 21, 0, 4, "复制费用合计");
130   - createMergedCell(sheet, workbook, 20, 5, 20, 21, 5, 6, "¥"+resultVO.getCopyTotalPrice().setScale(2, RoundingMode.HALF_UP));
  134 + createMergedCell(sheet, workbook, 20, 5, 20, 21, 5, 6, "¥"+ resultVO.getCopyTotalPrice().setScale(2, RoundingMode.HALF_UP));
131 135 createMergedCell(sheet, workbook, 20, 7, 20, 21, 7, 9, "");
132 136 //第十一行
133 137 createMergedCell(sheet, workbook, 22, 0, 22, 23, 0, 4, "固定成本");
134   - createMergedCell(sheet, workbook, 22, 5, 22, 23, 5, 6, "¥"+resultVO.getFixCost());
  138 + createMergedCell(sheet, workbook, 22, 5, 22, 23, 5, 6, "¥"+ resultVO.getFixCost());
135 139 createMergedCell(sheet, workbook, 22, 7, 22, 23, 7, 9, "");
136 140 //第十二行
137 141 createMergedCell(sheet, workbook, 24, 0, 24, 25, 0, 4, "西班牙提成");
138   - createMergedCell(sheet, workbook, 24, 5, 24, 25, 5, 6, "¥"+resultVO.getSpainRatioProfitPrice());
  142 + createMergedCell(sheet, workbook, 24, 5, 24, 25, 5, 6, "¥"+ resultVO.getSpainRatioProfitPrice());
139 143 createMergedCell(sheet, workbook, 24, 7, 24, 25, 7, 9, "");
140 144 //第十三行
141 145 createMergedCell(sheet, workbook, 26, 0, 26, 27, 0, 4, "中国团队提成");
142   - createMergedCell(sheet, workbook, 26, 5, 26, 27, 5, 6, "¥"+resultVO.getChinaRatioProfitPrice());
  146 + createMergedCell(sheet, workbook, 26, 5, 26, 27, 5, 6, "¥"+ resultVO.getChinaRatioProfitPrice());
143 147 createMergedCell(sheet, workbook, 26, 7, 26, 27, 7, 9, "");
144   - //第十四行
  148 + //第十四行
145 149 createMergedCell(sheet, workbook, 28, 0, 28, 29, 0, 4, "支出合计");
146   - createMergedCell(sheet, workbook, 28, 5, 28, 29, 5, 6, "¥"+resultVO.getOutTotalPrice());
  150 + createMergedCell(sheet, workbook, 28, 5, 28, 29, 5, 6, "¥"+ resultVO.getOutTotalPrice());
147 151 createMergedCell(sheet, workbook, 28, 7, 28, 29, 7, 9, "");
148 152 //第十五行
149 153 createMergedCell(sheet, workbook, 30, 0, 30, 31, 0, 4, "毛利润");
150   - createMergedCell(sheet, workbook, 30, 5, 30, 31, 5, 6, "¥"+resultVO.getGrossProfit());
  154 + createMergedCell(sheet, workbook, 30, 5, 30, 31, 5, 6, "¥"+ resultVO.getGrossProfit());
151 155 createMergedCell(sheet, workbook, 30, 7, 30, 31, 7, 9, "");
152 156 ////第十六行
153 157 createMergedCell(sheet, workbook, 32, 0, 32, 33, 0, 4, "研发贸易净利润");
154   - createMergedCell(sheet, workbook, 32, 5, 32, 33, 5, 6, "¥"+resultVO.getDevelopProfit());
  158 + createMergedCell(sheet, workbook, 32, 5, 32, 33, 5, 6, "¥"+ resultVO.getDevelopProfit());
155 159 createMergedCell(sheet, workbook, 32, 7, 32, 33, 7, 9, "");
156 160 ////第十七行
157 161 createMergedCell(sheet, workbook, 34, 0, 34, 35, 0, 4, "包装费用合计金额");
158   - createMergedCell(sheet, workbook, 34, 5, 34, 35, 5, 6, "¥"+resultVO.getPacketTotalPrice());
  162 + createMergedCell(sheet, workbook, 34, 5, 34, 35, 5, 6, "¥"+ resultVO.getPacketTotalPrice());
159 163 createMergedCell(sheet, workbook, 34, 7, 34, 35, 7, 9, "");
160 164 ////第十八行
161 165 createMergedCell(sheet, workbook, 36, 0, 36, 37, 0, 4, "包装费用实际金额");
162   - createMergedCell(sheet, workbook, 36, 5, 36, 37, 5, 6, "¥"+resultVO.getPacketActualTotalPrice().setScale(2, RoundingMode.HALF_UP));
  166 + createMergedCell(sheet, workbook, 36, 5, 36, 37, 5, 6, "¥"+ resultVO.getPacketActualTotalPrice().setScale(2, RoundingMode.HALF_UP));
163 167 createMergedCell(sheet, workbook, 36, 7, 36, 37, 7, 9, "");
164 168 ////第十九行
165 169 createMergedCell(sheet, workbook, 38, 0, 38, 39, 0, 4, "订单总数量");
... ... @@ -167,27 +171,27 @@ public class CalculateProfitServiceImpl {
167 171 createMergedCell(sheet, workbook, 38, 7, 38, 39, 7, 9, "");
168 172 ////第二十行
169 173 createMergedCell(sheet, workbook, 40, 0, 40, 41, 0, 4, "实际跟单单价=实际跟单费用/件数");
170   - createMergedCell(sheet, workbook, 40, 5, 40, 41, 5, 6, "¥"+resultVO.getActualRmbPrice());
  174 + createMergedCell(sheet, workbook, 40, 5, 40, 41, 5, 6, "¥"+ resultVO.getActualRmbPrice());
171 175 createMergedCell(sheet, workbook, 40, 7, 40, 41, 7, 9, "");
172 176 //第二十一行
173 177 createMergedCell(sheet, workbook, 42, 0, 42, 43, 0, 4, "实际跟单单价折算美金");
174   - createMergedCell(sheet, workbook, 42, 5, 42, 43, 5, 6, "$"+resultVO.getActualPrice());
  178 + createMergedCell(sheet, workbook, 42, 5, 42, 43, 5, 6, "$"+ resultVO.getActualPrice());
175 179 createMergedCell(sheet, workbook, 42, 7, 42, 43, 7, 9, "");
176 180 //第二十二行
177 181 createMergedCell(sheet, workbook, 44, 0, 44, 45, 0, 4, "包装费用收益");
178   - createMergedCell(sheet, workbook, 44, 5, 44, 45, 5, 6, "¥"+resultVO.getPacketProfitPrice());
  182 + createMergedCell(sheet, workbook, 44, 5, 44, 45, 5, 6, "¥"+ resultVO.getPacketProfitPrice());
179 183 createMergedCell(sheet, workbook, 44, 7, 44, 45, 7, 9, "");
180 184 //第二十三行
181 185 createMergedCell(sheet, workbook, 46, 0, 46, 47, 0, 4, "实际汇率");
182   - createMergedCell(sheet, workbook, 46, 5, 46, 47, 5, 6, "¥"+resultVO.getActualRatio().setScale(2, RoundingMode.HALF_UP));
  186 + createMergedCell(sheet, workbook, 46, 5, 46, 47, 5, 6, "¥"+ resultVO.getActualRatio().setScale(2, RoundingMode.HALF_UP));
183 187 createMergedCell(sheet, workbook, 46, 7, 46, 47, 7, 9, "");
184 188 //第二十四行
185 189 createMergedCell(sheet, workbook, 48, 0, 48, 49, 0, 4, "汇率收益");
186   - createMergedCell(sheet, workbook, 48, 5, 48, 49, 5, 6, "¥"+resultVO.getActualRatioProfitPrice());
  190 + createMergedCell(sheet, workbook, 48, 5, 48, 49, 5, 6, "¥"+ resultVO.getActualRatioProfitPrice());
187 191 createMergedCell(sheet, workbook, 48, 7, 48, 49, 7, 9, "");
188 192 //第二十五行
189 193 createMergedCell(sheet, workbook, 50, 0, 50, 51, 0, 4, "综合收益");
190   - createMergedCell(sheet, workbook, 50, 5, 50, 51, 5, 6, "¥"+resultVO.getTotalProfitPrice());
  194 + createMergedCell(sheet, workbook, 50, 5, 50, 51, 5, 6, "¥"+ resultVO.getTotalProfitPrice());
191 195 createMergedCell(sheet, workbook, 50, 7, 50, 51, 7, 9, "");
192 196 response.setHeader("Content-Disposition", "attachment; filename=\"-.xlsx\"");
193 197 workbook.write(response.getOutputStream());
... ... @@ -203,6 +207,10 @@ public class CalculateProfitServiceImpl {
203 207 */
204 208 public ServerResult innerProfitRatioExport(HttpServletResponse response,InnerProfitRatioQueryVO queryVO) throws IOException {
205 209 InnerProfitRatioResultVO resultVO = buildInnerProfitRatioResultVO(queryVO);
  210 + return writeInnerProfitRatioData(response, resultVO);
  211 + }
  212 +
  213 + private ServerResult<Object> writeInnerProfitRatioData(HttpServletResponse response, InnerProfitRatioResultVO resultVO) throws IOException {
206 214 Workbook workbook = new XSSFWorkbook();
207 215 Sheet sheet = workbook.createSheet("内部生产净利润分析表");
208 216 Row row = sheet.createRow(0);
... ... @@ -270,7 +278,7 @@ public class CalculateProfitServiceImpl {
270 278 createMergedCell(sheet, workbook, 20, 4, 20, 21, 4, 5, "¥"+ resultVO.getInnerProduceTotalPrice());
271 279 createMergedCell(sheet, workbook, 20, 6, 20, 21, 6, 7, "");
272 280 createMergedCell(sheet, workbook, 20, 8, 20, 21, 8, 10, "");
273   - //第十一行
  281 + //第十一行
274 282 createMergedCell(sheet, workbook, 22, 0, 22, 23, 0, 3, "内部生产净利润");
275 283 createMergedCell(sheet, workbook, 22, 4, 22, 23, 4, 5, "¥"+ resultVO.getInnerProduceTotalProfit());
276 284 createMergedCell(sheet, workbook, 22, 6, 22, 23, 6, 7, "");
... ... @@ -281,6 +289,7 @@ public class CalculateProfitServiceImpl {
281 289 workbook.close();
282 290 return ServerResult.success();
283 291 }
  292 +
284 293 public void createMergedCell(Sheet sheet, Workbook workbook, int rowIndex, int colIndex, int startRow, int endRow, int startCol, int endCol, String value) {
285 294 // 创建或获取当前行
286 295 Row row = sheet.getRow(rowIndex);
... ...
src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java
... ... @@ -35,22 +35,19 @@ import com.order.erp.domain.excel.AccountStatementExcelVO;
35 35 import com.order.erp.domain.vo.AccountStatementVO;
36 36 import com.order.erp.domain.vo.ProducePdfVO;
37 37 import com.order.erp.domain.vo.order.*;
38   -import com.order.erp.job.OrderOverTimeEventJob;
39 38 import com.order.erp.mapper.order.OrderBaseInfoMapper;
40 39 import com.order.erp.service.SystemSettingService;
41 40 import com.order.erp.service.admin.AdminUserRoleService;
42 41 import com.order.erp.service.admin.AdminUserService;
43 42 import com.order.erp.service.order.*;
44   -import freemarker.template.TemplateException;
45 43 import lombok.extern.slf4j.Slf4j;
46   -import org.joda.time.DateTime;
47 44 import org.springframework.beans.BeanUtils;
  45 +import org.springframework.beans.factory.annotation.Autowired;
48 46 import org.springframework.beans.factory.annotation.Value;
49 47 import org.springframework.stereotype.Service;
50 48 import org.springframework.transaction.annotation.Transactional;
51 49  
52 50 import javax.annotation.Resource;
53   -import javax.mail.MessagingException;
54 51 import javax.servlet.http.HttpServletResponse;
55 52 import java.io.*;
56 53 import java.math.BigDecimal;
... ... @@ -150,6 +147,8 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl&lt;OrderBaseInfoMapper, O
150 147  
151 148 @Resource
152 149 private ProducePaymentCheckBillOrderService producePaymentCheckBillOrderService;
  150 + @Autowired
  151 + private IOrderCostInfoService orderCostInfoService;
153 152  
154 153 @Resource
155 154 private OrderTrackStageService orderTrackStageService;
... ... @@ -267,6 +266,8 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl&lt;OrderBaseInfoMapper, O
267 266  
268 267 // 填充发票信息 对于填充发票信息和填充生产科对账单号,其实不需要在这里写了,而且这里只是填充了invoice号和check号,这里的代码是填充数据,达到一个进度条的效果,既然没有根据是否填充发票来填充进度条,这里就不需要写。
269 268 // fillInvoiceNo(resultVOList);
  269 +
  270 + fillOrderCostDetils(resultVOList);
270 271 //第四版 start
271 272 /* //需要填充生产科对账单号信息
272 273 fillCheckNo(resultVOList);
... ... @@ -287,6 +288,29 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl&lt;OrderBaseInfoMapper, O
287 288 return resultVOList;
288 289 }
289 290  
  291 + private void fillOrderCostDetils(List<OrderInfoResultVO> resultVOList) {
  292 + if (CollectionUtils.isEmpty(resultVOList)) {
  293 + return;
  294 + }
  295 +
  296 + Set<Long> orderIds = resultVOList.stream().map(OrderInfoResultVO::getId).collect(Collectors.toSet());
  297 + List<OrderCostInfoDO> orderCostInfoDOS = orderCostInfoService.lambdaQuery()
  298 + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  299 + .in(OrderCostInfoDO::getOrderId, orderIds)
  300 + .list();
  301 +
  302 + if (CollectionUtils.isNotEmpty(orderCostInfoDOS)) {
  303 + Map<Long, OrderCostInfoDO> orderCostDetailDOMap = orderCostInfoDOS.stream().collect(Collectors.toMap(OrderCostInfoDO::getOrderId, Function.identity(), (v1, v2) -> v1));
  304 + resultVOList.forEach(result -> {
  305 + if (orderCostDetailDOMap.containsKey(result.getId())) {
  306 + OrderCostInfoDO orderCostInfoDO = orderCostDetailDOMap.get(result.getId());
  307 + OrderCostInfoVO orderCostInfoVO = BeanUtil.copyProperties(orderCostInfoDO, OrderCostInfoVO.class);
  308 + result.setOrderCostInfo(orderCostInfoVO);
  309 + }
  310 + });
  311 + }
  312 + }
  313 +
290 314 @Override
291 315 public void export(HttpServletResponse response, OrderBaseInfoQueryVO queryVO) throws IOException, Excel4JException {
292 316 OrderLockFieldVO lockFieldVO = queryVO.getFieldVO();
... ... @@ -1585,6 +1609,8 @@ end
1585 1609 .in(CollectionUtils.isNotEmpty(queryVO.getCheckNo()),OrderBaseInfoDO::getCheckNo,queryVO.getCheckNo())
1586 1610 .eq(Objects.nonNull(queryVO.getInvoiceStatus()), OrderBaseInfoDO::getInvoiceStatus, queryVO.getInvoiceStatus())
1587 1611 .eq(Objects.nonNull(queryVO.getCheckNoStatus()), OrderBaseInfoDO::getCheckStatus, queryVO.getCheckNoStatus())
  1612 + .in(CollUtil.isNotEmpty(queryVO.getIds()), OrderBaseInfoDO::getId, queryVO.getIds())
  1613 + .likeRight(StringUtils.isNotBlank(queryVO.getProjectNoLikeRight()), OrderBaseInfoDO::getProjectNo, queryVO.getProjectNoLikeRight())
1588 1614 .orderByDesc(OrderBaseInfoDO::getId)
1589 1615 ;
1590 1616 }
... ...
src/main/java/com/order/erp/service/order/impl/OrderCostDetailedOptLogServiceImpl.java 0 → 100644
  1 +package com.order.erp.service.order.impl;
  2 +
  3 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4 +import com.baomidou.mybatisplus.core.metadata.IPage;
  5 +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
  6 +import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  7 +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  8 +import com.order.erp.common.constant.Constant;
  9 +import com.order.erp.common.constant.ServerResult;
  10 +import com.order.erp.domain.dto.BaseDO;
  11 +import com.order.erp.domain.dto.admin.AdminUserDO;
  12 +import com.order.erp.domain.dto.order.OrderCostDetailedOptLogDO;
  13 +import com.order.erp.domain.dto.order.ProjectBaseDevelopOptLogDO;
  14 +import com.order.erp.domain.vo.order.OrderCostDetailedOptedLogQueryVO;
  15 +import com.order.erp.domain.vo.order.OrderCostOptLogResultVO;
  16 +import com.order.erp.domain.vo.order.ProjectOptLogQueryVO;
  17 +import com.order.erp.domain.vo.order.ProjectOptLogResultVO;
  18 +import com.order.erp.mapper.order.OrderCostDetailedOptLogMapper;
  19 +import com.order.erp.service.admin.AdminUserService;
  20 +import com.order.erp.service.order.OrderCostDetailedOptLogService;
  21 +import org.springframework.beans.BeanUtils;
  22 +import org.springframework.stereotype.Service;
  23 +
  24 +import javax.annotation.Resource;
  25 +import java.util.*;
  26 +import java.util.function.Function;
  27 +import java.util.stream.Collectors;
  28 +
  29 +@Service
  30 +public class OrderCostDetailedOptLogServiceImpl extends ServiceImpl<OrderCostDetailedOptLogMapper, OrderCostDetailedOptLogDO> implements OrderCostDetailedOptLogService{
  31 + @Resource
  32 + private AdminUserService userService;
  33 +
  34 + @Override
  35 + public ServerResult listByPage(OrderCostDetailedOptedLogQueryVO queryVO) {
  36 + LambdaQueryWrapper<OrderCostDetailedOptLogDO> queryWrapper = buildQueryByParam(queryVO);
  37 + Page page = new Page<>(queryVO.getPage(), queryVO.getPageSize());
  38 + IPage<OrderCostDetailedOptLogDO> iPage = page(page, queryWrapper);
  39 +
  40 + Page<OrderCostOptLogResultVO> webVOPage = new Page<>();
  41 + List<OrderCostDetailedOptLogDO> OrderCostDetailedOptLogDOS = iPage.getRecords();
  42 + if (CollectionUtils.isNotEmpty(OrderCostDetailedOptLogDOS)) {
  43 + Set<Long> userIds = OrderCostDetailedOptLogDOS.stream().map(OrderCostDetailedOptLogDO::getUserId).collect(Collectors.toSet());
  44 + Map<Long, AdminUserDO> userDOMap = new HashMap<>();
  45 + if (CollectionUtils.isNotEmpty(userIds)) {
  46 + List<AdminUserDO> userDOS = userService.listByIds(userIds);
  47 + if (CollectionUtils.isNotEmpty(userDOS)) {
  48 + userDOMap = userDOS.stream().collect(Collectors.toMap(AdminUserDO::getId, Function.identity()));
  49 + }
  50 + }
  51 + Map<Long, AdminUserDO> finalUserDOMap = userDOMap;
  52 + List<OrderCostOptLogResultVO> resultVOList = OrderCostDetailedOptLogDOS.stream().map(x -> {
  53 + OrderCostOptLogResultVO resultVO = new OrderCostOptLogResultVO();
  54 + BeanUtils.copyProperties(x, resultVO);
  55 + if (finalUserDOMap.containsKey(x.getUserId())) {
  56 + resultVO.setUserName(finalUserDOMap.get(x.getUserId()).getUserName());
  57 + }
  58 + return resultVO;
  59 + }).collect(Collectors.toList());
  60 +
  61 + webVOPage.setRecords(resultVOList);
  62 + }
  63 + BeanUtils.copyProperties(page, webVOPage, "records");
  64 + return ServerResult.success(webVOPage);
  65 + }
  66 +
  67 + private LambdaQueryWrapper<OrderCostDetailedOptLogDO> buildQueryByParam(OrderCostDetailedOptedLogQueryVO queryVO) {
  68 + return new LambdaQueryWrapper<OrderCostDetailedOptLogDO>()
  69 + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  70 + .eq(Objects.nonNull(queryVO.getOrderId()), OrderCostDetailedOptLogDO::getOrderId, queryVO.getOrderId())
  71 + .eq(Objects.nonNull(queryVO.getType()), OrderCostDetailedOptLogDO::getType, queryVO.getType())
  72 + .orderByDesc(OrderCostDetailedOptLogDO::getId);
  73 + }
  74 +
  75 +
  76 +}
... ...
src/main/java/com/order/erp/service/order/impl/OrderCostInfoServiceImpl.java 0 → 100644
  1 +package com.order.erp.service.order.impl;
  2 +
  3 +import cn.hutool.core.bean.BeanUtil;
  4 +import cn.hutool.core.bean.copier.CopyOptions;
  5 +import cn.hutool.core.collection.CollUtil;
  6 +import com.alibaba.fastjson.JSONObject;
  7 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  8 +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
  9 +import com.baomidou.mybatisplus.core.toolkit.StringUtils;
  10 +import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  11 +import com.fasterxml.jackson.core.JsonProcessingException;
  12 +import com.fasterxml.jackson.databind.ObjectMapper;
  13 +import com.github.stupdit1t.excel.common.PoiWorkbookType;
  14 +import com.github.stupdit1t.excel.core.ExcelHelper;
  15 +import com.github.stupdit1t.excel.style.CellPosition;
  16 +import com.order.erp.common.constant.Constant;
  17 +import com.order.erp.common.constant.ServerResult;
  18 +import com.order.erp.common.constant.ServerResultCode;
  19 +import com.order.erp.common.exception.BusinessException;
  20 +import com.order.erp.config.DataScope;
  21 +import com.order.erp.domain.*;
  22 +import com.order.erp.domain.dto.BaseDO;
  23 +import com.order.erp.domain.dto.order.OrderBaseInfoDO;
  24 +import com.order.erp.domain.dto.order.OrderCostDetailedOptLogDO;
  25 +import com.order.erp.domain.dto.order.OrderCostInfoDO;
  26 +import com.order.erp.domain.dto.order.OrderFieldLockApplyDO;
  27 +import com.order.erp.domain.model.OrderCostFieldLockRecord;
  28 +import com.order.erp.domain.vo.order.*;
  29 +import com.order.erp.mapper.order.OrderCostInfoMapper;
  30 +import com.order.erp.service.IOrderCostFieldLockRecordService;
  31 +import com.order.erp.service.SystemSettingService;
  32 +import com.order.erp.service.order.*;
  33 +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  34 +import org.springframework.beans.BeanUtils;
  35 +import org.springframework.beans.factory.annotation.Autowired;
  36 +import org.springframework.stereotype.Service;
  37 +import org.springframework.transaction.annotation.Transactional;
  38 +
  39 +import javax.annotation.Resource;
  40 +import javax.servlet.http.HttpServletResponse;
  41 +import java.io.IOException;
  42 +import java.math.BigDecimal;
  43 +import java.math.RoundingMode;
  44 +import java.util.*;
  45 +import java.util.stream.Collectors;
  46 +
  47 +/**
  48 + * <p>
  49 + * 服务实现类
  50 + * </p>
  51 + *
  52 + * @author author
  53 + * @since 2024-12-22
  54 + */
  55 +@Service
  56 +public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, OrderCostInfoDO> implements IOrderCostInfoService {
  57 + @Autowired
  58 + private DataScope dataScope;
  59 + @Resource
  60 + private OrderFieldLockApplyService orderFieldLockApplyService;
  61 + @Autowired
  62 + private OrderBaseInfoService orderBaseInfoService;
  63 + @Autowired
  64 + private IOrderCostFieldLockRecordService orderCostFieldLockRecordService;
  65 + @Autowired
  66 + private SystemSettingService systemSettingService;
  67 + @Autowired
  68 + private OrderCostDetailedOptLogService orderCostDetailedOptLogService;
  69 +
  70 + @Override
  71 + @Transactional(rollbackFor = Exception.class)
  72 + public ServerResult edit(OrderCostInfoVO vo) {
  73 + Integer type=null;
  74 + String operationDesc=null;
  75 + Long id = vo.getOrderId();
  76 + Optional<OrderCostInfoDO> orderCostInfoDOOpt = this.lambdaQuery()
  77 + .eq(OrderCostInfoDO::getOrderId, id)
  78 + .last(" limit 1 ")
  79 + .oneOpt();
  80 + OrderCostInfoDO orderCostInfoDO = null;
  81 + OrderCostInfoDO oldOrderCostInfoDO = null;
  82 + boolean isUpdate = orderCostInfoDOOpt.isPresent();
  83 + if (!isUpdate) {
  84 + //对象不存在。
  85 + orderCostInfoDO = BeanUtil.copyProperties(vo, OrderCostInfoDO.class);
  86 + } else {
  87 + orderCostInfoDO = orderCostInfoDOOpt.get();
  88 + oldOrderCostInfoDO = BeanUtil.copyProperties(orderCostInfoDO, OrderCostInfoDO.class,"id","orderId","createTime","createBy","modifyTime","modifyBy","enableFlag");
  89 + BeanUtil.copyProperties(vo, orderCostInfoDO, CopyOptions.create().ignoreNullValue());
  90 + }
  91 + // 如果对于新旧数据一致时,则不会进行状态设置。 但是对于第一次创建数据应该怎么办呢? 通过isUpdate来进行判断。 对象不存在时,就不需要判断数据是否一致,对象存在时,就需要进行判断数据是否一致。如果一致,则不要进行状态设置,反之则需要进行状态设置。
  92 +
  93 + Optional<OrderCostFieldLockRecord> orderCostFieldLockRecordOpt = orderCostFieldLockRecordService
  94 + .lambdaQuery()
  95 + .eq(OrderCostFieldLockRecord::getOrderId, id)
  96 + .last(" limit 1 ")
  97 + .oneOpt();
  98 + OrderCostFieldLockRecord orderCostFieldLockRecord = orderCostFieldLockRecordOpt.orElse(
  99 + OrderCostFieldLockRecord.builder()
  100 + .orderId(id)
  101 + .userId(dataScope.getLoginUserId())
  102 + .build()
  103 + );
  104 + OrderCostInfolockFieldVO originOrderCostInfolockFieldVO = JSONObject.parseObject(Optional.ofNullable(orderCostFieldLockRecord.getFields()).orElse("{}"), OrderCostInfolockFieldVO.class);
  105 + if(Objects.nonNull(vo.getPacketActualRmbTotalPrice())){
  106 + originOrderCostInfolockFieldVO.setPacketActualRmbTotalPrice(OrderLockFieldEnum.LOCKED.name());
  107 + type=ProjectOptTypeEnum.PACKAGING_COST_TYPE.getType();
  108 + operationDesc = isUpdate
  109 + ? OrderOptTypeEnum.PROJECT_COST_EDIT.getDesc()
  110 + : OrderOptTypeEnum.PROJECT_COST_ADD.getDesc();
  111 + //编辑包装费用实际金额之后状态为待审核
  112 + /*需要考虑一个问题,假如状态为已通过,但是没有进行任何的修改而点击了确认,那么它的状态会由已审核变为待审核,所以需要进行判断一下,此次传递来的数据是否与上一次的数据一致,如果不一致则需要进行状态设置*/
  113 + if(isUpdate && ProfitStatusEnum.APPROVED.getStatus().equals(oldOrderCostInfoDO.getPackStatus())
  114 + && oldOrderCostInfoDO.getPacketActualRmbTotalPrice().compareTo(vo.getPacketActualRmbTotalPrice()) == 0){
  115 + }else{
  116 + orderCostInfoDO.setPackStatus(ProfitStatusEnum.PENDING_APPROVAL.getStatus());
  117 + }
  118 + }else if(Objects.nonNull(vo.getProductionActualPrice())||Objects.nonNull(vo.getProductionDepartmentPredictUnitPrice())) {
  119 + //todo 以前是直接填写总价,现在是填写单价,然后乘以数量自动计算总价,需要前端传递一个数量参数过来。
  120 + vo.setProductionDepartmentPredictPrice(vo.getProductionDepartmentPredictUnitPrice().multiply(BigDecimal.valueOf(vo.getOrderCount())));
  121 + orderCostInfoDO.setProductionDepartmentPredictPrice(vo.getProductionDepartmentPredictPrice());
  122 + originOrderCostInfolockFieldVO.setProductionActualPrice(OrderLockFieldEnum.LOCKED.name());
  123 + originOrderCostInfolockFieldVO.setProductionDepartmentPredictPrice(OrderLockFieldEnum.LOCKED.name());
  124 + type=ProjectOptTypeEnum.INTERNAL_PRODUCE_DETAILS_TYPE.getType();
  125 + operationDesc = isUpdate
  126 + ? OrderOptTypeEnum.PROJECT_INNER_PRODUCE_PROFIT_EDIT.getDesc()
  127 + : OrderOptTypeEnum.PROJECT_INNER_PRODUCE_PROFIT_ADD.getDesc();
  128 + //编辑生产科预算金额和实际发生费用之后状态为待审核
  129 + /*也需要考虑问题,假如状态为已通过,但是没有进行任何修改二点击了确认,那么它的状态会由已审核变为待审核*/
  130 + if(isUpdate && ProfitStatusEnum.APPROVED.getStatus().equals(oldOrderCostInfoDO.getInnerProduceStatus()) &&
  131 + oldOrderCostInfoDO.getProductionActualPrice().compareTo(vo.getProductionActualPrice()) ==0 &&
  132 + //前端传递的是单价和数量,但是后端只是保存了总价,所以需要进行判断一下,此次传递来的数据和上一次的数据是否一致,如果不一致则需要进行状态设置
  133 + oldOrderCostInfoDO.getProductionDepartmentPredictPrice().compareTo(vo.getProductionDepartmentPredictUnitPrice().multiply(BigDecimal.valueOf(vo.getOrderCount()))) ==0){
  134 + }else{
  135 + orderCostInfoDO.setInnerProduceStatus(ProfitStatusEnum.PENDING_APPROVAL.getStatus());
  136 + }
  137 + }
  138 + orderCostFieldLockRecord.setFields(JSONObject.toJSONString(originOrderCostInfolockFieldVO));
  139 + orderCostFieldLockRecordService.saveOrUpdate(orderCostFieldLockRecord);
  140 + this.saveOrUpdate(orderCostInfoDO);
  141 + //进行日志记录。
  142 + OrderCostInfoVO orderCostInfoVO = buildOrderConstInfoVO(vo, id);
  143 + OrderCostDetailedOptLogDO orderConstOptLogDo = buildOrderConstOptLogDo(id, dataScope.getLoginUserId(),type ,operationDesc,JSONObject.toJSONString(orderCostInfoVO));
  144 + return ServerResult.success(orderCostDetailedOptLogService.save(orderConstOptLogDo));
  145 + }
  146 +
  147 + @Override
  148 + public ServerResult applyEditFileds(OrderCostInfolockFieldVO vo) {
  149 + Integer applyType=null;
  150 + List<OrderFieldLockApplyDO> applyDOS = orderFieldLockApplyService.list(new LambdaQueryWrapper<OrderFieldLockApplyDO>()
  151 + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  152 + .eq(OrderFieldLockApplyDO::getOrderId, vo.getOrderId())
  153 + .eq(OrderFieldLockApplyDO::getApplyUserId, dataScope.getLoginUserId())
  154 + .eq(OrderFieldLockApplyDO::getType, vo.getType())
  155 + .eq(OrderFieldLockApplyDO::getStatus, ApplyStatusEnum.WAIT_AUDIT.getStatus()));
  156 + if (CollectionUtils.isNotEmpty(applyDOS)) {
  157 + throw new BusinessException(ServerResultCode.APPLY_UNLOCK_FIELD_EXIST);
  158 + }
  159 + OrderCostInfolockFieldVO lockField = OrderCostInfolockFieldVO.builder()
  160 + .packetActualRmbTotalPrice(vo.getPacketActualRmbTotalPrice())
  161 + .productionActualPrice(vo.getProductionActualPrice())
  162 + .productionDepartmentPredictPrice(vo.getProductionDepartmentPredictPrice())
  163 + .productionDepartmentPredictUnitPrice(vo.getProductionDepartmentPredictUnitPrice())
  164 + .build();
  165 + OrderFieldLockApplyDO build = OrderFieldLockApplyDO.builder()
  166 + .orderId(vo.getOrderId())
  167 + .applyUserId(dataScope.getLoginUserId())
  168 + .applyRemark(vo.getApplyRemark())
  169 + .fields(JSONObject.toJSONString(lockField))
  170 + .status(ApplyStatusEnum.WAIT_AUDIT.getStatus())
  171 + .type(vo.getType())
  172 + .remark(OrderCostApplyTpeEnum.getNameByType(vo.getType()))
  173 + .build();
  174 + orderFieldLockApplyService.save(build);
  175 + //进行审批记录的保存。需要前端在申请字段申请时传递这条数据的id。
  176 + if(OrderCostApplyTpeEnum.ORDER_PRODUCTION_COST_FIELD_EDIT_APPLY.getType().equals(vo.getType())){
  177 + applyType=OrderCostApplyTpeEnum.ORDER_PRODUCTION_COST_FIELD_EDIT_APPLY.getType();
  178 + }else{
  179 + applyType=OrderCostApplyTpeEnum.ORDER_PACKET_COST_FIELD_EDIT_APPLY.getType();
  180 + }
  181 + orderCostDetailedOptLogService.save(buildOrderConstOptLogDo(vo.getOrderId(), dataScope.getLoginUserId(),applyType,OrderCostApplyTpeEnum.getNameByType(applyType),JSONObject.toJSONString(lockField)));
  182 + return ServerResult.success();
  183 + }
  184 +
  185 + @Override
  186 + public ServerResult<Page<InnerProfitDetailVO>> listInnerProfitDetailByPage(OrderBaseInfoQueryVO queryVO) {
  187 + ServerResult serverResult = orderBaseInfoService.listByPage(queryVO);
  188 + Page<OrderInfoResultVO> page = (Page<OrderInfoResultVO>) serverResult.getData();
  189 + List<OrderInfoResultVO> records = page.getRecords();
  190 + List<OrderCostFieldLockRecord> lockRecords = orderCostFieldLockRecordService
  191 + .lambdaQuery()
  192 + .func(query -> {
  193 + Set<Long> collect = records.stream().map(OrderInfoResultVO::getId).collect(Collectors.toSet());
  194 + if (CollUtil.isNotEmpty(collect)) {
  195 + query.in(OrderCostFieldLockRecord::getOrderId, collect);
  196 +
  197 + } else {
  198 + query.apply("1!=1");
  199 + }
  200 + })
  201 + .list();
  202 + ObjectMapper objectMapper = new ObjectMapper();
  203 + Map<Long, OrderCostInfolockFieldVO> orderId2fieldMapMap = lockRecords.stream().collect(Collectors.toMap(OrderCostFieldLockRecord::getOrderId, record -> {
  204 + try {
  205 + return objectMapper.readValue(record.getFields(), OrderCostInfolockFieldVO.class);
  206 + } catch (JsonProcessingException e) {
  207 + throw new RuntimeException(e);
  208 + }
  209 + }));
  210 + List<InnerProfitDetailVO> innerProfitRatioResultVOs = records.stream().map(record -> {
  211 + OrderCostInfoVO orderCostInfo = record.getOrderCostInfo();
  212 + OrderCostInfolockFieldVO lockFields = Optional.ofNullable(orderId2fieldMapMap.get(record.getId()))
  213 + .orElse(new OrderCostInfolockFieldVO()
  214 + );
  215 + if(Objects.isNull(lockFields.getPacketActualRmbTotalPrice())){
  216 + lockFields.setPacketActualRmbTotalPrice(Objects.isNull(orderCostInfo) || Objects.isNull(orderCostInfo.getPacketActualRmbTotalPrice()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name());
  217 + }
  218 + if(Objects.isNull(lockFields.getProductionActualPrice())){
  219 + lockFields.setProductionActualPrice(Objects.isNull(orderCostInfo) || Objects.isNull(orderCostInfo.getProductionActualPrice()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name());
  220 + }
  221 + if(Objects.isNull(lockFields.getProductionDepartmentPredictPrice())){
  222 + lockFields.setProductionDepartmentPredictPrice(Objects.isNull(orderCostInfo) || Objects.isNull(orderCostInfo.getProductionDepartmentPredictPrice()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name());
  223 + }
  224 + if(Objects.isNull(lockFields.getProductionDepartmentPredictUnitPrice())){
  225 + lockFields.setProductionDepartmentPredictUnitPrice(Objects.isNull(orderCostInfo) || Objects.isNull(orderCostInfo.getProductionDepartmentPredictUnitPrice()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name());
  226 + }
  227 + InnerProfitDetailVO vo = InnerProfitDetailVO.builder()
  228 + .orderId(record.getId())
  229 + .customerCode(record.getCustomerCode())
  230 + .projectNo(record.getProjectNo())
  231 + .productionDepartment(record.getProductionDepartment())
  232 + .innerNo(record.getInnerNo())
  233 + .picUrl(record.getPicUrl())
  234 + .orderCount(record.getOrderCount())
  235 + .productionDepartmentPrice(Objects.isNull(record.getProfitAnalysisInfo()) ? null : record.getProfitAnalysisInfo().getProductionDepartmentPrice())
  236 + .productionDepartmentTotalPrice(Objects.isNull(record.getProfitAnalysisInfo()) ? null : record.getProfitAnalysisInfo().getProductionDepartmentTotalPrice())
  237 + .productionDepartmentPredictPrice(Objects.isNull(record.getOrderCostInfo()) ? null : record.getOrderCostInfo().getProductionDepartmentPredictPrice())
  238 + .productionActualPrice(Objects.isNull(record.getOrderCostInfo()) ? null : record.getOrderCostInfo().getProductionActualPrice())
  239 + .innerProduceStatus((Objects.isNull(record.getOrderCostInfo()) || Objects.isNull(record.getOrderCostInfo().getInnerProduceStatus())) ? ProfitStatusEnum.Not_COMPLETED.getStatus() : record.getOrderCostInfo().getInnerProduceStatus())
  240 + .lockFields(lockFields)
  241 + .build();
  242 +
  243 + if (Objects.nonNull(vo.getProductionDepartmentPredictPrice())
  244 + && Objects.nonNull(vo.getProductionActualPrice())
  245 + && vo.getProductionDepartmentPredictPrice().compareTo(BigDecimal.ZERO) != 0) {
  246 + //预算占比=实际发生费用/预算金额
  247 + vo.setPredictRatio(vo.getProductionActualPrice().divide(vo.getProductionDepartmentPredictPrice(), 4, RoundingMode.HALF_UP));
  248 + //预算占比与实际比占比差:1-预算占比
  249 + vo.setPredictAndActualRatio(new BigDecimal(1).subtract(vo.getPredictRatio()));
  250 + }
  251 + if (Objects.nonNull(vo.getProductionDepartmentTotalPrice())
  252 + && Objects.nonNull(vo.getProductionDepartmentPredictPrice())) {
  253 + //事前毛利润=生产总额-预算金额
  254 + vo.setBeforeGrossProfit(BigDecimal.valueOf(vo.getProductionDepartmentTotalPrice()).subtract(vo.getProductionDepartmentPredictPrice()));
  255 + if (Objects.nonNull(vo.getProductionDepartmentTotalPrice())
  256 + && vo.getProductionDepartmentTotalPrice().compareTo(0.0) != 0) {
  257 + //事前毛利润率=事前毛利润/生产总额
  258 + vo.setBeforeGrossProfitRate(vo.getBeforeGrossProfit().divide(BigDecimal.valueOf(vo.getProductionDepartmentTotalPrice()), 4, RoundingMode.HALF_UP));
  259 + }
  260 + }
  261 + if (Objects.nonNull(vo.getProductionDepartmentTotalPrice())
  262 + && Objects.nonNull(vo.getProductionActualPrice())) {
  263 + //事后毛利润=实际发生费用-生产总额
  264 + vo.setGrossProfit(BigDecimal.valueOf(vo.getProductionDepartmentTotalPrice()).subtract(vo.getProductionActualPrice()));
  265 + if (Objects.nonNull(vo.getProductionDepartmentTotalPrice())
  266 + && vo.getProductionDepartmentTotalPrice().compareTo(0.0) != 0) {
  267 + //事后毛利润率=事后毛利润/生产总额
  268 + vo.setGrossProfitRate(vo.getGrossProfit().divide(BigDecimal.valueOf(vo.getProductionDepartmentTotalPrice()), 4, RoundingMode.HALF_UP));
  269 + }
  270 + }
  271 + if(Objects.nonNull(vo.getProductionDepartmentPredictPrice())){
  272 + vo.setProductionDepartmentPredictUnitprice(vo.getProductionDepartmentPredictPrice().divide(BigDecimal.valueOf(record.getOrderCount()), 2, RoundingMode.HALF_UP));
  273 + }
  274 + return vo;
  275 + }).collect(Collectors.toList());
  276 + Page<InnerProfitDetailVO> webVOPage = new Page<>();
  277 + webVOPage.setRecords(innerProfitRatioResultVOs);
  278 + BeanUtils.copyProperties(page, webVOPage, "records");
  279 + return ServerResult.success(webVOPage);
  280 + }
  281 +
  282 +
  283 + @Override
  284 + public ServerResult<Page<BusinessProfitDetailVO>> listBusinessProfitDetailByPage(OrderBaseInfoQueryVO queryVO) {
  285 + ServerResult serverResult = orderBaseInfoService.listByPage(queryVO);
  286 + Page<OrderInfoResultVO> page = (Page<OrderInfoResultVO>) serverResult.getData();
  287 + List<OrderInfoResultVO> records = page.getRecords();
  288 + List<OrderCostFieldLockRecord> lockRecords = orderCostFieldLockRecordService
  289 + .lambdaQuery()
  290 + .func(query -> {
  291 + Set<Long> collect = records.stream().map(OrderInfoResultVO::getId).collect(Collectors.toSet());
  292 + if (CollUtil.isNotEmpty(collect)) {
  293 + query.in(OrderCostFieldLockRecord::getOrderId, collect);
  294 +
  295 + } else {
  296 + query.apply("1!=1");
  297 + }
  298 + })
  299 + .list();
  300 + ObjectMapper objectMapper = new ObjectMapper();
  301 + Map<Long, OrderCostInfolockFieldVO> orderId2fieldMapMap = lockRecords.stream().collect(Collectors.toMap(OrderCostFieldLockRecord::getOrderId, record -> {
  302 + try {
  303 + return objectMapper.readValue(record.getFields(), OrderCostInfolockFieldVO.class);
  304 + } catch (JsonProcessingException e) {
  305 + throw new RuntimeException(e);
  306 + }
  307 + }));
  308 + BigDecimal exchangeRate = systemSettingService.getExchangeRate();
  309 +
  310 + List<BusinessProfitDetailVO> innerProfitRatioResultVOs = records.stream().map(record -> {
  311 + OrderCostInfoVO orderCostInfo = record.getOrderCostInfo();
  312 + OrderCostInfolockFieldVO lockFields = Optional.ofNullable(orderId2fieldMapMap.get(record.getId())).orElse(
  313 + new OrderCostInfolockFieldVO()
  314 + );
  315 + if(Objects.isNull(lockFields.getPacketActualRmbTotalPrice())){
  316 + lockFields.setPacketActualRmbTotalPrice(Objects.isNull(orderCostInfo) || Objects.isNull(orderCostInfo.getPacketActualRmbTotalPrice()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name());
  317 + }
  318 + if(Objects.isNull(lockFields.getProductionActualPrice())){
  319 + lockFields.setProductionActualPrice(Objects.isNull(orderCostInfo) || Objects.isNull(orderCostInfo.getProductionActualPrice()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name());
  320 + }
  321 + if(Objects.isNull(lockFields.getProductionDepartmentPredictPrice())){
  322 + lockFields.setProductionDepartmentPredictPrice(Objects.isNull(orderCostInfo) || Objects.isNull(orderCostInfo.getProductionDepartmentPredictPrice()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name());
  323 + }
  324 + BusinessProfitDetailVO vo = BusinessProfitDetailVO.builder()
  325 + .orderId(record.getId())
  326 + .customerCode(record.getCustomerCode())
  327 + .projectNo(record.getProjectNo())
  328 + .productionDepartment(record.getProductionDepartment())
  329 + .innerNo(record.getInnerNo())
  330 + .picUrl(record.getPicUrl())
  331 + .orderCount(record.getOrderCount())
  332 + .packetPrice(Objects.isNull(record.getProfitAnalysisInfo()) ? null : record.getProfitAnalysisInfo().getPacketPrice())
  333 + .packetTotalPrice(Objects.isNull(record.getProfitAnalysisInfo()) ? null : record.getProfitAnalysisInfo().getPacketTotalPrice())
  334 + .packetActualRmbTotalPrice(Objects.isNull(record.getOrderCostInfo()) ? null : record.getOrderCostInfo().getPacketActualRmbTotalPrice())
  335 + .packStatus((Objects.isNull(record.getOrderCostInfo()) || Objects.isNull(record.getOrderCostInfo().getPackStatus())) ? ProfitStatusEnum.Not_COMPLETED.getStatus() : record.getOrderCostInfo().getPackStatus())
  336 + .lockFields(lockFields)
  337 + .build();
  338 + if (Objects.nonNull(vo.getPacketTotalPrice())) {
  339 + //包装费用合计 = 包装费合计*汇率
  340 + vo.setPacketRmbTotalPrice(BigDecimal.valueOf(vo.getPacketTotalPrice()).multiply(exchangeRate.setScale(4, RoundingMode.HALF_UP)).doubleValue());
  341 + }
  342 + if (Objects.nonNull(vo.getPacketActualRmbTotalPrice()) && Objects.nonNull(vo.getOrderCount())) {
  343 + //实际跟单单价 = 包装费用实际金额/数量
  344 + vo.setPacketActualRmbPrice(vo.getPacketActualRmbTotalPrice().divide(BigDecimal.valueOf(vo.getOrderCount()), 4, RoundingMode.HALF_UP));
  345 + //实际跟单单价折算美金$ = 人民币单价/汇率
  346 + vo.setPacketActualPrice(vo.getPacketActualRmbPrice().divide(exchangeRate, 4, RoundingMode.HALF_UP));
  347 + }
  348 + if (Objects.nonNull(vo.getPacketRmbTotalPrice()) && Objects.nonNull(vo.getPacketActualRmbPrice())) {
  349 + //包装费用收益¥ = 包装费用合计-包装费用实际金额
  350 + vo.setPacketProfitRmbPrice(BigDecimal.valueOf(vo.getPacketRmbTotalPrice()).subtract(vo.getPacketActualRmbTotalPrice()));
  351 + }
  352 + if (Objects.nonNull(vo.getPacketProfitRmbPrice()) && Objects.nonNull(vo.getPacketRmbTotalPrice())) {
  353 + //包装费用净利润率 = 包装费用收益/包装费用合计
  354 + vo.setPacketProfitRate(vo.getPacketProfitRmbPrice().divide(BigDecimal.valueOf(vo.getPacketRmbTotalPrice()), 4, RoundingMode.HALF_UP));
  355 + }
  356 + return vo;
  357 + }).collect(Collectors.toList());
  358 + Page<BusinessProfitDetailVO> webVOPage = new Page<>();
  359 + webVOPage.setRecords(innerProfitRatioResultVOs);
  360 + BeanUtils.copyProperties(page, webVOPage, "records");
  361 + return ServerResult.success(webVOPage);
  362 + }
  363 +
  364 + @Override
  365 + public void exportBusinessProfitDetailExcel(HttpServletResponse response,ProjectBaseInfoQueryVO queryVO) throws Exception {
  366 + if(CollectionUtils.isEmpty(queryVO.getOrderIds()) &&
  367 + CollectionUtils.isEmpty(queryVO.getProjectNo()) &&
  368 + CollectionUtils.isEmpty(queryVO.getCustomerCode()) &&
  369 + CollectionUtils.isEmpty(queryVO.getInnerNo()) &&
  370 + CollectionUtils.isEmpty(queryVO.getProductionDepartment())){
  371 + throw new BusinessException(ServerResultCode.PARAM_ERROR);
  372 + }
  373 + OrderBaseInfoQueryVO.OrderBaseInfoQueryVOBuilder builder = OrderBaseInfoQueryVO.builder()
  374 + .page(1)
  375 + .pageSize(200); // 设置大一点,确保导出数据不遗漏
  376 +
  377 + // 根据传入条件设置筛选字段
  378 + if (CollectionUtils.isNotEmpty(queryVO.getOrderIds())) {
  379 + builder.orderIds(queryVO.getOrderIds());
  380 + } else {
  381 + //如果orderIds为空就代表传递的是筛选条件。
  382 + if (CollectionUtils.isNotEmpty(queryVO.getProjectNo())) {
  383 + builder.projectNo(queryVO.getProjectNo());
  384 + }
  385 + if (CollectionUtils.isNotEmpty(queryVO.getCustomerCode())) {
  386 + builder.customerCode(queryVO.getCustomerCode());
  387 + }
  388 + if (CollectionUtils.isNotEmpty(queryVO.getProductionDepartment())) {
  389 + builder.productionDepartment(queryVO.getProductionDepartment());
  390 + }
  391 + if (CollectionUtils.isNotEmpty(queryVO.getInnerNo())) {
  392 + builder.innerNo(queryVO.getInnerNo());
  393 + }
  394 + }
  395 + ServerResult serverResult = listBusinessProfitDetailByPage(builder.build());
  396 + Page<BusinessProfitDetailVO> page = (Page<BusinessProfitDetailVO>) serverResult.getData();
  397 + List<BusinessProfitDetailVO> businessProfitDetailVOS = page.getRecords();
  398 + System.out.println("订单数量:"+businessProfitDetailVOS.size());
  399 + if(CollectionUtils.isNotEmpty(businessProfitDetailVOS)){
  400 + List<Map<String, Object>> list = buildBusinessProfitExportExcel(businessProfitDetailVOS, queryVO);
  401 + if(CollectionUtils.isNotEmpty(list)){
  402 + List<String> keys = new ArrayList<>(list.get(Constant.ZERO).keySet());
  403 + ExcelHelper.opsExport(PoiWorkbookType.XLSX)
  404 + .opsSheet(list)
  405 + .opsHeader().simple().texts(keys).done()
  406 + .opsColumn().fields(keys).done()
  407 + .height(CellPosition.CELL, 750)
  408 + .done()
  409 + .export(response.getOutputStream());
  410 + System.out.println("导出成功");
  411 + }
  412 + }
  413 + System.out.println(businessProfitDetailVOS);
  414 + }
  415 +
  416 + @Override
  417 + public void exportInnerProfitDetailExcel(HttpServletResponse response, ProjectBaseInfoQueryVO queryVO) throws Exception {
  418 + if(CollectionUtils.isEmpty(queryVO.getOrderIds()) &&
  419 + CollectionUtils.isEmpty(queryVO.getProjectNo()) &&
  420 + CollectionUtils.isEmpty(queryVO.getCustomerCode()) &&
  421 + CollectionUtils.isEmpty(queryVO.getInnerNo()) &&
  422 + CollectionUtils.isEmpty(queryVO.getProductionDepartment())){
  423 + throw new BusinessException(ServerResultCode.PARAM_ERROR);
  424 + }
  425 + OrderBaseInfoQueryVO.OrderBaseInfoQueryVOBuilder builder = OrderBaseInfoQueryVO.builder()
  426 + .page(1)
  427 + .pageSize(200); //设置大一点,确保导出数据不遗漏
  428 + if(CollectionUtils.isNotEmpty(queryVO.getOrderIds())){
  429 + builder.orderIds(queryVO.getOrderIds());
  430 + }else{
  431 + //如果orderIds为空就代表传递的是筛选条件。
  432 + if(CollectionUtils.isNotEmpty(queryVO.getProjectNo())){
  433 + builder.projectNo(queryVO.getProjectNo());
  434 + }
  435 + if(CollectionUtils.isNotEmpty(queryVO.getCustomerCode())){
  436 + builder.customerCode(queryVO.getCustomerCode());
  437 + }
  438 + if(CollectionUtils.isNotEmpty(queryVO.getProductionDepartment())){
  439 + builder.productionDepartment(queryVO.getProductionDepartment());
  440 + }
  441 + if(CollectionUtils.isNotEmpty(queryVO.getInnerNo())){
  442 + builder.innerNo(queryVO.getInnerNo());
  443 + }
  444 + }
  445 + //这里设置为100是故意设置大一点,防止导出多条数据。
  446 + ServerResult<Page<InnerProfitDetailVO>> serverResult= listInnerProfitDetailByPage(builder.build());
  447 + Page<InnerProfitDetailVO> page=(Page<InnerProfitDetailVO>) serverResult.getData();
  448 + List<InnerProfitDetailVO> innerProfitDetailVOS = page.getRecords();
  449 + System.out.println("订单数量"+innerProfitDetailVOS.size());
  450 + if(CollectionUtils.isNotEmpty(innerProfitDetailVOS)){
  451 + List<Map<String, Object>> list = buildInnerProfitDetailExcel(innerProfitDetailVOS, queryVO);
  452 + if(CollectionUtils.isNotEmpty(list)){
  453 + List<String> keys = new ArrayList<>(list.get(Constant.ZERO).keySet());
  454 + ExcelHelper.opsExport(PoiWorkbookType.XLSX)
  455 + .opsSheet(list)
  456 + .opsHeader().simple().texts(keys).done()
  457 + .opsColumn().fields(keys).done()
  458 + .height(CellPosition.CELL, 750)
  459 + .done()
  460 + .export(response.getOutputStream());
  461 + System.out.println("导出成功");
  462 + }
  463 + }
  464 + }
  465 +
  466 + @Override
  467 + public void setPackStatus(OrderCostInfoVO vo) {
  468 + //首先判断orderId是否为空。
  469 + if(Objects.isNull(vo.getOrderId())){
  470 + throw new BusinessException(ServerResultCode.PARAM_ERROR);
  471 + }
  472 + OrderCostInfoDO orderCostInfoDO = getOne(new LambdaQueryWrapper<OrderCostInfoDO>()
  473 + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  474 + .eq(OrderCostInfoDO::getOrderId, vo.getOrderId())
  475 + .last("limit 1"));
  476 + if(Objects.isNull(orderCostInfoDO)){
  477 + throw new BusinessException(ServerResultCode.EMPTY_LIST);
  478 + }
  479 + orderCostInfoDO.setPackStatus(ProfitStatusEnum.APPROVED.getStatus());
  480 + updateById(orderCostInfoDO);
  481 + }
  482 +
  483 + @Override
  484 + public void setInnerProduceStatus(OrderCostInfoVO vo) {
  485 + if(Objects.isNull(vo.getOrderId())){
  486 + throw new BusinessException(ServerResultCode.PARAM_ERROR);
  487 + }
  488 + OrderCostInfoDO orderCostInfoDO = getOne(new LambdaQueryWrapper<OrderCostInfoDO>()
  489 + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  490 + .eq(OrderCostInfoDO::getOrderId, vo.getOrderId())
  491 + .last("limit 1"));
  492 + if(Objects.isNull(orderCostInfoDO)){
  493 + throw new BusinessException(ServerResultCode.EMPTY_LIST);
  494 + }
  495 + orderCostInfoDO.setInnerProduceStatus(ProfitStatusEnum.APPROVED.getStatus());
  496 + updateById(orderCostInfoDO);
  497 + }
  498 +
  499 +
  500 + private OrderCostDetailedOptLogDO buildOrderConstOptLogDo(Long orderId, Long userId , Integer type, String optType, String field){
  501 + return OrderCostDetailedOptLogDO.builder()
  502 + .orderId(orderId)
  503 + .userId(userId)
  504 + .type(type)
  505 + .optType(optType)
  506 + .fields(field)
  507 + .build();
  508 + }
  509 + private OrderCostInfoVO buildOrderConstInfoVO(OrderCostInfoVO vo,Long orderId){
  510 + OrderCostInfoVO orderCostInfoVO = new OrderCostInfoVO();
  511 + BeanUtils.copyProperties(vo, orderCostInfoVO, "id");
  512 + orderCostInfoVO.setId(orderId);
  513 + return orderCostInfoVO;
  514 + }
  515 +
  516 + private List<Map<String,Object>> buildBusinessProfitExportExcel(List<BusinessProfitDetailVO> businessProfitDetailVOS,ProjectBaseInfoQueryVO queryVO){
  517 + List<Map<String,Object>> list= new ArrayList<>();
  518 + for(BusinessProfitDetailVO vo:businessProfitDetailVOS){
  519 + Map<String, Object> map = new LinkedHashMap<>();
  520 + map.put("客户编码",Objects.nonNull(vo.getCustomerCode()) ? vo.getCustomerCode() : "");
  521 + map.put("项目号",Objects.nonNull(vo.getProjectNo()) ? vo.getProjectNo() : "");
  522 + map.put("生产科",Objects.nonNull(vo.getProductionDepartment()) ? vo.getProductionDepartment() : "");
  523 + map.put("内部编号",Objects.nonNull(vo.getInnerNo()) ? vo.getInnerNo() : "");
  524 + map.put("图片地址",Objects.nonNull(vo.getPicUrl()) ? vo.getPicUrl() : "");
  525 + map.put("订单数量",Objects.nonNull(vo.getOrderCount()) ? vo.getOrderCount() : "");
  526 + map.put("包装费用$",Objects.nonNull(vo.getPacketPrice()) ? String.format("%.2f",vo.getPacketPrice()) : "");
  527 + map.put("包装费用合计$",Objects.nonNull(vo.getPacketTotalPrice()) ? String.format("%.2f",vo.getPacketTotalPrice()) : "");
  528 + map.put("包装费用合计¥",Objects.nonNull(vo.getPacketRmbTotalPrice()) ? String.format("%.2f",vo.getPacketRmbTotalPrice()) : "");
  529 + map.put("包装费用实际金额¥",Objects.nonNull(vo.getPacketActualRmbTotalPrice()) ? vo.getPacketActualRmbTotalPrice().setScale(2, RoundingMode.HALF_UP).toPlainString() : "");
  530 + map.put("实际跟单单价¥",Objects.nonNull(vo.getPacketActualRmbPrice()) ? vo.getPacketActualRmbPrice().setScale(2, RoundingMode.HALF_UP).toPlainString() : "");
  531 + map.put("实际跟单单价$",Objects.nonNull(vo.getPacketActualPrice()) ? vo.getPacketActualPrice().setScale(2, RoundingMode.HALF_UP).toPlainString() : "");
  532 + map.put("包装费用净利润率",Objects.nonNull(vo.getPacketProfitRate()) ? vo.getPacketProfitRate().multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP) + "%" : "");
  533 +// if(StringUtils.isNotBlank(queryVO.getBusinessCostExportSelect().getPacketPrice()) &&
  534 +// OrderLockFieldEnum.SELECTED.name().equals(queryVO.getBusinessCostExportSelect().getPacketPrice())){
  535 +//
  536 +// }
  537 + list.add(map);
  538 + }
  539 + return list;
  540 + }
  541 +
  542 + private List<Map<String,Object>> buildInnerProfitDetailExcel(List<InnerProfitDetailVO> innerProfitDetailVOS, ProjectBaseInfoQueryVO queryVO){
  543 + List<Map<String,Object>> list = new ArrayList<>();
  544 + for (InnerProfitDetailVO vo:innerProfitDetailVOS){
  545 + Map<String, Object> hashMap = new LinkedHashMap<>();
  546 + hashMap.put("客户编码",Objects.nonNull(vo.getCustomerCode()) ? vo.getCustomerCode() : "");
  547 + hashMap.put("项目号",Objects.nonNull(vo.getProjectNo()) ? vo.getProjectNo() : "");
  548 + hashMap.put("生产科",Objects.nonNull(vo.getProductionDepartment()) ? vo.getProductionDepartment() : "");
  549 + hashMap.put("内部编号",Objects.nonNull(vo.getInnerNo()) ? vo.getInnerNo() : "");
  550 + hashMap.put("图片地址",Objects.nonNull(vo.getPicUrl()) ? vo.getPicUrl() : "");
  551 + hashMap.put("订单数量",Objects.nonNull(vo.getOrderCount()) ? vo.getOrderCount() : "");
  552 + hashMap.put("生产科单价¥",Objects.nonNull(vo.getProductionDepartmentPrice()) ? String.format("%.2f",vo.getProductionDepartmentPrice()) : "");
  553 + hashMap.put("生产科总价¥",Objects.nonNull(vo.getProductionDepartmentTotalPrice()) ? String.format("%.2f",vo.getProductionDepartmentTotalPrice()) : "");
  554 + hashMap.put("生产科预算金额¥",Objects.nonNull(vo.getProductionDepartmentPredictPrice()) ? vo.getProductionDepartmentPredictPrice().setScale(2, RoundingMode.HALF_UP).toPlainString() : "");
  555 + hashMap.put("实际发生费用¥",Objects.nonNull(vo.getProductionActualPrice()) ? vo.getProductionActualPrice().setScale(2, RoundingMode.HALF_UP).toPlainString() : "");
  556 + hashMap.put("预算占比",Objects.nonNull(vo.getPredictRatio()) ? vo.getPredictRatio().multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP) + "%" : "");
  557 + hashMap.put("预算占比与实际占比差",Objects.nonNull(vo.getPredictAndActualRatio()) ? vo.getPredictAndActualRatio().multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP) + "%" : "");
  558 + hashMap.put("事前毛利润",Objects.nonNull(vo.getBeforeGrossProfit()) ? vo.getBeforeGrossProfit().setScale(2, RoundingMode.HALF_UP).toPlainString() : "");
  559 + hashMap.put("事前毛利率",Objects.nonNull(vo.getBeforeGrossProfitRate()) ? vo.getBeforeGrossProfitRate().multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP) + "%" : "");
  560 + hashMap.put("事后毛利润",Objects.nonNull(vo.getGrossProfit()) ? vo.getGrossProfit().setScale(2, RoundingMode.HALF_UP).toPlainString() : "");
  561 + hashMap.put("事后毛利率",Objects.nonNull(vo.getGrossProfitRate()) ? vo.getGrossProfitRate().multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP) + "%" : "");
  562 + /*if(StringUtils.isNotBlank(queryVO.getInnerProfitDetailExportSelect().getProductionDepartmentPrice()) &&
  563 + OrderLockFieldEnum.SELECTED.name().equals(queryVO.getInnerProfitDetailExportSelect().getProductionDepartmentPrice())){
  564 +
  565 + }*/
  566 + list.add(hashMap);
  567 + }
  568 + return list;
  569 + }
  570 +
  571 +}
... ...
src/main/java/com/order/erp/service/order/impl/OrderFieldLockApplyServiceImpl.java
1 1 package com.order.erp.service.order.impl;
2 2  
3 3 import cn.hutool.core.bean.BeanUtil;
  4 +import cn.hutool.core.bean.copier.CopyOptions;
4 5 import cn.hutool.core.collection.CollUtil;
5 6 import com.alibaba.fastjson.JSONObject;
6 7 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
... ... @@ -20,12 +21,15 @@ import com.order.erp.config.DataScope;
20 21 import com.order.erp.domain.*;
21 22 import com.order.erp.domain.dto.BaseDO;
22 23 import com.order.erp.domain.dto.order.*;
  24 +import com.order.erp.domain.model.OrderCostFieldLockRecord;
23 25 import com.order.erp.domain.vo.order.*;
24 26 import com.order.erp.mapper.order.OrderFieldLockApplyMapper;
  27 +import com.order.erp.service.IOrderCostFieldLockRecordService;
25 28 import com.order.erp.service.order.*;
26 29 import lombok.extern.slf4j.Slf4j;
27 30 import org.joda.time.DateTime;
28 31 import org.springframework.beans.BeanUtils;
  32 +import org.springframework.beans.factory.annotation.Autowired;
29 33 import org.springframework.stereotype.Service;
30 34 import org.springframework.transaction.annotation.Transactional;
31 35  
... ... @@ -35,6 +39,7 @@ import java.util.*;
35 39 import java.util.concurrent.TimeUnit;
36 40 import java.util.function.Function;
37 41 import java.util.stream.Collectors;
  42 +import java.util.stream.Stream;
38 43  
39 44 /**
40 45 * 用户订单-字段锁定申请表(OrderFieldLockApply)表服务实现类
... ... @@ -52,6 +57,9 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
52 57 @Resource
53 58 private OrderFieldLockRecordService fieldLockRecordService;
54 59  
  60 + @Autowired
  61 + private IOrderCostFieldLockRecordService orderCostFieldLockRecordService;
  62 +
55 63 @Resource
56 64 private OrderFieldLockApplyService applyService;
57 65  
... ... @@ -121,15 +129,23 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
121 129 BeanUtils.copyProperties(x, resultVO);
122 130 String fields = x.getFields();
123 131 if (StringUtils.isNotBlank(fields)) {
124   - if (ApplyTypeEnum.FIELD_EDIT_APPLY.getType() .equals(x.getType())) {
  132 + if (ApplyTypeEnum.FIELD_EDIT_APPLY.getType().equals(x.getType())) {
125 133 resultVO.setFieldInfos(JSONObject.parseObject(fields, OrderLockFieldVO.class));
126 134 }
  135 + // todo
  136 + if (Stream.of(OrderCostApplyTpeEnum.ORDER_PACKET_COST_FIELD_EDIT_APPLY,
  137 + OrderCostApplyTpeEnum.ORDER_PRODUCTION_COST_FIELD_EDIT_APPLY)
  138 + .map(OrderCostApplyTpeEnum::getType)
  139 + .anyMatch(type -> type.equals(x.getType()))) {
  140 + OrderCostInfolockFieldVO orderCostInfolockFieldVO = JSONObject.parseObject(fields, OrderCostInfolockFieldVO.class);
  141 + resultVO.setFieldInfos(OrderLockFieldVO.builder().costInfolockFieldVO(orderCostInfolockFieldVO).build());
  142 + }
127 143 if (ApplyTypeEnum.ORDER_REPORT_APPLY.getType().equals(x.getType())) {
128 144 OrderLockFieldVO fieldVO = new OrderLockFieldVO();
129 145 fieldVO.setReportFields(JSONObject.parseObject(fields, OrderCompletionReportFieldVO.class));
130 146 resultVO.setFieldInfos(fieldVO);
131 147 }
132   - if (ApplyTypeEnum.ORDER_PROFIT_APPLY.getType() .equals(x.getType())) {
  148 + if (ApplyTypeEnum.ORDER_PROFIT_APPLY.getType().equals(x.getType())) {
133 149 OrderLockFieldVO fieldVO = new OrderLockFieldVO();
134 150 fieldVO.setProfitAnalysisFields(JSONObject.parseObject(fields, OrderProfitAnalysisFieldVO.class));
135 151 resultVO.setFieldInfos(fieldVO);
... ... @@ -158,8 +174,8 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
158 174 } else{
159 175 resultVO.setFieldInfos(orderLockFieldVO);
160 176 }
161   - if(Objects.isNull(resultVO.getFieldInfos())){
162   - resultVO=null;
  177 + if (Objects.isNull(resultVO.getFieldInfos())) {
  178 + resultVO = null;
163 179 }
164 180 }
165 181 if (ApplyTypeEnum.CHECK_BILL_APPLY.getType().equals(x.getType()) || ApplyTypeEnum.DEPARTMENT_INVOICE_APPLY.getType().equals(x.getType()) || ApplyTypeEnum.CHECK_DEDUCT_URL.getType().equals(x.getType())) {
... ... @@ -200,13 +216,13 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
200 216 } else{
201 217 resultVO.setFieldInfos(orderLockFieldVO);
202 218 }
203   - if(Objects.isNull(resultVO.getFieldInfos())){
204   - resultVO=null;
  219 + if (Objects.isNull(resultVO.getFieldInfos())) {
  220 + resultVO = null;
205 221 }
206 222 }
207 223 }
208 224 return resultVO;
209   - }).filter(result->result!=null).collect(Collectors.toList());
  225 + }).filter(Objects::nonNull).collect(Collectors.toList());
210 226 if (resultVOList != null && resultVOList.stream().noneMatch(x -> ApplyTypeEnum.INVOICE_BILL_APPLY.getType().equals(x.getType())
211 227 || ApplyTypeEnum.DEPARTMENT_INVOICE_APPLY.getType().equals(x.getType())
212 228 || ApplyTypeEnum.CHECK_BILL_APPLY.getType().equals(x.getType())
... ... @@ -406,7 +422,7 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
406 422 * @param queryVO
407 423 * @return
408 424 */
409   - private LambdaQueryWrapper<OrderFieldLockApplyDO> buildQueryByParam(OrderFieldLockApplyQueryVO queryVO,RoleEnum roleEnum) {
  425 + private LambdaQueryWrapper<OrderFieldLockApplyDO> buildQueryByParam(OrderFieldLockApplyQueryVO queryVO, RoleEnum roleEnum) {
410 426 RoleEnum roleSelect = null;
411 427 if (RoleEnum.BUSINESS_USER.getCode().equals(roleEnum.getCode())) {
412 428 queryVO.setBusinessPerson(dataScope.getLoginUserName());
... ... @@ -424,7 +440,7 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
424 440 // queryVO.getType==Constant.SIXTY完全是为了跟单和业务对于应收账单类型请求时,屏蔽掉应收账单,只展示invoice扣款单申请数据。
425 441 if(queryVO.getType()==Constant.THIRTY || queryVO.getType()==4050 || queryVO.getType()==Constant.SIXTY){
426 442  
427   - }else{
  443 + } else {
428 444 /** 这部分代码是之前的,每台看懂,就先不修改了,保留*/
429 445 //这里是否还u需要添加财务角色权限的逻辑。
430 446 if (StringUtils.isNotBlank(queryVO.getBusinessPerson()) || CollectionUtils.isNotEmpty(queryVO.getCustomerCode()) || CollectionUtils.isNotEmpty(queryVO.getInnerNo())
... ... @@ -450,14 +466,14 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
450 466 .in(CollectionUtils.isNotEmpty(queryVO.getStatusList()), OrderFieldLockApplyDO::getStatus, queryVO.getStatusList())
451 467 .in(CollectionUtils.isNotEmpty(orderIds), OrderFieldLockApplyDO::getOrderId, orderIds);
452 468 //这里应该加上应收款待审核,应付款待审核,应付款已审核,应收款已审核已审核的一个条件。 目前只支持单个字符串搜索,不支持多个。
453   - if(Objects.nonNull(queryVO.getType())){
  469 + if (Objects.nonNull(queryVO.getType())) {
454 470 //发票,应付款审核。
455   - if(Constant.FOUR == String.valueOf(queryVO.getType()).length()){
  471 + if (Constant.FOUR == String.valueOf(queryVO.getType()).length()) {
456 472 int firstTwoDigits = queryVO.getType() / 100;
457 473 int lastTwoDigits = queryVO.getType() % 100;
458 474 queryWrapper.in(OrderFieldLockApplyDO::getType,firstTwoDigits,lastTwoDigits,ApplyTypeEnum.CHECK_DEDUCT_URL.getType());
459 475 //目前是只能通过内部编号查询出应付款审核,无法查询出发票信息。
460   - if(CollectionUtils.isNotEmpty(queryVO.getInnerNo())){
  476 + if (CollectionUtils.isNotEmpty(queryVO.getInnerNo())) {
461 477 String queryInnerNo = queryVO.getInnerNo().get(0).trim();
462 478 queryWrapper.apply(
463 479 "(" +
... ... @@ -472,7 +488,7 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
472 488 //应收款审核。
473 489 queryWrapper.in(Objects.nonNull(queryVO.getType()), OrderFieldLockApplyDO::getType, queryVO.getType(),ApplyTypeEnum.INVOICE_DEDUCT_URL.getType());
474 490 //这个内部编号单独针对于应付款申请设置的。
475   - if(CollectionUtils.isNotEmpty(queryVO.getInnerNo())){
  491 + if (CollectionUtils.isNotEmpty(queryVO.getInnerNo())) {
476 492 String queryInnerNo = queryVO.getInnerNo().get(0).trim();
477 493 queryWrapper.apply(
478 494 "(" +
... ... @@ -525,15 +541,22 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
525 541  
526 542 }else if(RoleEnum.BUSINESS_USER.getCode().equals(roleEnum.getCode()) && (queryVO.getType()==Constant.THIRTY || queryVO.getType()==4050 || queryVO.getType() ==Constant.SIXTY)){
527 543  
528   - }else{
  544 + } else {
529 545 if (Objects.isNull(roleSelect)) {
530 546 queryWrapper.like(Objects.nonNull(roleEnum), OrderFieldLockApplyDO::getAuditRoleCodes, roleEnum.getCode());
531   - }else {
  547 + } else {
532 548 queryWrapper.eq(Objects.nonNull(roleSelect), OrderFieldLockApplyDO::getAuditRoleCodes, roleSelect.getCode());
533 549  
534 550 }
535 551 }
536   - return queryWrapper;
  552 + return queryWrapper
  553 + .func(Objects.nonNull(queryVO.getTypeIn()), query -> {
  554 + if (CollUtil.isNotEmpty(queryVO.getTypeIn())) {
  555 + query.in(OrderFieldLockApplyDO::getType, queryVO.getTypeIn());
  556 + } else {
  557 + query.apply("1!=1");
  558 + }
  559 + });
537 560 }
538 561  
539 562 /**
... ... @@ -676,16 +699,16 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
676 699 throw new BusinessException(ServerResultCode.ORDER_BASE_INFO_EMPTY);
677 700 }
678 701 }
679   - if(ApplyTypeEnum.INVOICE_BILL_APPLY.getType().equals(applyDO.getType())){
680   - InvoiceBillOrderDO invoiceBillOrderDO= invoiceBillOrderService.getById(applyDO.getOrderId());
681   - if(Objects.isNull(invoiceBillOrderDO)){
682   - throw new BusinessException(ServerResultCode. APPLY_NOT_EXIST);
  702 + if (ApplyTypeEnum.INVOICE_BILL_APPLY.getType().equals(applyDO.getType())) {
  703 + InvoiceBillOrderDO invoiceBillOrderDO = invoiceBillOrderService.getById(applyDO.getOrderId());
  704 + if (Objects.isNull(invoiceBillOrderDO)) {
  705 + throw new BusinessException(ServerResultCode.APPLY_NOT_EXIST);
683 706 }
684 707 }
685   - if(ApplyTypeEnum.CHECK_BILL_APPLY.getType().equals(applyDO.getType()) || ApplyTypeEnum.DEPARTMENT_INVOICE_APPLY.getType().equals(applyDO.getType())){
686   - ProducePaymentCheckBillOrderDO checkBillOrderDO= checkBillOrderService.getById(applyDO.getOrderId());
687   - if(Objects.isNull(checkBillOrderDO)){
688   - throw new BusinessException(ServerResultCode. APPLY_NOT_EXIST);
  708 + if (ApplyTypeEnum.CHECK_BILL_APPLY.getType().equals(applyDO.getType()) || ApplyTypeEnum.DEPARTMENT_INVOICE_APPLY.getType().equals(applyDO.getType())) {
  709 + ProducePaymentCheckBillOrderDO checkBillOrderDO = checkBillOrderService.getById(applyDO.getOrderId());
  710 + if (Objects.isNull(checkBillOrderDO)) {
  711 + throw new BusinessException(ServerResultCode.APPLY_NOT_EXIST);
689 712 }
690 713 }
691 714 if (ApplyTypeEnum.ORDER_REPORT_APPLY.getType().equals(applyDO.getType())) {
... ... @@ -696,7 +719,7 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
696 719 orderBaseInfoDO.setOrderStatus(OrderStatusEnum.PROFIT_AUDIT_REFUSE.getStatus());
697 720 orderBaseInfoService.updateById(orderBaseInfoDO);
698 721 } else if (ApplyTypeEnum.INVOICE_BILL_APPLY.getType().equals(applyDO.getType())) {
699   - OrderLockFieldVO lockFieldVO = JSONObject.parseObject(applyDO.getFields(), OrderLockFieldVO.class);
  722 + OrderLockFieldVO lockFieldVO = JSONObject.parseObject(applyDO.getFields(), OrderLockFieldVO.class);
700 723 InvoiceFieldVO invoiceBillOrderDO = lockFieldVO.getInvoiceFieldVO();
701 724 //查询是否存在未审核的扣款单。
702 725 List<OrderFieldLockApplyDO> InvoiceDeductUrlList = list(new LambdaQueryWrapper<OrderFieldLockApplyDO>()
... ... @@ -708,7 +731,7 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
708 731 throw new BusinessException("该Invoice存在未审批的扣款单,请先审批该对账单的扣款单!");
709 732 }
710 733 List<InvoiceBillOrderDO> invoiceBillOrderDOList = invoiceBillOrderService.listByIds(invoiceBillOrderDO.getInvoiceId());
711   - if(CollectionUtils.isNotEmpty(invoiceBillOrderDOList)){
  734 + if (CollectionUtils.isNotEmpty(invoiceBillOrderDOList)) {
712 735 List<InvoiceBillOrderDO> invoiceBillOrderDOS = invoiceBillOrderDOList.stream().filter(Objects::nonNull).map(x -> {
713 736 x.setStatus(FinanceEnum.UNPAID_PAYMENTS.getStatus());
714 737 return x;
... ... @@ -757,8 +780,8 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
757 780 throw new BusinessException("该生产科对账单存在未审批的扣款单,请先审批该对账单的扣款单!");
758 781 }
759 782 List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOList = checkBillOrderService.listByIds(producePaymentCheckBillId);
760   - if(CollectionUtils.isNotEmpty(producePaymentCheckBillOrderDOList)){
761   - List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOS= producePaymentCheckBillOrderDOList.stream().filter(Objects::nonNull).map(x -> {
  783 + if (CollectionUtils.isNotEmpty(producePaymentCheckBillOrderDOList)) {
  784 + List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOS = producePaymentCheckBillOrderDOList.stream().filter(Objects::nonNull).map(x -> {
762 785 x.setStatus(FinanceEnum.UNPAID_PAYMENTS.getStatus());
763 786 return x;
764 787 }).collect(Collectors.toList());
... ... @@ -783,7 +806,7 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
783 806 emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.CHECK_FAIL,invoiceAndCheckBillSendEmailVO,false);
784 807 }
785 808  
786   - } else if(ApplyTypeEnum.DEPARTMENT_INVOICE_APPLY.getType().equals(applyDO.getType())){
  809 + } else if (ApplyTypeEnum.DEPARTMENT_INVOICE_APPLY.getType().equals(applyDO.getType())) {
787 810 OrderLockFieldVO lockFieldVO = JSONObject.parseObject(applyDO.getFields(), OrderLockFieldVO.class);
788 811 ProducePaymentCheckBillVO checkBillOrderDO = lockFieldVO.getCheckBillVO();
789 812  
... ... @@ -791,9 +814,9 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
791 814 ProducePaymentCheckBillOrderDO invoiceInfoDO = checkBillOrderService.getById(checkBillOrderDO.getId());
792 815 invoiceInfoDO.setDepartmentInvoiceStatus(ApplyStatusEnum.AUDIT_REFUSE.getStatus());
793 816 //传递给审核一直都是最新的发票。
794   - if(com.order.erp.common.utils.StringUtils.isNotBlank(invoiceInfoDO.getInvoiceUrl())){
  817 + if (com.order.erp.common.utils.StringUtils.isNotBlank(invoiceInfoDO.getInvoiceUrl())) {
795 818 log.info("checkBillOrderDO.getInvoiceUrl() 极有可能为空: {}", checkBillOrderDO.getInvoiceUrl());
796   - if(Arrays.stream(invoiceInfoDO.getInvoiceUrl().split(",")).anyMatch(item->item.equals(checkBillOrderDO.getInvoiceUrl()))){
  819 + if (Arrays.stream(invoiceInfoDO.getInvoiceUrl().split(",")).anyMatch(item -> item.equals(checkBillOrderDO.getInvoiceUrl()))) {
797 820 // 将 invoiceUrls 分割成 List 并删除相同项
798 821 List<String> urlList = new ArrayList<>(Arrays.asList(invoiceInfoDO.getInvoiceUrl().split(",")));
799 822 urlList.removeIf(url -> url.equals(checkBillOrderDO.getInvoiceUrl()));
... ... @@ -802,7 +825,7 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
802 825 String updatedInvoiceUrls = String.join(",", urlList);
803 826 invoiceInfoDO.setInvoiceUrl(updatedInvoiceUrls);
804 827 }
805   - }else{
  828 + } else {
806 829 invoiceInfoDO.setInvoiceUrl(null);
807 830 }
808 831 checkBillOrderService.updateById(invoiceInfoDO);
... ... @@ -992,7 +1015,7 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
992 1015 //后期需要判断是否存在存在未审核的扣款单。
993 1016 applyDO.setAuditUserId(auditUserId);
994 1017 applyDO.setStatus(ApplyStatusEnum.AUDIT_PASS.getStatus());
995   - OrderLockFieldVO lockFieldVO = JSONObject.parseObject(applyDO.getFields(), OrderLockFieldVO.class);
  1018 + OrderLockFieldVO lockFieldVO = JSONObject.parseObject(applyDO.getFields(), OrderLockFieldVO.class);
996 1019 InvoiceFieldVO invoiceBillOrderDO = lockFieldVO.getInvoiceFieldVO();
997 1020 List<Long> invoiceId = invoiceBillOrderDO.getInvoiceId();
998 1021 //查询是否存在未审核的扣款单。
... ... @@ -1005,7 +1028,7 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
1005 1028 throw new BusinessException("该Invoice存在未审批的扣款单,请先审批该对账单的扣款单!");
1006 1029 }
1007 1030 List<InvoiceBillOrderDO> invoiceBillOrderDOS = invoiceBillOrderService.listByIds(invoiceId);
1008   - if(CollectionUtils.isNotEmpty(invoiceBillOrderDOS)){
  1031 + if (CollectionUtils.isNotEmpty(invoiceBillOrderDOS)) {
1009 1032 List<InvoiceBillOrderDO> invoiceeBillOrderDOs = invoiceBillOrderDOS.stream().filter(Objects::nonNull).map(x -> {
1010 1033 x.setStatus(FinanceEnum.RECEIVED_PAYMENT.getStatus());
1011 1034 return x;
... ... @@ -1054,7 +1077,7 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
1054 1077 throw new BusinessException("该生产科对账单存在未审批的扣款单,请先审批该对账单的扣款单!");
1055 1078 }
1056 1079 List<ProducePaymentCheckBillOrderDO> checkBillOrderDOS = checkBillOrderService.listByIds(producePaymentCheckBillId);
1057   - if(CollectionUtils.isNotEmpty(checkBillOrderDOS)){
  1080 + if (CollectionUtils.isNotEmpty(checkBillOrderDOS)) {
1058 1081 List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOS = checkBillOrderDOS.stream().filter(Objects::nonNull).map(x -> {
1059 1082 x.setStatus(FinanceEnum.RECEIVED_PAYMENT.getStatus());
1060 1083 return x;
... ... @@ -1068,7 +1091,7 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
1068 1091 x.setCheckStatus(FinanceEnum.RECEIVED_PAYMENT.getStatus());
1069 1092 return x;
1070 1093 }).collect(Collectors.toList());
1071   - transactionHelper.run(() ->{
  1094 + transactionHelper.run(() -> {
1072 1095 orderBaseInfoService.updateBatchById(orderBaseInfoDOS);
1073 1096 checkBillOrderService.updateBatchById(producePaymentCheckBillOrderDOS);
1074 1097 });
... ... @@ -1079,7 +1102,7 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
1079 1102 emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.CHECK_PASS,invoiceAndCheckBillSendEmailVO,true);
1080 1103  
1081 1104 }
1082   - } else if (ApplyTypeEnum.DEPARTMENT_INVOICE_APPLY.getType().equals(applyDO.getType())) {
  1105 + } else if (ApplyTypeEnum.DEPARTMENT_INVOICE_APPLY.getType().equals(applyDO.getType())) {
1083 1106 applyDO.setAuditUserId(auditUserId);
1084 1107 applyDO.setStatus(ApplyStatusEnum.AUDIT_PASS.getStatus());
1085 1108 OrderLockFieldVO lockFieldVO = JSONObject.parseObject(applyDO.getFields(), OrderLockFieldVO.class);
... ... @@ -1088,18 +1111,18 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
1088 1111 ProducePaymentCheckBillOrderDO invoiceInfoDO = checkBillOrderService.getById(checkBillOrderDO.getId());
1089 1112 invoiceInfoDO.setDepartmentInvoiceStatus(ApplyStatusEnum.AUDIT_PASS.getStatus());
1090 1113 //传递给审核一直都是最新的发票。
1091   - if(com.order.erp.common.utils.StringUtils.isNotBlank(invoiceInfoDO.getInvoiceUrl())){
1092   - if(com.order.erp.common.utils.StringUtils.isNotBlank(checkBillOrderDO.getInvoiceUrl())){
  1114 + if (com.order.erp.common.utils.StringUtils.isNotBlank(invoiceInfoDO.getInvoiceUrl())) {
  1115 + if (com.order.erp.common.utils.StringUtils.isNotBlank(checkBillOrderDO.getInvoiceUrl())) {
1093 1116 Set<String> deductUrlSet = new HashSet<>(Arrays.asList(
1094 1117 org.apache.commons.lang3.StringUtils.defaultString(invoiceInfoDO.getInvoiceUrl()).split(",")));
1095   - if(!deductUrlSet.contains(checkBillOrderDO.getInvoiceUrl())){
  1118 + if (!deductUrlSet.contains(checkBillOrderDO.getInvoiceUrl())) {
1096 1119 deductUrlSet.add(checkBillOrderDO.getInvoiceUrl());
1097   - String updateDeductUrl=String.join(",",deductUrlSet);
  1120 + String updateDeductUrl = String.join(",", deductUrlSet);
1098 1121 invoiceInfoDO.setInvoiceUrl(updateDeductUrl);
1099 1122 }
1100 1123 }
1101   - }else{
1102   - if(com.order.erp.common.utils.StringUtils.isNotBlank(checkBillOrderDO.getInvoiceUrl())){
  1124 + } else {
  1125 + if (com.order.erp.common.utils.StringUtils.isNotBlank(checkBillOrderDO.getInvoiceUrl())) {
1103 1126 invoiceInfoDO.setInvoiceUrl(checkBillOrderDO.getInvoiceUrl());
1104 1127 }
1105 1128 }
... ... @@ -1166,6 +1189,39 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
1166 1189 InvoiceAndCheckBillSendEmailVO invoiceAndCheckBillSendEmailVO = new InvoiceAndCheckBillSendEmailVO();
1167 1190 invoiceAndCheckBillSendEmailVO.setDeductionUrlFieldVO(deductionUrlFieldVO);
1168 1191 emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.CHECK_DEDUCTURL_PASS,invoiceAndCheckBillSendEmailVO,true);
  1192 + //todo
  1193 + } else if (Stream.of(OrderCostApplyTpeEnum.ORDER_PACKET_COST_FIELD_EDIT_APPLY,
  1194 + OrderCostApplyTpeEnum.ORDER_PRODUCTION_COST_FIELD_EDIT_APPLY)
  1195 + .map(OrderCostApplyTpeEnum::getType)
  1196 + .anyMatch(x -> x.equals(applyDO.getType()))) {
  1197 + applyDO.setAuditUserId(auditUserId);
  1198 + applyDO.setStatus(ApplyStatusEnum.AUDIT_PASS.getStatus());
  1199 +
  1200 + OrderCostFieldLockRecord recordDO = orderCostFieldLockRecordService.getOne(new LambdaQueryWrapper<OrderCostFieldLockRecord>()
  1201 + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  1202 + .eq(OrderCostFieldLockRecord::getOrderId, applyDO.getOrderId())
  1203 + .eq(OrderCostFieldLockRecord::getUserId, applyDO.getApplyUserId())
  1204 + .orderByDesc(OrderCostFieldLockRecord::getId)
  1205 + .last("limit 1"));
  1206 + if (Objects.isNull(recordDO)) {
  1207 + recordDO = OrderCostFieldLockRecord.builder()
  1208 + .orderId(applyDO.getOrderId())
  1209 + .userId(applyDO.getApplyUserId())
  1210 + .fields(applyDO.getFields())
  1211 + .build();
  1212 + } else {
  1213 + String originFields = recordDO.getFields();
  1214 + OrderCostInfolockFieldVO originOrderCostInfolockFieldVO = JSONObject.parseObject(originFields, OrderCostInfolockFieldVO.class);
  1215 + String fields = applyDO.getFields();
  1216 + OrderCostInfolockFieldVO orderCostInfolockFieldVO = JSONObject.parseObject(fields, OrderCostInfolockFieldVO.class);
  1217 + BeanUtil.copyProperties(orderCostInfolockFieldVO, originOrderCostInfolockFieldVO, CopyOptions.create().ignoreNullValue());
  1218 + recordDO.setFields(JSONObject.toJSONString(originOrderCostInfolockFieldVO));
  1219 + }
  1220 + if (Objects.isNull(recordDO.getId())) {
  1221 + orderCostFieldLockRecordService.save(recordDO);
  1222 + } else {
  1223 + orderCostFieldLockRecordService.updateById(recordDO);
  1224 + }
1169 1225 }
1170 1226  
1171 1227 OrderAuditLogDO auditLogDO = OrderAuditLogDO.builder().applyId(applyDO.getId()).orderId(applyDO.getOrderId()).optType(ApplyStatusEnum.AUDIT_PASS.getDesc()).build();
... ...
src/main/java/com/order/erp/service/order/impl/OrderProfitAnalysisServiceImpl.java
... ... @@ -3,30 +3,55 @@ package com.order.erp.service.order.impl;
3 3 import cn.hutool.core.bean.BeanUtil;
4 4 import cn.hutool.core.collection.CollUtil;
5 5 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  6 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
6 7 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
7 8 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
  9 +import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
8 10 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  11 +import com.fasterxml.jackson.core.JsonProcessingException;
  12 +import com.fasterxml.jackson.databind.ObjectMapper;
9 13 import com.order.erp.common.constant.Constant;
10 14 import com.order.erp.common.constant.ServerResult;
11 15 import com.order.erp.common.exception.BusinessException;
12 16 import com.order.erp.common.utils.ProfitUtils;
13 17 import com.order.erp.common.utils.StringUtils;
14 18 import com.order.erp.domain.dto.BaseDO;
  19 +import com.order.erp.domain.dto.SystemSettingDO;
15 20 import com.order.erp.domain.dto.order.OrderBaseInfoDO;
16 21 import com.order.erp.domain.dto.order.OrderProfitAnalysisDO;
  22 +import com.order.erp.domain.dto.order.ProjectBaseInfoDO;
  23 +import com.order.erp.domain.model.OrderCostFieldLockRecord;
  24 +import com.order.erp.domain.model.ProjectFieldLockRecord;
17 25 import com.order.erp.domain.vo.OrderProfitAnalysisVo;
18   -import com.order.erp.domain.vo.order.OrderProfitAnalysisQueryVO;
19   -import com.order.erp.domain.vo.order.OrderProfitAnalysisVO;
20   -import com.order.erp.domain.vo.order.ProfitCalculateVO;
  26 +import com.order.erp.domain.vo.order.*;
21 27 import com.order.erp.mapper.order.OrderProfitAnalysisMapper;
  28 +import com.order.erp.service.IProjectFieldLockRecordService;
  29 +import com.order.erp.service.SystemSettingService;
  30 +import com.order.erp.service.impl.OrderCostFieldLockRecordServiceImpl;
  31 +import com.order.erp.service.order.IProjectBaseInfoService;
22 32 import com.order.erp.service.order.OrderBaseInfoService;
  33 +import com.order.erp.service.order.OrderFieldLockRecordService;
23 34 import com.order.erp.service.order.OrderProfitAnalysisService;
24 35 import lombok.extern.slf4j.Slf4j;
  36 +import org.apache.poi.ss.usermodel.*;
  37 +import org.apache.poi.ss.util.CellRangeAddress;
  38 +import org.apache.poi.xssf.usermodel.XSSFFont;
  39 +import org.apache.poi.xssf.usermodel.XSSFWorkbook;
25 40 import org.springframework.beans.BeanUtils;
  41 +import org.springframework.beans.factory.annotation.Autowired;
26 42 import org.springframework.stereotype.Service;
27 43  
28 44 import javax.annotation.Resource;
  45 +import javax.servlet.http.HttpServletResponse;
  46 +import java.io.OutputStream;
29 47 import java.math.BigDecimal;
  48 +import java.math.RoundingMode;
  49 +import java.time.Duration;
  50 +import java.time.LocalDateTime;
  51 +import java.time.format.DateTimeFormatter;
  52 +import java.time.temporal.ChronoUnit;
  53 +import java.util.*;
  54 +import java.util.function.Function;
30 55 import java.time.LocalDate;
31 56 import java.util.HashSet;
32 57 import java.util.List;
... ... @@ -46,6 +71,16 @@ public class OrderProfitAnalysisServiceImpl extends ServiceImpl&lt;OrderProfitAnaly
46 71  
47 72 @Resource
48 73 private OrderBaseInfoService orderBaseInfoService;
  74 + @Autowired
  75 + private SystemSettingService systemSettingService;
  76 + @Autowired
  77 + private IProjectBaseInfoService projectProfitAnalysisService;
  78 + @Autowired
  79 + private IProjectFieldLockRecordService projectionFieldLockRecordService;
  80 + @Resource
  81 + private OrderFieldLockRecordService orderFieldLockRecordService;
  82 + @Autowired
  83 + OrderCostFieldLockRecordServiceImpl orderCostFieldLockRecordService;
49 84  
50 85 /**
51 86 * 通过ID查询单条数据
... ... @@ -109,6 +144,7 @@ public class OrderProfitAnalysisServiceImpl extends ServiceImpl&lt;OrderProfitAnaly
109 144 if (Objects.isNull(orderProfitAnalysisVO.getId())) {
110 145 return ServerResult.fail("id 不能为空");
111 146 }
  147 + orderProfitAnalysisVO.getId();
112 148 OrderProfitAnalysisDO orderProfitAnalysisDo = BeanUtil.copyProperties(orderProfitAnalysisVO, OrderProfitAnalysisDO.class);
113 149  
114 150 updateById(orderProfitAnalysisDo);
... ...
src/main/java/com/order/erp/service/order/impl/ProjectBaseAfterReviewSettingServiceImpl.java 0 → 100644
  1 +package com.order.erp.service.order.impl;
  2 +
  3 +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  4 +import com.order.erp.domain.dto.order.ProjectBaseAfterReviewSettingDO;
  5 +import com.order.erp.mapper.order.ProjectBaseAfterReviewSettingMapper;
  6 +import com.order.erp.service.order.ProjectBaseAfterReviewSettingService;
  7 +import lombok.extern.slf4j.Slf4j;
  8 +import org.springframework.stereotype.Service;
  9 +
  10 +@Slf4j
  11 +@Service
  12 +public class ProjectBaseAfterReviewSettingServiceImpl extends ServiceImpl<ProjectBaseAfterReviewSettingMapper, ProjectBaseAfterReviewSettingDO> implements ProjectBaseAfterReviewSettingService {
  13 +}
... ...
src/main/java/com/order/erp/service/order/impl/ProjectBaseDevelopOptLogServiceImpl.java 0 → 100644
  1 +package com.order.erp.service.order.impl;
  2 +
  3 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4 +import com.baomidou.mybatisplus.core.metadata.IPage;
  5 +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
  6 +import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  7 +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  8 +import com.order.erp.common.constant.Constant;
  9 +import com.order.erp.common.constant.ServerResult;
  10 +import com.order.erp.domain.dto.BaseDO;
  11 +import com.order.erp.domain.dto.admin.AdminUserDO;
  12 +import com.order.erp.domain.dto.order.ProjectBaseDevelopOptLogDO;
  13 +import com.order.erp.domain.vo.order.ProjectOptLogQueryVO;
  14 +import com.order.erp.domain.vo.order.ProjectOptLogResultVO;
  15 +import com.order.erp.mapper.order.ProjectBaseDevelopOptLogMapper;
  16 +import com.order.erp.service.admin.AdminUserService;
  17 +
  18 +import com.order.erp.service.order.ProjectBaseDevelopOptLogService;
  19 +import org.springframework.beans.BeanUtils;
  20 +import org.springframework.stereotype.Service;
  21 +
  22 +import javax.annotation.Resource;
  23 +import java.util.*;
  24 +import java.util.function.Function;
  25 +import java.util.stream.Collectors;
  26 +
  27 +@Service
  28 +public class ProjectBaseDevelopOptLogServiceImpl extends ServiceImpl<ProjectBaseDevelopOptLogMapper, ProjectBaseDevelopOptLogDO> implements ProjectBaseDevelopOptLogService {
  29 + @Resource
  30 + private AdminUserService userService;
  31 +
  32 + @Override
  33 + public ServerResult listByPage(ProjectOptLogQueryVO queryVO) {
  34 + LambdaQueryWrapper<ProjectBaseDevelopOptLogDO> queryWrapper = buildQueryByParam(queryVO);
  35 + Page page = new Page<>(queryVO.getPage(), queryVO.getPageSize());
  36 + IPage<ProjectBaseDevelopOptLogDO> iPage = page(page, queryWrapper);
  37 +
  38 + Page<ProjectOptLogResultVO> webVOPage = new Page<>();
  39 + List<ProjectBaseDevelopOptLogDO> ProjectDevelopOptLogDOS = iPage.getRecords();
  40 + if (CollectionUtils.isNotEmpty(ProjectDevelopOptLogDOS)) {
  41 + Set<Long> userIds = ProjectDevelopOptLogDOS.stream().map(ProjectBaseDevelopOptLogDO::getUserId).collect(Collectors.toSet());
  42 + Map<Long, AdminUserDO> userDOMap = new HashMap<>();
  43 + if (CollectionUtils.isNotEmpty(userIds)) {
  44 + List<AdminUserDO> userDOS = userService.listByIds(userIds);
  45 + if (CollectionUtils.isNotEmpty(userDOS)) {
  46 + userDOMap = userDOS.stream().collect(Collectors.toMap(AdminUserDO::getId, Function.identity()));
  47 + }
  48 + }
  49 + Map<Long, AdminUserDO> finalUserDOMap = userDOMap;
  50 + List<ProjectOptLogResultVO> resultVOList = ProjectDevelopOptLogDOS.stream().map(x -> {
  51 + ProjectOptLogResultVO resultVO = new ProjectOptLogResultVO();
  52 + BeanUtils.copyProperties(x, resultVO);
  53 + if (finalUserDOMap.containsKey(x.getUserId())) {
  54 + resultVO.setUserName(finalUserDOMap.get(x.getUserId()).getUserName());
  55 + }
  56 + return resultVO;
  57 + }).collect(Collectors.toList());
  58 +
  59 + webVOPage.setRecords(resultVOList);
  60 + }
  61 + BeanUtils.copyProperties(page, webVOPage, "records");
  62 + return ServerResult.success(webVOPage);
  63 + }
  64 +
  65 + private LambdaQueryWrapper<ProjectBaseDevelopOptLogDO> buildQueryByParam(ProjectOptLogQueryVO queryVO) {
  66 + return new LambdaQueryWrapper<ProjectBaseDevelopOptLogDO>()
  67 + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  68 + .eq(Objects.nonNull(queryVO.getProjectNoPrefix()), ProjectBaseDevelopOptLogDO::getProjectNoPrefix, queryVO.getProjectNoPrefix())
  69 + .eq(Objects.nonNull(queryVO.getType()), ProjectBaseDevelopOptLogDO::getType, queryVO.getType())
  70 + .orderByDesc(ProjectBaseDevelopOptLogDO::getId);
  71 + }
  72 +}
0 73 \ No newline at end of file
... ...