Commit 5c716366612e64e7ad25dfcd2fc7658faf2e1518
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
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
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
src/main/java/com/order/erp/domain/vo/order/OrderLockFieldVO.java
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
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
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<SystemSettingDO> { |
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<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<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<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<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<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<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<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<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<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<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<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<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<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<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<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<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<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<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<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<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<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<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<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<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<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<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<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<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<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 | ... | ... |