Crunchy
2025-06-14 b2f31607cbe26d721cd7514b619162b3e355b1aa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
package com.wms_admin.server.controller;
 
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wms_admin.server.entity.Product;
import com.wms_admin.server.service.ProductService;
import com.wms_admin.utils.AddProductMessageVo;
import com.wms_admin.utils.RedisUtil;
import com.wms_admin.utils.Result;
import com.wms_admin.utils.StyleUtils;
import io.swagger.annotations.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
 
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author 江苏鵷雏网络科技有限公司
 * @since 2023-05-24
 */
@Slf4j
@Api(tags = "入库操作")
@RestController
@RequestMapping("/product")
public class ProductController {
    @Autowired
    private ProductService service;
 
    @ApiOperation(value = "扫码入库添加接口:swagger json格式可以测试")
    @PostMapping("/add")
    public Result<Map<String, Object>> AddProductMessage(@RequestBody AddProductMessageVo map){
        for (String i : map.getCode()){
            Object andDelete = RedisUtil.getAndDelete(i);
            Product product = JSONObject.parseObject(JSONObject.toJSONString(andDelete), Product.class);
            product.setAddPerson(map.getAddPerson());
            product.setId(i);
            service.AddProductMessage(product);
        }
        return Result.success("添加成功");
    }
 
    @ApiOperation(value = "条码信息缓存:不与数据库关联所以需要传入产品名称与规格型号,不能是ID")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "productName", value = "产品名称", dataTypeClass = String.class, required = true),
            @ApiImplicitParam(name = "productModel", value = "规格型号", dataTypeClass = String.class, required = true),
            @ApiImplicitParam(name = "unit", value = "单位", dataTypeClass = String.class, required = true),
            @ApiImplicitParam(name = "incomingQuantity", value = "入库数量", dataTypeClass = String.class, required = true),
            @ApiImplicitParam(name = "productCode", value = "产品编码", dataTypeClass = String.class, required = true)
    })
    @PostMapping("/cache")
    public Result<String> AddProductCache(String productName, String productModel, String unit, String incomingQuantity, String productCode){
        Map<String, Object> map = new HashMap<>();
        map.put("productName", productName);
        map.put("productModel", productModel);
        map.put("unit", unit);
        map.put("incomingQuantity", incomingQuantity);
        map.put("productCode", productCode);
        String idStr = IdWorker.getIdStr();
        // 设置缓存七天后过期
        boolean set = RedisUtil.set(idStr, map, 168);
        if (set){
            return Result.success(idStr);
        } else {
            return Result.fail("条码生成失败,请重新尝试!");
        }
    }
 
    @ApiOperation(value = "根据条码查询缓存信息")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "code", value = "产品编码", dataTypeClass = String.class, required = true)
    })
    @GetMapping("/code_select")
    public Result<Map<String, Object>> AddProductCodeSelect(String code){
        Object o = RedisUtil.get(code);
        if (!ObjectUtils.isEmpty(o)){
            Map<String, Object> map = JSONObject.parseObject(JSONObject.toJSONString(o));
            return Result.success(map);
        } else {
            return Result.fail("条形码已过期,请重新打印!");
        }
    }
 
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "startTime", value = "开始时间", dataTypeClass = String.class, required = false),
            @ApiImplicitParam(name = "endTime", value = "结束时间", dataTypeClass = String.class, required = false),
            @ApiImplicitParam(name = "productModel", value = "型号", dataTypeClass = String.class, required = false),
            @ApiImplicitParam(name = "pageNo", value = "起始页", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "pageSize", value = "页总数", dataTypeClass = Integer.class, required = true)
    })
    @ApiOperation(value = "分页查询接口")
    @GetMapping("/list")
    public Result<Map<String, Object>> ListProductMessage(String startTime, String  endTime, String productModel, Integer pageNo, Integer pageSize) {
        IPage<Product> productIPage = service.ListProductMessage(startTime, endTime, productModel, new Page(pageNo, pageSize));
        HashMap<String, Object> map = new HashMap<>();
        map.put("row", productIPage.getRecords());
        map.put("total", productIPage.getTotal());
        return Result.success(map);
    }
 
    @ApiOperation(value = "入库Excel导出")
    @GetMapping("/excel")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "startTime",value = "开始时间", dataTypeClass = String.class,required = false),
            @ApiImplicitParam(name = "endTime",value = "结束时间", dataTypeClass = String.class,required = false),
            @ApiImplicitParam(name = "productModel",value = "设备型号", dataTypeClass = String.class,required = false)
    })
    public void ExcelDerive(String startTime, String  endTime, String productModel, HttpServletResponse response) throws IOException {
        List<Product> map = service.ExcelDerive(startTime, endTime, productModel);
        // 设置单元格样式
        HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(StyleUtils.getHeadStyle(), StyleUtils.getContentStyle());
        // 保存到第一个sheet中
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setHeader("requestType","excel");
        response.setHeader("Access-Control-Expose-Headers", "requestType");
        EasyExcel
                .write(response.getOutputStream(), Product.class)
                .sheet()
                .needHead(true)
                .registerWriteHandler(horizontalCellStyleStrategy)
                .doWrite(map);
    }
}