Commit 5985ab5278e5a26db4fddeb0d393ced909e03f62
1 parent
1b7ae743
test测试
Showing
49 changed files
with
2005 additions
and
62 deletions
src/main/java/com/order/erp/controller/OrderCostController.java
@@ -40,21 +40,48 @@ public class OrderCostController { | @@ -40,21 +40,48 @@ public class OrderCostController { | ||
40 | queryVO.setProductionDepartment(Collections.singletonList("内部")); | 40 | queryVO.setProductionDepartment(Collections.singletonList("内部")); |
41 | return orderCostInfoService.listInnerProfitDetailByPage(queryVO); | 41 | return orderCostInfoService.listInnerProfitDetailByPage(queryVO); |
42 | } | 42 | } |
43 | + | ||
43 | @PostMapping("/BusinessProfitDetail/listByPage") | 44 | @PostMapping("/BusinessProfitDetail/listByPage") |
44 | @ApiOperation("包装费用明细表") | 45 | @ApiOperation("包装费用明细表") |
45 | public ServerResult<Page<BusinessProfitDetailVO>> listBusinessProfitDetailsByPage(@RequestBody @Validated OrderBaseInfoQueryVO queryVO) { | 46 | public ServerResult<Page<BusinessProfitDetailVO>> listBusinessProfitDetailsByPage(@RequestBody @Validated OrderBaseInfoQueryVO queryVO) { |
46 | return orderCostInfoService.listBusinessProfitDetailByPage(queryVO); | 47 | return orderCostInfoService.listBusinessProfitDetailByPage(queryVO); |
47 | } | 48 | } |
49 | + | ||
48 | @PostMapping("/edit") | 50 | @PostMapping("/edit") |
49 | @ApiOperation("编辑") | 51 | @ApiOperation("编辑") |
50 | - public ServerResult edit(@RequestBody OrderCostInfoVO vo) throws Exception { | 52 | + public ServerResult edit(@RequestBody OrderCostInfoVO vo) throws Exception { |
51 | return orderCostInfoService.edit(vo); | 53 | return orderCostInfoService.edit(vo); |
52 | } | 54 | } |
53 | 55 | ||
54 | @PostMapping("/applyEditFileds") | 56 | @PostMapping("/applyEditFileds") |
55 | @ApiOperation("申请编辑字段") | 57 | @ApiOperation("申请编辑字段") |
56 | - public ServerResult applyEditFileds(@RequestBody OrderCostInfolockFieldVO vo) throws Exception { | ||
57 | - return orderCostInfoService.applyEditFileds(vo); | 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); | ||
58 | } | 85 | } |
59 | 86 | ||
60 | } | 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/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
@@ -70,7 +70,7 @@ public class ProjectController { | @@ -70,7 +70,7 @@ public class ProjectController { | ||
70 | } | 70 | } |
71 | 71 | ||
72 | @PostMapping("/businessProfit/export") | 72 | @PostMapping("/businessProfit/export") |
73 | - @ApiOperation("业务研发净利润分析表导出") | 73 | + @ApiOperation("业务研发净利润分析表单个导出") |
74 | public void exportBusinessProfitInfo(HttpServletResponse response, @RequestParam("projectNoPrefix") String projectNoPrefix) throws Exception { | 74 | public void exportBusinessProfitInfo(HttpServletResponse response, @RequestParam("projectNoPrefix") String projectNoPrefix) throws Exception { |
75 | projectBaseInfoService.exportBusinessProfitInfo(response, projectNoPrefix); | 75 | projectBaseInfoService.exportBusinessProfitInfo(response, projectNoPrefix); |
76 | } | 76 | } |
@@ -81,4 +81,29 @@ public class ProjectController { | @@ -81,4 +81,29 @@ public class ProjectController { | ||
81 | projectBaseInfoService.exportInnerProfitInfo(response, projectNoPrefix); | 81 | projectBaseInfoService.exportInnerProfitInfo(response, projectNoPrefix); |
82 | } | 82 | } |
83 | 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 | + | ||
84 | } | 109 | } |
src/main/java/com/order/erp/domain/ApplyTypeEnum.java
@@ -24,10 +24,6 @@ public enum ApplyTypeEnum { | @@ -24,10 +24,6 @@ public enum ApplyTypeEnum { | ||
24 | CHECK_BILL_APPLY(40, "应付账单申请"), | 24 | CHECK_BILL_APPLY(40, "应付账单申请"), |
25 | 25 | ||
26 | DEPARTMENT_INVOICE_APPLY(50,"生产科发票申请"), | 26 | DEPARTMENT_INVOICE_APPLY(50,"生产科发票申请"), |
27 | - | ||
28 | - ORDER_PACKET_COST_FIELD_EDIT_APPLY(60,"订单包装费用明细字段申请"), | ||
29 | - | ||
30 | - ORDER_PRODUCTION_COST_FIELD_EDIT_APPLY(70,"订单生产费用明细字段申请"), | ||
31 | ; | 27 | ; |
32 | private Integer type; | 28 | private Integer type; |
33 | 29 |
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,6 +29,21 @@ public enum OrderOptTypeEnum { | ||
29 | 29 | ||
30 | ORDER_INSPECT_EDIT_APPLY(60, "质检信息编辑"), | 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 | private Integer type; | 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
@@ -22,4 +22,12 @@ public enum ProjectApplyTypeEnum { | @@ -22,4 +22,12 @@ public enum ProjectApplyTypeEnum { | ||
22 | private Integer type; | 22 | private Integer type; |
23 | 23 | ||
24 | private String desc; | 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 | + } | ||
25 | } | 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/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
@@ -43,6 +43,9 @@ public class OrderCostInfoDO extends BaseDO implements Serializable { | @@ -43,6 +43,9 @@ public class OrderCostInfoDO extends BaseDO implements Serializable { | ||
43 | private BigDecimal productionActualPrice; | 43 | private BigDecimal productionActualPrice; |
44 | 44 | ||
45 | private BigDecimal packetActualRmbTotalPrice; | 45 | private BigDecimal packetActualRmbTotalPrice; |
46 | - | 46 | + //包装费用明细表状态。 |
47 | + private Integer packStatus; | ||
48 | + //内部生产明细表状态。 | ||
49 | + private Integer innerProduceStatus; | ||
47 | 50 | ||
48 | } | 51 | } |
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
@@ -33,24 +33,47 @@ public class ProjectBaseInfoDO extends BaseDO implements Serializable { | @@ -33,24 +33,47 @@ public class ProjectBaseInfoDO extends BaseDO implements Serializable { | ||
33 | 33 | ||
34 | @TableId(value = "id", type = IdType.AUTO) | 34 | @TableId(value = "id", type = IdType.AUTO) |
35 | private Long id; | 35 | private Long id; |
36 | - | 36 | + /** |
37 | + * 项目号的前缀 例如:A05-2303-2391,projectNoPrefix就是A05-2303。 | ||
38 | + * */ | ||
37 | private String projectNoPrefix; | 39 | private String projectNoPrefix; |
38 | - | 40 | + /** |
41 | + * 研发复制费合计¥ | ||
42 | + * */ | ||
39 | private BigDecimal developmentCopyRmbTotalPrice; | 43 | private BigDecimal developmentCopyRmbTotalPrice; |
40 | - | 44 | + /** |
45 | + * 项目开始时间 | ||
46 | + * */ | ||
41 | private LocalDateTime projectStartTime; | 47 | private LocalDateTime projectStartTime; |
42 | - | 48 | + /** |
49 | + * 项目结束时间 | ||
50 | + * */ | ||
43 | private LocalDateTime projectEndTime; | 51 | private LocalDateTime projectEndTime; |
44 | 52 | ||
45 | private LocalDateTime projectInnerProfitInfoStartTime; | 53 | private LocalDateTime projectInnerProfitInfoStartTime; |
46 | 54 | ||
47 | private LocalDateTime projectInnerProfitInfoEndTime; | 55 | private LocalDateTime projectInnerProfitInfoEndTime; |
48 | 56 | ||
49 | - | 57 | + /** |
58 | + * 西班牙已发提成 | ||
59 | + * */ | ||
50 | private BigDecimal spainPaidRmbCommission; | 60 | private BigDecimal spainPaidRmbCommission; |
51 | - | 61 | + /** |
62 | + * 中国团队已发提成 | ||
63 | + * */ | ||
52 | private BigDecimal paidRmbCommission; | 64 | private BigDecimal paidRmbCommission; |
53 | - | 65 | + /** |
66 | + * 实际汇率 | ||
67 | + * */ | ||
54 | private BigDecimal actualExchangeRate; | 68 | private BigDecimal actualExchangeRate; |
55 | 69 | ||
70 | + /** | ||
71 | + * 业务研发净利润分析表审核状态 | ||
72 | + * */ | ||
73 | + private Integer developmentStatus; | ||
74 | + /** | ||
75 | + * 内部生产净利润分析表审核状态 | ||
76 | + * */ | ||
77 | + private Integer innerProductionStatus; | ||
78 | + | ||
56 | } | 79 | } |
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
@@ -111,6 +111,11 @@ public class BusinessProfitDetailVO implements Serializable { | @@ -111,6 +111,11 @@ public class BusinessProfitDetailVO implements Serializable { | ||
111 | */ | 111 | */ |
112 | @ApiModelProperty(value = "包装费用利润率") | 112 | @ApiModelProperty(value = "包装费用利润率") |
113 | private BigDecimal packetProfitRate; | 113 | private BigDecimal packetProfitRate; |
114 | + /** | ||
115 | + * 包装费用明细表状态 | ||
116 | + */ | ||
117 | + @ApiModelProperty(value = "包装费用明细表状态") | ||
118 | + private Integer packStatus; | ||
114 | 119 | ||
115 | /** | 120 | /** |
116 | * 锁定字段信息 | 121 | * 锁定字段信息 |
src/main/java/com/order/erp/domain/vo/order/BusinessProfitInfoVO.java
@@ -7,6 +7,8 @@ import lombok.experimental.SuperBuilder; | @@ -7,6 +7,8 @@ import lombok.experimental.SuperBuilder; | ||
7 | import java.io.Serializable; | 7 | import java.io.Serializable; |
8 | import java.math.BigDecimal; | 8 | import java.math.BigDecimal; |
9 | import java.time.LocalDateTime; | 9 | import java.time.LocalDateTime; |
10 | +import java.util.List; | ||
11 | +import java.util.Set; | ||
10 | 12 | ||
11 | /** | 13 | /** |
12 | * 业务/研发净利润分析 | 14 | * 业务/研发净利润分析 |
@@ -35,6 +37,9 @@ public class BusinessProfitInfoVO implements Serializable { | @@ -35,6 +37,9 @@ public class BusinessProfitInfoVO implements Serializable { | ||
35 | @ApiModelProperty(value = "项目号") | 37 | @ApiModelProperty(value = "项目号") |
36 | private String projectNoPrefix; | 38 | private String projectNoPrefix; |
37 | 39 | ||
40 | + @ApiModelProperty(value = "完整项目号,用于当做id来使用,因为没有返回id所以无法确实操作的是那一条数据,所以需要完整的项目号来确认是哪一条数据") | ||
41 | + private Set<String> detailProjectNo; | ||
42 | + | ||
38 | /** | 43 | /** |
39 | * 客户总价¥ | 44 | * 客户总价¥ |
40 | */ | 45 | */ |
@@ -233,6 +238,19 @@ public class BusinessProfitInfoVO implements Serializable { | @@ -233,6 +238,19 @@ public class BusinessProfitInfoVO implements Serializable { | ||
233 | @ApiModelProperty(value = "综合收益") | 238 | @ApiModelProperty(value = "综合收益") |
234 | private BigDecimal comprehensiveProfit; | 239 | private BigDecimal comprehensiveProfit; |
235 | 240 | ||
241 | + | ||
242 | + /** | ||
243 | + * 业务研发净利润状态 | ||
244 | + */ | ||
245 | + @ApiModelProperty(value = "业务研发净利润状态") | ||
246 | + private Integer developmentStatus; | ||
247 | + | ||
248 | + /** | ||
249 | + * 内部生产净利润状态 | ||
250 | + */ | ||
251 | + @ApiModelProperty(value = "内部生产净利润状态") | ||
252 | + private Integer innerProductionStatus; | ||
253 | + | ||
236 | /** | 254 | /** |
237 | * 项目开始时间 | 255 | * 项目开始时间 |
238 | */ | 256 | */ |
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
@@ -64,6 +64,12 @@ public class InnerProfitDetailVO implements Serializable { | @@ -64,6 +64,12 @@ public class InnerProfitDetailVO implements Serializable { | ||
64 | @ApiModelProperty(value = "生产科预算金额") | 64 | @ApiModelProperty(value = "生产科预算金额") |
65 | private BigDecimal productionDepartmentPredictPrice; | 65 | private BigDecimal productionDepartmentPredictPrice; |
66 | 66 | ||
67 | + /** | ||
68 | + * 生产科预算单价,由生产科预算金额/数量。 | ||
69 | + */ | ||
70 | + @ApiModelProperty(value = "生产科预算金额") | ||
71 | + private BigDecimal productionDepartmentPredictUnitprice; | ||
72 | + | ||
67 | 73 | ||
68 | /** | 74 | /** |
69 | * 实际发生费用 手动输入 | 75 | * 实际发生费用 手动输入 |
@@ -120,6 +126,11 @@ public class InnerProfitDetailVO implements Serializable { | @@ -120,6 +126,11 @@ public class InnerProfitDetailVO implements Serializable { | ||
120 | */ | 126 | */ |
121 | @ApiModelProperty(value = "事后毛利润") | 127 | @ApiModelProperty(value = "事后毛利润") |
122 | private BigDecimal grossProfitRate; | 128 | private BigDecimal grossProfitRate; |
129 | + /** | ||
130 | + * 内部生产明细表状态 | ||
131 | + */ | ||
132 | + @ApiModelProperty(value = "内部生产明细表状态") | ||
133 | + private Integer innerProduceStatus ; | ||
123 | 134 | ||
124 | private OrderCostInfolockFieldVO lockFields; | 135 | private OrderCostInfolockFieldVO lockFields; |
125 | 136 |
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
@@ -140,6 +140,12 @@ public class InnerProfitInfoVO implements Serializable { | @@ -140,6 +140,12 @@ public class InnerProfitInfoVO implements Serializable { | ||
140 | @ApiModelProperty(value = "项目结束时间") | 140 | @ApiModelProperty(value = "项目结束时间") |
141 | private LocalDateTime produceEndTime; | 141 | private LocalDateTime produceEndTime; |
142 | 142 | ||
143 | + /** | ||
144 | + * 内部生产净利润分析表状态 | ||
145 | + */ | ||
146 | + @ApiModelProperty(value = "内部生产净利润分析表状态") | ||
147 | + private Integer innerProductionStatus; | ||
148 | + | ||
143 | private ProjectBaseInfoLockFieldVO lockFields; | 149 | private ProjectBaseInfoLockFieldVO lockFields; |
144 | 150 | ||
145 | } | 151 | } |
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
@@ -42,6 +42,13 @@ public class OrderCostInfoVO implements Serializable { | @@ -42,6 +42,13 @@ public class OrderCostInfoVO implements Serializable { | ||
42 | private BigDecimal productionActualPrice; | 42 | private BigDecimal productionActualPrice; |
43 | 43 | ||
44 | private BigDecimal packetActualRmbTotalPrice; | 44 | private BigDecimal packetActualRmbTotalPrice; |
45 | - | 45 | + private Integer orderCount; |
46 | + //单价 之前前端是传递productionDepartmentPredictPrice,现在改为传递单价,所以传递productionDepartmentPredictUnitPrice。 | ||
47 | + private BigDecimal productionDepartmentPredictUnitPrice; | ||
48 | + | ||
49 | + //内部生产费用明细表状态。 | ||
50 | + private Integer innerProduceStatus; | ||
51 | + //包装费用费用明细表状态。 | ||
52 | + private Integer packStatus; | ||
46 | 53 | ||
47 | } | 54 | } |
src/main/java/com/order/erp/domain/vo/order/OrderCostInfolockFieldVO.java
@@ -40,6 +40,10 @@ public class OrderCostInfolockFieldVO implements Serializable { | @@ -40,6 +40,10 @@ public class OrderCostInfolockFieldVO implements Serializable { | ||
40 | private String productionActualPrice; | 40 | private String productionActualPrice; |
41 | 41 | ||
42 | private String packetActualRmbTotalPrice; | 42 | private String packetActualRmbTotalPrice; |
43 | + /** | ||
44 | + * 生产科预算单价。 | ||
45 | + * */ | ||
46 | + private String productionDepartmentPredictUnitPrice; | ||
43 | 47 | ||
44 | private String applyRemark; | 48 | private String applyRemark; |
45 | } | 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/ProjectApplyVO.java
@@ -48,6 +48,9 @@ public class ProjectApplyVO extends BaseDO implements Serializable { | @@ -48,6 +48,9 @@ public class ProjectApplyVO extends BaseDO implements Serializable { | ||
48 | @ApiModelProperty(value = "审批用户id") | 48 | @ApiModelProperty(value = "审批用户id") |
49 | private Long auditUserId; | 49 | private Long auditUserId; |
50 | 50 | ||
51 | + @ApiModelProperty(value = "申请类型") | ||
52 | + private String type; | ||
53 | + | ||
51 | @ApiModelProperty(value = "锁定字段 json字符串") | 54 | @ApiModelProperty(value = "锁定字段 json字符串") |
52 | private String fields; | 55 | private String fields; |
53 | 56 |
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/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/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/mapper/order/OrderCostDetailedOptLogMapper.java
0 → 100644
src/main/java/com/order/erp/mapper/order/ProjectBaseAfterReviewSettingMapper.java
0 → 100644
src/main/java/com/order/erp/mapper/order/ProjectBaseDevelopOptLogMapper.java
0 → 100644
src/main/java/com/order/erp/service/order/IOrderCostInfoService.java
@@ -6,6 +6,10 @@ import com.baomidou.mybatisplus.extension.service.IService; | @@ -6,6 +6,10 @@ import com.baomidou.mybatisplus.extension.service.IService; | ||
6 | import com.order.erp.domain.vo.order.OrderBaseInfoQueryVO; | 6 | import com.order.erp.domain.vo.order.OrderBaseInfoQueryVO; |
7 | import com.order.erp.domain.vo.order.OrderCostInfoVO; | 7 | import com.order.erp.domain.vo.order.OrderCostInfoVO; |
8 | import com.order.erp.domain.vo.order.OrderCostInfolockFieldVO; | 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; | ||
9 | 13 | ||
10 | /** | 14 | /** |
11 | * <p> | 15 | * <p> |
@@ -24,4 +28,8 @@ public interface IOrderCostInfoService extends IService<OrderCostInfoDO> { | @@ -24,4 +28,8 @@ public interface IOrderCostInfoService extends IService<OrderCostInfoDO> { | ||
24 | ServerResult listInnerProfitDetailByPage(OrderBaseInfoQueryVO queryVO); | 28 | ServerResult listInnerProfitDetailByPage(OrderBaseInfoQueryVO queryVO); |
25 | 29 | ||
26 | ServerResult listBusinessProfitDetailByPage(OrderBaseInfoQueryVO queryVO); | 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); | ||
27 | } | 35 | } |
src/main/java/com/order/erp/service/order/IProjectBaseInfoService.java
@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService; | @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService; | ||
6 | import com.order.erp.domain.vo.order.*; | 6 | import com.order.erp.domain.vo.order.*; |
7 | 7 | ||
8 | import javax.servlet.http.HttpServletResponse; | 8 | import javax.servlet.http.HttpServletResponse; |
9 | +import java.io.IOException; | ||
9 | 10 | ||
10 | /** | 11 | /** |
11 | * <p> | 12 | * <p> |
@@ -32,4 +33,9 @@ public interface IProjectBaseInfoService extends IService<ProjectBaseInfoDO> { | @@ -32,4 +33,9 @@ public interface IProjectBaseInfoService extends IService<ProjectBaseInfoDO> { | ||
32 | void exportBusinessProfitInfo(HttpServletResponse response, String projectNoPrefix) throws Exception; | 33 | void exportBusinessProfitInfo(HttpServletResponse response, String projectNoPrefix) throws Exception; |
33 | 34 | ||
34 | void exportInnerProfitInfo(HttpServletResponse response, String projectNoPrefix) throws Exception; | 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); | ||
35 | } | 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/ProjectBaseAfterReviewSettingService.java
0 → 100644
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/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
@@ -6,19 +6,22 @@ import cn.hutool.core.collection.CollUtil; | @@ -6,19 +6,22 @@ import cn.hutool.core.collection.CollUtil; | ||
6 | import com.alibaba.fastjson.JSONObject; | 6 | import com.alibaba.fastjson.JSONObject; |
7 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 7 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
8 | import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; | 8 | import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; |
9 | +import com.baomidou.mybatisplus.core.toolkit.StringUtils; | ||
9 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | 10 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
10 | import com.fasterxml.jackson.core.JsonProcessingException; | 11 | import com.fasterxml.jackson.core.JsonProcessingException; |
11 | import com.fasterxml.jackson.databind.ObjectMapper; | 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; | ||
12 | import com.order.erp.common.constant.Constant; | 16 | import com.order.erp.common.constant.Constant; |
13 | import com.order.erp.common.constant.ServerResult; | 17 | import com.order.erp.common.constant.ServerResult; |
14 | import com.order.erp.common.constant.ServerResultCode; | 18 | import com.order.erp.common.constant.ServerResultCode; |
15 | import com.order.erp.common.exception.BusinessException; | 19 | import com.order.erp.common.exception.BusinessException; |
16 | import com.order.erp.config.DataScope; | 20 | import com.order.erp.config.DataScope; |
17 | -import com.order.erp.domain.ApplyStatusEnum; | ||
18 | -import com.order.erp.domain.ApplyTypeEnum; | ||
19 | -import com.order.erp.domain.OrderLockFieldEnum; | ||
20 | -import com.order.erp.domain.ProjectApplyTypeEnum; | 21 | +import com.order.erp.domain.*; |
21 | import com.order.erp.domain.dto.BaseDO; | 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; | ||
22 | import com.order.erp.domain.dto.order.OrderCostInfoDO; | 25 | import com.order.erp.domain.dto.order.OrderCostInfoDO; |
23 | import com.order.erp.domain.dto.order.OrderFieldLockApplyDO; | 26 | import com.order.erp.domain.dto.order.OrderFieldLockApplyDO; |
24 | import com.order.erp.domain.model.OrderCostFieldLockRecord; | 27 | import com.order.erp.domain.model.OrderCostFieldLockRecord; |
@@ -26,17 +29,16 @@ import com.order.erp.domain.vo.order.*; | @@ -26,17 +29,16 @@ import com.order.erp.domain.vo.order.*; | ||
26 | import com.order.erp.mapper.order.OrderCostInfoMapper; | 29 | import com.order.erp.mapper.order.OrderCostInfoMapper; |
27 | import com.order.erp.service.IOrderCostFieldLockRecordService; | 30 | import com.order.erp.service.IOrderCostFieldLockRecordService; |
28 | import com.order.erp.service.SystemSettingService; | 31 | import com.order.erp.service.SystemSettingService; |
29 | -import com.order.erp.service.order.IOrderCostInfoService; | 32 | +import com.order.erp.service.order.*; |
30 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | 33 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
31 | -import com.order.erp.service.order.OrderBaseInfoService; | ||
32 | -import com.order.erp.service.order.OrderFieldLockApplyService; | ||
33 | -import com.order.erp.service.order.OrderFieldLockRecordService; | ||
34 | import org.springframework.beans.BeanUtils; | 34 | import org.springframework.beans.BeanUtils; |
35 | import org.springframework.beans.factory.annotation.Autowired; | 35 | import org.springframework.beans.factory.annotation.Autowired; |
36 | import org.springframework.stereotype.Service; | 36 | import org.springframework.stereotype.Service; |
37 | import org.springframework.transaction.annotation.Transactional; | 37 | import org.springframework.transaction.annotation.Transactional; |
38 | 38 | ||
39 | import javax.annotation.Resource; | 39 | import javax.annotation.Resource; |
40 | +import javax.servlet.http.HttpServletResponse; | ||
41 | +import java.io.IOException; | ||
40 | import java.math.BigDecimal; | 42 | import java.math.BigDecimal; |
41 | import java.math.RoundingMode; | 43 | import java.math.RoundingMode; |
42 | import java.util.*; | 44 | import java.util.*; |
@@ -55,8 +57,6 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | @@ -55,8 +57,6 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | ||
55 | @Autowired | 57 | @Autowired |
56 | private DataScope dataScope; | 58 | private DataScope dataScope; |
57 | @Resource | 59 | @Resource |
58 | - private OrderFieldLockRecordService orderFieldLockRecordService; | ||
59 | - @Resource | ||
60 | private OrderFieldLockApplyService orderFieldLockApplyService; | 60 | private OrderFieldLockApplyService orderFieldLockApplyService; |
61 | @Autowired | 61 | @Autowired |
62 | private OrderBaseInfoService orderBaseInfoService; | 62 | private OrderBaseInfoService orderBaseInfoService; |
@@ -64,22 +64,32 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | @@ -64,22 +64,32 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | ||
64 | private IOrderCostFieldLockRecordService orderCostFieldLockRecordService; | 64 | private IOrderCostFieldLockRecordService orderCostFieldLockRecordService; |
65 | @Autowired | 65 | @Autowired |
66 | private SystemSettingService systemSettingService; | 66 | private SystemSettingService systemSettingService; |
67 | + @Autowired | ||
68 | + private OrderCostDetailedOptLogService orderCostDetailedOptLogService; | ||
67 | 69 | ||
68 | @Override | 70 | @Override |
69 | @Transactional(rollbackFor = Exception.class) | 71 | @Transactional(rollbackFor = Exception.class) |
70 | public ServerResult edit(OrderCostInfoVO vo) { | 72 | public ServerResult edit(OrderCostInfoVO vo) { |
73 | + Integer type=null; | ||
74 | + String operationDesc=null; | ||
71 | Long id = vo.getOrderId(); | 75 | Long id = vo.getOrderId(); |
72 | Optional<OrderCostInfoDO> orderCostInfoDOOpt = this.lambdaQuery() | 76 | Optional<OrderCostInfoDO> orderCostInfoDOOpt = this.lambdaQuery() |
73 | .eq(OrderCostInfoDO::getOrderId, id) | 77 | .eq(OrderCostInfoDO::getOrderId, id) |
74 | .last(" limit 1 ") | 78 | .last(" limit 1 ") |
75 | .oneOpt(); | 79 | .oneOpt(); |
76 | OrderCostInfoDO orderCostInfoDO = null; | 80 | OrderCostInfoDO orderCostInfoDO = null; |
77 | - if (!orderCostInfoDOOpt.isPresent()) { | 81 | + OrderCostInfoDO oldOrderCostInfoDO = null; |
82 | + boolean isUpdate = orderCostInfoDOOpt.isPresent(); | ||
83 | + if (!isUpdate) { | ||
84 | + //对象不存在。 | ||
78 | orderCostInfoDO = BeanUtil.copyProperties(vo, OrderCostInfoDO.class); | 85 | orderCostInfoDO = BeanUtil.copyProperties(vo, OrderCostInfoDO.class); |
79 | } else { | 86 | } else { |
80 | orderCostInfoDO = orderCostInfoDOOpt.get(); | 87 | orderCostInfoDO = orderCostInfoDOOpt.get(); |
88 | + oldOrderCostInfoDO = BeanUtil.copyProperties(orderCostInfoDO, OrderCostInfoDO.class,"id","orderId","createTime","createBy","modifyTime","modifyBy","enableFlag"); | ||
81 | BeanUtil.copyProperties(vo, orderCostInfoDO, CopyOptions.create().ignoreNullValue()); | 89 | BeanUtil.copyProperties(vo, orderCostInfoDO, CopyOptions.create().ignoreNullValue()); |
82 | } | 90 | } |
91 | + // 如果对于新旧数据一致时,则不会进行状态设置。 但是对于第一次创建数据应该怎么办呢? 通过isUpdate来进行判断。 对象不存在时,就不需要判断数据是否一致,对象存在时,就需要进行判断数据是否一致。如果一致,则不要进行状态设置,反之则需要进行状态设置。 | ||
92 | + | ||
83 | Optional<OrderCostFieldLockRecord> orderCostFieldLockRecordOpt = orderCostFieldLockRecordService | 93 | Optional<OrderCostFieldLockRecord> orderCostFieldLockRecordOpt = orderCostFieldLockRecordService |
84 | .lambdaQuery() | 94 | .lambdaQuery() |
85 | .eq(OrderCostFieldLockRecord::getOrderId, id) | 95 | .eq(OrderCostFieldLockRecord::getOrderId, id) |
@@ -94,17 +104,49 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | @@ -94,17 +104,49 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | ||
94 | OrderCostInfolockFieldVO originOrderCostInfolockFieldVO = JSONObject.parseObject(Optional.ofNullable(orderCostFieldLockRecord.getFields()).orElse("{}"), OrderCostInfolockFieldVO.class); | 104 | OrderCostInfolockFieldVO originOrderCostInfolockFieldVO = JSONObject.parseObject(Optional.ofNullable(orderCostFieldLockRecord.getFields()).orElse("{}"), OrderCostInfolockFieldVO.class); |
95 | if(Objects.nonNull(vo.getPacketActualRmbTotalPrice())){ | 105 | if(Objects.nonNull(vo.getPacketActualRmbTotalPrice())){ |
96 | originOrderCostInfolockFieldVO.setPacketActualRmbTotalPrice(OrderLockFieldEnum.LOCKED.name()); | 106 | originOrderCostInfolockFieldVO.setPacketActualRmbTotalPrice(OrderLockFieldEnum.LOCKED.name()); |
97 | - }else if(Objects.nonNull(vo.getProductionActualPrice())||Objects.nonNull(vo.getProductionDepartmentPredictPrice())) { | 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()); | ||
98 | originOrderCostInfolockFieldVO.setProductionActualPrice(OrderLockFieldEnum.LOCKED.name()); | 122 | originOrderCostInfolockFieldVO.setProductionActualPrice(OrderLockFieldEnum.LOCKED.name()); |
99 | originOrderCostInfolockFieldVO.setProductionDepartmentPredictPrice(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 | + } | ||
100 | } | 137 | } |
101 | orderCostFieldLockRecord.setFields(JSONObject.toJSONString(originOrderCostInfolockFieldVO)); | 138 | orderCostFieldLockRecord.setFields(JSONObject.toJSONString(originOrderCostInfolockFieldVO)); |
102 | orderCostFieldLockRecordService.saveOrUpdate(orderCostFieldLockRecord); | 139 | orderCostFieldLockRecordService.saveOrUpdate(orderCostFieldLockRecord); |
103 | - return ServerResult.success(this.saveOrUpdate(orderCostInfoDO)); | 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)); | ||
104 | } | 145 | } |
105 | 146 | ||
106 | @Override | 147 | @Override |
107 | public ServerResult applyEditFileds(OrderCostInfolockFieldVO vo) { | 148 | public ServerResult applyEditFileds(OrderCostInfolockFieldVO vo) { |
149 | + Integer applyType=null; | ||
108 | List<OrderFieldLockApplyDO> applyDOS = orderFieldLockApplyService.list(new LambdaQueryWrapper<OrderFieldLockApplyDO>() | 150 | List<OrderFieldLockApplyDO> applyDOS = orderFieldLockApplyService.list(new LambdaQueryWrapper<OrderFieldLockApplyDO>() |
109 | .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) | 151 | .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) |
110 | .eq(OrderFieldLockApplyDO::getOrderId, vo.getOrderId()) | 152 | .eq(OrderFieldLockApplyDO::getOrderId, vo.getOrderId()) |
@@ -118,6 +160,7 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | @@ -118,6 +160,7 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | ||
118 | .packetActualRmbTotalPrice(vo.getPacketActualRmbTotalPrice()) | 160 | .packetActualRmbTotalPrice(vo.getPacketActualRmbTotalPrice()) |
119 | .productionActualPrice(vo.getProductionActualPrice()) | 161 | .productionActualPrice(vo.getProductionActualPrice()) |
120 | .productionDepartmentPredictPrice(vo.getProductionDepartmentPredictPrice()) | 162 | .productionDepartmentPredictPrice(vo.getProductionDepartmentPredictPrice()) |
163 | + .productionDepartmentPredictUnitPrice(vo.getProductionDepartmentPredictUnitPrice()) | ||
121 | .build(); | 164 | .build(); |
122 | OrderFieldLockApplyDO build = OrderFieldLockApplyDO.builder() | 165 | OrderFieldLockApplyDO build = OrderFieldLockApplyDO.builder() |
123 | .orderId(vo.getOrderId()) | 166 | .orderId(vo.getOrderId()) |
@@ -126,9 +169,16 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | @@ -126,9 +169,16 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | ||
126 | .fields(JSONObject.toJSONString(lockField)) | 169 | .fields(JSONObject.toJSONString(lockField)) |
127 | .status(ApplyStatusEnum.WAIT_AUDIT.getStatus()) | 170 | .status(ApplyStatusEnum.WAIT_AUDIT.getStatus()) |
128 | .type(vo.getType()) | 171 | .type(vo.getType()) |
129 | - .remark(ApplyTypeEnum.getNameByType(vo.getType())) | 172 | + .remark(OrderCostApplyTpeEnum.getNameByType(vo.getType())) |
130 | .build(); | 173 | .build(); |
131 | orderFieldLockApplyService.save(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))); | ||
132 | return ServerResult.success(); | 182 | return ServerResult.success(); |
133 | } | 183 | } |
134 | 184 | ||
@@ -171,6 +221,9 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | @@ -171,6 +221,9 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | ||
171 | if(Objects.isNull(lockFields.getProductionDepartmentPredictPrice())){ | 221 | if(Objects.isNull(lockFields.getProductionDepartmentPredictPrice())){ |
172 | lockFields.setProductionDepartmentPredictPrice(Objects.isNull(orderCostInfo) || Objects.isNull(orderCostInfo.getProductionDepartmentPredictPrice()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name()); | 222 | lockFields.setProductionDepartmentPredictPrice(Objects.isNull(orderCostInfo) || Objects.isNull(orderCostInfo.getProductionDepartmentPredictPrice()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name()); |
173 | } | 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 | + } | ||
174 | InnerProfitDetailVO vo = InnerProfitDetailVO.builder() | 227 | InnerProfitDetailVO vo = InnerProfitDetailVO.builder() |
175 | .orderId(record.getId()) | 228 | .orderId(record.getId()) |
176 | .customerCode(record.getCustomerCode()) | 229 | .customerCode(record.getCustomerCode()) |
@@ -183,6 +236,7 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | @@ -183,6 +236,7 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | ||
183 | .productionDepartmentTotalPrice(Objects.isNull(record.getProfitAnalysisInfo()) ? null : record.getProfitAnalysisInfo().getProductionDepartmentTotalPrice()) | 236 | .productionDepartmentTotalPrice(Objects.isNull(record.getProfitAnalysisInfo()) ? null : record.getProfitAnalysisInfo().getProductionDepartmentTotalPrice()) |
184 | .productionDepartmentPredictPrice(Objects.isNull(record.getOrderCostInfo()) ? null : record.getOrderCostInfo().getProductionDepartmentPredictPrice()) | 237 | .productionDepartmentPredictPrice(Objects.isNull(record.getOrderCostInfo()) ? null : record.getOrderCostInfo().getProductionDepartmentPredictPrice()) |
185 | .productionActualPrice(Objects.isNull(record.getOrderCostInfo()) ? null : record.getOrderCostInfo().getProductionActualPrice()) | 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()) | ||
186 | .lockFields(lockFields) | 240 | .lockFields(lockFields) |
187 | .build(); | 241 | .build(); |
188 | 242 | ||
@@ -214,6 +268,9 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | @@ -214,6 +268,9 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | ||
214 | vo.setGrossProfitRate(vo.getGrossProfit().divide(BigDecimal.valueOf(vo.getProductionDepartmentTotalPrice()), 4, RoundingMode.HALF_UP)); | 268 | vo.setGrossProfitRate(vo.getGrossProfit().divide(BigDecimal.valueOf(vo.getProductionDepartmentTotalPrice()), 4, RoundingMode.HALF_UP)); |
215 | } | 269 | } |
216 | } | 270 | } |
271 | + if(Objects.nonNull(vo.getProductionDepartmentPredictPrice())){ | ||
272 | + vo.setProductionDepartmentPredictUnitprice(vo.getProductionDepartmentPredictPrice().divide(BigDecimal.valueOf(record.getOrderCount()), 2, RoundingMode.HALF_UP)); | ||
273 | + } | ||
217 | return vo; | 274 | return vo; |
218 | }).collect(Collectors.toList()); | 275 | }).collect(Collectors.toList()); |
219 | Page<InnerProfitDetailVO> webVOPage = new Page<>(); | 276 | Page<InnerProfitDetailVO> webVOPage = new Page<>(); |
@@ -275,6 +332,7 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | @@ -275,6 +332,7 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | ||
275 | .packetPrice(Objects.isNull(record.getProfitAnalysisInfo()) ? null : record.getProfitAnalysisInfo().getPacketPrice()) | 332 | .packetPrice(Objects.isNull(record.getProfitAnalysisInfo()) ? null : record.getProfitAnalysisInfo().getPacketPrice()) |
276 | .packetTotalPrice(Objects.isNull(record.getProfitAnalysisInfo()) ? null : record.getProfitAnalysisInfo().getPacketTotalPrice()) | 333 | .packetTotalPrice(Objects.isNull(record.getProfitAnalysisInfo()) ? null : record.getProfitAnalysisInfo().getPacketTotalPrice()) |
277 | .packetActualRmbTotalPrice(Objects.isNull(record.getOrderCostInfo()) ? null : record.getOrderCostInfo().getPacketActualRmbTotalPrice()) | 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()) | ||
278 | .lockFields(lockFields) | 336 | .lockFields(lockFields) |
279 | .build(); | 337 | .build(); |
280 | if (Objects.nonNull(vo.getPacketTotalPrice())) { | 338 | if (Objects.nonNull(vo.getPacketTotalPrice())) { |
@@ -303,4 +361,211 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | @@ -303,4 +361,211 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O | ||
303 | return ServerResult.success(webVOPage); | 361 | return ServerResult.success(webVOPage); |
304 | } | 362 | } |
305 | 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 | + | ||
306 | } | 571 | } |
src/main/java/com/order/erp/service/order/impl/OrderFieldLockApplyServiceImpl.java
@@ -134,9 +134,10 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | @@ -134,9 +134,10 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | ||
134 | if (ApplyTypeEnum.FIELD_EDIT_APPLY.getType().equals(x.getType())) { | 134 | if (ApplyTypeEnum.FIELD_EDIT_APPLY.getType().equals(x.getType())) { |
135 | resultVO.setFieldInfos(JSONObject.parseObject(fields, OrderLockFieldVO.class)); | 135 | resultVO.setFieldInfos(JSONObject.parseObject(fields, OrderLockFieldVO.class)); |
136 | } | 136 | } |
137 | - if (Stream.of(ApplyTypeEnum.ORDER_PACKET_COST_FIELD_EDIT_APPLY, | ||
138 | - ApplyTypeEnum.ORDER_PRODUCTION_COST_FIELD_EDIT_APPLY) | ||
139 | - .map(ApplyTypeEnum::getType) | 137 | + // todo |
138 | + if (Stream.of(OrderCostApplyTpeEnum.ORDER_PACKET_COST_FIELD_EDIT_APPLY, | ||
139 | + OrderCostApplyTpeEnum.ORDER_PRODUCTION_COST_FIELD_EDIT_APPLY) | ||
140 | + .map(OrderCostApplyTpeEnum::getType) | ||
140 | .anyMatch(type -> type.equals(x.getType()))) { | 141 | .anyMatch(type -> type.equals(x.getType()))) { |
141 | OrderCostInfolockFieldVO orderCostInfolockFieldVO = JSONObject.parseObject(fields, OrderCostInfolockFieldVO.class); | 142 | OrderCostInfolockFieldVO orderCostInfolockFieldVO = JSONObject.parseObject(fields, OrderCostInfolockFieldVO.class); |
142 | resultVO.setFieldInfos(OrderLockFieldVO.builder().costInfolockFieldVO(orderCostInfolockFieldVO).build()); | 143 | resultVO.setFieldInfos(OrderLockFieldVO.builder().costInfolockFieldVO(orderCostInfolockFieldVO).build()); |
@@ -824,9 +825,10 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | @@ -824,9 +825,10 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | ||
824 | } | 825 | } |
825 | } | 826 | } |
826 | checkBillOrderService.updateById(invoiceInfoDO); | 827 | checkBillOrderService.updateById(invoiceInfoDO); |
827 | - } else if (Stream.of(ApplyTypeEnum.ORDER_PACKET_COST_FIELD_EDIT_APPLY, | ||
828 | - ApplyTypeEnum.ORDER_PRODUCTION_COST_FIELD_EDIT_APPLY) | ||
829 | - .map(ApplyTypeEnum::getType) | 828 | + //todo |
829 | + } else if (Stream.of(OrderCostApplyTpeEnum.ORDER_PACKET_COST_FIELD_EDIT_APPLY, | ||
830 | + OrderCostApplyTpeEnum.ORDER_PRODUCTION_COST_FIELD_EDIT_APPLY) | ||
831 | + .map(OrderCostApplyTpeEnum::getType) | ||
830 | .anyMatch(x -> x.equals(applyDO.getType()))) { | 832 | .anyMatch(x -> x.equals(applyDO.getType()))) { |
831 | applyDO.setAuditUserId(auditUserId); | 833 | applyDO.setAuditUserId(auditUserId); |
832 | applyDO.setStatus(ApplyStatusEnum.AUDIT_PASS.getStatus()); | 834 | applyDO.setStatus(ApplyStatusEnum.AUDIT_PASS.getStatus()); |
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 | \ No newline at end of file | 73 | \ No newline at end of file |
src/main/java/com/order/erp/service/order/impl/ProjectBaseInfoServiceImpl.java
@@ -3,37 +3,38 @@ package com.order.erp.service.order.impl; | @@ -3,37 +3,38 @@ package com.order.erp.service.order.impl; | ||
3 | import cn.hutool.core.bean.BeanUtil; | 3 | import cn.hutool.core.bean.BeanUtil; |
4 | import cn.hutool.core.bean.copier.CopyOptions; | 4 | import cn.hutool.core.bean.copier.CopyOptions; |
5 | import cn.hutool.core.collection.CollUtil; | 5 | import cn.hutool.core.collection.CollUtil; |
6 | +import com.alibaba.fastjson.JSON; | ||
6 | import com.alibaba.fastjson.JSONObject; | 7 | import com.alibaba.fastjson.JSONObject; |
8 | +import com.alibaba.fastjson.TypeReference; | ||
7 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 9 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
8 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 10 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
9 | import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; | 11 | import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; |
10 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | 12 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
11 | import com.fasterxml.jackson.core.JsonProcessingException; | 13 | import com.fasterxml.jackson.core.JsonProcessingException; |
12 | import com.fasterxml.jackson.databind.ObjectMapper; | 14 | import com.fasterxml.jackson.databind.ObjectMapper; |
15 | +import com.github.stupdit1t.excel.common.PoiWorkbookType; | ||
16 | +import com.github.stupdit1t.excel.core.ExcelHelper; | ||
17 | +import com.github.stupdit1t.excel.style.CellPosition; | ||
13 | import com.order.erp.common.constant.Constant; | 18 | import com.order.erp.common.constant.Constant; |
14 | import com.order.erp.common.constant.ServerResult; | 19 | import com.order.erp.common.constant.ServerResult; |
15 | import com.order.erp.common.constant.ServerResultCode; | 20 | import com.order.erp.common.constant.ServerResultCode; |
16 | import com.order.erp.common.exception.BusinessException; | 21 | import com.order.erp.common.exception.BusinessException; |
22 | +import com.order.erp.common.utils.TransactionHelper; | ||
17 | import com.order.erp.config.DataScope; | 23 | import com.order.erp.config.DataScope; |
18 | -import com.order.erp.domain.ApplyStatusEnum; | ||
19 | -import com.order.erp.domain.OrderLockFieldEnum; | ||
20 | -import com.order.erp.domain.ProjectApplyTypeEnum; | ||
21 | -import com.order.erp.domain.ProjectFieldEditType; | 24 | +import com.order.erp.domain.*; |
22 | import com.order.erp.domain.dto.BaseDO; | 25 | import com.order.erp.domain.dto.BaseDO; |
23 | import com.order.erp.domain.dto.SystemSettingDO; | 26 | import com.order.erp.domain.dto.SystemSettingDO; |
24 | -import com.order.erp.domain.dto.order.OrderBaseInfoDO; | ||
25 | -import com.order.erp.domain.dto.order.ProjectBaseInfoDO; | 27 | +import com.order.erp.domain.dto.order.*; |
26 | import com.order.erp.domain.model.ProjectApplyDO; | 28 | import com.order.erp.domain.model.ProjectApplyDO; |
27 | import com.order.erp.domain.model.ProjectFieldLockRecord; | 29 | import com.order.erp.domain.model.ProjectFieldLockRecord; |
30 | +import com.order.erp.domain.vo.CostSettingItemVO; | ||
28 | import com.order.erp.domain.vo.order.*; | 31 | import com.order.erp.domain.vo.order.*; |
29 | import com.order.erp.mapper.order.ProjectBaseInfoMapper; | 32 | import com.order.erp.mapper.order.ProjectBaseInfoMapper; |
30 | import com.order.erp.service.IProjectFieldLockRecordService; | 33 | import com.order.erp.service.IProjectFieldLockRecordService; |
31 | import com.order.erp.service.SystemSettingService; | 34 | import com.order.erp.service.SystemSettingService; |
32 | import com.order.erp.service.impl.ProjectApplyServiceImpl; | 35 | import com.order.erp.service.impl.ProjectApplyServiceImpl; |
33 | -import com.order.erp.service.order.IProjectBaseInfoService; | 36 | +import com.order.erp.service.order.*; |
34 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | 37 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
35 | -import com.order.erp.service.order.OrderBaseInfoService; | ||
36 | -import com.order.erp.service.order.OrderProfitAnalysisService; | ||
37 | import org.apache.commons.lang3.StringUtils; | 38 | import org.apache.commons.lang3.StringUtils; |
38 | import org.apache.poi.ss.usermodel.*; | 39 | import org.apache.poi.ss.usermodel.*; |
39 | import org.apache.poi.ss.util.CellRangeAddress; | 40 | import org.apache.poi.ss.util.CellRangeAddress; |
@@ -42,8 +43,11 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook; | @@ -42,8 +43,11 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook; | ||
42 | import org.springframework.beans.BeanUtils; | 43 | import org.springframework.beans.BeanUtils; |
43 | import org.springframework.beans.factory.annotation.Autowired; | 44 | import org.springframework.beans.factory.annotation.Autowired; |
44 | import org.springframework.stereotype.Service; | 45 | import org.springframework.stereotype.Service; |
46 | +import org.springframework.transaction.annotation.Transactional; | ||
45 | 47 | ||
48 | +import javax.annotation.Resource; | ||
46 | import javax.servlet.http.HttpServletResponse; | 49 | import javax.servlet.http.HttpServletResponse; |
50 | +import java.io.IOException; | ||
47 | import java.io.OutputStream; | 51 | import java.io.OutputStream; |
48 | import java.math.BigDecimal; | 52 | import java.math.BigDecimal; |
49 | import java.math.RoundingMode; | 53 | import java.math.RoundingMode; |
@@ -77,21 +81,34 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | @@ -77,21 +81,34 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | ||
77 | private OrderProfitAnalysisService projectProfitAnalysisService; | 81 | private OrderProfitAnalysisService projectProfitAnalysisService; |
78 | @Autowired | 82 | @Autowired |
79 | private SystemSettingService systemSettingService; | 83 | private SystemSettingService systemSettingService; |
84 | + @Autowired | ||
85 | + private ProjectBaseDevelopOptLogService projectBaseDevelopOptLogService; | ||
86 | + @Autowired | ||
87 | + private ProjectBaseAfterReviewSettingService projectBaseAfterReviewSettingService; | ||
88 | + @Resource | ||
89 | + private TransactionHelper transactionHelper; | ||
80 | 90 | ||
81 | @Override | 91 | @Override |
92 | + @Transactional(rollbackFor = Exception.class) | ||
82 | public ServerResult edit(ProjectBaseInfoVO vo) { | 93 | public ServerResult edit(ProjectBaseInfoVO vo) { |
94 | + Integer type = null; | ||
95 | + String operationDesc =null; | ||
83 | String projectNoPrefix = vo.getProjectNoPrefix(); | 96 | String projectNoPrefix = vo.getProjectNoPrefix(); |
84 | Optional<ProjectBaseInfoDO> projectBaseInfoDOOpt = this.lambdaQuery() | 97 | Optional<ProjectBaseInfoDO> projectBaseInfoDOOpt = this.lambdaQuery() |
85 | .eq(ProjectBaseInfoDO::getProjectNoPrefix, projectNoPrefix) | 98 | .eq(ProjectBaseInfoDO::getProjectNoPrefix, projectNoPrefix) |
86 | .last(" limit 1 ") | 99 | .last(" limit 1 ") |
87 | .oneOpt(); | 100 | .oneOpt(); |
101 | + ProjectBaseInfoDO oldProjectBaseInfoDO = null; | ||
88 | ProjectBaseInfoDO projectBaseInfoDO = null; | 102 | ProjectBaseInfoDO projectBaseInfoDO = null; |
89 | - if (projectBaseInfoDOOpt.isPresent()) { | 103 | + boolean isUpdate = projectBaseInfoDOOpt.isPresent(); |
104 | + if (isUpdate) { | ||
90 | projectBaseInfoDO = projectBaseInfoDOOpt.get(); | 105 | projectBaseInfoDO = projectBaseInfoDOOpt.get(); |
106 | + oldProjectBaseInfoDO = BeanUtil.copyProperties(projectBaseInfoDOOpt.get(), ProjectBaseInfoDO.class,"id","projectNoPrefix","createTime","createBy","modifyTime","modifyBy","enableFlag"); // 深拷贝 | ||
91 | BeanUtil.copyProperties(vo, projectBaseInfoDO, CopyOptions.create().setIgnoreProperties("id").ignoreNullValue()); | 107 | BeanUtil.copyProperties(vo, projectBaseInfoDO, CopyOptions.create().setIgnoreProperties("id").ignoreNullValue()); |
92 | } else { | 108 | } else { |
93 | projectBaseInfoDO = BeanUtil.copyProperties(vo, ProjectBaseInfoDO.class); | 109 | projectBaseInfoDO = BeanUtil.copyProperties(vo, ProjectBaseInfoDO.class); |
94 | } | 110 | } |
111 | + //通过排序取出最新的锁定记录。来重新设置锁定记录。 因为你编辑之后,所以就必须要进行锁定LOCKED。 | ||
95 | ProjectFieldLockRecord recordDO = projectionFieldLockRecordService.getOne(new LambdaQueryWrapper<ProjectFieldLockRecord>() | 112 | ProjectFieldLockRecord recordDO = projectionFieldLockRecordService.getOne(new LambdaQueryWrapper<ProjectFieldLockRecord>() |
96 | .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) | 113 | .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) |
97 | .eq(ProjectFieldLockRecord::getProjectNoPrefix, projectNoPrefix) | 114 | .eq(ProjectFieldLockRecord::getProjectNoPrefix, projectNoPrefix) |
@@ -117,9 +134,36 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | @@ -117,9 +134,36 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | ||
117 | recordLockFieldVO.setSpainPaidRmbCommission("LOCKED"); | 134 | recordLockFieldVO.setSpainPaidRmbCommission("LOCKED"); |
118 | recordLockFieldVO.setPaidRmbCommission("LOCKED"); | 135 | recordLockFieldVO.setPaidRmbCommission("LOCKED"); |
119 | recordLockFieldVO.setActualExchangeRate("LOCKED"); | 136 | recordLockFieldVO.setActualExchangeRate("LOCKED"); |
137 | + type=ProjectOptTypeEnum.BUSINESS_NET_PROFIT_TYPE.getType(); | ||
138 | + operationDesc = isUpdate | ||
139 | + ? OrderOptTypeEnum.PROJECT_DEVELOPMENT_PROFIT_EDIT.getDesc() | ||
140 | + : OrderOptTypeEnum.PROJECT_DEVELOPMENT_PROFIT_ADD.getDesc(); | ||
141 | + /*这里还需要考虑一下,对于状态已经是已审批的状态,但是在编辑数据时没有发生任何改变,也需要重新设置为待审核状态吗?不需要,这里处理一下,对于这种情况就不需要重新设置状态*/ | ||
142 | + if(isUpdate && oldProjectBaseInfoDO.getDevelopmentStatus().equals(ProfitStatusEnum.APPROVED.getStatus()) && | ||
143 | + oldProjectBaseInfoDO.getProjectStartTime().isEqual(vo.getProjectStartTime()) && | ||
144 | + oldProjectBaseInfoDO.getProjectEndTime().isEqual(vo.getProjectEndTime()) && | ||
145 | + oldProjectBaseInfoDO.getDevelopmentCopyRmbTotalPrice().compareTo(vo.getDevelopmentCopyRmbTotalPrice()) == 0 && | ||
146 | + oldProjectBaseInfoDO.getSpainPaidRmbCommission().compareTo(vo.getSpainPaidRmbCommission()) == 0 && | ||
147 | + oldProjectBaseInfoDO.getPaidRmbCommission().compareTo(vo.getPaidRmbCommission()) == 0 && | ||
148 | + //todo 这个实际汇率是否需要,需要讨论。 | ||
149 | + oldProjectBaseInfoDO.getActualExchangeRate().compareTo(vo.getActualExchangeRate()) == 0 | ||
150 | + ){ | ||
151 | + }else{ | ||
152 | + projectBaseInfoDO.setDevelopmentStatus(ProfitStatusEnum.PENDING_APPROVAL.getStatus()); | ||
153 | + } | ||
120 | } else if (Objects.nonNull(vo.getProjectInnerProfitInfoStartTime()) || Objects.nonNull(vo.getProjectInnerProfitInfoEndTime())) { | 154 | } else if (Objects.nonNull(vo.getProjectInnerProfitInfoStartTime()) || Objects.nonNull(vo.getProjectInnerProfitInfoEndTime())) { |
121 | recordLockFieldVO.setProjectInnerProfitInfoStartTime("LOCKED"); | 155 | recordLockFieldVO.setProjectInnerProfitInfoStartTime("LOCKED"); |
122 | recordLockFieldVO.setProjectInnerProfitInfoEndTime("LOCKED"); | 156 | recordLockFieldVO.setProjectInnerProfitInfoEndTime("LOCKED"); |
157 | + type=ProjectOptTypeEnum.INTERNAL_BUSINESS_NET_PROFIT_TYPE.getType(); | ||
158 | + operationDesc = isUpdate | ||
159 | + ? OrderOptTypeEnum.PROJECT_INNER_PRODUCE_EDIT.getDesc() | ||
160 | + : OrderOptTypeEnum.PROJECT_INNER_PRODUCE_ADD.getDesc(); | ||
161 | + if(isUpdate && oldProjectBaseInfoDO.getInnerProductionStatus().equals(ProfitStatusEnum.APPROVED.getStatus()) && | ||
162 | + oldProjectBaseInfoDO.getProjectInnerProfitInfoStartTime().isEqual(vo.getProjectInnerProfitInfoStartTime()) && | ||
163 | + oldProjectBaseInfoDO.getProjectInnerProfitInfoEndTime().isEqual(vo.getProjectInnerProfitInfoEndTime())){ | ||
164 | + }else{ | ||
165 | + projectBaseInfoDO.setInnerProductionStatus(ProfitStatusEnum.PENDING_APPROVAL.getStatus()); | ||
166 | + } | ||
123 | } | 167 | } |
124 | recordDO.setFields(JSONObject.toJSONString(recordLockFieldVO)); | 168 | recordDO.setFields(JSONObject.toJSONString(recordLockFieldVO)); |
125 | if (Objects.isNull(recordDO.getId())) { | 169 | if (Objects.isNull(recordDO.getId())) { |
@@ -127,11 +171,16 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | @@ -127,11 +171,16 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | ||
127 | } else { | 171 | } else { |
128 | projectionFieldLockRecordService.updateById(recordDO); | 172 | projectionFieldLockRecordService.updateById(recordDO); |
129 | } | 173 | } |
130 | - return ServerResult.success(this.saveOrUpdate(projectBaseInfoDO)); | 174 | + this.saveOrUpdate(projectBaseInfoDO); |
175 | + //在这里进行操作记录。 | ||
176 | + ProjectBaseInfoVO projectBaseInfoVO = buildProjectBaseInfoVO(vo, projectBaseInfoDO.getId()); | ||
177 | + ProjectBaseDevelopOptLogDO projectOptLogDO = buildProjectOptLogDo(projectNoPrefix, dataScope.getLoginUserId(),type ,operationDesc,JSONObject.toJSONString(projectBaseInfoVO)); | ||
178 | + return ServerResult.success(projectBaseDevelopOptLogService.save(projectOptLogDO)); | ||
131 | } | 179 | } |
132 | 180 | ||
133 | @Override | 181 | @Override |
134 | public ServerResult applyEditFileds(ProjectBaseInfoLockFieldVO vo) { | 182 | public ServerResult applyEditFileds(ProjectBaseInfoLockFieldVO vo) { |
183 | + Integer applyType=null; | ||
135 | List<ProjectApplyDO> applyDOS = projectFieldLockApplyService.list(new LambdaQueryWrapper<ProjectApplyDO>() | 184 | List<ProjectApplyDO> applyDOS = projectFieldLockApplyService.list(new LambdaQueryWrapper<ProjectApplyDO>() |
136 | .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) | 185 | .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) |
137 | .eq(ProjectApplyDO::getType, vo.getType()) | 186 | .eq(ProjectApplyDO::getType, vo.getType()) |
@@ -160,6 +209,15 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | @@ -160,6 +209,15 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | ||
160 | .status(ApplyStatusEnum.WAIT_AUDIT.getStatus()) | 209 | .status(ApplyStatusEnum.WAIT_AUDIT.getStatus()) |
161 | .build(); | 210 | .build(); |
162 | projectFieldLockApplyService.save(build); | 211 | projectFieldLockApplyService.save(build); |
212 | + //进行审批记录的保存。 需要前端在申请字段申请时传递这条数据的id。 | ||
213 | + if(ProjectApplyTypeEnum.FIELD_EDIT_APPLY.name().equals(vo.getType())){ | ||
214 | + applyType=ProjectApplyTypeEnum.FIELD_EDIT_APPLY.getType(); | ||
215 | + }else{ | ||
216 | + applyType=ProjectApplyTypeEnum.INNER_PROFIT_FIELD_EDIT_APPLY.getType(); | ||
217 | + } | ||
218 | + String descByName = ProjectApplyTypeEnum.getDescByName(vo.getType()); | ||
219 | +// ProjectBaseInfoLockFieldVO projectBaseInfoLockFieldVO = buildProjectBaseInfoLockFieldVO(vo); | ||
220 | + projectBaseDevelopOptLogService.save(buildProjectOptLogDo(vo.getProjectNoPrefix(), dataScope.getLoginUserId(),applyType,ProjectApplyTypeEnum.getDescByName(vo.getType()),JSONObject.toJSONString(projectBaseInfoLockFieldVO))); | ||
163 | return ServerResult.success(); | 221 | return ServerResult.success(); |
164 | } | 222 | } |
165 | 223 | ||
@@ -388,6 +446,15 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | @@ -388,6 +446,15 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | ||
388 | throw new RuntimeException(e); | 446 | throw new RuntimeException(e); |
389 | } | 447 | } |
390 | })); | 448 | })); |
449 | + //查询永久已保存的配置。 | ||
450 | + List<ProjectBaseAfterReviewSettingDO> projectBaseAfterReviewSettingDOS = projectBaseAfterReviewSettingService.list(new LambdaQueryWrapper<ProjectBaseAfterReviewSettingDO>() | ||
451 | + .eq(ProjectBaseAfterReviewSettingDO::getType, ProjectBaseSettingTypeEnum.FIXED_COST_OF_PRODUCTION_DEPARTMENT.getType()) | ||
452 | + .in(ProjectBaseAfterReviewSettingDO::getProjectNoPrefix, orderInfoResultVOS.stream() | ||
453 | + .map(OrderBaseInfoVO::getProjectNo) | ||
454 | + .collect(Collectors.toSet()))); | ||
455 | + Map<String, ProjectBaseAfterReviewSettingDO> projectBaseAfterReviewSettingDOMap = projectBaseAfterReviewSettingDOS | ||
456 | + .stream() | ||
457 | + .collect(Collectors.toMap(ProjectBaseAfterReviewSettingDO::getProjectNoPrefix, Function.identity(), (x, y) -> x)); | ||
391 | return orderBaseInfoDOSGroupByProjectNoPre.entrySet().stream().map(entry -> { | 458 | return orderBaseInfoDOSGroupByProjectNoPre.entrySet().stream().map(entry -> { |
392 | ProjectBaseInfoDO projectBaseInfoDO = no2ProjectInfoMap.get(entry.getKey()); | 459 | ProjectBaseInfoDO projectBaseInfoDO = no2ProjectInfoMap.get(entry.getKey()); |
393 | List<OrderInfoResultVO> details = entry.getValue(); | 460 | List<OrderInfoResultVO> details = entry.getValue(); |
@@ -402,6 +469,7 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | @@ -402,6 +469,7 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | ||
402 | InnerProfitInfoVO innerProfitInfoVO = InnerProfitInfoVO.builder() | 469 | InnerProfitInfoVO innerProfitInfoVO = InnerProfitInfoVO.builder() |
403 | .customerCode(details.get(0).getCustomerCode()) | 470 | .customerCode(details.get(0).getCustomerCode()) |
404 | .projectNoPrefix(entry.getKey()) | 471 | .projectNoPrefix(entry.getKey()) |
472 | + .innerProductionStatus((Objects.isNull(projectBaseInfoDO) || Objects.isNull(projectBaseInfoDO.getInnerProductionStatus())) ? ProfitStatusEnum.Not_COMPLETED.getStatus() : projectBaseInfoDO.getInnerProductionStatus() ) | ||
405 | .productionDepartment(details.get(0).getProductionDepartment()) | 473 | .productionDepartment(details.get(0).getProductionDepartment()) |
406 | .lockFields(lockFields) | 474 | .lockFields(lockFields) |
407 | .build(); | 475 | .build(); |
@@ -505,6 +573,11 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | @@ -505,6 +573,11 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | ||
505 | ratioValue = relation.get("relationValue"); | 573 | ratioValue = relation.get("relationValue"); |
506 | } | 574 | } |
507 | } | 575 | } |
576 | + //在这里进行覆盖 | ||
577 | + if(Objects.nonNull(projectBaseAfterReviewSettingDOMap.get(entry.getKey()))){ | ||
578 | + fixCostValue=projectBaseAfterReviewSettingDOMap.get(entry.getKey()).getFixedCost().toString(); | ||
579 | + ratioValue=projectBaseAfterReviewSettingDOMap.get(entry.getKey()).getCommissionUnitPrice().toString(); | ||
580 | + } | ||
508 | if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(fixCostValue) | 581 | if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(fixCostValue) |
509 | && Objects.nonNull(earliest) | 582 | && Objects.nonNull(earliest) |
510 | && Objects.nonNull(latest)) { | 583 | && Objects.nonNull(latest)) { |
@@ -553,6 +626,13 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | @@ -553,6 +626,13 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | ||
553 | .map(projectNo -> projectNo.substring(0, 8)) | 626 | .map(projectNo -> projectNo.substring(0, 8)) |
554 | .distinct() | 627 | .distinct() |
555 | .collect(Collectors.toList()); | 628 | .collect(Collectors.toList()); |
629 | + Map<String, Set<String>> detailProjectNoMap = orderInfoResultVOS.stream() | ||
630 | + .filter(vo -> vo.getProjectNo() != null && vo.getProjectNo().length() >= 8) | ||
631 | + .collect(Collectors.groupingBy( | ||
632 | + vo -> vo.getProjectNo().substring(0, 8), // 按前8位分组 | ||
633 | + Collectors.mapping(OrderInfoResultVO::getProjectNo, Collectors.toSet()) // 提取完整projectNo组成List | ||
634 | + )); | ||
635 | + | ||
556 | Map<String, List<OrderInfoResultVO>> orderBaseInfoDOSGroupByProjectNoPre = orderInfoResultVOS.stream() | 636 | Map<String, List<OrderInfoResultVO>> orderBaseInfoDOSGroupByProjectNoPre = orderInfoResultVOS.stream() |
557 | .collect(Collectors.groupingBy( | 637 | .collect(Collectors.groupingBy( |
558 | order -> order.getProjectNo().substring(0, 8) | 638 | order -> order.getProjectNo().substring(0, 8) |
@@ -606,12 +686,21 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | @@ -606,12 +686,21 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | ||
606 | } | 686 | } |
607 | })); | 687 | })); |
608 | BigDecimal exchangeRate = systemSettingService.getExchangeRate(); | 688 | BigDecimal exchangeRate = systemSettingService.getExchangeRate(); |
689 | + //查询永久已保存的配置。 | ||
690 | + List<ProjectBaseAfterReviewSettingDO> projectBaseAfterReviewSettingDOS = projectBaseAfterReviewSettingService.list(new LambdaQueryWrapper<ProjectBaseAfterReviewSettingDO>() | ||
691 | + .eq(ProjectBaseAfterReviewSettingDO::getType, ProjectBaseSettingTypeEnum.COMMISSION_COST.getType()) | ||
692 | + .in(ProjectBaseAfterReviewSettingDO::getProjectNoPrefix,projectNoPrefix)); | ||
693 | + Map<String, ProjectBaseAfterReviewSettingDO> projectBaseAfterReviewSettingDOMap = projectBaseAfterReviewSettingDOS.stream().collect(Collectors.toMap(ProjectBaseAfterReviewSettingDO::getProjectNoPrefix, Function.identity(), (x, y) -> x)); | ||
609 | return orderBaseInfoDOSGroupByProjectNoPre.entrySet().stream().map(entry -> { | 694 | return orderBaseInfoDOSGroupByProjectNoPre.entrySet().stream().map(entry -> { |
610 | List<OrderInfoResultVO> details = entry.getValue(); | 695 | List<OrderInfoResultVO> details = entry.getValue(); |
611 | ProjectBaseInfoDO projectBaseInfoDO = noPrefix2ProjectProfitAnalysisDOMap.get(entry.getKey()); | 696 | ProjectBaseInfoDO projectBaseInfoDO = noPrefix2ProjectProfitAnalysisDOMap.get(entry.getKey()); |
612 | BusinessProfitInfoVO businessProfitInfoVO = BusinessProfitInfoVO.builder() | 697 | BusinessProfitInfoVO businessProfitInfoVO = BusinessProfitInfoVO.builder() |
613 | .customerCode(details.get(0).getCustomerCode()) | 698 | .customerCode(details.get(0).getCustomerCode()) |
614 | .projectNoPrefix(entry.getKey()) | 699 | .projectNoPrefix(entry.getKey()) |
700 | + //设置完整的项目号,用于后面需要那这个完整的项目号传递值由前段给后端,因为没有id,所以无法直接知道是哪一条数据,所以需要具体的完整项目号。 | ||
701 | + .detailProjectNo(detailProjectNoMap.get(entry.getKey())) | ||
702 | + //返回状态。 | ||
703 | + .developmentStatus((Objects.isNull(projectBaseInfoDO) || Objects.isNull(projectBaseInfoDO.getDevelopmentStatus())) ? ProfitStatusEnum.Not_COMPLETED.getStatus() : projectBaseInfoDO.getDevelopmentStatus()) | ||
615 | .lockFields(Optional.ofNullable(prjectNo2LockRecordMap.get(entry.getKey())).orElse(ProjectBaseInfoLockFieldVO.builder() | 704 | .lockFields(Optional.ofNullable(prjectNo2LockRecordMap.get(entry.getKey())).orElse(ProjectBaseInfoLockFieldVO.builder() |
616 | .actualExchangeRate(Objects.isNull(projectBaseInfoDO) || Objects.isNull(projectBaseInfoDO.getActualExchangeRate()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name()) | 705 | .actualExchangeRate(Objects.isNull(projectBaseInfoDO) || Objects.isNull(projectBaseInfoDO.getActualExchangeRate()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name()) |
617 | .developmentCopyRmbTotalPrice(Objects.isNull(projectBaseInfoDO) || Objects.isNull(projectBaseInfoDO.getDevelopmentCopyRmbTotalPrice()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name()) | 706 | .developmentCopyRmbTotalPrice(Objects.isNull(projectBaseInfoDO) || Objects.isNull(projectBaseInfoDO.getDevelopmentCopyRmbTotalPrice()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name()) |
@@ -749,6 +838,12 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | @@ -749,6 +838,12 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | ||
749 | spainRatio = relation.get("relationValue"); | 838 | spainRatio = relation.get("relationValue"); |
750 | } | 839 | } |
751 | } | 840 | } |
841 | + //在这里进行判断,能够对上述的配置进行覆盖,如果永久已保存的配置中包含这个项目号的数据,则采用永久已保存的配置中,否则采用当前配置(对于已审核的数据,如果采用当前配置肯定会出错。)。 | ||
842 | + if(Objects.nonNull(projectBaseAfterReviewSettingDOMap.get(entry.getKey()))){ | ||
843 | + fixCostValue=projectBaseAfterReviewSettingDOMap.get(entry.getKey()).getFixedCost().toString(); | ||
844 | + ratio=projectBaseAfterReviewSettingDOMap.get(entry.getKey()).getCommissionRate().toString(); | ||
845 | + spainRatio=projectBaseAfterReviewSettingDOMap.get(entry.getKey()).getSpainCommissionRate().toString(); | ||
846 | + } | ||
752 | //固定成本 | 847 | //固定成本 |
753 | businessProfitInfoVO.setFixedCost(BigDecimal.valueOf((between + 1) * Double.parseDouble(fixCostValue)).setScale(2, RoundingMode.HALF_UP)); | 848 | businessProfitInfoVO.setFixedCost(BigDecimal.valueOf((between + 1) * Double.parseDouble(fixCostValue)).setScale(2, RoundingMode.HALF_UP)); |
754 | if (Objects.nonNull(spainRatio) | 849 | if (Objects.nonNull(spainRatio) |
@@ -812,7 +907,8 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | @@ -812,7 +907,8 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | ||
812 | } | 907 | } |
813 | //综合收益 | 908 | //综合收益 |
814 | businessProfitInfoVO.setComprehensiveProfit(Optional.ofNullable(businessProfitInfoVO.getDevelopmentProfit()).orElse(BigDecimal.ZERO) | 909 | businessProfitInfoVO.setComprehensiveProfit(Optional.ofNullable(businessProfitInfoVO.getDevelopmentProfit()).orElse(BigDecimal.ZERO) |
815 | - .add(Optional.ofNullable(businessProfitInfoVO.getExchangeRateProfit()).orElse(BigDecimal.ZERO)) | 910 | + //综合收益不需要汇率收益计算。 |
911 | +// .add(Optional.ofNullable(businessProfitInfoVO.getExchangeRateProfit()).orElse(BigDecimal.ZERO)) | ||
816 | .add(Optional.ofNullable(businessProfitInfoVO.getActualOrderRmbPrice()).orElse(BigDecimal.ZERO)).setScale(2, RoundingMode.HALF_UP)); | 912 | .add(Optional.ofNullable(businessProfitInfoVO.getActualOrderRmbPrice()).orElse(BigDecimal.ZERO)).setScale(2, RoundingMode.HALF_UP)); |
817 | return businessProfitInfoVO; | 913 | return businessProfitInfoVO; |
818 | }).collect(Collectors.toList()); | 914 | }).collect(Collectors.toList()); |
@@ -925,15 +1021,16 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | @@ -925,15 +1021,16 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | ||
925 | .orElse(BigDecimal.valueOf(0)) | 1021 | .orElse(BigDecimal.valueOf(0)) |
926 | .divide(BigDecimal.valueOf(totalPrice), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)) + "%").orElse("-")); | 1022 | .divide(BigDecimal.valueOf(totalPrice), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)) + "%").orElse("-")); |
927 | createMergedRow(sheet, cellStyle, 48, 49, 7, 9, ""); | 1023 | createMergedRow(sheet, cellStyle, 48, 49, 7, 9, ""); |
928 | - createMergedRow(sheet, cellStyle, 50, 51, 0, 4, "实际汇率"); | ||
929 | - createMergedRow(sheet, cellStyle, 50, 51, 5, 6, Optional.ofNullable(businessProfitInfoVO.getActualExchangeRate()).map(String::valueOf).orElse("-")); | 1024 | + //导出不再需要实际汇率和汇率收益 |
1025 | +// createMergedRow(sheet, cellStyle, 50, 51, 0, 4, "实际汇率"); | ||
1026 | +// createMergedRow(sheet, cellStyle, 50, 51, 5, 6, Optional.ofNullable(businessProfitInfoVO.getActualExchangeRate()).map(String::valueOf).orElse("-")); | ||
1027 | +// createMergedRow(sheet, cellStyle, 50, 51, 7, 9, ""); | ||
1028 | +// createMergedRow(sheet, cellStyle, 52, 53, 0, 4, "汇率收益"); | ||
1029 | +// createMergedRow(sheet, cellStyle, 52, 53, 5, 6, Optional.ofNullable(businessProfitInfoVO.getExchangeRateProfit()).map(price -> "¥" + price).orElse("-")); | ||
1030 | +// createMergedRow(sheet, cellStyle, 52, 53, 7, 9, ""); | ||
1031 | + createMergedRow(sheet, cellStyle, 50, 51, 0, 4, "综合收益"); | ||
1032 | + createMergedRow(sheet, cellStyle, 50, 51, 5, 6, Optional.ofNullable(businessProfitInfoVO.getComprehensiveProfit()).map(price -> "¥" + price).orElse("-")); | ||
930 | createMergedRow(sheet, cellStyle, 50, 51, 7, 9, ""); | 1033 | createMergedRow(sheet, cellStyle, 50, 51, 7, 9, ""); |
931 | - createMergedRow(sheet, cellStyle, 52, 53, 0, 4, "汇率收益"); | ||
932 | - createMergedRow(sheet, cellStyle, 52, 53, 5, 6, Optional.ofNullable(businessProfitInfoVO.getExchangeRateProfit()).map(price -> "¥" + price).orElse("-")); | ||
933 | - createMergedRow(sheet, cellStyle, 52, 53, 7, 9, ""); | ||
934 | - createMergedRow(sheet, cellStyle, 54, 55, 0, 4, "综合收益"); | ||
935 | - createMergedRow(sheet, cellStyle, 54, 55, 5, 6, Optional.ofNullable(businessProfitInfoVO.getComprehensiveProfit()).map(price -> "¥" + price).orElse("-")); | ||
936 | - createMergedRow(sheet, cellStyle, 54, 55, 7, 9, ""); | ||
937 | 1034 | ||
938 | // 设置响应头 | 1035 | // 设置响应头 |
939 | response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); | 1036 | response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); |
@@ -954,6 +1051,173 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | @@ -954,6 +1051,173 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | ||
954 | exportInnerProfitExcel(response, ProfitInfoVO); | 1051 | exportInnerProfitExcel(response, ProfitInfoVO); |
955 | } | 1052 | } |
956 | 1053 | ||
1054 | + @Override | ||
1055 | + public void exportBusinessProfitExcel(HttpServletResponse response, ProjectBaseInfoQueryVO queryVO) throws Exception { | ||
1056 | + //这里设置为100是故意设置大一点,防止导出多条数据。 | ||
1057 | + ServerResult serverResult =listBusinessProfitInfoByPage(OrderBaseInfoQueryVO.builder().page(1).pageSize(100).projectNo(queryVO.getDetailProjectNo()).build()); | ||
1058 | + Page<BusinessProfitInfoVO> page = (Page<BusinessProfitInfoVO>) serverResult.getData(); | ||
1059 | + List<BusinessProfitInfoVO> businessProfitInfoVOS = page.getRecords(); | ||
1060 | + if(CollectionUtils.isNotEmpty(businessProfitInfoVOS)){ | ||
1061 | + List<Map<String, Object>> list = buildExportExcel(businessProfitInfoVOS, queryVO); | ||
1062 | + if(CollectionUtils.isNotEmpty(list)){ | ||
1063 | + List<String> keys = new ArrayList<>(list.get(Constant.ZERO).keySet()); | ||
1064 | + ExcelHelper.opsExport(PoiWorkbookType.XLSX) | ||
1065 | + .opsSheet(list) | ||
1066 | + .opsHeader().simple().texts(keys).done() | ||
1067 | + .opsColumn().fields(keys).done() | ||
1068 | + .height(CellPosition.CELL, 750) | ||
1069 | + .done() | ||
1070 | + .export(response.getOutputStream()); | ||
1071 | + } | ||
1072 | + } | ||
1073 | + } | ||
1074 | + | ||
1075 | + @Override | ||
1076 | + public void exportInnerProfitInfoExcel(HttpServletResponse response, ProjectBaseInfoQueryVO queryVO) throws Exception { | ||
1077 | + //这里设置为100是故意设置大一点,防止导出多条数据。 | ||
1078 | + ServerResult serverResult = listInnerProfitInfoByPage(OrderBaseInfoQueryVO.builder().page(1).pageSize(100).productionDepartment(Collections.singletonList("内部")).projectNo(queryVO.getDetailProjectNo()).build()); | ||
1079 | + Page<InnerProfitInfoVO> page = (Page<InnerProfitInfoVO>) serverResult.getData(); | ||
1080 | + List<InnerProfitInfoVO> profitInfoVOS = page.getRecords(); | ||
1081 | + if(CollectionUtils.isNotEmpty(profitInfoVOS)){ | ||
1082 | + List<Map<String,Object>> list=buildInnerProfitExportExcel(profitInfoVOS, queryVO); | ||
1083 | + if(CollectionUtils.isNotEmpty(list)){ | ||
1084 | + List<String> keys = new ArrayList<>(list.get(Constant.ZERO).keySet()); | ||
1085 | + ExcelHelper.opsExport(PoiWorkbookType.XLSX) | ||
1086 | + .opsSheet(list) | ||
1087 | + .opsHeader().simple().texts(keys).done() | ||
1088 | + .opsColumn().fields(keys).done() | ||
1089 | + .height(CellPosition.CELL, 750) | ||
1090 | + .done() | ||
1091 | + .export(response.getOutputStream()); | ||
1092 | + } | ||
1093 | + } | ||
1094 | + } | ||
1095 | + | ||
1096 | + @Override | ||
1097 | + public void setProjectBaseInfoDevelopmentStatus(OrderBaseInfoVO vo) { | ||
1098 | + | ||
1099 | + //中国团队提成比例。 | ||
1100 | + String chainRatio = null; | ||
1101 | + //西班牙提成比例。 | ||
1102 | + String spainRatio = null; | ||
1103 | + //固定成本。 | ||
1104 | + String dailyCost = null; | ||
1105 | + | ||
1106 | + //去表中设置状态,然后记录数据到永久配置中。 | ||
1107 | + if(StringUtils.isBlank(vo.getProjectNo())){ | ||
1108 | + throw new BusinessException(ServerResultCode.PARAM_ERROR); | ||
1109 | + } | ||
1110 | + ProjectBaseInfoDO projectBaseInfoDO = getOne(new LambdaQueryWrapper<ProjectBaseInfoDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) | ||
1111 | + .eq(ProjectBaseInfoDO::getProjectNoPrefix, vo.getProjectNo()) | ||
1112 | + .last("limit 1")); | ||
1113 | + if(Objects.isNull(projectBaseInfoDO)){ | ||
1114 | + throw new BusinessException(ServerResultCode.EMPTY_LIST); | ||
1115 | + } | ||
1116 | + projectBaseInfoDO.setDevelopmentStatus(ProfitStatusEnum.APPROVED.getStatus()); | ||
1117 | + //把审核通过时的计算数据时的系统配置保存到永久配置中。防止后续更改系统配置后,正确的数据会被更新掉。 | ||
1118 | + //获取当前的系统配置。 | ||
1119 | + ProjectBaseAfterReviewSettingDO projectBaseAfterReviewSettingDO = projectBaseAfterReviewSettingService.getOne(new LambdaQueryWrapper<ProjectBaseAfterReviewSettingDO>() | ||
1120 | + .eq(ProjectBaseAfterReviewSettingDO::getProjectNoPrefix, vo.getProjectNo()) | ||
1121 | + .eq(ProjectBaseAfterReviewSettingDO::getType, ProjectBaseSettingTypeEnum.COMMISSION_COST.getType()) | ||
1122 | + .last("limit 1")); | ||
1123 | + SystemSettingDO systemSettingDO = systemSettingService.getOne(new LambdaQueryWrapper<SystemSettingDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) | ||
1124 | + .eq(SystemSettingDO::getSettingValue, vo.getCustomerCode()) | ||
1125 | + .eq(SystemSettingDO::getRelationCode, "costSettingItem")); | ||
1126 | + if(Objects.isNull(systemSettingDO) || StringUtils.isBlank(systemSettingDO.getRelationValue())){ | ||
1127 | + throw new BusinessException("该项目编号的提成配置未配置,请先配置提成配置。"); | ||
1128 | + } | ||
1129 | + //json反序列化。 | ||
1130 | + List<CostSettingItemVO> costSettingItemVOList = JSONObject.parseObject(systemSettingDO.getRelationValue(), new TypeReference<List<CostSettingItemVO>>() {}); | ||
1131 | + if( CollectionUtils.isNotEmpty(costSettingItemVOList)){ | ||
1132 | + for (CostSettingItemVO relation : costSettingItemVOList) { | ||
1133 | + if ("ratio".equals(relation.getRelationCode())) { | ||
1134 | + chainRatio = relation.getRelationValue(); | ||
1135 | + }if ("spainRatio".equals(relation.getRelationCode())) { | ||
1136 | + spainRatio = relation.getRelationValue(); | ||
1137 | + }if("fixCost".equals(relation.getRelationCode())){ | ||
1138 | + dailyCost=relation.getRelationValue(); | ||
1139 | + } | ||
1140 | + } | ||
1141 | + } | ||
1142 | + if(Objects.isNull(projectBaseAfterReviewSettingDO)){ | ||
1143 | + projectBaseAfterReviewSettingDO = projectBaseAfterReviewSettingDO.builder().projectNoPrefix(vo.getProjectNo()) | ||
1144 | + .type(ProjectBaseSettingTypeEnum.COMMISSION_COST.getType()) | ||
1145 | + .fixedCost(new BigDecimal(dailyCost)) | ||
1146 | + .commissionRate(new BigDecimal(chainRatio)) | ||
1147 | + .spainCommissionRate(new BigDecimal(spainRatio)).build(); | ||
1148 | + }else{ | ||
1149 | + projectBaseAfterReviewSettingDO.setProjectNoPrefix(vo.getProjectNo()); | ||
1150 | + projectBaseAfterReviewSettingDO.setType(ProjectBaseSettingTypeEnum.COMMISSION_COST.getType()); | ||
1151 | + projectBaseAfterReviewSettingDO.setFixedCost(new BigDecimal(dailyCost)); | ||
1152 | + projectBaseAfterReviewSettingDO.setCommissionRate(new BigDecimal(chainRatio)); | ||
1153 | + projectBaseAfterReviewSettingDO.setSpainCommissionRate(new BigDecimal(spainRatio)); | ||
1154 | + } | ||
1155 | + ProjectBaseAfterReviewSettingDO finalProjectBaseAfterReviewSettingDO = projectBaseAfterReviewSettingDO; | ||
1156 | + transactionHelper.run(() -> { | ||
1157 | + projectBaseAfterReviewSettingService.saveOrUpdate(finalProjectBaseAfterReviewSettingDO); | ||
1158 | + updateById(projectBaseInfoDO); | ||
1159 | + }); | ||
1160 | + } | ||
1161 | + | ||
1162 | + @Override | ||
1163 | + public void setInnerProductionStatus(OrderBaseInfoVO vo) { | ||
1164 | + String dailyCost = null; | ||
1165 | + String price = null; | ||
1166 | + //去表中设置状态,然后记录数据到永久配置中。 | ||
1167 | + if(StringUtils.isBlank(vo.getProjectNo())){ | ||
1168 | + throw new BusinessException(ServerResultCode.PARAM_ERROR); | ||
1169 | + } | ||
1170 | + ProjectBaseInfoDO projectBaseInfoDO = getOne(new LambdaQueryWrapper<ProjectBaseInfoDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) | ||
1171 | + .eq(ProjectBaseInfoDO::getProjectNoPrefix, vo.getProjectNo()) | ||
1172 | + .last("limit 1")); | ||
1173 | + if(Objects.isNull(projectBaseInfoDO)){ | ||
1174 | + throw new BusinessException(ServerResultCode.EMPTY_LIST); | ||
1175 | + } | ||
1176 | + projectBaseInfoDO.setInnerProductionStatus(ProfitStatusEnum.APPROVED.getStatus()); | ||
1177 | + //把审核通过时的计算数据时的系统配置保存到永久配置中。防止后续更改系统配置后,正确的数据会被更新掉。 | ||
1178 | + //获取当前的系统配置。 | ||
1179 | + ProjectBaseAfterReviewSettingDO projectBaseAfterReviewSettingDO = projectBaseAfterReviewSettingService.getOne(new LambdaQueryWrapper<ProjectBaseAfterReviewSettingDO>() | ||
1180 | + .eq(ProjectBaseAfterReviewSettingDO::getProjectNoPrefix, vo.getProjectNo()) | ||
1181 | + .eq(ProjectBaseAfterReviewSettingDO::getType, ProjectBaseSettingTypeEnum.FIXED_COST_OF_PRODUCTION_DEPARTMENT.getType()) | ||
1182 | + .last("limit 1")); | ||
1183 | + SystemSettingDO systemSettingDO = systemSettingService.getOne(new LambdaQueryWrapper<SystemSettingDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) | ||
1184 | + .eq(SystemSettingDO::getSettingValue, vo.getCustomerCode()) | ||
1185 | + .eq(SystemSettingDO::getRelationCode, "ProduceSettingItem")); | ||
1186 | + if(Objects.isNull(systemSettingDO) || StringUtils.isBlank(systemSettingDO.getRelationValue())){ | ||
1187 | + throw new BusinessException("该项目编号的提成配置未配置,请先配置提成配置。"); | ||
1188 | + } | ||
1189 | + //json反序列化。 | ||
1190 | + List<CostSettingItemVO> costSettingItemVOList = JSONObject.parseObject(systemSettingDO.getRelationValue(), new TypeReference<List<CostSettingItemVO>>() {}); | ||
1191 | + if( CollectionUtils.isNotEmpty(costSettingItemVOList)){ | ||
1192 | + for (CostSettingItemVO relation : costSettingItemVOList) { | ||
1193 | + //这里是系统配置中的得到的,应该是从系统配置中的生产科中得到。 固定成本。 | ||
1194 | + if("fixCost".equals(relation.getRelationCode())){ | ||
1195 | + dailyCost=relation.getRelationValue(); | ||
1196 | + } | ||
1197 | + //生产提成单价 | ||
1198 | + if("ratio".equals(relation.getRelationCode())){ | ||
1199 | + price=relation.getRelationValue(); | ||
1200 | + } | ||
1201 | + } | ||
1202 | + } | ||
1203 | + if(Objects.isNull(projectBaseAfterReviewSettingDO)){ | ||
1204 | + projectBaseAfterReviewSettingDO= projectBaseAfterReviewSettingDO.builder().projectNoPrefix(vo.getProjectNo()) | ||
1205 | + .type(ProjectBaseSettingTypeEnum.FIXED_COST_OF_PRODUCTION_DEPARTMENT.getType()) | ||
1206 | + .fixedCost(new BigDecimal(dailyCost)) | ||
1207 | + .commissionUnitPrice(new BigDecimal(price)).build(); | ||
1208 | + }else{ | ||
1209 | + projectBaseAfterReviewSettingDO.setProjectNoPrefix(vo.getProjectNo()); | ||
1210 | + projectBaseAfterReviewSettingDO.setType(ProjectBaseSettingTypeEnum.FIXED_COST_OF_PRODUCTION_DEPARTMENT.getType()); | ||
1211 | + projectBaseAfterReviewSettingDO.setFixedCost(new BigDecimal(dailyCost)); | ||
1212 | + projectBaseAfterReviewSettingDO.setCommissionUnitPrice(new BigDecimal(price)); | ||
1213 | + } | ||
1214 | + ProjectBaseAfterReviewSettingDO finalProjectBaseAfterReviewSettingDO = projectBaseAfterReviewSettingDO; | ||
1215 | + transactionHelper.run(() -> { | ||
1216 | + projectBaseAfterReviewSettingService.saveOrUpdate(finalProjectBaseAfterReviewSettingDO); | ||
1217 | + updateById(projectBaseInfoDO); | ||
1218 | + }); | ||
1219 | + } | ||
1220 | + | ||
957 | public void exportInnerProfitExcel(HttpServletResponse response, InnerProfitInfoVO vo) throws Exception { | 1221 | public void exportInnerProfitExcel(HttpServletResponse response, InnerProfitInfoVO vo) throws Exception { |
958 | DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); | 1222 | DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
959 | XSSFWorkbook workbook = new XSSFWorkbook(); | 1223 | XSSFWorkbook workbook = new XSSFWorkbook(); |
@@ -1006,12 +1270,12 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | @@ -1006,12 +1270,12 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | ||
1006 | createMergedRow(sheet, cellStyle, 10, 11, 8, 9, Optional.ofNullable(vo.getOrderCount()).map(String::valueOf).orElse("-")); | 1270 | createMergedRow(sheet, cellStyle, 10, 11, 8, 9, Optional.ofNullable(vo.getOrderCount()).map(String::valueOf).orElse("-")); |
1007 | 1271 | ||
1008 | // 第五部分:预算与实际 | 1272 | // 第五部分:预算与实际 |
1009 | - createMergedRow(sheet, cellStyle, 12, 13, 0, 3, "生产科预算金额"); | 1273 | + createMergedRow(sheet, cellStyle, 12, 13, 0, 3, "生产科预算总金额"); |
1010 | createMergedRow(sheet, cellStyle, 12, 13, 4, 5, "¥" + Optional.ofNullable(vo.getProductionDepartmentPredictPrice()).map(String::valueOf).orElse("-")); | 1274 | createMergedRow(sheet, cellStyle, 12, 13, 4, 5, "¥" + Optional.ofNullable(vo.getProductionDepartmentPredictPrice()).map(String::valueOf).orElse("-")); |
1011 | createMergedRow(sheet, cellStyle, 12, 13, 6, 7, "预算占比"); | 1275 | createMergedRow(sheet, cellStyle, 12, 13, 6, 7, "预算占比"); |
1012 | createMergedRow(sheet, cellStyle, 12, 13, 8, 9, "预算占比与实际占比差"); | 1276 | createMergedRow(sheet, cellStyle, 12, 13, 8, 9, "预算占比与实际占比差"); |
1013 | 1277 | ||
1014 | - createMergedRow(sheet, cellStyle, 14, 15, 0, 3, "实际发生费用"); | 1278 | + createMergedRow(sheet, cellStyle, 14, 15, 0, 3, "生产科实际花费总金额"); |
1015 | createMergedRow(sheet, cellStyle, 14, 15, 4, 5, "¥" + Optional.ofNullable(vo.getProductionActualPrice()).orElse(BigDecimal.ZERO)); | 1279 | createMergedRow(sheet, cellStyle, 14, 15, 4, 5, "¥" + Optional.ofNullable(vo.getProductionActualPrice()).orElse(BigDecimal.ZERO)); |
1016 | createMergedRow(sheet, cellStyle, 14, 15, 6, 7, Optional.ofNullable(vo.getPredictRatio()).map(r -> r.multiply(BigDecimal.valueOf(100)) + "%").orElse("-")); | 1280 | createMergedRow(sheet, cellStyle, 14, 15, 6, 7, Optional.ofNullable(vo.getPredictRatio()).map(r -> r.multiply(BigDecimal.valueOf(100)) + "%").orElse("-")); |
1017 | createMergedRow(sheet, cellStyle, 14, 15, 8, 9, Optional.ofNullable(vo.getPredictAndActualRatio()).map(r -> r.multiply(BigDecimal.valueOf(100)) + "%").orElse("-")); | 1281 | createMergedRow(sheet, cellStyle, 14, 15, 8, 9, Optional.ofNullable(vo.getPredictAndActualRatio()).map(r -> r.multiply(BigDecimal.valueOf(100)) + "%").orElse("-")); |
@@ -1069,5 +1333,121 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | @@ -1069,5 +1333,121 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe | ||
1069 | } | 1333 | } |
1070 | sheet.addMergedRegion(new CellRangeAddress(startRow, endRow, startCol, endCol)); | 1334 | sheet.addMergedRegion(new CellRangeAddress(startRow, endRow, startCol, endCol)); |
1071 | } | 1335 | } |
1336 | + private ProjectBaseDevelopOptLogDO buildProjectOptLogDo(String projectNoPrefix, Long userId , Integer type,String optType, String field){ | ||
1337 | + return ProjectBaseDevelopOptLogDO.builder() | ||
1338 | + .projectNoPrefix(projectNoPrefix) | ||
1339 | + .userId(userId) | ||
1340 | + .type(type) | ||
1341 | + .optType(optType) | ||
1342 | + .fields(field) | ||
1343 | + .build(); | ||
1344 | + } | ||
1345 | + private ProjectBaseInfoVO buildProjectBaseInfoVO(ProjectBaseInfoVO vo,Long projectBaseInfoId){ | ||
1346 | + ProjectBaseInfoVO projectBaseInfoVO = new ProjectBaseInfoVO(); | ||
1347 | + BeanUtils.copyProperties(vo, projectBaseInfoVO, "id"); | ||
1348 | + projectBaseInfoVO.setId(projectBaseInfoId); | ||
1349 | + return projectBaseInfoVO; | ||
1350 | + } | ||
1351 | +// private ProjectBaseInfoLockFieldVO buildProjectBaseInfoLockFieldVO(ProjectBaseInfoLockFieldVO vo){ | ||
1352 | +// ProjectBaseInfoLockFieldVO projectBaseInfoLockFieldVO = new ProjectBaseInfoLockFieldVO(); | ||
1353 | +// if(OrderLockFieldEnum.UN_LOCKED.equals(vo.getActualExchangeRate())){ | ||
1354 | +// projectBaseInfoLockFieldVO.setActualExchangeRate(OrderLockFieldEnum.UN_LOCKED.getStatus()); | ||
1355 | +// } | ||
1356 | +// if(OrderLockFieldEnum.UN_LOCKED.equals(vo.getDevelopmentCopyRmbTotalPrice())){ | ||
1357 | +// projectBaseInfoLockFieldVO.setDevelopmentCopyRmbTotalPrice(OrderLockFieldEnum.UN_LOCKED.getStatus()); | ||
1358 | +// } | ||
1359 | +// if(OrderLockFieldEnum.UN_LOCKED.equals(vo.getPaidRmbCommission())){ | ||
1360 | +// projectBaseInfoLockFieldVO.setPaidRmbCommission(OrderLockFieldEnum.UN_LOCKED.getStatus()); | ||
1361 | +// } | ||
1362 | +// if(OrderLockFieldEnum.UN_LOCKED.equals(vo.getProjectEndTime())){ | ||
1363 | +// projectBaseInfoLockFieldVO.setProjectEndTime(OrderLockFieldEnum.UN_LOCKED.getStatus()); | ||
1364 | +// } | ||
1365 | +// if(OrderLockFieldEnum.UN_LOCKED.equals(vo.getProjectStartTime())){ | ||
1366 | +// projectBaseInfoLockFieldVO.setProjectStartTime(OrderLockFieldEnum.UN_LOCKED.getStatus()); | ||
1367 | +// } | ||
1368 | +// if(OrderLockFieldEnum.UN_LOCKED.equals(vo.getSpainPaidRmbCommission())){ | ||
1369 | +// projectBaseInfoLockFieldVO.setSpainPaidRmbCommission(OrderLockFieldEnum.UN_LOCKED.getStatus()); | ||
1370 | +// } | ||
1371 | +// return projectBaseInfoLockFieldVO; | ||
1372 | +// } | ||
1373 | + private List<Map<String,Object>> buildExportExcel(List<BusinessProfitInfoVO> businessProfitInfoVOList,ProjectBaseInfoQueryVO queryVO){ | ||
1374 | + List<Map<String,Object>> list = new ArrayList<>(); | ||
1375 | + for( BusinessProfitInfoVO vo:businessProfitInfoVOList){ | ||
1376 | + Map<String, Object> hashMap = new LinkedHashMap<>(); | ||
1377 | + hashMap.put("客户编码",Objects.nonNull(vo.getCustomerCode()) ? vo.getCustomerCode() : ""); | ||
1378 | + hashMap.put("项目号",Objects.nonNull(vo.getProjectNoPrefix()) ? vo.getProjectNoPrefix() : ""); | ||
1379 | + hashMap.put("客户总金额¥",Objects.nonNull(vo.getCustomerRmbTotalPrice()) ? String.format("%.2f",vo.getCustomerRmbTotalPrice()) : ""); | ||
1380 | + hashMap.put("客户总金额$",Objects.nonNull(vo.getCustomerTotalPrice()) ? String.format("%.2f",vo.getCustomerTotalPrice()) : ""); | ||
1381 | + hashMap.put("生产总价合计¥",Objects.nonNull(vo.getProductionDepartmentTotalPrice()) ? String.format("%.2f",vo.getProductionDepartmentTotalPrice()) : ""); | ||
1382 | + hashMap.put("包装费用合计¥",Objects.nonNull(vo.getPacketRmbTotalPrice()) ? String.format("%.2f",vo.getPacketRmbTotalPrice()) : ""); | ||
1383 | + hashMap.put("包装费用合计$",Objects.nonNull(vo.getPacketTotalPrice()) ? String.format("%.2f",vo.getPacketTotalPrice()) : ""); | ||
1384 | + hashMap.put("研发复制合计¥",Objects.nonNull(vo.getDevelopmentCopyRmbTotalPrice()) ? vo.getDevelopmentCopyRmbTotalPrice().setScale(2, RoundingMode.HALF_UP).toPlainString() : ""); | ||
1385 | + hashMap.put("固定成本¥",Objects.nonNull(vo.getFixedCost()) ? vo.getFixedCost().setScale(2, RoundingMode.HALF_UP).toPlainString() : ""); | ||
1386 | + hashMap.put("西班牙提成¥",Objects.nonNull(vo.getSpainRmbCommission()) ? vo.getSpainRmbCommission().setScale(2, RoundingMode.HALF_UP).toPlainString() : ""); | ||
1387 | + hashMap.put("西班牙已发提成¥",Objects.nonNull(vo.getSpainPaidRmbCommission()) ? vo.getSpainPaidRmbCommission().setScale(2, RoundingMode.HALF_UP).toPlainString() : ""); | ||
1388 | + hashMap.put("西班牙未发提成¥",Objects.nonNull(vo.getSpainUnpaidRmbCommission()) ? vo.getSpainUnpaidRmbCommission().setScale(2, RoundingMode.HALF_UP).toPlainString() : ""); | ||
1389 | + hashMap.put("中国团队提成¥",Objects.nonNull(vo.getRmbCommission()) ? vo.getRmbCommission().setScale(2, RoundingMode.HALF_UP).toPlainString() : ""); | ||
1390 | + hashMap.put("中国已发提成¥",Objects.nonNull(vo.getPaidRmbCommission()) ? vo.getPaidRmbCommission().setScale(2, RoundingMode.HALF_UP).toPlainString() : ""); | ||
1391 | + hashMap.put("中国未发提成¥",Objects.nonNull(vo.getUnpaidRmbCommission()) ? vo.getUnpaidRmbCommission().setScale(2, RoundingMode.HALF_UP).toPlainString() : ""); | ||
1392 | + hashMap.put("支出合计¥",Objects.nonNull(vo.getRmbTotalExpense()) ? vo.getRmbTotalExpense().setScale(2, RoundingMode.HALF_UP).toPlainString() : ""); | ||
1393 | + hashMap.put("毛利润¥",Objects.nonNull(vo.getProfit()) ? vo.getProfit().setScale(2, RoundingMode.HALF_UP).toPlainString(): ""); | ||
1394 | + hashMap.put("毛利率", | ||
1395 | + Objects.nonNull(vo.getProfitRate()) | ||
1396 | + ? vo.getProfitRate().multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toPlainString() + "%" | ||
1397 | + : "" | ||
1398 | + ); | ||
1399 | + hashMap.put("研发贸易净利润¥",Objects.nonNull(vo.getDevelopmentProfit()) ? vo.getDevelopmentProfit().setScale(2, RoundingMode.HALF_UP).toPlainString() : ""); | ||
1400 | + hashMap.put("净利润率", | ||
1401 | + Objects.nonNull(vo.getDevelopmentProfitRate()) | ||
1402 | + ? vo.getDevelopmentProfitRate().multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP) + "%" | ||
1403 | + : "" | ||
1404 | + ); | ||
1405 | + hashMap.put("包装费用合计¥",Objects.nonNull(vo.getPacketRmbTotalPrice()) ? String.format("%.2f",vo.getPacketRmbTotalPrice()) : ""); | ||
1406 | + hashMap.put("包装费用实际金额¥",Objects.nonNull(vo.getPacketActualRmbPrice()) ? vo.getPacketActualRmbPrice().setScale(2, RoundingMode.HALF_UP).toPlainString() : ""); | ||
1407 | + hashMap.put("订单总数量",Objects.nonNull(vo.getOrderCount()) ? vo.getOrderCount() : ""); | ||
1408 | + hashMap.put("实际跟单单价¥",Objects.nonNull(vo.getActualOrderRmbPrice()) ? vo.getActualOrderRmbPrice().setScale(2, RoundingMode.HALF_UP).toPlainString() : ""); | ||
1409 | + hashMap.put("实际跟单单价$",Objects.nonNull(vo.getActualOrderPrice()) ? vo.getActualOrderPrice().setScale(2, RoundingMode.HALF_UP).toPlainString() : ""); | ||
1410 | + hashMap.put("包装费用收益¥",Objects.nonNull(vo.getPacketProfitRmbPrice()) ? vo.getPacketProfitRmbPrice().setScale(2, RoundingMode.HALF_UP).toPlainString() : ""); | ||
1411 | + hashMap.put("综合收益¥",Objects.nonNull(vo.getComprehensiveProfit()) ? vo.getComprehensiveProfit().setScale(2, RoundingMode.HALF_UP).toPlainString() : ""); | ||
1412 | +// if(StringUtils.isNotBlank(queryVO.getProjectExportSelect().getSpainPaidRmbCommission()) && | ||
1413 | +// OrderLockFieldEnum.SELECTED.name().equals(queryVO.getProjectExportSelect().getSpainPaidRmbCommission())){ | ||
1414 | +// } | ||
1415 | + list.add(hashMap); | ||
1416 | + } | ||
1417 | + return list; | ||
1418 | + } | ||
1072 | 1419 | ||
1420 | + private List<Map<String,Object>> buildInnerProfitExportExcel(List<InnerProfitInfoVO> innerProfitInfoVOList, ProjectBaseInfoQueryVO queryVO) { | ||
1421 | + List<Map<String,Object>> list = new ArrayList<>(); | ||
1422 | + for (InnerProfitInfoVO vo:innerProfitInfoVOList){ | ||
1423 | + Map<String, Object> map = new LinkedHashMap<>(); | ||
1424 | + map.put("客户编码",Objects.nonNull(vo.getCustomerCode()) ? vo.getCustomerCode() : ""); | ||
1425 | + map.put("项目号",Objects.nonNull(vo.getProjectNoPrefix()) ? vo.getProjectNoPrefix() : ""); | ||
1426 | + map.put("生产科",Objects.nonNull(vo.getProductionDepartment()) ? vo.getProductionDepartment() : ""); | ||
1427 | + map.put("数量",Objects.nonNull(vo.getOrderCount()) ? vo.getOrderCount() : ""); | ||
1428 | + map.put("生产科总价¥",Objects.nonNull(vo.getProductionDepartmentTotalPrice()) ? String.format("%.2f",vo.getProductionDepartmentTotalPrice()) : ""); | ||
1429 | + map.put("生产科预算金额¥",Objects.nonNull(vo.getProductionDepartmentPredictPrice()) ? vo.getProductionDepartmentPredictPrice().setScale(2, RoundingMode.HALF_UP).toPlainString() : ""); | ||
1430 | + map.put("实际发生费用¥",Objects.nonNull(vo.getProductionActualPrice()) ? vo.getProductionActualPrice().setScale(2, RoundingMode.HALF_UP).toPlainString() : ""); | ||
1431 | + map.put("预算占比",Objects.nonNull(vo.getPredictRatio()) ? vo.getPredictRatio().setScale(2, RoundingMode.HALF_UP).toPlainString() : ""); | ||
1432 | + map.put("预算占比与实际占比差", | ||
1433 | + Objects.nonNull(vo.getPredictAndActualRatio()) | ||
1434 | + ? vo.getPredictAndActualRatio().multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP) + "%" | ||
1435 | + : "" | ||
1436 | + ); | ||
1437 | + map.put("事前毛利润¥",Objects.nonNull(vo.getBeforeGrossProfit()) ? vo.getBeforeGrossProfit().setScale(2, RoundingMode.HALF_UP).toPlainString() : ""); | ||
1438 | + map.put("事前毛利润率",Objects.nonNull(vo.getBeforeGrossProfitRate()) ? vo.getBeforeGrossProfitRate().multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP) + "%" : ""); | ||
1439 | + map.put("事后毛利润¥",Objects.nonNull(vo.getGrossProfit()) ? vo.getGrossProfit().setScale(2, RoundingMode.HALF_UP).toPlainString() : ""); | ||
1440 | + map.put("事后毛利润率",Objects.nonNull(vo.getGrossProfitRate()) ? vo.getGrossProfitRate().multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP) + "%" : ""); | ||
1441 | + map.put("内部生产固定成本¥",Objects.nonNull(vo.getInnerProductionFixedCost()) ? vo.getInnerProductionFixedCost().setScale(2, RoundingMode.HALF_UP) : ""); | ||
1442 | + map.put("内部生产提成¥",Objects.nonNull(vo.getInnerProductionCommission()) ? vo.getInnerProductionCommission().setScale(2, RoundingMode.HALF_UP) : ""); | ||
1443 | + map.put("内部生产净利润¥",Objects.nonNull(vo.getInnerProductionProfit()) ? vo.getInnerProductionProfit().setScale(2, RoundingMode.HALF_UP) : ""); | ||
1444 | + map.put("内部生产净利润率",Objects.nonNull(vo.getInnerProductionProfitRate()) ? vo.getInnerProductionProfitRate().multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP) + "%" : ""); | ||
1445 | + /* if(StringUtils.isNotEmpty(queryVO.getInnerProfitInfoExportSelect().getProductionDepartmentTotalPrice()) && | ||
1446 | + OrderLockFieldEnum.SELECTED.name().equals(queryVO.getInnerProfitInfoExportSelect().getProductionDepartmentTotalPrice())){ | ||
1447 | + | ||
1448 | + }*/ | ||
1449 | + list.add(map); | ||
1450 | + } | ||
1451 | + return list; | ||
1452 | + } | ||
1073 | } | 1453 | } |
src/main/resources/application-pre-prod.yml
@@ -57,7 +57,7 @@ spring: | @@ -57,7 +57,7 @@ spring: | ||
57 | testWhileIdle: true | 57 | testWhileIdle: true |
58 | testOnBorrow: true | 58 | testOnBorrow: true |
59 | testOnReturn: true | 59 | testOnReturn: true |
60 | - password: Erp@test123456 | 60 | + password: eJ8(bD6]wN6=gI5= |
61 | time-between-eviction-runs-millis: 1000 | 61 | time-between-eviction-runs-millis: 1000 |
62 | url: jdbc:mysql://47.104.8.35:3307/order-erp-pre-prod?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=false&autoReconnect=true&failOverReadOnly=false&maxReconnects=10&allowMultiQueries=true&useAffectedRows=true&autoReconnectForPools=true | 62 | url: jdbc:mysql://47.104.8.35:3307/order-erp-pre-prod?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=false&autoReconnect=true&failOverReadOnly=false&maxReconnects=10&allowMultiQueries=true&useAffectedRows=true&autoReconnectForPools=true |
63 | username: root | 63 | username: root |
src/main/resources/application-test.yml
@@ -63,7 +63,7 @@ spring: | @@ -63,7 +63,7 @@ spring: | ||
63 | username: root | 63 | username: root |
64 | redis: | 64 | redis: |
65 | database: 0 | 65 | database: 0 |
66 | - host: 39.108.227.113 | 66 | + host: 47.104.8.35 |
67 | lettuce: | 67 | lettuce: |
68 | pool: | 68 | pool: |
69 | max-active: 2000 | 69 | max-active: 2000 |
@@ -72,7 +72,7 @@ spring: | @@ -72,7 +72,7 @@ spring: | ||
72 | min-idle: 3 | 72 | min-idle: 3 |
73 | time-between-eviction-runs: 100 | 73 | time-between-eviction-runs: 100 |
74 | password: '' | 74 | password: '' |
75 | - port: 6379 | 75 | + port: 6380 |
76 | timeout: 2000 | 76 | timeout: 2000 |
77 | mail: | 77 | mail: |
78 | # 配置 SMTP 服务器地址 | 78 | # 配置 SMTP 服务器地址 |