Преглед на файлове

1.新增文件导出,上传工具类

2.新增入库模板下载功能接口
3.新增入库模板导入功能接口
4.新增批量入库功能接口
dw преди 4 месеца
родител
ревизия
af1ae433ef

+ 101
- 4
sto/src/main/java/com/shinsoft/sto/controller/record/InRecordController.java Целия файл

@@ -1,22 +1,29 @@
1 1
 package com.shinsoft.sto.controller.record;
2 2
 
3 3
 import com.alibaba.fastjson.JSON;
4
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
5
+import com.shinsoft.sto.model.record.ImportModel;
4 6
 import com.shinsoft.sto.model.system.ResultJSON;
5 7
 import com.shinsoft.sto.service.record.InrecordService;
8
+import com.shinsoft.sto.tools.ExcelExportTools;
6 9
 import org.springframework.beans.factory.annotation.Autowired;
7
-import org.springframework.web.bind.annotation.GetMapping;
8
-import org.springframework.web.bind.annotation.RequestMapping;
9
-import org.springframework.web.bind.annotation.RequestParam;
10
-import org.springframework.web.bind.annotation.RestController;
10
+import org.springframework.web.bind.annotation.*;
11
+import org.springframework.web.multipart.MultipartFile;
11 12
 
12 13
 import javax.servlet.http.HttpServletRequest;
14
+import javax.servlet.http.HttpServletResponse;
15
+import java.util.ArrayList;
13 16
 import java.util.HashMap;
17
+import java.util.List;
14 18
 import java.util.Map;
15 19
 
16 20
 @RestController
17 21
 @RequestMapping("/InRecord")
18 22
 public class InRecordController {
19 23
 
24
+    @Autowired
25
+    private ExcelExportTools excelExportTools;
26
+
20 27
     @Autowired
21 28
     private InrecordService inrecordService;
22 29
 
@@ -53,6 +60,22 @@ public class InRecordController {
53 60
         return belongId;
54 61
     }
55 62
 
63
+    private String resolveUserId(HttpServletRequest request) {
64
+        String userId = (String) request.getHeader("userId");
65
+        if (userId == null) {
66
+            userId = (String) request.getAttribute("userId");
67
+        }
68
+        return userId;
69
+    }
70
+
71
+    private String resolveUserName(HttpServletRequest request) {
72
+        String userId = (String) request.getHeader("userName");
73
+        if (userId == null) {
74
+            userId = (String) request.getAttribute("userName");
75
+        }
76
+        return userId;
77
+    }
78
+
56 79
     @SuppressWarnings("unchecked")
57 80
     private Map<String, Object> buildQueryParams(String params, HttpServletRequest request) {
58 81
         Map<String, Object> map = new HashMap<>();
@@ -62,5 +85,79 @@ public class InRecordController {
62 85
 //        map.put("belongId", resolveBelongId(request));
63 86
         return map;
64 87
     }
88
+
89
+    /**
90
+     * 下载导入模板
91
+     */
92
+    @RequestMapping("/exportExcel")
93
+    public void exportExcel(HttpServletResponse response) {
94
+        try {
95
+            List<ImportModel> list = new ArrayList<>();
96
+            excelExportTools.exportExcel(response, list, "入库模板", "入库模板", ImportModel.class);
97
+        } catch (Exception ex) {
98
+            ex.printStackTrace();
99
+        }
100
+    }
101
+
102
+    /**
103
+     * Excel文件上传
104
+     */
105
+    @RequestMapping("/uploadExcel")
106
+    public ResultJSON uploadExcel(MultipartFile file, HttpServletRequest request) {
107
+        try {
108
+            if (file == null || file.isEmpty()) {
109
+                return ResultJSON.error("请选择要上传的文件");
110
+            }
111
+
112
+            // 验证文件类型
113
+            String fileName = file.getOriginalFilename();
114
+            if (fileName == null || (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx"))) {
115
+                return ResultJSON.error("请上传Excel文件(.xls 或 .xlsx)");
116
+            }
117
+
118
+            // 解析Excel文件
119
+            List<ImportModel> dataList = excelExportTools.parseExcelFile(file);
120
+            return ResultJSON.success(dataList);
121
+        } catch (Exception ex) {
122
+            ex.printStackTrace();
123
+            return ResultJSON.error("文件上传失败:" + ex.getMessage());
124
+        }
125
+    }
126
+
127
+
128
+
129
+
130
+//    /**
131
+//     * 单张入库
132
+//     */
133
+//    @RequestMapping("/in")
134
+//    public ResultJSON in( String json, HttpServletRequest request) {
135
+//        try {
136
+//            String belongId = resolveBelongId(request);
137
+//            String userId = resolveUserId(request);
138
+//            return inrecordService.in(userId, json, belongId);
139
+//        } catch (Exception ex) {
140
+//            ex.printStackTrace();
141
+//            return ResultJSON.error("入库失败:" + ex.getMessage());
142
+//        }
143
+//    }
144
+//
145
+    /**
146
+     * 批量入库
147
+     */
148
+    @PostMapping("/batchInStore")
149
+    public ResultJSON batchInStore( @RequestParam("dataList") String json, HttpServletRequest request) {
150
+        try {
151
+            List<ImportModel> dataList = JSON.parseArray(json, ImportModel.class);
152
+            String userId = resolveUserId(request);
153
+            String belongId = resolveBelongId(request);
154
+            String userName = resolveUserName(request);
155
+            return inrecordService.batchInStore(userId, dataList, belongId,userName);
156
+        } catch (Exception ex) {
157
+            ex.printStackTrace();
158
+            return ResultJSON.error("入库失败:" + ex.getMessage());
159
+        }
160
+    }
161
+
65 162
 }
66 163
 

+ 3
- 0
sto/src/main/java/com/shinsoft/sto/model/main/Customer.java Целия файл

@@ -16,6 +16,9 @@ import lombok.experimental.Accessors;
16 16
 @ApiModel(value = "仓库客户", description = "仓库客户基本信息表")
17 17
 public class Customer extends BaseModel {
18 18
 
19
+    @ApiModelProperty
20
+    private String id;
21
+
19 22
     @ApiModelProperty("客户名称")
20 23
     private String customerNm;
21 24
     @ApiModelProperty("客户简称")

+ 1
- 0
sto/src/main/java/com/shinsoft/sto/model/main/Stack.java Целия файл

@@ -50,6 +50,7 @@ public class Stack extends BaseModel {
50 50
 
51 51
     private String isLayer;
52 52
 
53
+    @TableField(exist = false)
53 54
     private Integer onStackAmt;
54 55
 
55 56
 }

+ 2
- 0
sto/src/main/java/com/shinsoft/sto/model/main/Ware.java Целия файл

@@ -16,6 +16,8 @@ import lombok.experimental.Accessors;
16 16
 @ApiModel(value = "仓库", description = "仓库基本信息表")
17 17
 public class Ware extends BaseModel {
18 18
 
19
+    @ApiModelProperty
20
+    private String id;
19 21
     @ApiModelProperty("库房名称")
20 22
     private String wareNm;
21 23
     @ApiModelProperty("库房编码")

+ 94
- 0
sto/src/main/java/com/shinsoft/sto/model/record/ImportModel.java Целия файл

@@ -0,0 +1,94 @@
1
+package com.shinsoft.sto.model.record;
2
+
3
+import com.alibaba.excel.annotation.ExcelProperty;
4
+import com.alibaba.excel.annotation.format.DateTimeFormat;
5
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
6
+import lombok.AllArgsConstructor;
7
+import lombok.Data;
8
+import lombok.NoArgsConstructor;
9
+
10
+import java.math.BigDecimal;
11
+
12
+@Data
13
+@AllArgsConstructor
14
+@NoArgsConstructor
15
+public class ImportModel {
16
+
17
+    @ExcelProperty(value = "仓库名称", index = 0)
18
+    @ColumnWidth(15)
19
+    private String wareName;
20
+
21
+    @ExcelProperty(value = "垛位号", index = 1)
22
+    @ColumnWidth(15)
23
+    private String stackName;
24
+
25
+    @ExcelProperty(value = "层号", index = 2)
26
+    @ColumnWidth(15)
27
+    private String layerNo;
28
+
29
+    @ExcelProperty(value = "物料名称", index = 3)
30
+    @ColumnWidth(15)
31
+    private String materialName;
32
+
33
+    @ExcelProperty(value = "钢种", index = 4)
34
+    private String stGrade;
35
+
36
+    @ExcelProperty(value = "规格", index = 5)
37
+    private String attrib03;
38
+
39
+    @ExcelProperty(value = "数量", index = 6)
40
+    private BigDecimal quantity;
41
+
42
+    @ExcelProperty(value = "重量(默认吨)", index = 7)
43
+    @ColumnWidth(20)
44
+    private BigDecimal weight;
45
+
46
+    @ExcelProperty(value = "入库车号", index = 8)
47
+    @ColumnWidth(15)
48
+    private String inTruckNo;
49
+
50
+    @ExcelProperty(value = "货权公司", index = 9)
51
+    @ColumnWidth(15)
52
+    private String ownerCompany;
53
+
54
+    @ExcelProperty(value = "收货公司", index = 10)
55
+    @ColumnWidth(15)
56
+    private String receivingCompany;
57
+
58
+    @ExcelProperty(value = "材料号", index = 11)
59
+    @ColumnWidth(15)
60
+    private String prodNo;
61
+
62
+    @ExcelProperty(value = "订单号", index = 12)
63
+    @ColumnWidth(15)
64
+    private String attrib01;
65
+
66
+    @ExcelProperty(value = "合约号", index = 13)
67
+    @ColumnWidth(15)
68
+    private String attrib02;
69
+
70
+    @ExcelProperty(value = "捆绑包号", index = 14)
71
+    @ColumnWidth(15)
72
+    private String attrib04;
73
+
74
+    @ExcelProperty(value = "收货地址", index = 15)
75
+    @ColumnWidth(15)
76
+    private String deliveryAddress;
77
+
78
+    @ExcelProperty(value = "产地", index = 16)
79
+    @ColumnWidth(15)
80
+    private String attrib05;
81
+
82
+    @ExcelProperty(value = "备注", index = 17)
83
+    @ColumnWidth(15)
84
+    private String remark1;
85
+
86
+    @ExcelProperty(value = "垛位备注", index = 18)
87
+    @ColumnWidth(15)
88
+    private String remark2;
89
+
90
+    @ExcelProperty(value = "入库/理货人员", index = 19)
91
+    @ColumnWidth(15)
92
+    private String inUser;
93
+//
94
+}

+ 5
- 0
sto/src/main/java/com/shinsoft/sto/model/record/Inrecord.java Целия файл

@@ -122,14 +122,19 @@ public class Inrecord extends BaseModel {
122 122
     private String attrib25;
123 123
 
124 124
     @ApiModelProperty("备注1")
125
+    @TableField("REMARK_1")
125 126
     private String remark1;
126 127
     @ApiModelProperty("备注2")
128
+    @TableField("REMARK_2")
127 129
     private String remark2;
128 130
     @ApiModelProperty("备注3")
131
+    @TableField("REMARK_3")
129 132
     private String remark3;
130 133
     @ApiModelProperty("备注4")
134
+    @TableField("REMARK_4")
131 135
     private String remark4;
132 136
     @ApiModelProperty("备注5")
137
+    @TableField("REMARK_5")
133 138
     private String remark5;
134 139
 
135 140
     @TableField(exist = false)

+ 6
- 0
sto/src/main/java/com/shinsoft/sto/model/ware/ChangeRecord.java Целия файл

@@ -17,6 +17,12 @@ import java.math.BigDecimal;
17 17
 @ApiModel(value = "ChangeRecord", description = "材料操作表")
18 18
 public class ChangeRecord extends BaseModel {
19 19
 
20
+    @ApiModelProperty("ID")
21
+    private String id;
22
+
23
+    @ApiModelProperty("材料ID")
24
+    private String prodId;
25
+
20 26
     @ApiModelProperty("材料号/批号")
21 27
     private String prodNo;
22 28
 

+ 9
- 0
sto/src/main/java/com/shinsoft/sto/model/ware/ProdMaster.java Целия файл

@@ -17,6 +17,9 @@ import java.util.Date;
17 17
 @ApiModel(value = "ProdMaster", description = "材料信息表")
18 18
 public class ProdMaster extends BaseModel {
19 19
 
20
+    @ApiModelProperty("主键ID")
21
+    private String id;
22
+
20 23
     @ApiModelProperty("材料号/批号")
21 24
     private String prodNo;
22 25
 
@@ -62,6 +65,12 @@ public class ProdMaster extends BaseModel {
62 65
     @ApiModelProperty("出库标记位")
63 66
     private String outFlag;
64 67
 
68
+    @ApiModelProperty("销毁状态")
69
+    private String cancelFlag;
70
+
71
+    @ApiModelProperty("belong_id")
72
+    private String belongId;
73
+
65 74
     @ApiModelProperty("材料属性01")
66 75
     private String attrib_01;
67 76
 

+ 60
- 0
sto/src/main/java/com/shinsoft/sto/model/ware/StoreChange.java Целия файл

@@ -8,6 +8,8 @@ import lombok.Getter;
8 8
 import lombok.Setter;
9 9
 import lombok.experimental.Accessors;
10 10
 
11
+import java.util.Date;
12
+
11 13
 @Getter
12 14
 @Setter
13 15
 @Accessors(chain = true)
@@ -27,5 +29,63 @@ public class StoreChange extends BaseModel {
27 29
     @ApiModelProperty("层号")
28 30
     private String layerNo;
29 31
 
32
+    // 从建表SQL补充的字段
33
+    @ApiModelProperty("添加人ID")
34
+    private String addId;
35
+
36
+    @ApiModelProperty("添加人工号")
37
+    private String addCode;
38
+
39
+    @ApiModelProperty("添加人姓名")
40
+    private String addName;
41
+
42
+    @ApiModelProperty("添加人部门ID")
43
+    private String addDeptId;
44
+
45
+    @ApiModelProperty("添加人部门编号")
46
+    private String addDeptCode;
47
+
48
+    @ApiModelProperty("添加人部门名称")
49
+    private String addDeptName;
50
+
51
+    @ApiModelProperty("添加时间")
52
+    private Date addTime;
53
+
54
+    @ApiModelProperty("修改人ID")
55
+    private String modifyId;
56
+
57
+    @ApiModelProperty("修改人工号")
58
+    private String modifyCode;
59
+
60
+    @ApiModelProperty("修改人姓名")
61
+    private String modifyName;
62
+
63
+    @ApiModelProperty("修改时间")
64
+    private Date modifyTime;
65
+
66
+    @ApiModelProperty("取消人ID")
67
+    private String cancelId;
68
+
69
+    @ApiModelProperty("取消人工号")
70
+    private String cancelCode;
71
+
72
+    @ApiModelProperty("取消人姓名")
73
+    private String cancelName;
74
+
75
+    @ApiModelProperty("取消时间")
76
+    private Date cancelTime;
77
+
78
+    @ApiModelProperty("取消标志")
79
+    private String cancelFlag;
80
+
81
+    @ApiModelProperty("流程实例ID")
82
+    private String processInstanceId;
83
+
84
+    @ApiModelProperty("流程实例状态")
85
+    private String processInstanceStatus;
86
+
87
+    @ApiModelProperty("归属ID")
88
+    private String belongId;
30 89
 }
31 90
 
91
+

+ 283
- 0
sto/src/main/java/com/shinsoft/sto/service/impl/record/InrecordServiceImpl.java Целия файл

@@ -1,20 +1,70 @@
1 1
 package com.shinsoft.sto.service.impl.record;
2 2
 
3
+import com.alibaba.fastjson.JSON;
4
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
3 5
 import com.baomidou.mybatisplus.core.metadata.IPage;
4 6
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
5 7
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
8
+import com.shinsoft.sto.mapper.main.CustomerMapper;
9
+import com.shinsoft.sto.mapper.main.MaterialMapper;
10
+import com.shinsoft.sto.mapper.main.StackMapper;
11
+import com.shinsoft.sto.mapper.main.WareMapper;
6 12
 import com.shinsoft.sto.mapper.record.InrecordMapper;
13
+import com.shinsoft.sto.mapper.ware.ChangeRecordMapper;
14
+import com.shinsoft.sto.mapper.ware.ProdMasterMapper;
15
+import com.shinsoft.sto.mapper.ware.StoreChangeMapper;
16
+import com.shinsoft.sto.model.main.Customer;
17
+import com.shinsoft.sto.model.main.Material;
18
+import com.shinsoft.sto.model.main.Stack;
19
+import com.shinsoft.sto.model.main.Ware;
20
+import com.shinsoft.sto.model.record.ImportModel;
7 21
 import com.shinsoft.sto.model.record.Inrecord;
8 22
 import com.shinsoft.sto.model.system.ResponseCodeMsg;
9 23
 import com.shinsoft.sto.model.system.ResultJSON;
24
+import com.shinsoft.sto.model.ware.ChangeRecord;
25
+import com.shinsoft.sto.model.ware.ProdMaster;
26
+import com.shinsoft.sto.model.ware.StoreChange;
10 27
 import com.shinsoft.sto.service.record.InrecordService;
28
+import org.springframework.beans.factory.annotation.Autowired;
11 29
 import org.springframework.stereotype.Service;
30
+import org.springframework.transaction.annotation.Transactional;
31
+import org.springframework.util.ObjectUtils;
32
+import org.springframework.util.StringUtils;
12 33
 
34
+import java.math.BigDecimal;
35
+import java.util.Date;
36
+import java.util.List;
13 37
 import java.util.Map;
38
+import java.util.UUID;
14 39
 
15 40
 @Service
16 41
 public class InrecordServiceImpl extends ServiceImpl<InrecordMapper, Inrecord> implements InrecordService {
17 42
 
43
+//    材料信息
44
+    @Autowired
45
+    private ProdMasterMapper prodMasterMapper;
46
+//  入库记录
47
+    @Autowired
48
+    private InrecordMapper inrecordMapper;
49
+//    库存
50
+    @Autowired
51
+    private StoreChangeMapper storeChangeMapper;
52
+//    材料操作记录
53
+    @Autowired
54
+    private ChangeRecordMapper changeRecordMapper;
55
+//    客户信息
56
+    @Autowired
57
+    private CustomerMapper customerMapper;
58
+//    物料
59
+    @Autowired
60
+    private MaterialMapper MaterialMapper;
61
+//    仓库
62
+    @Autowired
63
+    private WareMapper wareMapper;
64
+//    垛位
65
+    @Autowired
66
+    private StackMapper stackMapper;
67
+
18 68
     @Override
19 69
     public ResultJSON query(int page, int rows, Map<String,Object> map) {
20 70
         try {
@@ -37,5 +87,238 @@ public class InrecordServiceImpl extends ServiceImpl<InrecordMapper, Inrecord> i
37 87
             return ResultJSON.error(ResponseCodeMsg.CODE_EX, ex.getMessage());
38 88
         }
39 89
     }
90
+
91
+    @Override
92
+    @Transactional
93
+    public ResultJSON batchInStore(String userId, List<ImportModel> dataList, String belongId,String userName) {
94
+        try {
95
+            if(ObjectUtils.isEmpty(dataList)){
96
+                return ResultJSON.error(ResponseCodeMsg.CODE_EX, "数据为空");
97
+            }
98
+            for (ImportModel model : dataList){
99
+                /**
100
+                 * 数据校验
101
+                 */
102
+//          1.材料号不能为空且不能和库内信息重复(根据材料号查询材料表中是否具有重复数据)
103
+                if(StringUtils.isEmpty(model.getProdNo())){
104
+                    return ResultJSON.error(ResponseCodeMsg.CODE_EX, "材料号不能为空");
105
+                }
106
+//              查询重复数据 未取消入库 , 未出库 , 材料号相同的数据
107
+                ProdMaster prodMasters = prodMasterMapper.selectOne(
108
+                        new QueryWrapper<ProdMaster>().
109
+                        eq("prod_no", model.getProdNo()).
110
+                        eq("cancel_flag", "0").
111
+                        eq("in_flag", "0").
112
+                        eq("out_flag", "0").
113
+                        eq("belong_id", belongId));
114
+                if (prodMasters!= null) {
115
+                    return ResultJSON.error(ResponseCodeMsg.CODE_EX, model.getProdNo()+"材料已入库");
116
+                }
117
+
118
+//          2.货权公司、收货公司、客户公司不能为空且该客户要在系统中维护了
119
+                if(StringUtils.isEmpty(model.getOwnerCompany()) || StringUtils.isEmpty(model.getReceivingCompany())){
120
+                    return ResultJSON.error(ResponseCodeMsg.CODE_EX, "货权公司、收货公司不能为空");
121
+                }
122
+//                根据客户名称查询客户信息
123
+                Customer customer = customerMapper.selectOne(
124
+                        new QueryWrapper<Customer>()
125
+                        .eq("CUSTOMER_NM", model.getOwnerCompany())
126
+                        .eq("cancel_flag", "0")
127
+                        .eq("belong_id", belongId));
128
+                if (customer == null){
129
+                    return ResultJSON.error(ResponseCodeMsg.CODE_EX, "["+model.getOwnerCompany()+"],暂未维护");
130
+                }
131
+                Customer customer1 = customerMapper.selectOne(
132
+                        new QueryWrapper<Customer>()
133
+                                .eq("CUSTOMER_NM", model.getReceivingCompany())
134
+                                .eq("cancel_flag", "0")
135
+                                .eq("belong_id", belongId));
136
+                if (customer1 == null){
137
+                    return ResultJSON.error(ResponseCodeMsg.CODE_EX, "["+model.getReceivingCompany()+"],暂未维护");
138
+                }
139
+//          3.物料品种要进行维护,此处跟钢种信息有关系;
140
+                Material material = MaterialMapper.selectOne(
141
+                        new QueryWrapper<Material>().
142
+                                eq("material_name", model.getMaterialName()).
143
+                                eq("MATERIAL_STANDARD", model.getStGrade()).
144
+                                eq("cancel_flag", "0").
145
+                                eq("belong_id", belongId));
146
+                if (material == null){
147
+                    return ResultJSON.error(ResponseCodeMsg.CODE_EX, "["+model.getMaterialName()+"]物料信息,暂未维护");
148
+                }
149
+//          4.入库数量和入库重量必须有且要大于0,这部分关系到所有统计相关的内容;
150
+                if ((model.getQuantity() != null && model.getQuantity().compareTo(BigDecimal.ZERO) <= 0) ||
151
+                    (model.getWeight()!=null && model.getWeight().compareTo(BigDecimal.ZERO) <= 0)) {
152
+                    return ResultJSON.error(ResponseCodeMsg.CODE_EX, "数量和重量必须大于0");
153
+                }
154
+
155
+
156
+
157
+//                拼接材料信息
158
+                ProdMaster prodMaster = prodSplice(model,userId,belongId,material,customer,customer1,userName);
159
+                int insert = prodMasterMapper.insert(prodMaster);
160
+                if (insert <= 0) {
161
+                    return ResultJSON.error(ResponseCodeMsg.CODE_EX, "入库失败");
162
+                }
163
+//                拼接入库记录
164
+                Inrecord inrecord = inRecordSplice(model, userId, belongId,material,customer,customer1,userName);
165
+                int insert1 = inrecordMapper.insert(inrecord);
166
+                if (insert1 <= 0) {
167
+                    return ResultJSON.error(ResponseCodeMsg.CODE_EX, "入库失败");
168
+                }
169
+//                拼接库存信息
170
+                StoreChange storeChange = storeChangeSplice(model, userId, belongId,prodMaster,userName);
171
+                int insert2 = storeChangeMapper.insert(storeChange);
172
+                if (insert2 <= 0) {
173
+                    return ResultJSON.error(ResponseCodeMsg.CODE_EX, "入库失败");
174
+                }
175
+//                拼接操作记录
176
+                ChangeRecord changeRecord = changeRecordSplice(model, userId, belongId,customer,customer1,userName, material,prodMaster);
177
+                int insert3 = changeRecordMapper.insert(changeRecord);
178
+                if (insert3 <= 0){
179
+                    return ResultJSON.error(ResponseCodeMsg.CODE_EX, "入库失败");
180
+                }
181
+                return ResultJSON.success(ResponseCodeMsg.CODE_SUCCESS, "入库成功");
182
+
183
+            }
184
+        } catch (Exception ex) {
185
+            ex.printStackTrace();
186
+        }
187
+        return null;
188
+    }
189
+
190
+    /**
191
+     * 拼接材料信息
192
+     */
193
+    public ProdMaster prodSplice(ImportModel importModel,String userId,String belongId,Material material,Customer customer,Customer customer1,String userName){
194
+        ProdMaster prodMaster = new ProdMaster();
195
+        prodMaster.setId(UUID.randomUUID().toString().replace("-", ""));
196
+        prodMaster.setProdNo(importModel.getProdNo());
197
+        prodMaster.setMaterialId(material.getId());
198
+        prodMaster.setStGrade(material.getMaterialStandard());
199
+        prodMaster.setOwnerCompany(customer.getId());
200
+        prodMaster.setReceivingCompany(customer1.getId());
201
+        prodMaster.setCustomerCompany(customer1.getId());
202
+        if(importModel.getDeliveryAddress()!=null){
203
+            prodMaster.setDeliveryAddress(importModel.getDeliveryAddress());
204
+        }else{
205
+            prodMaster.setDeliveryAddress(customer1.getDefaultAddress());
206
+        }
207
+        prodMaster.setWeight(importModel.getWeight());
208
+        prodMaster.setQuantity(importModel.getQuantity());
209
+        prodMaster.setAttrib_01(importModel.getAttrib01());
210
+        prodMaster.setAttrib_02(importModel.getAttrib02());
211
+        prodMaster.setAttrib_03(importModel.getAttrib03());
212
+        prodMaster.setAttrib_04(importModel.getAttrib04());
213
+        prodMaster.setAttrib_05(importModel.getAttrib05());
214
+        if(importModel.getInUser()!=null){
215
+            prodMaster.setInUserName(importModel.getInUser());
216
+        }else{
217
+            prodMaster.setInUserName(userName);
218
+        }
219
+        prodMaster.setInTruckNo(importModel.getInTruckNo());
220
+        prodMaster.setInFlag("0");
221
+        prodMaster.setLockFlag("0");
222
+        prodMaster.setOutFlag("0");
223
+        prodMaster.setCancelFlag("0");
224
+        prodMaster.setBelongId(belongId);
225
+        prodMaster.setInDtm(new Date());
226
+//        prodMaster.setProcessInstanceStatus("00");
227
+        prodMaster.setAddId(userId);
228
+        prodMaster.setRemark_1(importModel.getRemark1());
229
+
230
+        return prodMaster;
231
+    }
232
+    /**
233
+     * 拼接入库记录
234
+     */
235
+    public Inrecord inRecordSplice(ImportModel importModel,String userId,String belongId,Material material,Customer customer,Customer customer1,String userName){
236
+        Inrecord inrecord = new Inrecord();
237
+        inrecord.setAddId(userId);
238
+        inrecord.setId(UUID.randomUUID().toString().replace("-", ""));
239
+        inrecord.setInTruckNo(importModel.getInTruckNo());
240
+        inrecord.setBelongId(belongId);
241
+        inrecord.setInWareName(importModel.getWareName());
242
+        inrecord.setInStackName(importModel.getStackName());
243
+        inrecord.setInLayerNo(importModel.getLayerNo());
244
+        inrecord.setProdNo(importModel.getProdNo());
245
+        inrecord.setOwnerCompany(customer.getId());
246
+        inrecord.setReceivingCompany(customer1.getId());
247
+        inrecord.setCustomerCompany(customer1.getId());
248
+        inrecord.setMaterialId(material.getId());
249
+        inrecord.setStGrade(material.getMaterialStandard());
250
+        inrecord.setInWeight(importModel.getWeight());
251
+        inrecord.setInQuantity(importModel.getQuantity());
252
+        inrecord.setInFlag("0");
253
+        inrecord.setDeliveryAddress(importModel.getDeliveryAddress());
254
+        inrecord.setRemark1(importModel.getRemark1());
255
+        inrecord.setAddTime(new Date());
256
+        inrecord.setInDtm(new Date());
257
+        if(importModel.getInUser()!=null){
258
+            inrecord.setTallyPeople(importModel.getInUser());
259
+        }else{
260
+            inrecord.setTallyPeople(userName);
261
+        }
262
+        return inrecord;
263
+    }
264
+
265
+    /**
266
+     * 拼接库存信息
267
+     */
268
+    public StoreChange storeChangeSplice(ImportModel importModel,String userId,String belongId,ProdMaster prodMaster,String userName){
269
+        StoreChange storeChange = new StoreChange();
270
+        storeChange.setId(UUID.randomUUID().toString().replace("-", ""));
271
+        storeChange.setStoreId(prodMaster.getId());
272
+//        查询仓库id
273
+        Ware ware = wareMapper.selectOne(new QueryWrapper<>(Ware.class).eq("ware_nm", importModel.getWareName()).eq("cancel_flag", "0").eq("belong_id", belongId));
274
+        storeChange.setWareId(ware.getId());
275
+//        查询垛位id
276
+        Stack stack = stackMapper.selectOne(new QueryWrapper<>(Stack.class).eq("ware_id", ware.getId()).eq("name", importModel.getStackName()).eq("cancel_flag", "0").eq("belong_id", belongId));
277
+        storeChange.setStackId(stack.getId());
278
+        storeChange.setAddId(userId);
279
+        storeChange.setAddTime(new Date());
280
+        storeChange.setBelongId(belongId);
281
+        storeChange.setCancelFlag("0");
282
+        if(importModel.getInUser()!=null){
283
+            storeChange.setAddName(importModel.getInUser());
284
+        }else{
285
+            storeChange.setAddName(userName);
286
+        }
287
+        return storeChange;
288
+    }
289
+
290
+    /**
291
+     * 拼接操作记录
292
+     */
293
+    public ChangeRecord changeRecordSplice(ImportModel importModel,String userId,String belongId,Customer customer,Customer customer1,String userName,Material material,ProdMaster prodMaster){
294
+        ChangeRecord changeRecord = new ChangeRecord();
295
+        changeRecord.setId(UUID.randomUUID().toString().replace("-", ""));
296
+        changeRecord.setAddId(userId);
297
+        changeRecord.setAddTime(new Date());
298
+        changeRecord.setBelongId(belongId);
299
+        changeRecord.setChangeFlag("01");
300
+        changeRecord.setChangeNote("入库");
301
+        changeRecord.setCancelFlag("0");
302
+        changeRecord.setCntNum(1);
303
+        changeRecord.setProdNo(importModel.getProdNo());
304
+        changeRecord.setNewWareName(importModel.getWareName());
305
+        changeRecord.setNewStackName(importModel.getStackName());
306
+        changeRecord.setNewLayerNo(importModel.getLayerNo());
307
+        changeRecord.setOwnerCompany(customer.getId());
308
+        changeRecord.setReceivingCompany(customer1.getId());
309
+        changeRecord.setCustomerCompany(customer1.getId());
310
+        changeRecord.setMaterialId(material.getId());
311
+        changeRecord.setStGrade(material.getMaterialStandard());
312
+        changeRecord.setWeight(importModel.getWeight());
313
+        changeRecord.setQuantity(importModel.getQuantity());
314
+        changeRecord.setDeliveryAddress(importModel.getDeliveryAddress());
315
+        if(importModel.getInUser()!=null){
316
+            changeRecord.setAddName(importModel.getInUser());
317
+        }else{
318
+            changeRecord.setAddName(userName);
319
+        }
320
+        changeRecord.setProdId(prodMaster.getId());
321
+        return changeRecord;
322
+    }
40 323
 }
41 324
 

+ 5
- 0
sto/src/main/java/com/shinsoft/sto/service/record/InrecordService.java Целия файл

@@ -1,7 +1,9 @@
1 1
 package com.shinsoft.sto.service.record;
2 2
 
3
+import com.shinsoft.sto.model.record.ImportModel;
3 4
 import com.shinsoft.sto.model.system.ResultJSON;
4 5
 
6
+import java.util.List;
5 7
 import java.util.Map;
6 8
 
7 9
 public interface InrecordService {
@@ -11,5 +13,8 @@ public interface InrecordService {
11 13
                      Map<String,Object> map);
12 14
 
13 15
     ResultJSON statistics(Map<String,Object> map);
16
+
17
+
18
+    ResultJSON batchInStore(String userId, List<ImportModel> dataList, String belongId,String userName);
14 19
 }
15 20
 

+ 88
- 0
sto/src/main/java/com/shinsoft/sto/tools/ExcelExportTools.java Целия файл

@@ -0,0 +1,88 @@
1
+package com.shinsoft.sto.tools;
2
+
3
+import com.alibaba.excel.EasyExcel;
4
+import com.alibaba.excel.ExcelWriter;
5
+import com.alibaba.excel.write.metadata.WriteSheet;
6
+import com.shinsoft.sto.model.record.ImportModel;
7
+import org.springframework.stereotype.Component;
8
+import org.springframework.web.multipart.MultipartFile;
9
+
10
+import javax.servlet.http.HttpServletResponse;
11
+import java.io.IOException;
12
+import java.net.URLEncoder;
13
+import java.nio.charset.StandardCharsets;
14
+import java.util.List;
15
+
16
+@Component
17
+public class ExcelExportTools {
18
+
19
+    /**
20
+     * 导出 Excel
21
+     * @param response HttpServletResponse
22
+     * @param dataList 数据列表
23
+     * @param fileName 文件名
24
+     * @param sheetName sheet名称
25
+     * @param clazz 实体类类型
26
+     */
27
+    public <T> void exportExcel(HttpServletResponse response,
28
+                                List<T> dataList,
29
+                                String fileName,
30
+                                String sheetName,
31
+                                Class<T> clazz) throws IOException {
32
+
33
+        // 设置响应头
34
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
35
+        response.setCharacterEncoding("utf-8");
36
+        String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString())
37
+                .replaceAll("\\+", "%20");
38
+        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + encodedFileName + ".xlsx");
39
+
40
+        // 写入 Excel
41
+        EasyExcel.write(response.getOutputStream(), clazz)
42
+                .sheet(sheetName)
43
+                .doWrite(dataList);
44
+    }
45
+
46
+    /**
47
+     * 导出到多个 Sheet
48
+     */
49
+    public <T> void exportExcelMultiSheet(HttpServletResponse response,
50
+                                          List<List<T>> dataLists,
51
+                                          String fileName,
52
+                                          List<String> sheetNames,
53
+                                          Class<T> clazz) throws IOException {
54
+
55
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
56
+        response.setCharacterEncoding("utf-8");
57
+        String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString())
58
+                .replaceAll("\\+", "%20");
59
+        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + encodedFileName + ".xlsx");
60
+
61
+        ExcelWriter excelWriter = null;
62
+        try {
63
+            excelWriter = EasyExcel.write(response.getOutputStream(), clazz).build();
64
+
65
+            for (int i = 0; i < dataLists.size(); i++) {
66
+                WriteSheet writeSheet = EasyExcel.writerSheet(i, sheetNames.get(i))
67
+                        .head(clazz)
68
+                        .build();
69
+                excelWriter.write(dataLists.get(i), writeSheet);
70
+            }
71
+        } finally {
72
+            if (excelWriter != null) {
73
+                excelWriter.finish();
74
+            }
75
+        }
76
+    }
77
+
78
+    /**
79
+     * 解析Excel文件
80
+     */
81
+    public List<ImportModel> parseExcelFile(MultipartFile file) throws Exception {
82
+        // 使用EasyExcel解析文件
83
+        return EasyExcel.read(file.getInputStream())
84
+                .head(ImportModel.class)
85
+                .sheet()
86
+                .doReadSync();
87
+    }
88
+}

Loading…
Отказ
Запис