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 | 40 | queryVO.setProductionDepartment(Collections.singletonList("内部")); |
41 | 41 | return orderCostInfoService.listInnerProfitDetailByPage(queryVO); |
42 | 42 | } |
43 | + | |
43 | 44 | @PostMapping("/BusinessProfitDetail/listByPage") |
44 | 45 | @ApiOperation("包装费用明细表") |
45 | 46 | public ServerResult<Page<BusinessProfitDetailVO>> listBusinessProfitDetailsByPage(@RequestBody @Validated OrderBaseInfoQueryVO queryVO) { |
46 | 47 | return orderCostInfoService.listBusinessProfitDetailByPage(queryVO); |
47 | 48 | } |
49 | + | |
48 | 50 | @PostMapping("/edit") |
49 | 51 | @ApiOperation("编辑") |
50 | - public ServerResult edit(@RequestBody OrderCostInfoVO vo) throws Exception { | |
52 | + public ServerResult edit(@RequestBody OrderCostInfoVO vo) throws Exception { | |
51 | 53 | return orderCostInfoService.edit(vo); |
52 | 54 | } |
53 | 55 | |
54 | 56 | @PostMapping("/applyEditFileds") |
55 | 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 | 70 | } |
71 | 71 | |
72 | 72 | @PostMapping("/businessProfit/export") |
73 | - @ApiOperation("业务研发净利润分析表导出") | |
73 | + @ApiOperation("业务研发净利润分析表单个导出") | |
74 | 74 | public void exportBusinessProfitInfo(HttpServletResponse response, @RequestParam("projectNoPrefix") String projectNoPrefix) throws Exception { |
75 | 75 | projectBaseInfoService.exportBusinessProfitInfo(response, projectNoPrefix); |
76 | 76 | } |
... | ... | @@ -81,4 +81,29 @@ public class ProjectController { |
81 | 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 | 24 | CHECK_BILL_APPLY(40, "应付账单申请"), |
25 | 25 | |
26 | 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 | 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 | 29 | |
30 | 30 | ORDER_INSPECT_EDIT_APPLY(60, "质检信息编辑"), |
31 | 31 | |
32 | + //后续添加部分(净利润分析板块) | |
33 | + PROJECT_DEVELOPMENT_PROFIT_EDIT(70,"业务研发净利润编辑"), | |
34 | + PROJECT_DEVELOPMENT_PROFIT_ADD(75,"业务研发净利润创建"), | |
35 | +// PROJECT_DEVELOPMENT_FIELD_EDIT_APPLY(77,"业务研发净利润字段编辑申请"), | |
36 | + PROJECT_COST_EDIT(80,"包装费用明细编辑"), | |
37 | + PROJECT_COST_ADD(85,"包装费用明细创建"), | |
38 | +// PROJECT_COST_FIELD_EDIT_APPLY(87,"包装费用明细表字段编辑申请"), | |
39 | + PROJECT_INNER_PRODUCE_EDIT(90,"内部生产净利润编辑"), | |
40 | + PROJECT_INNER_PRODUCE_ADD(95,"内部生产净利润创建"), | |
41 | +// PROJECT_INNER_PRODUCE_FIELD_EDIT_APPLY(97,"内部生产净利润字段编辑申请"), | |
42 | + PROJECT_INNER_PRODUCE_PROFIT_EDIT(100,"内部生产明细表编辑"), | |
43 | + PROJECT_INNER_PRODUCE_PROFIT_ADD(105,"内部生产明细表创建"), | |
44 | +// PROJECT_INNER_PRODUCE_PROFIT_FIELD_EDIT_APPLY(107,"内部研发净明细表字段编辑申请"), | |
45 | + | |
46 | + | |
32 | 47 | ; |
33 | 48 | private Integer type; |
34 | 49 | ... | ... |
src/main/java/com/order/erp/domain/ProfitStatusEnum.java
0 → 100644
1 | +package com.order.erp.domain; | |
2 | + | |
3 | +import lombok.AllArgsConstructor; | |
4 | +import lombok.Getter; | |
5 | +/** | |
6 | + * 净利润板块的各个表的状态字段。 | |
7 | + * */ | |
8 | +@Getter | |
9 | +@AllArgsConstructor | |
10 | +public enum ProfitStatusEnum { | |
11 | + Not_COMPLETED(-1, "未完成"), | |
12 | + PENDING_APPROVAL(0, "待审核"), | |
13 | + APPROVED(1, "已审核"), | |
14 | + ; | |
15 | + private Integer status; | |
16 | + private String desc; | |
17 | +} | ... | ... |
src/main/java/com/order/erp/domain/ProjectApplyTypeEnum.java
... | ... | @@ -22,4 +22,12 @@ public enum ProjectApplyTypeEnum { |
22 | 22 | private Integer type; |
23 | 23 | |
24 | 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 | 43 | private BigDecimal productionActualPrice; |
44 | 44 | |
45 | 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 | 33 | |
34 | 34 | @TableId(value = "id", type = IdType.AUTO) |
35 | 35 | private Long id; |
36 | - | |
36 | + /** | |
37 | + * 项目号的前缀 例如:A05-2303-2391,projectNoPrefix就是A05-2303。 | |
38 | + * */ | |
37 | 39 | private String projectNoPrefix; |
38 | - | |
40 | + /** | |
41 | + * 研发复制费合计¥ | |
42 | + * */ | |
39 | 43 | private BigDecimal developmentCopyRmbTotalPrice; |
40 | - | |
44 | + /** | |
45 | + * 项目开始时间 | |
46 | + * */ | |
41 | 47 | private LocalDateTime projectStartTime; |
42 | - | |
48 | + /** | |
49 | + * 项目结束时间 | |
50 | + * */ | |
43 | 51 | private LocalDateTime projectEndTime; |
44 | 52 | |
45 | 53 | private LocalDateTime projectInnerProfitInfoStartTime; |
46 | 54 | |
47 | 55 | private LocalDateTime projectInnerProfitInfoEndTime; |
48 | 56 | |
49 | - | |
57 | + /** | |
58 | + * 西班牙已发提成 | |
59 | + * */ | |
50 | 60 | private BigDecimal spainPaidRmbCommission; |
51 | - | |
61 | + /** | |
62 | + * 中国团队已发提成 | |
63 | + * */ | |
52 | 64 | private BigDecimal paidRmbCommission; |
53 | - | |
65 | + /** | |
66 | + * 实际汇率 | |
67 | + * */ | |
54 | 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 | 111 | */ |
112 | 112 | @ApiModelProperty(value = "包装费用利润率") |
113 | 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 | 7 | import java.io.Serializable; |
8 | 8 | import java.math.BigDecimal; |
9 | 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 | 37 | @ApiModelProperty(value = "项目号") |
36 | 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 | 238 | @ApiModelProperty(value = "综合收益") |
234 | 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 | 64 | @ApiModelProperty(value = "生产科预算金额") |
65 | 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 | 126 | */ |
121 | 127 | @ApiModelProperty(value = "事后毛利润") |
122 | 128 | private BigDecimal grossProfitRate; |
129 | + /** | |
130 | + * 内部生产明细表状态 | |
131 | + */ | |
132 | + @ApiModelProperty(value = "内部生产明细表状态") | |
133 | + private Integer innerProduceStatus ; | |
123 | 134 | |
124 | 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 | 140 | @ApiModelProperty(value = "项目结束时间") |
141 | 141 | private LocalDateTime produceEndTime; |
142 | 142 | |
143 | + /** | |
144 | + * 内部生产净利润分析表状态 | |
145 | + */ | |
146 | + @ApiModelProperty(value = "内部生产净利润分析表状态") | |
147 | + private Integer innerProductionStatus; | |
148 | + | |
143 | 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 | 42 | private BigDecimal productionActualPrice; |
43 | 43 | |
44 | 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 | 40 | private String productionActualPrice; |
41 | 41 | |
42 | 42 | private String packetActualRmbTotalPrice; |
43 | + /** | |
44 | + * 生产科预算单价。 | |
45 | + * */ | |
46 | + private String productionDepartmentPredictUnitPrice; | |
43 | 47 | |
44 | 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 | 48 | @ApiModelProperty(value = "审批用户id") |
49 | 49 | private Long auditUserId; |
50 | 50 | |
51 | + @ApiModelProperty(value = "申请类型") | |
52 | + private String type; | |
53 | + | |
51 | 54 | @ApiModelProperty(value = "锁定字段 json字符串") |
52 | 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
1 | +package com.order.erp.mapper.order; | |
2 | + | |
3 | +import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |
4 | +import com.order.erp.domain.dto.order.ProjectBaseAfterReviewSettingDO; | |
5 | + | |
6 | +public interface ProjectBaseAfterReviewSettingMapper extends BaseMapper<ProjectBaseAfterReviewSettingDO> { | |
7 | +} | ... | ... |
src/main/java/com/order/erp/mapper/order/ProjectBaseDevelopOptLogMapper.java
0 → 100644
src/main/java/com/order/erp/service/order/IOrderCostInfoService.java
... | ... | @@ -6,6 +6,10 @@ import com.baomidou.mybatisplus.extension.service.IService; |
6 | 6 | import com.order.erp.domain.vo.order.OrderBaseInfoQueryVO; |
7 | 7 | import com.order.erp.domain.vo.order.OrderCostInfoVO; |
8 | 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 | 15 | * <p> |
... | ... | @@ -24,4 +28,8 @@ public interface IOrderCostInfoService extends IService<OrderCostInfoDO> { |
24 | 28 | ServerResult listInnerProfitDetailByPage(OrderBaseInfoQueryVO queryVO); |
25 | 29 | |
26 | 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 | import com.order.erp.domain.vo.order.*; |
7 | 7 | |
8 | 8 | import javax.servlet.http.HttpServletResponse; |
9 | +import java.io.IOException; | |
9 | 10 | |
10 | 11 | /** |
11 | 12 | * <p> |
... | ... | @@ -32,4 +33,9 @@ public interface IProjectBaseInfoService extends IService<ProjectBaseInfoDO> { |
32 | 33 | void exportBusinessProfitInfo(HttpServletResponse response, String projectNoPrefix) throws Exception; |
33 | 34 | |
34 | 35 | void exportInnerProfitInfo(HttpServletResponse response, String projectNoPrefix) throws Exception; |
36 | + void exportBusinessProfitExcel(HttpServletResponse response, ProjectBaseInfoQueryVO queryVO) throws Exception; | |
37 | + void exportInnerProfitInfoExcel(HttpServletResponse response, ProjectBaseInfoQueryVO queryVO) throws Exception; | |
38 | + | |
39 | + void setProjectBaseInfoDevelopmentStatus(OrderBaseInfoVO vo); | |
40 | + void setInnerProductionStatus(OrderBaseInfoVO vo); | |
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
1 | +package com.order.erp.service.order; | |
2 | + | |
3 | +import com.baomidou.mybatisplus.extension.service.IService; | |
4 | +import com.order.erp.domain.dto.order.ProjectBaseAfterReviewSettingDO; | |
5 | + | |
6 | +public interface ProjectBaseAfterReviewSettingService extends IService<ProjectBaseAfterReviewSettingDO> { | |
7 | +} | ... | ... |
src/main/java/com/order/erp/service/order/ProjectBaseDevelopOptLogService.java
0 → 100644
1 | +package com.order.erp.service.order; | |
2 | + | |
3 | + | |
4 | +import com.baomidou.mybatisplus.extension.service.IService; | |
5 | +import com.order.erp.common.constant.ServerResult; | |
6 | + | |
7 | +import com.order.erp.domain.dto.order.ProjectBaseDevelopOptLogDO; | |
8 | +import com.order.erp.domain.vo.order.ProjectOptLogQueryVO; | |
9 | + | |
10 | +import java.util.List; | |
11 | + | |
12 | +public interface ProjectBaseDevelopOptLogService extends IService<ProjectBaseDevelopOptLogDO> { | |
13 | + ServerResult listByPage(ProjectOptLogQueryVO queryVO); | |
14 | +} | ... | ... |
src/main/java/com/order/erp/service/order/impl/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 | 6 | import com.alibaba.fastjson.JSONObject; |
7 | 7 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
8 | 8 | import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; |
9 | +import com.baomidou.mybatisplus.core.toolkit.StringUtils; | |
9 | 10 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
10 | 11 | import com.fasterxml.jackson.core.JsonProcessingException; |
11 | 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 | 16 | import com.order.erp.common.constant.Constant; |
13 | 17 | import com.order.erp.common.constant.ServerResult; |
14 | 18 | import com.order.erp.common.constant.ServerResultCode; |
15 | 19 | import com.order.erp.common.exception.BusinessException; |
16 | 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 | 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 | 25 | import com.order.erp.domain.dto.order.OrderCostInfoDO; |
23 | 26 | import com.order.erp.domain.dto.order.OrderFieldLockApplyDO; |
24 | 27 | import com.order.erp.domain.model.OrderCostFieldLockRecord; |
... | ... | @@ -26,17 +29,16 @@ import com.order.erp.domain.vo.order.*; |
26 | 29 | import com.order.erp.mapper.order.OrderCostInfoMapper; |
27 | 30 | import com.order.erp.service.IOrderCostFieldLockRecordService; |
28 | 31 | import com.order.erp.service.SystemSettingService; |
29 | -import com.order.erp.service.order.IOrderCostInfoService; | |
32 | +import com.order.erp.service.order.*; | |
30 | 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 | 34 | import org.springframework.beans.BeanUtils; |
35 | 35 | import org.springframework.beans.factory.annotation.Autowired; |
36 | 36 | import org.springframework.stereotype.Service; |
37 | 37 | import org.springframework.transaction.annotation.Transactional; |
38 | 38 | |
39 | 39 | import javax.annotation.Resource; |
40 | +import javax.servlet.http.HttpServletResponse; | |
41 | +import java.io.IOException; | |
40 | 42 | import java.math.BigDecimal; |
41 | 43 | import java.math.RoundingMode; |
42 | 44 | import java.util.*; |
... | ... | @@ -55,8 +57,6 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O |
55 | 57 | @Autowired |
56 | 58 | private DataScope dataScope; |
57 | 59 | @Resource |
58 | - private OrderFieldLockRecordService orderFieldLockRecordService; | |
59 | - @Resource | |
60 | 60 | private OrderFieldLockApplyService orderFieldLockApplyService; |
61 | 61 | @Autowired |
62 | 62 | private OrderBaseInfoService orderBaseInfoService; |
... | ... | @@ -64,22 +64,32 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O |
64 | 64 | private IOrderCostFieldLockRecordService orderCostFieldLockRecordService; |
65 | 65 | @Autowired |
66 | 66 | private SystemSettingService systemSettingService; |
67 | + @Autowired | |
68 | + private OrderCostDetailedOptLogService orderCostDetailedOptLogService; | |
67 | 69 | |
68 | 70 | @Override |
69 | 71 | @Transactional(rollbackFor = Exception.class) |
70 | 72 | public ServerResult edit(OrderCostInfoVO vo) { |
73 | + Integer type=null; | |
74 | + String operationDesc=null; | |
71 | 75 | Long id = vo.getOrderId(); |
72 | 76 | Optional<OrderCostInfoDO> orderCostInfoDOOpt = this.lambdaQuery() |
73 | 77 | .eq(OrderCostInfoDO::getOrderId, id) |
74 | 78 | .last(" limit 1 ") |
75 | 79 | .oneOpt(); |
76 | 80 | OrderCostInfoDO orderCostInfoDO = null; |
77 | - if (!orderCostInfoDOOpt.isPresent()) { | |
81 | + OrderCostInfoDO oldOrderCostInfoDO = null; | |
82 | + boolean isUpdate = orderCostInfoDOOpt.isPresent(); | |
83 | + if (!isUpdate) { | |
84 | + //对象不存在。 | |
78 | 85 | orderCostInfoDO = BeanUtil.copyProperties(vo, OrderCostInfoDO.class); |
79 | 86 | } else { |
80 | 87 | orderCostInfoDO = orderCostInfoDOOpt.get(); |
88 | + oldOrderCostInfoDO = BeanUtil.copyProperties(orderCostInfoDO, OrderCostInfoDO.class,"id","orderId","createTime","createBy","modifyTime","modifyBy","enableFlag"); | |
81 | 89 | BeanUtil.copyProperties(vo, orderCostInfoDO, CopyOptions.create().ignoreNullValue()); |
82 | 90 | } |
91 | + // 如果对于新旧数据一致时,则不会进行状态设置。 但是对于第一次创建数据应该怎么办呢? 通过isUpdate来进行判断。 对象不存在时,就不需要判断数据是否一致,对象存在时,就需要进行判断数据是否一致。如果一致,则不要进行状态设置,反之则需要进行状态设置。 | |
92 | + | |
83 | 93 | Optional<OrderCostFieldLockRecord> orderCostFieldLockRecordOpt = orderCostFieldLockRecordService |
84 | 94 | .lambdaQuery() |
85 | 95 | .eq(OrderCostFieldLockRecord::getOrderId, id) |
... | ... | @@ -94,17 +104,49 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O |
94 | 104 | OrderCostInfolockFieldVO originOrderCostInfolockFieldVO = JSONObject.parseObject(Optional.ofNullable(orderCostFieldLockRecord.getFields()).orElse("{}"), OrderCostInfolockFieldVO.class); |
95 | 105 | if(Objects.nonNull(vo.getPacketActualRmbTotalPrice())){ |
96 | 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 | 122 | originOrderCostInfolockFieldVO.setProductionActualPrice(OrderLockFieldEnum.LOCKED.name()); |
99 | 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 | 138 | orderCostFieldLockRecord.setFields(JSONObject.toJSONString(originOrderCostInfolockFieldVO)); |
102 | 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 | 147 | @Override |
107 | 148 | public ServerResult applyEditFileds(OrderCostInfolockFieldVO vo) { |
149 | + Integer applyType=null; | |
108 | 150 | List<OrderFieldLockApplyDO> applyDOS = orderFieldLockApplyService.list(new LambdaQueryWrapper<OrderFieldLockApplyDO>() |
109 | 151 | .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) |
110 | 152 | .eq(OrderFieldLockApplyDO::getOrderId, vo.getOrderId()) |
... | ... | @@ -118,6 +160,7 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O |
118 | 160 | .packetActualRmbTotalPrice(vo.getPacketActualRmbTotalPrice()) |
119 | 161 | .productionActualPrice(vo.getProductionActualPrice()) |
120 | 162 | .productionDepartmentPredictPrice(vo.getProductionDepartmentPredictPrice()) |
163 | + .productionDepartmentPredictUnitPrice(vo.getProductionDepartmentPredictUnitPrice()) | |
121 | 164 | .build(); |
122 | 165 | OrderFieldLockApplyDO build = OrderFieldLockApplyDO.builder() |
123 | 166 | .orderId(vo.getOrderId()) |
... | ... | @@ -126,9 +169,16 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O |
126 | 169 | .fields(JSONObject.toJSONString(lockField)) |
127 | 170 | .status(ApplyStatusEnum.WAIT_AUDIT.getStatus()) |
128 | 171 | .type(vo.getType()) |
129 | - .remark(ApplyTypeEnum.getNameByType(vo.getType())) | |
172 | + .remark(OrderCostApplyTpeEnum.getNameByType(vo.getType())) | |
130 | 173 | .build(); |
131 | 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 | 182 | return ServerResult.success(); |
133 | 183 | } |
134 | 184 | |
... | ... | @@ -171,6 +221,9 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O |
171 | 221 | if(Objects.isNull(lockFields.getProductionDepartmentPredictPrice())){ |
172 | 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 | 227 | InnerProfitDetailVO vo = InnerProfitDetailVO.builder() |
175 | 228 | .orderId(record.getId()) |
176 | 229 | .customerCode(record.getCustomerCode()) |
... | ... | @@ -183,6 +236,7 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O |
183 | 236 | .productionDepartmentTotalPrice(Objects.isNull(record.getProfitAnalysisInfo()) ? null : record.getProfitAnalysisInfo().getProductionDepartmentTotalPrice()) |
184 | 237 | .productionDepartmentPredictPrice(Objects.isNull(record.getOrderCostInfo()) ? null : record.getOrderCostInfo().getProductionDepartmentPredictPrice()) |
185 | 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 | 240 | .lockFields(lockFields) |
187 | 241 | .build(); |
188 | 242 | |
... | ... | @@ -214,6 +268,9 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O |
214 | 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 | 274 | return vo; |
218 | 275 | }).collect(Collectors.toList()); |
219 | 276 | Page<InnerProfitDetailVO> webVOPage = new Page<>(); |
... | ... | @@ -275,6 +332,7 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O |
275 | 332 | .packetPrice(Objects.isNull(record.getProfitAnalysisInfo()) ? null : record.getProfitAnalysisInfo().getPacketPrice()) |
276 | 333 | .packetTotalPrice(Objects.isNull(record.getProfitAnalysisInfo()) ? null : record.getProfitAnalysisInfo().getPacketTotalPrice()) |
277 | 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 | 336 | .lockFields(lockFields) |
279 | 337 | .build(); |
280 | 338 | if (Objects.nonNull(vo.getPacketTotalPrice())) { |
... | ... | @@ -303,4 +361,211 @@ public class OrderCostInfoServiceImpl extends ServiceImpl<OrderCostInfoMapper, O |
303 | 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 | 134 | if (ApplyTypeEnum.FIELD_EDIT_APPLY.getType().equals(x.getType())) { |
135 | 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 | 141 | .anyMatch(type -> type.equals(x.getType()))) { |
141 | 142 | OrderCostInfolockFieldVO orderCostInfolockFieldVO = JSONObject.parseObject(fields, OrderCostInfolockFieldVO.class); |
142 | 143 | resultVO.setFieldInfos(OrderLockFieldVO.builder().costInfolockFieldVO(orderCostInfolockFieldVO).build()); |
... | ... | @@ -824,9 +825,10 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp |
824 | 825 | } |
825 | 826 | } |
826 | 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 | 832 | .anyMatch(x -> x.equals(applyDO.getType()))) { |
831 | 833 | applyDO.setAuditUserId(auditUserId); |
832 | 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 | 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 | 3 | import cn.hutool.core.bean.BeanUtil; |
4 | 4 | import cn.hutool.core.bean.copier.CopyOptions; |
5 | 5 | import cn.hutool.core.collection.CollUtil; |
6 | +import com.alibaba.fastjson.JSON; | |
6 | 7 | import com.alibaba.fastjson.JSONObject; |
8 | +import com.alibaba.fastjson.TypeReference; | |
7 | 9 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
8 | 10 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
9 | 11 | import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; |
10 | 12 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
11 | 13 | import com.fasterxml.jackson.core.JsonProcessingException; |
12 | 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 | 18 | import com.order.erp.common.constant.Constant; |
14 | 19 | import com.order.erp.common.constant.ServerResult; |
15 | 20 | import com.order.erp.common.constant.ServerResultCode; |
16 | 21 | import com.order.erp.common.exception.BusinessException; |
22 | +import com.order.erp.common.utils.TransactionHelper; | |
17 | 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 | 25 | import com.order.erp.domain.dto.BaseDO; |
23 | 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 | 28 | import com.order.erp.domain.model.ProjectApplyDO; |
27 | 29 | import com.order.erp.domain.model.ProjectFieldLockRecord; |
30 | +import com.order.erp.domain.vo.CostSettingItemVO; | |
28 | 31 | import com.order.erp.domain.vo.order.*; |
29 | 32 | import com.order.erp.mapper.order.ProjectBaseInfoMapper; |
30 | 33 | import com.order.erp.service.IProjectFieldLockRecordService; |
31 | 34 | import com.order.erp.service.SystemSettingService; |
32 | 35 | import com.order.erp.service.impl.ProjectApplyServiceImpl; |
33 | -import com.order.erp.service.order.IProjectBaseInfoService; | |
36 | +import com.order.erp.service.order.*; | |
34 | 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 | 38 | import org.apache.commons.lang3.StringUtils; |
38 | 39 | import org.apache.poi.ss.usermodel.*; |
39 | 40 | import org.apache.poi.ss.util.CellRangeAddress; |
... | ... | @@ -42,8 +43,11 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook; |
42 | 43 | import org.springframework.beans.BeanUtils; |
43 | 44 | import org.springframework.beans.factory.annotation.Autowired; |
44 | 45 | import org.springframework.stereotype.Service; |
46 | +import org.springframework.transaction.annotation.Transactional; | |
45 | 47 | |
48 | +import javax.annotation.Resource; | |
46 | 49 | import javax.servlet.http.HttpServletResponse; |
50 | +import java.io.IOException; | |
47 | 51 | import java.io.OutputStream; |
48 | 52 | import java.math.BigDecimal; |
49 | 53 | import java.math.RoundingMode; |
... | ... | @@ -77,21 +81,34 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe |
77 | 81 | private OrderProfitAnalysisService projectProfitAnalysisService; |
78 | 82 | @Autowired |
79 | 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 | 91 | @Override |
92 | + @Transactional(rollbackFor = Exception.class) | |
82 | 93 | public ServerResult edit(ProjectBaseInfoVO vo) { |
94 | + Integer type = null; | |
95 | + String operationDesc =null; | |
83 | 96 | String projectNoPrefix = vo.getProjectNoPrefix(); |
84 | 97 | Optional<ProjectBaseInfoDO> projectBaseInfoDOOpt = this.lambdaQuery() |
85 | 98 | .eq(ProjectBaseInfoDO::getProjectNoPrefix, projectNoPrefix) |
86 | 99 | .last(" limit 1 ") |
87 | 100 | .oneOpt(); |
101 | + ProjectBaseInfoDO oldProjectBaseInfoDO = null; | |
88 | 102 | ProjectBaseInfoDO projectBaseInfoDO = null; |
89 | - if (projectBaseInfoDOOpt.isPresent()) { | |
103 | + boolean isUpdate = projectBaseInfoDOOpt.isPresent(); | |
104 | + if (isUpdate) { | |
90 | 105 | projectBaseInfoDO = projectBaseInfoDOOpt.get(); |
106 | + oldProjectBaseInfoDO = BeanUtil.copyProperties(projectBaseInfoDOOpt.get(), ProjectBaseInfoDO.class,"id","projectNoPrefix","createTime","createBy","modifyTime","modifyBy","enableFlag"); // 深拷贝 | |
91 | 107 | BeanUtil.copyProperties(vo, projectBaseInfoDO, CopyOptions.create().setIgnoreProperties("id").ignoreNullValue()); |
92 | 108 | } else { |
93 | 109 | projectBaseInfoDO = BeanUtil.copyProperties(vo, ProjectBaseInfoDO.class); |
94 | 110 | } |
111 | + //通过排序取出最新的锁定记录。来重新设置锁定记录。 因为你编辑之后,所以就必须要进行锁定LOCKED。 | |
95 | 112 | ProjectFieldLockRecord recordDO = projectionFieldLockRecordService.getOne(new LambdaQueryWrapper<ProjectFieldLockRecord>() |
96 | 113 | .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) |
97 | 114 | .eq(ProjectFieldLockRecord::getProjectNoPrefix, projectNoPrefix) |
... | ... | @@ -117,9 +134,36 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe |
117 | 134 | recordLockFieldVO.setSpainPaidRmbCommission("LOCKED"); |
118 | 135 | recordLockFieldVO.setPaidRmbCommission("LOCKED"); |
119 | 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 | 154 | } else if (Objects.nonNull(vo.getProjectInnerProfitInfoStartTime()) || Objects.nonNull(vo.getProjectInnerProfitInfoEndTime())) { |
121 | 155 | recordLockFieldVO.setProjectInnerProfitInfoStartTime("LOCKED"); |
122 | 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 | 168 | recordDO.setFields(JSONObject.toJSONString(recordLockFieldVO)); |
125 | 169 | if (Objects.isNull(recordDO.getId())) { |
... | ... | @@ -127,11 +171,16 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe |
127 | 171 | } else { |
128 | 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 | 181 | @Override |
134 | 182 | public ServerResult applyEditFileds(ProjectBaseInfoLockFieldVO vo) { |
183 | + Integer applyType=null; | |
135 | 184 | List<ProjectApplyDO> applyDOS = projectFieldLockApplyService.list(new LambdaQueryWrapper<ProjectApplyDO>() |
136 | 185 | .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) |
137 | 186 | .eq(ProjectApplyDO::getType, vo.getType()) |
... | ... | @@ -160,6 +209,15 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe |
160 | 209 | .status(ApplyStatusEnum.WAIT_AUDIT.getStatus()) |
161 | 210 | .build(); |
162 | 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 | 221 | return ServerResult.success(); |
164 | 222 | } |
165 | 223 | |
... | ... | @@ -388,6 +446,15 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe |
388 | 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 | 458 | return orderBaseInfoDOSGroupByProjectNoPre.entrySet().stream().map(entry -> { |
392 | 459 | ProjectBaseInfoDO projectBaseInfoDO = no2ProjectInfoMap.get(entry.getKey()); |
393 | 460 | List<OrderInfoResultVO> details = entry.getValue(); |
... | ... | @@ -402,6 +469,7 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe |
402 | 469 | InnerProfitInfoVO innerProfitInfoVO = InnerProfitInfoVO.builder() |
403 | 470 | .customerCode(details.get(0).getCustomerCode()) |
404 | 471 | .projectNoPrefix(entry.getKey()) |
472 | + .innerProductionStatus((Objects.isNull(projectBaseInfoDO) || Objects.isNull(projectBaseInfoDO.getInnerProductionStatus())) ? ProfitStatusEnum.Not_COMPLETED.getStatus() : projectBaseInfoDO.getInnerProductionStatus() ) | |
405 | 473 | .productionDepartment(details.get(0).getProductionDepartment()) |
406 | 474 | .lockFields(lockFields) |
407 | 475 | .build(); |
... | ... | @@ -505,6 +573,11 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe |
505 | 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 | 581 | if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(fixCostValue) |
509 | 582 | && Objects.nonNull(earliest) |
510 | 583 | && Objects.nonNull(latest)) { |
... | ... | @@ -553,6 +626,13 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe |
553 | 626 | .map(projectNo -> projectNo.substring(0, 8)) |
554 | 627 | .distinct() |
555 | 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 | 636 | Map<String, List<OrderInfoResultVO>> orderBaseInfoDOSGroupByProjectNoPre = orderInfoResultVOS.stream() |
557 | 637 | .collect(Collectors.groupingBy( |
558 | 638 | order -> order.getProjectNo().substring(0, 8) |
... | ... | @@ -606,12 +686,21 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe |
606 | 686 | } |
607 | 687 | })); |
608 | 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 | 694 | return orderBaseInfoDOSGroupByProjectNoPre.entrySet().stream().map(entry -> { |
610 | 695 | List<OrderInfoResultVO> details = entry.getValue(); |
611 | 696 | ProjectBaseInfoDO projectBaseInfoDO = noPrefix2ProjectProfitAnalysisDOMap.get(entry.getKey()); |
612 | 697 | BusinessProfitInfoVO businessProfitInfoVO = BusinessProfitInfoVO.builder() |
613 | 698 | .customerCode(details.get(0).getCustomerCode()) |
614 | 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 | 704 | .lockFields(Optional.ofNullable(prjectNo2LockRecordMap.get(entry.getKey())).orElse(ProjectBaseInfoLockFieldVO.builder() |
616 | 705 | .actualExchangeRate(Objects.isNull(projectBaseInfoDO) || Objects.isNull(projectBaseInfoDO.getActualExchangeRate()) ? OrderLockFieldEnum.UN_LOCKED.name() : OrderLockFieldEnum.LOCKED.name()) |
617 | 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 | 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 | 848 | businessProfitInfoVO.setFixedCost(BigDecimal.valueOf((between + 1) * Double.parseDouble(fixCostValue)).setScale(2, RoundingMode.HALF_UP)); |
754 | 849 | if (Objects.nonNull(spainRatio) |
... | ... | @@ -812,7 +907,8 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe |
812 | 907 | } |
813 | 908 | //综合收益 |
814 | 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 | 912 | .add(Optional.ofNullable(businessProfitInfoVO.getActualOrderRmbPrice()).orElse(BigDecimal.ZERO)).setScale(2, RoundingMode.HALF_UP)); |
817 | 913 | return businessProfitInfoVO; |
818 | 914 | }).collect(Collectors.toList()); |
... | ... | @@ -925,15 +1021,16 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe |
925 | 1021 | .orElse(BigDecimal.valueOf(0)) |
926 | 1022 | .divide(BigDecimal.valueOf(totalPrice), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)) + "%").orElse("-")); |
927 | 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 | 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 | 1036 | response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); |
... | ... | @@ -954,6 +1051,173 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe |
954 | 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 | 1221 | public void exportInnerProfitExcel(HttpServletResponse response, InnerProfitInfoVO vo) throws Exception { |
958 | 1222 | DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
959 | 1223 | XSSFWorkbook workbook = new XSSFWorkbook(); |
... | ... | @@ -1006,12 +1270,12 @@ public class ProjectBaseInfoServiceImpl extends ServiceImpl<ProjectBaseInfoMappe |
1006 | 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 | 1274 | createMergedRow(sheet, cellStyle, 12, 13, 4, 5, "¥" + Optional.ofNullable(vo.getProductionDepartmentPredictPrice()).map(String::valueOf).orElse("-")); |
1011 | 1275 | createMergedRow(sheet, cellStyle, 12, 13, 6, 7, "预算占比"); |
1012 | 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 | 1279 | createMergedRow(sheet, cellStyle, 14, 15, 4, 5, "¥" + Optional.ofNullable(vo.getProductionActualPrice()).orElse(BigDecimal.ZERO)); |
1016 | 1280 | createMergedRow(sheet, cellStyle, 14, 15, 6, 7, Optional.ofNullable(vo.getPredictRatio()).map(r -> r.multiply(BigDecimal.valueOf(100)) + "%").orElse("-")); |
1017 | 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 | 1333 | } |
1070 | 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 | 57 | testWhileIdle: true |
58 | 58 | testOnBorrow: true |
59 | 59 | testOnReturn: true |
60 | - password: Erp@test123456 | |
60 | + password: eJ8(bD6]wN6=gI5= | |
61 | 61 | time-between-eviction-runs-millis: 1000 |
62 | 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 | 63 | username: root | ... | ... |
src/main/resources/application-test.yml
... | ... | @@ -63,7 +63,7 @@ spring: |
63 | 63 | username: root |
64 | 64 | redis: |
65 | 65 | database: 0 |
66 | - host: 39.108.227.113 | |
66 | + host: 47.104.8.35 | |
67 | 67 | lettuce: |
68 | 68 | pool: |
69 | 69 | max-active: 2000 |
... | ... | @@ -72,7 +72,7 @@ spring: |
72 | 72 | min-idle: 3 |
73 | 73 | time-between-eviction-runs: 100 |
74 | 74 | password: '' |
75 | - port: 6379 | |
75 | + port: 6380 | |
76 | 76 | timeout: 2000 |
77 | 77 | mail: |
78 | 78 | # 配置 SMTP 服务器地址 | ... | ... |