Commit 6d43f89e6ed46e92e901220bdaf49078ab14046a
1 parent
989a35a2
白皮书内容更新
Showing
10 changed files
with
399 additions
and
95 deletions
src/main/java/com/huaheng/HuaHengApplication.java
... | ... | @@ -10,7 +10,7 @@ import org.springframework.context.annotation.Bean; |
10 | 10 | |
11 | 11 | /** |
12 | 12 | * 启动程序 |
13 | - * | |
13 | + * | |
14 | 14 | * @author huaheng |
15 | 15 | */ |
16 | 16 | @MapperScan({"com.huaheng.pc.**.**.mapper"}) |
... | ... | @@ -31,20 +31,41 @@ public class HuaHengApplication |
31 | 31 | SpringApplication.run(HuaHengApplication.class, args); |
32 | 32 | System.out.println("*************** 华恒WMS启动成功JAR ***************\n" + |
33 | 33 | " >>> WMS启动成功JAR! <<< \n"+ |
34 | - " へ /|▓\n"+ | |
35 | - " /\7 ∠_/\n"+ | |
36 | - " / │ / /\n"+ | |
37 | - " │ Z _,< / 〈ヽ\n"+ | |
38 | - " │ ` ヽ / 〉\n"+ | |
39 | - " Y `/ / 〉\n"+ | |
40 | - " ( ● ヽ ● /. 〈 /\n"+ | |
41 | - " () ( | \ 〈 \\n"+ | |
42 | - " >_ ' _ . '│ //\n"+ | |
43 | - " /へ / )<| \\\n"+ | |
44 | - " ヽ_) (_/ │//\n"+ | |
45 | - " 7 | /\n"+ | |
46 | - " >―r` ̄ ̄` `―_' \n" | |
34 | + " ▀▄▄ ▀▄▄\n" + | |
35 | + " ▄▄▄▄▄▄▓▌ ▐██▄ ▓█▄ ▀▄\n" + | |
36 | + " ░▓▓███████▀ ▄████▌▐██▌ ▐▓\n" + | |
37 | + " ▄▄▄▄▄▄ ▄ █▀██████▓░▄▓█████▄███▓ ░█▌▄▄▄ ▄ ▄▄▄▄▄▄\n" + | |
38 | + " █ ▐▌▐▌▐██████▌▐████████████▌ █▌ ▐▌ █\n" + | |
39 | + " █ ▓ ▓███████▄████████████▌▐██ ▓ █\n" + | |
40 | + " █ ▄ ▐▌ ▐▓███████████████████▄███ ▐▌ ▄ █\n" + | |
41 | + " █ ▐▌▐█ ▀▀▀▀▀▓▓█████████▀▀▀ ▓▓░ █▌▐▌ █\n" + | |
42 | + " █ █░▓▌ ▄▓▄ █████░ ░█▌ ▐▓░█ █\n" + | |
43 | + " ▌▄ ▐▌ ▐█ ▀ ▓▓▄▄▄▄▓▓ █▄▄██████▌ ▀ █▌ ▐▌ ▄▐\n" + | |
44 | + " ▐▌ ▓▄ ▀▓▄ ███████ ███████▓▓ ▄▓▀ ▄▓ ▐▌\n" + | |
45 | + " ▌▀▄ ▀▀▄▄░▀▄ ▀▀▓▓███▌ ▐█░▄▄▄▄ ▀▀ ▄▀░▄▄▀▀ ▄▀▐\n" + | |
46 | + " ▄ █ ▀▀▄▄ ▀▀▄▀▄ ███▀▀▀▀▀▀ ▓███░ ▄▀▄▀▀ ▄▄▀▀ █\n" + | |
47 | + " ▐▌ █ ▀▓▓▄ ▐▌▐▌ ▄▄▄ ▐███▌ ▐██▓▌▐▌▐▌ ▄▓▀ █ ▄ ▄\n" + | |
48 | + " ▄▀ █ ▄ ▐██▌░█▓ ▐█▓▌ ░▓██▓ ▓█░▐█▄ █ ▐▌ ▐▌\n" + | |
49 | + " ▄▀▄▄▀ █ ▐▌ ██▐▓▄▀ ▄▄▀▀▀██▄▄ ▀▄▓▌▐▌ ▀▄▄█░ ▄▀\n" + | |
50 | + " ▐▌▓█▌ ▀ ▄▄█░▐█▓▀ ▄███ ██▓▓ ▓▀ ▄▓██▀ ▄▀▄▄▀\n" + | |
51 | + " ▓███▓ ▄▓██▀ ██▌ ▓▓██▌ ▐████▌ ▄▀▄▄▀ ▐███▌ ▐▌▓█▌\n" + | |
52 | + " ▐████▌ ▐███▌ ▐▓▓ ▐████ █████ ▐▌▓█▌ ░▓███ ▓███▓\n" + | |
53 | + " █████ ░▓███ ░██▌ ▄▄▄▄████████ ▐████▌ ▓███▓ ▄▄███▓░ ▐████▌\n" + | |
54 | + " ░█████ ▄▄███▓▐██▌ ░███▓▓▀ ▀████▌ █████ ▐████▌░██████▀ ▐███████▓\n" + | |
55 | + " ▓▓█▌ ▐████▌▓▓███▀ ███ ▓▓███ ▄████████████▓▓██████▓▐█████▌ ▐███░█████\n" + | |
56 | + " ████ █████████▌ ░███ ▐████▌ ▓▓████▌ ▐████████░██████████ ▐█▓▓ ▐████▓\n" + | |
57 | + " ████ ▐████████ ▐███░▐████▌ ▐███████ ▓███████ ▐█████████▌ ███▌ █████▌\n" + | |
58 | + " ████▌▄█████████▌ ▐███▌▓▓███ ██████▓▓ ▀▀▓▓██▌ ██████████▄▄███▌ ▐████▓\n" + | |
59 | + " ▐███████▓▓▀▓████▄▓▓████████ █████▌ ░███▌ ▐████▓ ▀▀▀▓▓███▌ ▄█████▌\n" + | |
60 | + " ▐███▓▓███▄▄▄░░▀▀▀██████████▄▄▄███▓▓▀ ▐███▌ ▄█████▌ █ ▐████████▓▓▀\n" + | |
61 | + " ████ ▀▀▀████▄▄▄▄▄░░ ▀▀▀▀▀ ▐████████▓▓▀ █ ▐▓▓████▀▀▀\n" + | |
62 | + " ▀▀▀▀ ▄▀▀▀██████ ▐▓▓████▀▀▀ █\n" + | |
63 | + " █ ▓▓██ █\n" + | |
64 | + " █ █\n" + | |
65 | + " █ ▄▀▀█ ▄▀▀ ▓ ▄▀▀▄ ▄▀▀▄ ▄▀▄ ▄▀▀ ▄▀▄ █\n" + | |
66 | + " █▄▄▄ █▀▓ ▓▀ ▄ █ █ ▓ █▀▀▓ ▓ █ ▓▀ ▄ █ ▓ ▄▄▄█\n" + | |
67 | + " █ ▀▀▀▀ ▀▀▀ ▀▀ ▀ ▀▀▀ ▀▀▀▀ ▀▀▀\n" | |
47 | 68 | |
48 | 69 | ); |
49 | 70 | } |
50 | -} | |
51 | 71 | \ No newline at end of file |
72 | +} | |
... | ... |
src/main/java/com/huaheng/api/general/controller/BasicDataApi.java
1 | 1 | package com.huaheng.api.general.controller; |
2 | 2 | |
3 | +import com.huaheng.api.general.domain.ContainerTypeDomain; | |
4 | +import com.huaheng.api.general.domain.InventoryQueryDomain; | |
3 | 5 | import com.huaheng.api.general.service.BasicDataApiService; |
4 | 6 | import com.huaheng.framework.aspectj.lang.annotation.ApiLogger; |
5 | 7 | import com.huaheng.framework.aspectj.lang.annotation.Log; |
... | ... | @@ -7,11 +9,13 @@ import com.huaheng.framework.aspectj.lang.constant.BusinessType; |
7 | 9 | import com.huaheng.framework.web.controller.BaseController; |
8 | 10 | import com.huaheng.framework.web.domain.AjaxResult; |
9 | 11 | import com.huaheng.pc.config.containerCapacity.domain.ContainerCapacity; |
12 | +import com.huaheng.pc.config.containerType.domain.ContainerType; | |
10 | 13 | import com.huaheng.pc.config.customer.domain.Customer; |
11 | 14 | import com.huaheng.pc.config.material.domain.Material; |
12 | 15 | import com.huaheng.pc.config.supplier.domain.Supplier; |
13 | 16 | import com.huaheng.pc.config.warehouse.domain.Warehouse; |
14 | 17 | import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail; |
18 | +import com.huaheng.pc.inventory.inventoryHeader.domain.InventoryHeader; | |
15 | 19 | import com.huaheng.pc.system.dept.domain.Dept; |
16 | 20 | import com.huaheng.pc.system.dict.domain.DictData; |
17 | 21 | import com.huaheng.pc.system.user.domain.User; |
... | ... | @@ -20,6 +24,8 @@ import io.swagger.annotations.ApiOperation; |
20 | 24 | import org.springframework.beans.factory.annotation.Autowired; |
21 | 25 | import org.springframework.web.bind.annotation.*; |
22 | 26 | |
27 | +import java.util.List; | |
28 | + | |
23 | 29 | @RestController |
24 | 30 | @RequestMapping("/api/basicData") |
25 | 31 | @Api(tags = {"基础数据接口"}, value = "基础数据接口basicData") |
... | ... | @@ -54,6 +60,17 @@ public class BasicDataApi extends BaseController { |
54 | 60 | return ajaxResult; |
55 | 61 | } |
56 | 62 | |
63 | + @Log(title = "库存查询", action = BusinessType.INSERT) | |
64 | + @PostMapping("/queryInventory") | |
65 | + @ApiOperation("库存查询公共接口") | |
66 | + @ResponseBody | |
67 | + @ApiLogger(apiName = "查询物料", from="ERP") | |
68 | + public AjaxResult QueryInventoryApi(@RequestBody InventoryQueryDomain inventoryQueryDomain) | |
69 | + { | |
70 | +// AjaxResult ajaxResult = basicDataApiService.queryMaterial(material); | |
71 | + return null; | |
72 | + } | |
73 | + | |
57 | 74 | /** |
58 | 75 | * 同步字典 |
59 | 76 | */ |
... | ... | @@ -151,6 +168,19 @@ public class BasicDataApi extends BaseController { |
151 | 168 | } |
152 | 169 | |
153 | 170 | /** |
171 | + * 同步容器类型 | |
172 | + */ | |
173 | + @Log(title = "同步容器类型", action = BusinessType.INSERT) | |
174 | + @PostMapping("/containerType") | |
175 | + @ApiOperation("同步容器类型") | |
176 | + @ResponseBody | |
177 | + @ApiLogger(apiName = "同步容器类型", from="ERP") | |
178 | + public AjaxResult containerTypeApi(@RequestBody ContainerTypeDomain containerTypeDomain){ | |
179 | + AjaxResult ajaxResult = basicDataApiService.containerType(containerTypeDomain); | |
180 | + return ajaxResult; | |
181 | + } | |
182 | + | |
183 | + /** | |
154 | 184 | * 同步供应商档案 |
155 | 185 | */ |
156 | 186 | @Log(title = "供应商档案添加", action = BusinessType.INSERT) |
... | ... |
src/main/java/com/huaheng/api/general/controller/ReceiptApi.java
1 | 1 | package com.huaheng.api.general.controller; |
2 | 2 | |
3 | 3 | |
4 | +import com.alibaba.fastjson.JSON; | |
5 | +import com.alibaba.fastjson.JSONObject; | |
4 | 6 | import com.huaheng.api.general.domain.Receipt; |
5 | 7 | import com.huaheng.api.general.domain.ReceiptDomain; |
6 | 8 | import com.huaheng.api.general.service.ReceiptApiService; |
... | ... | @@ -17,6 +19,7 @@ import org.apache.shiro.authz.annotation.RequiresPermissions; |
17 | 19 | import org.springframework.web.bind.annotation.*; |
18 | 20 | |
19 | 21 | import javax.annotation.Resource; |
22 | +import java.util.List; | |
20 | 23 | |
21 | 24 | @RestController |
22 | 25 | @RequestMapping("/api/receiptApi") |
... | ... | @@ -65,11 +68,23 @@ public class ReceiptApi { |
65 | 68 | @PostMapping("/remove") |
66 | 69 | @ResponseBody |
67 | 70 | @ApiLogger(apiName = "取消入库单", from="ERP") |
68 | - public AjaxResult remove(@RequestBody Integer[] ids){ | |
69 | - if (StringUtils.isNull(ids)){ | |
70 | - return AjaxResult.error("id为空"); | |
71 | + public AjaxResult remove(@RequestBody List<String> receiptCodeList){ | |
72 | + if (receiptCodeList==null&&receiptCodeList.size()<1){ | |
73 | + return AjaxResult.error("单号列表为空"); | |
71 | 74 | } |
72 | - return receiptApiService.remove(ids); | |
75 | + return receiptApiService.remove(receiptCodeList); | |
73 | 76 | } |
74 | 77 | |
78 | + /** | |
79 | + * 入库单查询 | |
80 | + */ | |
81 | + @Log(title = "入库-入库单 ",operating = "入库单删除", action = BusinessType.UPDATE) | |
82 | + @GetMapping("/search") | |
83 | + @ResponseBody | |
84 | + @ApiLogger(apiName = "取消入库单", from="ERP") | |
85 | + public AjaxResult search(@RequestParam String receiptCode, | |
86 | + @RequestParam String companyCode, | |
87 | + @RequestParam String warehouseCode){ | |
88 | + return receiptApiService.search(receiptCode,companyCode,warehouseCode); | |
89 | + } | |
75 | 90 | } |
... | ... |
src/main/java/com/huaheng/api/general/controller/ShipmentApi.java
1 | 1 | package com.huaheng.api.general.controller; |
2 | 2 | |
3 | 3 | |
4 | +import com.alibaba.fastjson.JSON; | |
5 | +import com.alibaba.fastjson.JSONObject; | |
4 | 6 | import com.huaheng.api.general.domain.ShipmentDomain; |
5 | 7 | import com.huaheng.api.general.service.ShipmentApiService; |
8 | +import com.huaheng.common.utils.StringUtils; | |
6 | 9 | import com.huaheng.framework.aspectj.lang.annotation.ApiLogger; |
7 | 10 | import com.huaheng.framework.aspectj.lang.annotation.Log; |
8 | 11 | import com.huaheng.framework.aspectj.lang.constant.BusinessType; |
... | ... | @@ -12,6 +15,7 @@ import io.swagger.annotations.ApiOperation; |
12 | 15 | import org.springframework.web.bind.annotation.*; |
13 | 16 | |
14 | 17 | import javax.annotation.Resource; |
18 | +import java.util.List; | |
15 | 19 | |
16 | 20 | @RestController |
17 | 21 | @RequestMapping("/api/shipmentApi") |
... | ... | @@ -34,4 +38,31 @@ public class ShipmentApi { |
34 | 38 | AjaxResult ajaxResult = shipmentApiService.shipment(shipmentDomain); |
35 | 39 | return ajaxResult; |
36 | 40 | } |
41 | + | |
42 | + /** | |
43 | + * 取消出库单 | |
44 | + */ | |
45 | + @Log(title = "出库-出库单 ",operating = "出库单删除", action = BusinessType.UPDATE) | |
46 | + @PostMapping("/remove") | |
47 | + @ResponseBody | |
48 | + @ApiLogger(apiName = "取消出库单", from="ERP") | |
49 | + public AjaxResult remove(@RequestBody List<String> shipmentCodeList){ | |
50 | + if (shipmentCodeList==null&&shipmentCodeList.size()<1){ | |
51 | + return AjaxResult.error("出库单号列表为空"); | |
52 | + } | |
53 | + return shipmentApiService.remove(shipmentCodeList); | |
54 | + } | |
55 | + | |
56 | + /** | |
57 | + * 出库单查询 | |
58 | + */ | |
59 | + @Log(title = "出库-出库单 ",operating = "出库单删除", action = BusinessType.UPDATE) | |
60 | + @GetMapping("/search") | |
61 | + @ResponseBody | |
62 | + @ApiLogger(apiName = "取消入库单", from="ERP") | |
63 | + public AjaxResult search(@RequestParam String shipmentCode, | |
64 | + @RequestParam String companyCode, | |
65 | + @RequestParam String warehouseCode){ | |
66 | + return shipmentApiService.search(shipmentCode,companyCode,warehouseCode); | |
67 | + } | |
37 | 68 | } |
... | ... |
src/main/java/com/huaheng/api/general/domain/ContainerTypeDomain.java
0 → 100644
1 | +package com.huaheng.api.general.domain; | |
2 | + | |
3 | +import com.huaheng.pc.config.containerType.domain.ContainerType; | |
4 | +import lombok.Data; | |
5 | + | |
6 | +import java.util.List; | |
7 | + | |
8 | +@Data | |
9 | +public class ContainerTypeDomain { | |
10 | + private List<ContainerType> containerTypeList; | |
11 | + | |
12 | + private String code; | |
13 | +} | |
... | ... |
src/main/java/com/huaheng/api/general/domain/InventoryQueryDomain.java
0 → 100644
1 | +package com.huaheng.api.general.domain; | |
2 | + | |
3 | +import lombok.Data; | |
4 | + | |
5 | +@Data | |
6 | +public class InventoryQueryDomain { | |
7 | + | |
8 | + private String warehouseCode; | |
9 | + | |
10 | + private String companyCode; | |
11 | + | |
12 | + private String materialCode; | |
13 | + | |
14 | + private String containerCode; | |
15 | + | |
16 | + private String locationCode; | |
17 | + | |
18 | +} | |
... | ... |
src/main/java/com/huaheng/api/general/service/BasicDataApiService.java
... | ... | @@ -2,7 +2,9 @@ package com.huaheng.api.general.service; |
2 | 2 | |
3 | 3 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
4 | 4 | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
5 | +import com.huaheng.api.general.domain.ContainerTypeDomain; | |
5 | 6 | import com.huaheng.api.general.domain.InventoryDomain; |
7 | +import com.huaheng.api.general.domain.InventoryQueryDomain; | |
6 | 8 | import com.huaheng.common.exception.service.ServiceException; |
7 | 9 | import com.huaheng.common.utils.StringUtils; |
8 | 10 | import com.huaheng.framework.web.domain.AjaxResult; |
... | ... | @@ -34,6 +36,8 @@ import com.huaheng.pc.system.dict.service.IDictDataService; |
34 | 36 | import com.huaheng.pc.system.dict.service.IDictTypeService; |
35 | 37 | import com.huaheng.pc.system.user.domain.User; |
36 | 38 | import com.huaheng.pc.system.user.service.IUserService; |
39 | +import org.slf4j.Logger; | |
40 | +import org.slf4j.LoggerFactory; | |
37 | 41 | import org.springframework.beans.factory.annotation.Autowired; |
38 | 42 | import org.springframework.stereotype.Component; |
39 | 43 | import org.springframework.transaction.annotation.Transactional; |
... | ... | @@ -86,6 +90,9 @@ public class BasicDataApiService { |
86 | 90 | @Autowired |
87 | 91 | private ContainerCapacityService containerCapacityService; |
88 | 92 | |
93 | + private static final Logger logger = LoggerFactory.getLogger("base-api"); | |
94 | + | |
95 | + | |
89 | 96 | //检查仓库 |
90 | 97 | public Warehouse checkWarehouse(String code) { |
91 | 98 | LambdaQueryWrapper<Warehouse> warehouseLam = Wrappers.lambdaQuery(); |
... | ... | @@ -630,6 +637,36 @@ public class BasicDataApiService { |
630 | 637 | return AjaxResult.success("新增容器容量成功"); |
631 | 638 | } |
632 | 639 | |
640 | + public AjaxResult containerType(ContainerTypeDomain containerTypeDomain){ | |
641 | + if ("0".equals(containerTypeDomain.getCode())){ | |
642 | + if (!containerTypeService.saveBatch(containerTypeDomain.getContainerTypeList())){ | |
643 | + logger.error("erp初始化容器类型失败,失败原因:无法插入数据"); | |
644 | + return AjaxResult.error("初始化容器类型失败"); | |
645 | + } | |
646 | + return AjaxResult.success("容器类型初始化成功"); | |
647 | + }else { | |
648 | + LambdaQueryWrapper<ContainerType> lambdaQuery; | |
649 | + for (ContainerType containerType : containerTypeDomain.getContainerTypeList()) { | |
650 | + lambdaQuery = Wrappers.lambdaQuery(); | |
651 | + lambdaQuery.eq(ContainerType::getCode,containerType.getCode()); | |
652 | + ContainerType srcContainerType = containerTypeService.getOne(lambdaQuery); | |
653 | + if (srcContainerType ==null){ | |
654 | + if (!containerTypeService.save(containerType)){ | |
655 | + logger.error("erp更新容器类型失败,失败原因:无法插入数据"); | |
656 | + return AjaxResult.error("插入容器类型失败"); | |
657 | + } | |
658 | + }else { | |
659 | + containerType.setId(srcContainerType.getId()); | |
660 | + if (!containerTypeService.updateById(containerType)){ | |
661 | + logger.error("erp更新容器类型失败,失败原因:无法更新数据"); | |
662 | + return AjaxResult.error("更新容器类型失败"); | |
663 | + } | |
664 | + } | |
665 | + } | |
666 | + return AjaxResult.success("容器类型更新成功"); | |
667 | + } | |
668 | + } | |
669 | + | |
633 | 670 | |
634 | 671 | |
635 | 672 | /** |
... | ... | @@ -665,7 +702,35 @@ public class BasicDataApiService { |
665 | 702 | } |
666 | 703 | |
667 | 704 | |
668 | - | |
705 | + public AjaxResult queryInventory(InventoryQueryDomain queryDomain){ | |
706 | + if (StringUtils.isEmpty(queryDomain.getWarehouseCode())){ | |
707 | + return AjaxResult.error("仓库编码不能为空"); | |
708 | + } | |
709 | + if (StringUtils.isEmpty(queryDomain.getCompanyCode())){ | |
710 | + return AjaxResult.error("货主编码不能为空"); | |
711 | + } | |
712 | + if (StringUtils.isEmpty(queryDomain.getContainerCode())&&StringUtils.isEmpty(queryDomain.getLocationCode())&&StringUtils.isEmpty(queryDomain.getMaterialCode())){ | |
713 | + return AjaxResult.error("容器、库位与物料至少一样不为空"); | |
714 | + } | |
715 | + LambdaQueryWrapper<InventoryDetail> queryWrapper = Wrappers.lambdaQuery(); | |
716 | + queryWrapper.eq(InventoryDetail::getWarehouseCode,queryDomain.getWarehouseCode()) | |
717 | + .eq(InventoryDetail::getCompanyCode,queryDomain.getCompanyCode()); | |
718 | + ArrayList<InventoryDetail> inventoryDetails = new ArrayList<>(); | |
719 | + if (StringUtils.isNotEmpty(queryDomain.getContainerCode())){ | |
720 | + queryWrapper.eq(InventoryDetail::getContainerCode,queryDomain.getContainerCode()); | |
721 | + } | |
722 | + if (StringUtils.isNotEmpty(queryDomain.getLocationCode())){ | |
723 | + queryWrapper.eq(InventoryDetail::getLocationCode,queryDomain.getLocationCode()); | |
724 | + } | |
725 | + if (StringUtils.isNotEmpty(queryDomain.getMaterialCode())){ | |
726 | + queryWrapper.eq(InventoryDetail::getMaterialCode,queryDomain.getMaterialCode()); | |
727 | + } | |
728 | + List<InventoryDetail> list = inventoryDetailService.list(queryWrapper); | |
729 | + if (list==null){ | |
730 | + return AjaxResult.error("没有符合条件的库存"); | |
731 | + } | |
732 | + return AjaxResult.success("获取成功",list); | |
733 | + } | |
669 | 734 | |
670 | 735 | |
671 | 736 | |
... | ... |
src/main/java/com/huaheng/api/general/service/ReceiptApiService.java
... | ... | @@ -2,15 +2,11 @@ package com.huaheng.api.general.service; |
2 | 2 | |
3 | 3 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
4 | 4 | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
5 | -import com.huaheng.api.general.controller.ReceiptApi; | |
6 | 5 | import com.huaheng.api.general.domain.ReceiptDomain; |
7 | 6 | import com.huaheng.common.constant.QuantityConstant; |
8 | 7 | import com.huaheng.common.exception.service.ServiceException; |
9 | -import com.huaheng.common.support.Convert; | |
10 | 8 | import com.huaheng.common.utils.StringUtils; |
11 | 9 | import com.huaheng.common.utils.security.ShiroUtils; |
12 | -import com.huaheng.common.exception.service.ServiceException; | |
13 | -import com.huaheng.common.utils.StringUtils; | |
14 | 10 | import com.huaheng.framework.web.domain.AjaxResult; |
15 | 11 | import com.huaheng.pc.config.FilterConfigDetail.domain.FilterConfigDetail; |
16 | 12 | import com.huaheng.pc.config.FilterConfigDetail.service.FilterConfigDetailService; |
... | ... | @@ -34,15 +30,12 @@ import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader; |
34 | 30 | import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService; |
35 | 31 | import com.huaheng.pc.receipt.receiptHeaderHistory.domain.ReceiptHeaderHistory; |
36 | 32 | import com.huaheng.pc.receipt.receiptHeaderHistory.service.ReceiptHeaderHistoryService; |
37 | -import org.apache.commons.beanutils.BeanUtils; | |
38 | 33 | import org.springframework.stereotype.Component; |
39 | 34 | import org.springframework.transaction.annotation.Transactional; |
40 | 35 | |
41 | 36 | import javax.annotation.Resource; |
42 | -import java.lang.reflect.InvocationTargetException; | |
43 | 37 | import java.math.BigDecimal; |
44 | 38 | import java.util.ArrayList; |
45 | -import java.util.Arrays; | |
46 | 39 | import java.util.List; |
47 | 40 | |
48 | 41 | @Component |
... | ... | @@ -70,43 +63,45 @@ public class ReceiptApiService { |
70 | 63 | private ReceiptHeaderHistoryService receiptHeaderHistoryService; |
71 | 64 | @Resource |
72 | 65 | private ReceiptDetailHistoryService receiptDetailHistoryService; |
66 | + | |
73 | 67 | /** |
74 | 68 | * 入库单下发 |
69 | + * | |
75 | 70 | * @param receipt 入库单 |
76 | 71 | * @return 是否下发成功 |
77 | 72 | */ |
78 | 73 | @Transactional(rollbackFor = Exception.class) |
79 | - public AjaxResult receipt(ReceiptDomain receipt){ | |
74 | + public AjaxResult receipt(ReceiptDomain receipt) { | |
80 | 75 | |
81 | 76 | /* 0.step 获取入库头表,获取入库明细*/ |
82 | 77 | ReceiptHeader receiptHeader = receipt.getReceiptHeader(); |
83 | 78 | List<ReceiptDetail> receiptDetails = receipt.getReceiptDetails(); |
84 | 79 | /* 1.step 校验入库单是否为空*/ |
85 | - if (receiptHeader == null || receiptDetails.isEmpty()){ | |
80 | + if (receiptHeader == null || receiptDetails.isEmpty()) { | |
86 | 81 | throw new ServiceException("入库主单或入库子单为空"); |
87 | 82 | } |
88 | 83 | /* 2.step 检查入库头表合法性*/ |
89 | 84 | AjaxResult checkReceiptHeaderResult = checkReceiptHeader(receiptHeader); |
90 | - if (checkReceiptHeaderResult.hasErr() ){ | |
85 | + if (checkReceiptHeaderResult.hasErr()) { | |
91 | 86 | return AjaxResult.error(checkReceiptHeaderResult.getMsg()); |
92 | 87 | } |
93 | 88 | |
94 | 89 | /* 3.step 检查入库明细合法性*/ |
95 | 90 | AjaxResult checkReceiptDetailResult = checkReceiptDetail(receiptDetails); |
96 | - if (checkReceiptDetailResult.hasErr() ){ | |
91 | + if (checkReceiptDetailResult.hasErr()) { | |
97 | 92 | return AjaxResult.error(checkReceiptDetailResult.getMsg()); |
98 | 93 | } |
99 | 94 | |
100 | 95 | /* 4.step 计算入库明细总行数、总数量*/ |
101 | 96 | BigDecimal totalQty = new BigDecimal(0); |
102 | - for (ReceiptDetail receiptDetail: receiptDetails) { | |
97 | + for (ReceiptDetail receiptDetail : receiptDetails) { | |
103 | 98 | totalQty.add(receiptDetail.getTotalQty()); |
104 | 99 | } |
105 | 100 | receiptHeader.setTotalLines(receiptDetails.size()); |
106 | 101 | receiptHeader.setTotalQty(totalQty); |
107 | 102 | |
108 | 103 | /* 5.step 保存的入库头表*/ |
109 | - if (!receiptHeaderService.save(receiptHeader)){ | |
104 | + if (!receiptHeaderService.save(receiptHeader)) { | |
110 | 105 | throw new ServiceException("保存入库头表失败"); |
111 | 106 | } |
112 | 107 | |
... | ... | @@ -115,7 +110,7 @@ public class ReceiptApiService { |
115 | 110 | lambda.eq(ReceiptHeader::getWarehouseCode, receiptHeader.getWarehouseCode()) |
116 | 111 | .eq(ReceiptHeader::getCode, receiptHeader.getCode()); |
117 | 112 | receiptHeader = receiptHeaderService.getOne(lambda); |
118 | - List<ReceiptDetail> jsonListDetail= new ArrayList<ReceiptDetail>(); | |
113 | + List<ReceiptDetail> jsonListDetail = new ArrayList<ReceiptDetail>(); | |
119 | 114 | for (ReceiptDetail receiptDetail : receiptDetails) { |
120 | 115 | receiptDetail.setReceiptId(receiptHeader.getId()); |
121 | 116 | receiptDetail.setReceiptCode(receiptHeader.getCode()); |
... | ... | @@ -125,14 +120,14 @@ public class ReceiptApiService { |
125 | 120 | receiptDetail.setMaterialName(material.getName()); |
126 | 121 | receiptDetail.setMaterialSpec(material.getSpec()); |
127 | 122 | receiptDetail.setMaterialUnit(material.getUnit()); |
128 | - if (!receiptDetailService.save(receiptDetail)){ | |
123 | + if (!receiptDetailService.save(receiptDetail)) { | |
129 | 124 | throw new ServiceException("保存入库明细失败"); |
130 | 125 | } |
131 | - jsonListDetail.add(receiptDetail); | |
126 | + jsonListDetail.add(receiptDetail); | |
132 | 127 | |
133 | 128 | } |
134 | 129 | /* 6.step回传入库单和入库明细单 */ |
135 | - ReceiptDomain receiptDomain =new ReceiptDomain(); | |
130 | + ReceiptDomain receiptDomain = new ReceiptDomain(); | |
136 | 131 | receiptDomain.setReceiptHeader(receiptHeader); |
137 | 132 | receiptDomain.setReceiptDetails(jsonListDetail); |
138 | 133 | |
... | ... | @@ -141,42 +136,43 @@ public class ReceiptApiService { |
141 | 136 | |
142 | 137 | /** |
143 | 138 | * 检查入库头表合法性 |
139 | + * | |
144 | 140 | * @param receiptHeader 入库头表 |
145 | 141 | * @return 检查结果 |
146 | 142 | */ |
147 | - private AjaxResult checkReceiptHeader(ReceiptHeader receiptHeader){ | |
143 | + private AjaxResult checkReceiptHeader(ReceiptHeader receiptHeader) { | |
148 | 144 | /* 0.step 必填项是否为空*/ |
149 | 145 | if (StringUtils.isEmpty(receiptHeader.getCode()) || StringUtils.isEmpty(receiptHeader.getCompanyCode()) || |
150 | - StringUtils.isEmpty(receiptHeader.getWarehouseCode()) || StringUtils.isEmpty(receiptHeader.getReceiptType())){ | |
146 | + StringUtils.isEmpty(receiptHeader.getWarehouseCode()) || StringUtils.isEmpty(receiptHeader.getReceiptType())) { | |
151 | 147 | return AjaxResult.error("入库主单字段有误"); |
152 | 148 | } |
153 | 149 | |
154 | 150 | /* 1.step 查询该单据编码是否已存在*/ |
155 | 151 | LambdaQueryWrapper<ReceiptHeader> receiptHeaderLambda = Wrappers.lambdaQuery(receiptHeader); |
156 | - if (receiptHeaderService.getOne(receiptHeaderLambda) != null){ | |
157 | - return AjaxResult.error("该单据已存在:"+receiptHeader.getCode()); | |
152 | + if (receiptHeaderService.getOne(receiptHeaderLambda) != null) { | |
153 | + return AjaxResult.error("该单据已存在:" + receiptHeader.getCode()); | |
158 | 154 | } |
159 | 155 | |
160 | 156 | /* 2.step 判断入库类型是否匹配*/ |
161 | 157 | LambdaQueryWrapper<ReceiptType> receiptTypeLambda = Wrappers.lambdaQuery(); |
162 | 158 | receiptTypeLambda.eq(ReceiptType::getCode, receiptHeader.getReceiptType()) |
163 | - .eq(ReceiptType::getWarehouseCode,receiptHeader.getWarehouseCode()) | |
164 | - .eq(ReceiptType::getCompanyCode,receiptHeader.getCompanyCode()); | |
165 | - if (receiptTypeService.getOne(receiptTypeLambda) == null){ | |
159 | + .eq(ReceiptType::getWarehouseCode, receiptHeader.getWarehouseCode()) | |
160 | + .eq(ReceiptType::getCompanyCode, receiptHeader.getCompanyCode()); | |
161 | + if (receiptTypeService.getOne(receiptTypeLambda) == null) { | |
166 | 162 | return AjaxResult.error("没有对应的入库单类型"); |
167 | 163 | } |
168 | 164 | |
169 | 165 | /* 3.step 判断仓库是否存在*/ |
170 | 166 | LambdaQueryWrapper<Warehouse> warehouseLambda = Wrappers.lambdaQuery(); |
171 | 167 | warehouseLambda.eq(Warehouse::getCode, receiptHeader.getWarehouseCode()); |
172 | - if (warehouseService.getOne(warehouseLambda) == null){ | |
168 | + if (warehouseService.getOne(warehouseLambda) == null) { | |
173 | 169 | return AjaxResult.error("该仓库不存在"); |
174 | 170 | } |
175 | 171 | |
176 | 172 | /* 4.step 判断货主是否存在*/ |
177 | 173 | LambdaQueryWrapper<Company> companyLambda = Wrappers.lambdaQuery(); |
178 | 174 | companyLambda.eq(Company::getCode, receiptHeader.getCompanyCode()); |
179 | - if (companyService.getOne(companyLambda) == null){ | |
175 | + if (companyService.getOne(companyLambda) == null) { | |
180 | 176 | return AjaxResult.error("该货主不存在"); |
181 | 177 | } |
182 | 178 | |
... | ... | @@ -185,21 +181,22 @@ public class ReceiptApiService { |
185 | 181 | |
186 | 182 | /** |
187 | 183 | * 检查入库明细合法性 |
184 | + * | |
188 | 185 | * @param receiptDetails 入库明细 |
189 | 186 | * @return 检查结果 |
190 | 187 | */ |
191 | - private AjaxResult checkReceiptDetail(List<ReceiptDetail> receiptDetails){ | |
188 | + private AjaxResult checkReceiptDetail(List<ReceiptDetail> receiptDetails) { | |
192 | 189 | |
193 | - for (ReceiptDetail receiptDetail: receiptDetails) { | |
190 | + for (ReceiptDetail receiptDetail : receiptDetails) { | |
194 | 191 | /* 0.step 判断必填字段是否为空且总数量不能为0*/ |
195 | 192 | if (receiptDetail.getMaterialCode() == null || |
196 | 193 | new BigDecimal(0).compareTo(receiptDetail.getTotalQty() != null ? |
197 | - receiptDetail.getTotalQty() : new BigDecimal(0)) == 0 ){ | |
194 | + receiptDetail.getTotalQty() : new BigDecimal(0)) == 0) { | |
198 | 195 | return AjaxResult.error("入库明细字段有误"); |
199 | 196 | } |
200 | 197 | |
201 | 198 | /* 1.step 判断供应商是否存在*/ |
202 | - if (receiptDetail.getSupplierCode() != null){ | |
199 | + if (receiptDetail.getSupplierCode() != null) { | |
203 | 200 | LambdaQueryWrapper<Supplier> supplierLambda = Wrappers.lambdaQuery(); |
204 | 201 | supplierLambda.eq(Supplier::getCode, receiptDetail.getSupplierCode()); |
205 | 202 | if (supplierService.getOne(supplierLambda) == null) { |
... | ... | @@ -208,26 +205,26 @@ public class ReceiptApiService { |
208 | 205 | } |
209 | 206 | |
210 | 207 | /* 2.step 判断定位规则是否存在*/ |
211 | - if (receiptDetail.getLocatingRule() != null){ | |
208 | + if (receiptDetail.getLocatingRule() != null) { | |
212 | 209 | LambdaQueryWrapper<FilterConfigDetail> filterConfigDetailLambda = Wrappers.lambdaQuery(); |
213 | 210 | filterConfigDetailLambda.eq(FilterConfigDetail::getCode, receiptDetail.getLocatingRule()) |
214 | 211 | .eq(FilterConfigDetail::getModuleType, "receipt") |
215 | 212 | .eq(FilterConfigDetail::getRecordType, "locationRule"); |
216 | 213 | FilterConfigDetail filterConfigDetail = filterConfigDetailService.getOne(filterConfigDetailLambda); |
217 | - if (filterConfigDetail == null){ | |
218 | - return AjaxResult.error(receiptDetail.getLocatingRule()+"定位规则不存在"); | |
214 | + if (filterConfigDetail == null) { | |
215 | + return AjaxResult.error(receiptDetail.getLocatingRule() + "定位规则不存在"); | |
219 | 216 | } |
220 | 217 | } |
221 | 218 | |
222 | 219 | /* 3.step 判断流程编码是否存在*/ |
223 | - if (receiptDetail.getStatusFlowCode() != null){ | |
220 | + if (receiptDetail.getStatusFlowCode() != null) { | |
224 | 221 | LambdaQueryWrapper<StatusFlowHeader> statusFlowHeaderLambda = Wrappers.lambdaQuery(); |
225 | 222 | statusFlowHeaderLambda.eq(StatusFlowHeader::getCode, receiptDetail.getStatusFlowCode()) |
226 | 223 | .eq(StatusFlowHeader::getModuleType, "receipt") |
227 | 224 | .eq(StatusFlowHeader::getRecordType, "receivingFlow"); |
228 | 225 | StatusFlowHeader statusFlowHeader = statusFlowHeaderService.getOne(statusFlowHeaderLambda); |
229 | - if (statusFlowHeader == null){ | |
230 | - return AjaxResult.error(receiptDetail.getLocatingRule()+"该流程不存在"); | |
226 | + if (statusFlowHeader == null) { | |
227 | + return AjaxResult.error(receiptDetail.getLocatingRule() + "该流程不存在"); | |
231 | 228 | } |
232 | 229 | } |
233 | 230 | } |
... | ... | @@ -237,47 +234,45 @@ public class ReceiptApiService { |
237 | 234 | |
238 | 235 | |
239 | 236 | @Transactional |
240 | - public AjaxResult remove(Integer[] ids){ | |
241 | - List<Integer> idList = Arrays.asList(ids); | |
242 | - for (Integer id : idList) { | |
243 | - ReceiptHeader receiptHeader = receiptHeaderService.getById(id); | |
244 | - if (receiptHeader == null) { | |
237 | + public AjaxResult remove(List<String> receiptCodeList) { | |
238 | + LambdaQueryWrapper<ReceiptHeader> headerQueryWrapper; | |
239 | + for (String receiptCode : receiptCodeList) { | |
240 | + headerQueryWrapper = Wrappers.lambdaQuery(); | |
241 | + headerQueryWrapper.eq(ReceiptHeader::getCode,receiptCode); | |
242 | + ReceiptHeader receiptHeader = receiptHeaderService.getOne(headerQueryWrapper); | |
243 | + if (receiptHeader == null) { | |
245 | 244 | return AjaxResult.success(""); |
246 | 245 | } |
247 | - if((receiptHeader.getFirstStatus()>= QuantityConstant.RECEIPT_HEADER_POSTING && receiptHeader.getLastStatus()>=QuantityConstant.RECEIPT_HEADER_POSTING)|| | |
248 | - (receiptHeader.getFirstStatus()<QuantityConstant.RECEIPT_HEADER_POOL &receiptHeader.getLastStatus()<QuantityConstant.RECEIPT_HEADER_POOL)){ | |
246 | + if ((receiptHeader.getFirstStatus() >= QuantityConstant.RECEIPT_HEADER_POSTING && receiptHeader.getLastStatus() >= QuantityConstant.RECEIPT_HEADER_POSTING) || | |
247 | + (receiptHeader.getFirstStatus() < QuantityConstant.RECEIPT_HEADER_POOL & receiptHeader.getLastStatus() < QuantityConstant.RECEIPT_HEADER_POOL)) { | |
249 | 248 | ReceiptHeaderHistory receiptHeaderHistory = new ReceiptHeaderHistory(); |
250 | 249 | List<ReceiptDetailHistory> receiptDetailHistoryList = new ArrayList<>(); |
251 | 250 | //查询入库单明细 |
252 | 251 | LambdaQueryWrapper<ReceiptDetail> lambdaQueryWrapper = Wrappers.lambdaQuery(); |
253 | - lambdaQueryWrapper.eq(ReceiptDetail::getReceiptId, id); | |
252 | + lambdaQueryWrapper.eq(ReceiptDetail::getReceiptCode, receiptCode); | |
254 | 253 | List<ReceiptDetail> list = receiptDetailService.list(lambdaQueryWrapper); |
255 | - try { | |
256 | - //复制到入库历史实体 | |
257 | - BeanUtils.copyProperties(receiptHeaderHistory, receiptHeader); | |
258 | - for (ReceiptDetail receiptDetail: list) { | |
259 | - ReceiptDetailHistory receiptDetailHistory = new ReceiptDetailHistory(); | |
260 | - BeanUtils.copyProperties(receiptDetailHistory, receiptDetail); | |
261 | - receiptDetailHistoryList.add(receiptDetailHistory); | |
262 | - } | |
263 | - } catch (IllegalAccessException e) { | |
264 | - e.printStackTrace(); | |
265 | - } catch (InvocationTargetException e) { | |
266 | - e.printStackTrace(); | |
254 | + | |
255 | + //复制到入库历史实体 | |
256 | + com.huaheng.common.utils.bean.BeanUtils.copyBeanProp(receiptHeaderHistory, receiptHeader); | |
257 | + for (ReceiptDetail receiptDetail : list) { | |
258 | + ReceiptDetailHistory receiptDetailHistory = new ReceiptDetailHistory(); | |
259 | + com.huaheng.common.utils.bean.BeanUtils.copyBeanProp(receiptDetailHistory, receiptDetail); | |
260 | + receiptDetailHistoryList.add(receiptDetailHistory); | |
267 | 261 | } |
268 | 262 | |
263 | + | |
269 | 264 | receiptHeaderHistory.setLastUpdatedBy(ShiroUtils.getLoginName()); |
270 | - if (!receiptHeaderService.removeById(receiptHeader.getId())){ | |
265 | + if (!receiptHeaderService.removeById(receiptHeader.getId())) { | |
271 | 266 | throw new ServiceException("删除头表失败"); |
272 | 267 | } |
273 | - if(!receiptHeaderHistoryService.save(receiptHeaderHistory)){ | |
268 | + if (!receiptHeaderHistoryService.save(receiptHeaderHistory)) { | |
274 | 269 | throw new ServiceException("新增历史入库单失败"); |
275 | 270 | } |
276 | 271 | // 当存在明细时删除 |
277 | - if (list.size()!= 0){ | |
272 | + if (list.size() != 0) { | |
278 | 273 | //删除入库明细 |
279 | 274 | List<Integer> receiptDetailIds = new ArrayList<>(); |
280 | - for (int i=0; i<receiptDetailHistoryList.size();i++){ | |
275 | + for (int i = 0; i < receiptDetailHistoryList.size(); i++) { | |
281 | 276 | receiptDetailHistoryList.get(i).setLastUpdatedBy(ShiroUtils.getLoginName()); |
282 | 277 | receiptDetailHistoryList.get(i).setReceiptId(receiptHeaderHistory.getId()); |
283 | 278 | receiptDetailIds.add(receiptDetailHistoryList.get(i).getId()); |
... | ... | @@ -285,14 +280,37 @@ public class ReceiptApiService { |
285 | 280 | if (!receiptDetailService.removeByIds(receiptDetailIds)) { |
286 | 281 | throw new ServiceException("删除明细表失败"); |
287 | 282 | } |
288 | - if (!receiptDetailHistoryService.saveBatch(receiptDetailHistoryList)){ | |
283 | + if (!receiptDetailHistoryService.saveBatch(receiptDetailHistoryList)) { | |
289 | 284 | throw new ServiceException("新增明细失败"); |
290 | - } } | |
291 | - | |
292 | - }else { | |
285 | + } | |
286 | + } | |
287 | + } else { | |
293 | 288 | return AjaxResult.success("入库单没有完成,无法删除"); |
294 | 289 | } |
295 | 290 | } |
296 | 291 | return AjaxResult.success("删除成功"); |
297 | 292 | } |
293 | + | |
294 | + public AjaxResult search(String receiptCode, String companyCode, String warehouseCode) { | |
295 | + if (companyCode == null) { | |
296 | + return AjaxResult.error("货主编码不能为空"); | |
297 | + } | |
298 | + if (warehouseCode == null) { | |
299 | + return AjaxResult.error("仓库编码不能为空"); | |
300 | + } | |
301 | + ReceiptDomain receiptDomain = new ReceiptDomain(); | |
302 | + LambdaQueryWrapper<ReceiptHeader> headerLambdaQuery = Wrappers.lambdaQuery(); | |
303 | + LambdaQueryWrapper<ReceiptDetail> detailLambdaQuery = Wrappers.lambdaQuery(); | |
304 | + headerLambdaQuery.eq(ReceiptHeader::getWarehouseCode, warehouseCode) | |
305 | + .eq(ReceiptHeader::getCompanyCode, companyCode) | |
306 | + .eq(ReceiptHeader::getCode, receiptCode); | |
307 | + detailLambdaQuery.eq(ReceiptDetail::getWarehouseCode, warehouseCode) | |
308 | + .eq(ReceiptDetail::getCompanyCode, companyCode) | |
309 | + .eq(ReceiptDetail::getReceiptCode, receiptCode); | |
310 | + ReceiptHeader receiptHeader = receiptHeaderService.getOne(headerLambdaQuery); | |
311 | + List<ReceiptDetail> receiptDetailList = receiptDetailService.list(detailLambdaQuery); | |
312 | + receiptDomain.setReceiptHeader(receiptHeader); | |
313 | + receiptDomain.setReceiptDetails(receiptDetailList); | |
314 | + return AjaxResult.success("查询成功", receiptDomain); | |
315 | + } | |
298 | 316 | } |
... | ... |
src/main/java/com/huaheng/api/general/service/ShipmentApiService.java
... | ... | @@ -3,6 +3,7 @@ package com.huaheng.api.general.service; |
3 | 3 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
4 | 4 | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
5 | 5 | import com.huaheng.api.general.domain.ShipmentDomain; |
6 | +import com.huaheng.common.constant.QuantityConstant; | |
6 | 7 | import com.huaheng.common.exception.service.ServiceException; |
7 | 8 | import com.huaheng.common.utils.StringUtils; |
8 | 9 | import com.huaheng.common.utils.security.ShiroUtils; |
... | ... | @@ -19,12 +20,17 @@ import com.huaheng.pc.config.warehouse.domain.Warehouse; |
19 | 20 | import com.huaheng.pc.config.warehouse.service.WarehouseService; |
20 | 21 | import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail; |
21 | 22 | import com.huaheng.pc.shipment.shipmentDetail.service.ShipmentDetailService; |
23 | +import com.huaheng.pc.shipment.shipmentDetailHistory.domain.ShipmentDetailHistory; | |
24 | +import com.huaheng.pc.shipment.shipmentDetailHistory.service.ShipmentDetailHistoryService; | |
22 | 25 | import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader; |
23 | 26 | import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService; |
27 | +import com.huaheng.pc.shipment.shipmentHeaderHistory.domain.ShipmentHeaderHistory; | |
28 | +import com.huaheng.pc.shipment.shipmentHeaderHistory.service.ShipmentHeaderHistoryService; | |
24 | 29 | import org.springframework.beans.factory.annotation.Autowired; |
25 | 30 | import org.springframework.stereotype.Component; |
26 | 31 | import org.springframework.transaction.annotation.Transactional; |
27 | 32 | |
33 | +import javax.annotation.Resource; | |
28 | 34 | import java.math.BigDecimal; |
29 | 35 | import java.util.ArrayList; |
30 | 36 | import java.util.List; |
... | ... | @@ -61,6 +67,12 @@ public class ShipmentApiService { |
61 | 67 | @Autowired |
62 | 68 | private MaterialService materialService; |
63 | 69 | |
70 | + @Resource | |
71 | + private ShipmentHeaderHistoryService shipmentHeaderHistoryService; | |
72 | + | |
73 | + @Resource | |
74 | + private ShipmentDetailHistoryService shipmentDetailHistoryService; | |
75 | + | |
64 | 76 | /** |
65 | 77 | * 出库单下发 |
66 | 78 | * |
... | ... | @@ -225,4 +237,85 @@ public class ShipmentApiService { |
225 | 237 | } |
226 | 238 | return shipmentDetails; |
227 | 239 | } |
240 | + | |
241 | + @Transactional | |
242 | + public AjaxResult remove(List<String> shipmentCodeList) { | |
243 | + LambdaQueryWrapper<ShipmentHeader> headerQueryWrapper; | |
244 | + for (String shipmentCode : shipmentCodeList) { | |
245 | + headerQueryWrapper = Wrappers.lambdaQuery(); | |
246 | + headerQueryWrapper.eq(ShipmentHeader::getCode,shipmentCode); | |
247 | + ShipmentHeader shipmentHeader = shipmentHeaderService.getOne(headerQueryWrapper); | |
248 | + if (shipmentHeader == null) { | |
249 | + return AjaxResult.success(""); | |
250 | + } | |
251 | + if ((shipmentHeader.getFirstStatus() >= QuantityConstant.SHIPMENT_HEADER_RETURN && shipmentHeader.getLastStatus() >= QuantityConstant.SHIPMENT_HEADER_RETURN) || | |
252 | + (shipmentHeader.getFirstStatus() < QuantityConstant.SHIPMENT_HEADER_POOL & shipmentHeader.getLastStatus() < QuantityConstant.SHIPMENT_HEADER_POOL)) { | |
253 | + ShipmentHeaderHistory shipmentHeaderHistory = new ShipmentHeaderHistory(); | |
254 | + List<ShipmentDetailHistory> shipmentDetailHistoryList = new ArrayList<>(); | |
255 | + //查询入库单明细 | |
256 | + LambdaQueryWrapper<ShipmentDetail> lambdaQueryWrapper = Wrappers.lambdaQuery(); | |
257 | + lambdaQueryWrapper.eq(ShipmentDetail::getShipmentCode, shipmentCode); | |
258 | + List<ShipmentDetail> list = shipmentDetailService.list(lambdaQueryWrapper); | |
259 | + | |
260 | + //复制到入库历史实体 | |
261 | + com.huaheng.common.utils.bean.BeanUtils.copyBeanProp(shipmentHeaderHistory, shipmentHeader); | |
262 | + for (ShipmentDetail shipmentDetail : list) { | |
263 | + ShipmentDetailHistory shipmentDetailHistory = new ShipmentDetailHistory(); | |
264 | + com.huaheng.common.utils.bean.BeanUtils.copyBeanProp(shipmentDetailHistory, shipmentDetail); | |
265 | + shipmentDetailHistoryList.add(shipmentDetailHistory); | |
266 | + } | |
267 | + | |
268 | + | |
269 | + shipmentHeaderHistory.setLastUpdatedBy(ShiroUtils.getLoginName()); | |
270 | + if (!shipmentHeaderService.removeById(shipmentHeader.getId())) { | |
271 | + throw new ServiceException("删除头表失败"); | |
272 | + } | |
273 | + if (!shipmentHeaderHistoryService.save(shipmentHeaderHistory)) { | |
274 | + throw new ServiceException("新增历史出库单失败"); | |
275 | + } | |
276 | + // 当存在明细时删除 | |
277 | + if (list.size() != 0) { | |
278 | + //删除入库明细 | |
279 | + List<Integer> shipmentDetailIds = new ArrayList<>(); | |
280 | + for (int i = 0; i < shipmentDetailHistoryList.size(); i++) { | |
281 | + shipmentDetailHistoryList.get(i).setLastUpdatedBy(ShiroUtils.getLoginName()); | |
282 | + shipmentDetailHistoryList.get(i).setShipmentId(shipmentHeaderHistory.getId()); | |
283 | + shipmentDetailIds.add(shipmentDetailHistoryList.get(i).getId()); | |
284 | + } | |
285 | + if (!shipmentDetailService.removeByIds(shipmentDetailIds)) { | |
286 | + throw new ServiceException("删除明细表失败"); | |
287 | + } | |
288 | + if (!shipmentDetailHistoryService.saveBatch(shipmentDetailHistoryList)) { | |
289 | + throw new ServiceException("新增明细失败"); | |
290 | + } | |
291 | + } | |
292 | + } else { | |
293 | + return AjaxResult.success("出库单没有完成,无法删除"); | |
294 | + } | |
295 | + } | |
296 | + return AjaxResult.success("删除成功"); | |
297 | + } | |
298 | + | |
299 | + public AjaxResult search(String shipmentCode,String companyCode,String warehouseCode){ | |
300 | + if (companyCode==null){ | |
301 | + return AjaxResult.error("货主编码不能为空"); | |
302 | + } | |
303 | + if (warehouseCode==null){ | |
304 | + return AjaxResult.error("仓库编码不能为空"); | |
305 | + } | |
306 | + ShipmentDomain shipmentDomain = new ShipmentDomain(); | |
307 | + LambdaQueryWrapper<ShipmentHeader> headerLambdaQuery = Wrappers.lambdaQuery(); | |
308 | + LambdaQueryWrapper<ShipmentDetail> detailLambdaQuery = Wrappers.lambdaQuery(); | |
309 | + headerLambdaQuery.eq(ShipmentHeader::getWarehouseCode,warehouseCode) | |
310 | + .eq(ShipmentHeader::getCompanyCode,companyCode) | |
311 | + .eq(ShipmentHeader::getCode,shipmentCode); | |
312 | + detailLambdaQuery.eq(ShipmentDetail::getWarehouseCode,warehouseCode) | |
313 | + .eq(ShipmentDetail::getCompanyCode,companyCode) | |
314 | + .eq(ShipmentDetail::getShipmentCode,shipmentCode); | |
315 | + ShipmentHeader shipmentHeader = shipmentHeaderService.getOne(headerLambdaQuery); | |
316 | + List<ShipmentDetail> shipmentDetailList = shipmentDetailService.list(detailLambdaQuery); | |
317 | + shipmentDomain.setShipmentHeader(shipmentHeader); | |
318 | + shipmentDomain.setShipmentDetails(shipmentDetailList); | |
319 | + return AjaxResult.success("查询成功",shipmentDomain); | |
320 | + } | |
228 | 321 | } |
... | ... |
src/main/resources/templates/task/taskHeader/taskHeader.html
... | ... | @@ -165,7 +165,7 @@ |
165 | 165 | actions.push('<a class="btn btn-info btn-xs " href="#" onclick="detail(\'' + row.id + '\')"><i class="fa fa-list-ul"></i>明细</a> '); |
166 | 166 | if (row.status < 10) { |
167 | 167 | if(row.taskType == 300 || row.taskType == 400) { |
168 | - actions.push('<a class="btn btn-success btn-xs ' + executeFlag + '" href="#" onclick="chooseStation(\'' + row.id + '\')"><i class="fa fa-send" style="padding-right: 1px;"></i>执行</a> '); | |
168 | + actions.push('<a class="btn btn-success btn-xs ' + executeFlag + '" href="#" onclick="chooseStation(\'' + row.id + '\')"><i class="fa fa-send" style="padding-right: 1px;"></i>选择站台</a> '); | |
169 | 169 | } else { |
170 | 170 | actions.push('<a class="btn btn-success btn-xs ' + executeFlag + '" href="#" onclick="execute(\'' + row.id + '\')"><i class="fa fa-send" style="padding-right: 1px;"></i>执行</a> '); |
171 | 171 | } |
... | ... | @@ -210,7 +210,7 @@ |
210 | 210 | visible:true |
211 | 211 | }, |
212 | 212 | { |
213 | - field : 'containerCode', | |
213 | + field : 'containerCode', | |
214 | 214 | title : '容器号' , |
215 | 215 | sortable: true |
216 | 216 | }, |
... | ... | @@ -248,30 +248,30 @@ |
248 | 248 | sortable: true |
249 | 249 | }, |
250 | 250 | { |
251 | - field : 'createdBy', | |
252 | - title : '任务下达人' | |
251 | + field : 'createdBy', | |
252 | + title : '任务下达人' | |
253 | 253 | }, |
254 | 254 | { |
255 | - field : 'lastUpdated', | |
255 | + field : 'lastUpdated', | |
256 | 256 | title : '修改时间' , |
257 | 257 | sortable: true, |
258 | 258 | }, |
259 | 259 | { |
260 | - field : 'lastUpdatedBy', | |
261 | - title : '更新用户' | |
260 | + field : 'lastUpdatedBy', | |
261 | + title : '更新用户' | |
262 | 262 | }, |
263 | 263 | { |
264 | - field : 'userDef1', | |
264 | + field : 'userDef1', | |
265 | 265 | title : '自定义字段1' , |
266 | 266 | visible:false |
267 | 267 | }, |
268 | 268 | { |
269 | - field : 'userDef2', | |
269 | + field : 'userDef2', | |
270 | 270 | title : '自定义字段2' , |
271 | 271 | visible:false |
272 | 272 | }, |
273 | 273 | { |
274 | - field : 'userDef3', | |
274 | + field : 'userDef3', | |
275 | 275 | title : '自定义字段3' , |
276 | 276 | visible:false |
277 | 277 | } |
... | ... | @@ -559,4 +559,4 @@ |
559 | 559 | } |
560 | 560 | </script> |
561 | 561 | </body> |
562 | -</html> | |
563 | 562 | \ No newline at end of file |
563 | +</html> | |
... | ... |