From 2fcd97552d16718cc7997629fd637a73a5a4483f Mon Sep 17 00:00:00 2001
From: 郑永安 <zyazyz250@sina.com>
Date: 星期一, 19 六月 2023 14:44:19 +0800
Subject: [PATCH] 删除

---
 src/main/java/com/gk/firework/Controller/ProductController.java |  879 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 879 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/gk/firework/Controller/ProductController.java b/src/main/java/com/gk/firework/Controller/ProductController.java
new file mode 100644
index 0000000..e87648d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/ProductController.java
@@ -0,0 +1,879 @@
+package com.gk.firework.Controller;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.gk.firework.Controller.Base.BaseController;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.Enum.Element;
+import com.gk.firework.Domain.Enum.EnterpriseSafetySupervision;
+import com.gk.firework.Domain.Enum.ErrorCode;
+import com.gk.firework.Domain.Utils.*;
+import com.gk.firework.Domain.Vo.DirectionDetail;
+import com.gk.firework.Domain.Vo.FireworkDeal;
+import com.gk.firework.Domain.Vo.ProductThresholdVo;
+import com.gk.firework.Domain.Vo.ProductVo;
+import com.gk.firework.Service.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.FieldError;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @author jingjy
+ */
+@Api(tags = "产品信息接口")
+@RequestMapping("/product")
+@RestController
+public class ProductController extends BaseController {
+    @Value("${productPath}")
+    private String productPath; //配置文件配置的物理保存地址
+    private ProductService productService;
+    private StockService stockService;
+    private UserService userService;
+    private EnterpriseService enterpriseService;
+    private ProductThresholdService productThresholdService;
+    private ProductCategoryService productCategoryService;
+    private ProductPriceService productPriceService;
+    private ExcelExportService excelExportService;
+
+    private static final Byte ADD_OPTION = 1;
+    private static final Byte EDIT_OPTION = 2;
+    private static final Byte DEL_OPTION = 3;
+    @Autowired
+    public ProductController(ProductService productService,StockService stockService, UserService userService,
+                             EnterpriseService enterpriseService,ProductThresholdService productThresholdService,
+                             ProductCategoryService productCategoryService,ProductPriceService productPriceService,
+                             ExcelExportService excelExportService ) {
+        this.productService = productService;
+        this.stockService = stockService;
+        this.userService = userService;
+        this.enterpriseService = enterpriseService;
+        this.productThresholdService = productThresholdService;
+        this.productCategoryService = productCategoryService;
+        this.productPriceService = productPriceService;
+        this.excelExportService = excelExportService;
+    }
+
+    /**
+     * 查询全部的产品信息
+     *
+     * @param name          产品名;
+     * @param directionCode :流向码(十位);
+     * @param manufacturer  :生产厂家
+     * @return List<ProductInfo> 产品信息的集合
+     */
+    @GetMapping("/info")
+    public Msg getProductInfo(@RequestParam(value = "name", required = false) String name,
+                              @RequestParam(value = "directionCode", required = false) String directionCode,
+                              @RequestParam(value = "manufacturer", required = false) String manufacturer,
+                              @RequestParam(value = "type", required = false) String type,
+                              @RequestParam(value = "secondaryType", required = false) String secondaryType,
+                              @RequestParam(value = "isOld", required = false) String isOld,
+                              @RequestParam(defaultValue = "0") Integer pageIndex,
+                              @RequestParam(defaultValue = "10") Integer pageSize,
+                              String sort, String order) {
+        Msg msg = new Msg(true);
+
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        Map<String, Object> condition = new HashMap<>(4);
+        if (StringUtils.isNotBlank(name)) {
+            condition.put("name", name);
+        }
+        if (StringUtils.isNotBlank(directionCode)) {
+            condition.put("directionCode", directionCode);
+        }
+        if (StringUtils.isNotBlank(manufacturer)) {
+            condition.put("manufacturer", manufacturer);
+        }
+        if (StringUtils.isNotBlank(type)) {
+            condition.put("type", type);
+        }
+        if (StringUtils.isNotBlank(secondaryType)) {
+            condition.put("secondaryType", secondaryType);
+        }
+        if (StringUtils.isNotBlank(isOld)) {
+            condition.put("isOld", isOld);
+        }
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (userInfo.getCompanyid() != null){
+            Enterprise enterprise = enterpriseService.getById(userInfo.getCompanyid());
+            if (enterprise.getSafetysupervision().equals(EnterpriseSafetySupervision.PRODUCE.getMsg())){
+                condition.put("manufacturer", enterprise.getEnterprisename());
+            }else {
+                condition.put("companynumber", enterprise.getEnterprisenumber());
+            }
+        }
+
+        pageInfo.setCondition(condition);
+        productService.selectDataGrid(pageInfo);
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    /**
+     * 查询全部的产品信息编码
+     *
+     * @return List<String> 产品编码的集合
+     */
+    @GetMapping("/codes")
+    public Msg getProductCodes(){
+        List<String>list = productService.getAllProductCodes();
+        return success(list);
+    }
+
+    /**
+     * 查询全部的产品信息
+     *
+     * @param name          产品名;
+     * @param directionCode :流向码(十位);
+     * @param manufacturer  :生产厂家
+     * @return List<ProductInfo> 产品信息的集合
+     */
+    @GetMapping("/exportInfo")
+    public Msg exportProduct(@RequestParam(value = "name", required = false) String name,
+                              @RequestParam(value = "directionCode", required = false) String directionCode,
+                              @RequestParam(value = "manufacturer", required = false) String manufacturer,
+                              @RequestParam(value = "type", required = false) String type,
+                              @RequestParam(value = "secondaryType", required = false) String secondaryType) {
+        Msg msg = new Msg(true);
+        Map<String, Object> condition = new HashMap<>(4);
+        if (StringUtils.isNotBlank(name)) {
+            condition.put("name", name);
+        }
+        if (StringUtils.isNotBlank(directionCode)) {
+            condition.put("directionCode", directionCode);
+        }
+        if (StringUtils.isNotBlank(manufacturer)) {
+            condition.put("manufacturer", manufacturer);
+        }
+        if (StringUtils.isNotBlank(type)) {
+            condition.put("type", type);
+        }
+        if (StringUtils.isNotBlank(secondaryType)) {
+            condition.put("secondaryType", secondaryType);
+        }
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (userInfo.getCompanyid() != null){
+            Enterprise enterprise = enterpriseService.getById(userInfo.getCompanyid());
+            if (enterprise.getSafetysupervision().equals(EnterpriseSafetySupervision.PRODUCE.getMsg())){
+                condition.put("manufacturer", enterprise.getEnterprisename());
+            }else {
+                condition.put("companynumber", enterprise.getEnterprisenumber());
+            }
+        }
+
+        List<ProductInfo> productInfos = productService.selectProductInfo(condition);
+        msg.setResult(productInfos);
+        return msg;
+    }
+
+    @PostMapping("/updatePrice")
+    public Msg updatePrice( @RequestBody ProductInfo productInfo) {
+        Msg msg = new Msg(true);
+        if (productInfo == null || StringUtils.isBlank(productInfo.getDirectionCode())
+                || productInfo.getDirectionCode().length() < FireworkDeal.DIRECTION_ITEM){
+            msg.setCode("999");
+            msg.setMessage("流向码异常,修改失败");
+            return msg;
+        }
+        ProductInfo productInfoExist = productService.selectByDirection(productInfo.getDirectionCode());
+        if (productInfoExist == null) {
+            msg.setCode("999");
+            msg.setMessage("产品信息流向码不存在,修改失败!");
+            return msg;
+        }
+
+        String companynumber = "";
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (userInfo.getCompanyid() != null){
+            Enterprise enterprise = enterpriseService.getById(userInfo.getCompanyid());
+            if (!enterprise.getSafetysupervision().equals(EnterpriseSafetySupervision.PRODUCE.getMsg())){
+                companynumber = enterprise.getEnterprisenumber();
+            }
+        }
+        if (StringUtils.isBlank(companynumber)){
+            msg.setCode("999");
+            msg.setMessage("非经营企业无法修改价格!");
+            return msg;
+        }
+
+        ProductPriceInfo productPriceInfo = productPriceService.selectByCode(companynumber,productInfo.getDirectionCode());
+        if (productPriceInfo != null){
+            productPriceInfo.setPrice(productInfo.getSalePrice());
+            productPriceInfo.setUpdated(new Date());
+            productPriceInfo.setUpdator(userInfo.getUsername());
+            productPriceService.updateById(productPriceInfo);
+        }else {
+            ProductPriceInfo productPrice = new ProductPriceInfo();
+            productPrice.setCompanynumber(companynumber);
+            productPrice.setItemcode(productInfo.getDirectionCode());
+            productPrice.setPrice(productInfo.getSalePrice());
+            productPrice.setUpdated(new Date());
+            productPrice.setUpdator(userInfo.getUsername());
+            productPriceService.save(productPrice);
+        }
+        return msg;
+    }
+
+    @PostMapping("/importEditPrice")
+    @ApiOperation(value = "导入修改价格",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "file",value = "文件",required = true),
+    })
+    public Msg addSelfCheckList(MultipartFile file){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        String filesave ="";
+        try {
+            SimpleDateFormat sdf = new SimpleDateFormat( "yyyyMMddHHmmssSSS" );
+            if (file == null)
+            {
+                msg.setCode("404");
+                msg.setMessage("未找到上传文件");
+                return msg;
+            }
+
+            long size = file.getSize();
+            if(0 == size)
+            {
+                msg.setCode("404");
+                msg.setMessage("上传文件大小为空");
+                return msg;
+            }
+
+            if(!FileOptUtils.isDirExists(productPath)){
+                msg.setCode("500");
+                msg.setMessage("发生错误或不为目录");
+                return msg;
+            }
+
+            String companynumber = "";
+            UserInfo userInfo = userService.getById(getUser().getId());
+            if (userInfo.getCompanyid() != null){
+                Enterprise enterprise = enterpriseService.getById(userInfo.getCompanyid());
+                if (!enterprise.getSafetysupervision().equals(EnterpriseSafetySupervision.PRODUCE.getMsg())){
+                    companynumber = enterprise.getEnterprisenumber();
+                }
+            }
+            if (StringUtils.isBlank(companynumber)){
+                msg.setCode("999");
+                msg.setMessage("非经营企业无法修改价格!");
+                return msg;
+            }
+
+            filesave = productPath + getUser().getUsername() + "_" + sdf.format(new Date()) +".xlsx";
+
+            file.transferTo(new File(filesave));
+            InputStream in = new FileInputStream(filesave);
+            String name = file.getOriginalFilename();
+            Boolean isExcel2007 = name.substring(name.lastIndexOf(".") + 1).endsWith("xlsx")? true:false;
+            BooleanReason blret = excelExportService.imporEditPriceExcel(in,companynumber,getUser().getUsername(),isExcel2007);
+            if(blret.getValue().equals(false))
+            {
+                msg.setCode("500");
+                msg.setMessage(blret.getResultmsg());
+                return msg;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            msg.setCode("500");
+            msg.setMessage("导入发生错误");
+            return msg;
+        }
+
+        return msg;
+    }
+
+    @PostMapping("/add")
+    public Msg addProduct(@Validated @RequestBody ProductInfo productInfo, BindingResult bindingResult) {
+        if (bindingResult.hasErrors()) {
+            StringBuilder stringBuilder = new StringBuilder();
+            for (String s : bindingResult.getFieldErrors().stream()
+                    .map(FieldError::getDefaultMessage).collect(Collectors.toList())) {
+                stringBuilder.append(s).append(",");
+            }
+            return new Msg(ErrorCode.ERROR_10002,stringBuilder.toString());
+        }
+
+        if (StringUtils.isBlank(productInfo.getDirectionCode()) || productInfo.getDirectionCode().length() != 10){
+            return new Msg(ErrorCode.ERROR_10004,"流向码格式错误,新增失败!");
+        }
+
+        List<ProductInfo> productInfosExist = productService.selectByProduct(productInfo);
+        if (productInfosExist != null && productInfosExist.size() != 0) {
+            return new Msg(ErrorCode.ERROR_50003,"新增产品信息流向码已存在,无法添加!");
+        }
+
+        Enterprise enterprise = enterpriseService.selectEnterpriseByNumber(productInfo.getManufacturer());
+        if (enterprise == null || !enterprise.getSafetysupervision().equals(EnterpriseSafetySupervision.PRODUCE.getMsg())){
+            return new Msg(ErrorCode.ERROR_50002,"企业信息不存在 或 该企业不为生产企业!");
+        }
+
+        Byte isOld = 1;
+        productInfo.setCompanyNumber(enterprise.getEnterprisenumber());
+        productInfo.setManufacturer(enterprise.getEnterprisename());
+        productInfo.setCreatedDate(new Date());
+        productInfo.setCreatedBy(getUser().getUsername());
+        productInfo.setIsOld(isOld);
+        Msg thresholdMsg = isFitThreshold(productInfo);
+        if (!thresholdMsg.getCode().equals(ErrorCode.SUCCESS.getCode())){
+            return thresholdMsg;
+        }
+        boolean i = productService.save(productInfo);
+
+        if (!i) {
+            return new Msg(ErrorCode.ERROR_40001,"新增失败,请重新新增!");
+        }
+
+        return success();
+    }
+    @PostMapping("/addNew")
+    public Msg addNewProduct(@Validated @RequestBody ProductInfo productInfo, BindingResult bindingResult) {
+        Msg msg = new Msg(true);
+
+        if (bindingResult.hasErrors()) {
+            StringBuilder stringBuilder = new StringBuilder();
+            for (String s : bindingResult.getFieldErrors().stream()
+                    .map(FieldError::getDefaultMessage).collect(Collectors.toList())) {
+                stringBuilder.append(s);
+                stringBuilder.append(",");
+            }
+            msg.setCode("999");
+            msg.setMessage(stringBuilder.toString());
+            return msg;
+        }
+
+
+        Enterprise enterprise = enterpriseService.selectEnterpriseByNumber(productInfo.getManufacturer());
+        if (enterprise == null || !enterprise.getSafetysupervision().equals(EnterpriseSafetySupervision.PRODUCE.getMsg())){
+            msg.setCode("999");
+            msg.setMessage("企业信息不存在 或 该企业不为生产企业!");
+            return msg;
+        }
+
+        //生成十位流向码
+        String itemCode = "";
+        ProductCategory productCategory = productCategoryService.selectCategoryByLevelAndName(productInfo.getLevel(),
+                productInfo.getSecondaryType());
+
+        if (productCategory == null || StringUtils.isBlank(productCategory.getBitcode())){
+            msg.setCode("999");
+            msg.setMessage("产品类别错误,新增失败!");
+            return msg;
+        }
+
+        int explosiveContent = productInfo.getExplosiveContent().setScale(0,BigDecimal.ROUND_UP).intValue();
+        String explosive = "FFF";
+        if (explosiveContent <= 4095){
+            explosive = String.format("%03x",explosiveContent);
+        }
+
+        String randomStr = Element.random(Element.class).getValue().toString()+Element.random(Element.class).getValue().toString()
+                +Element.random(Element.class).getValue().toString()+Element.random(Element.class).getValue().toString();
+
+        if (StringUtils.isBlank(enterprise.getTwobitcode())){
+            msg.setCode("999");
+            msg.setMessage("两位企业编码为空,请联系管理员添加!");
+            return msg;
+        }
+        itemCode = productCategory.getBitcode() + explosive + enterprise.getTwobitcode() + randomStr;
+        productInfo.setDirectionCode(itemCode.toUpperCase());
+
+        List<ProductInfo> productInfosExist = productService.selectByProduct(productInfo);
+        if (productInfosExist != null && productInfosExist.size() != 0) {
+            msg.setCode("999");
+            msg.setMessage("新增产品信息流向码已存在,无法添加!");
+            return msg;
+        }
+
+        BigDecimal totalExplosive = new BigDecimal(productInfo.getSpecification()).
+                multiply(productInfo.getExplosiveContent());
+
+        Msg thresholdMsg = isFitThreshold(productInfo);
+        if (!thresholdMsg.getCode().equals(ErrorCode.SUCCESS.getCode())){
+            return thresholdMsg;
+        }
+
+        productInfo.setExplosiveContent(totalExplosive);
+        productInfo.setCompanyNumber(enterprise.getEnterprisenumber());
+        productInfo.setManufacturer(enterprise.getEnterprisename());
+        productInfo.setCreatedDate(new Date());
+        productInfo.setCreatedBy(getUser().getUsername());
+
+
+        boolean i = productService.save(productInfo);
+
+        if (!i) {
+            msg.setCode("999");
+            msg.setMessage("新增失败,请重新新增!");
+            return msg;
+        }
+
+        return msg;
+    }
+
+    @PostMapping("/update")
+    public Msg updateProduct( @RequestBody ProductInfo productInfo) {
+        Msg msg = new Msg(true);
+        if (productInfo == null || StringUtils.isBlank(productInfo.getDirectionCode())
+                || productInfo.getDirectionCode().length() < FireworkDeal.DIRECTION_ITEM){
+            msg.setCode("999");
+            msg.setMessage("流向码异常,删除失败");
+            return msg;
+        }
+        ProductInfo productInfoExist = productService.selectByDirection(productInfo.getDirectionCode());
+        if (productInfoExist == null) {
+            msg.setCode("999");
+            msg.setMessage("产品信息流向码不存在,修改失败!");
+            return msg;
+        }
+        ProductInfo productInfoNew = new ProductInfo();
+        productInfoNew.setId(productInfoExist.getId());
+        productInfoNew.setPurchasePrice(productInfo.getPurchasePrice());
+        productInfoNew.setSalePrice(productInfo.getSalePrice());
+        productInfoNew.setModifiedDate(new Date());
+        productInfoNew.setModifiedBy(getUser().getUsername());
+
+        boolean i = productService.updateById(productInfoNew);
+
+        if (!i) {
+            msg.setCode("999");
+            msg.setMessage("修改失败,请重新修改!");
+            return msg;
+        }
+        return msg;
+    }
+
+    @PostMapping("/delete")
+    public Msg deleteProduct(@RequestBody ProductInfo productInfo) {
+        if (productInfo == null || StringUtils.isBlank(productInfo.getDirectionCode())
+                || productInfo.getDirectionCode().length() < FireworkDeal.DIRECTION_ITEM){
+            return new Msg(ErrorCode.ERROR_10004,"流向码异常,删除失败");
+        }
+
+        ProductInfo productInfoExist = productService.selectByDirection(productInfo.getDirectionCode());
+        if (productInfoExist == null) {
+            return new Msg(ErrorCode.ERROR_50001,"产品信息流向码不存在,删除失败");
+        }
+        boolean flag = productService.isProductUsed(productInfoExist.getId());
+        if (flag){
+            return new Msg(ErrorCode.ERROR_999,"当前产品已经签订合同或已经入库,无法删除");
+        }
+        ProductInfo productInfoNew = new ProductInfo();
+        productInfoNew.setId(productInfoExist.getId());
+        productInfoNew.setModifiedDate(new Date());
+        productInfoNew.setModifiedBy(getUser().getUsername());
+        productInfoNew.setIsDel((byte) 1);
+        boolean i = productService.updateById(productInfoNew);
+
+        if (!i) {
+            return new Msg(ErrorCode.ERROR_40001,"删除失败,请重新删除");
+        }
+
+        return success();
+    }
+
+    @GetMapping("/get")
+    public Msg getProductByCode(@RequestParam(value = "directionCode") String directionCode) {
+        Msg msg = new Msg(true);
+
+        if (StringUtils.isBlank(directionCode)) {
+            msg.setCode("999");
+            msg.setMessage("流向码为空,无法查询相关信息!");
+            return msg;
+        }
+
+        DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(directionCode);
+        if (directionDetail == null) {
+            msg.setCode("999");
+            msg.setMessage("流向码不符合规则,请重新输入!");
+            return msg;
+        }
+
+        ProductInfo productInfo = new ProductInfo();
+        productInfo.setDirectionCode(directionDetail.getItemCode());
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (userInfo.getCompanyid() != null){
+            Enterprise enterprise = enterpriseService.getById(userInfo.getCompanyid());
+            if (!enterprise.getSafetysupervision().equals(EnterpriseSafetySupervision.PRODUCE.getMsg())){
+                productInfo.setCompanyNumber(enterprise.getEnterprisenumber());
+            }
+        }
+        List<ProductInfo> productInfos = productService.selectByProduct(productInfo);
+
+        if (productInfos == null || productInfos.size() == 0) {
+            msg.setCode("999");
+            msg.setMessage("未找到相应的产品信息!");
+            return msg;
+        }
+
+        if (productInfos.size() > 1) {
+            msg.setCode("999");
+            msg.setMessage("错误:存在多个对应的产品信息!");
+            return msg;
+        }
+
+        ProductVo productVo = BeanUtils.copy(productInfos.get(0), ProductVo.class);
+        productVo.setDirectionCode(directionCode);
+        productVo.setItemCode(directionDetail.getItemCode());
+        productVo.setDateCode(directionDetail.getDateCode());
+        productVo.setSerialNo(directionDetail.getSerialNo());
+        List<ProductVo> productVos = new ArrayList<>();
+        if (directionDetail.getBoxNo() != null) {
+            productVo.setBoxNo(directionDetail.getBoxNo());
+            FireworkDeal.getProductVos(directionCode, directionDetail, directionDetail, productVos, productVo);
+        } else {
+            productVos.add(productVo);
+        }
+
+        msg.setResult(productVos);
+        return msg;
+    }
+
+    @GetMapping("/gets")
+    public Msg getProductsByCodes(@RequestParam String directionCode,@RequestParam String endCode){
+        Msg msg = new Msg(true);
+        if (StringUtils.isBlank(directionCode)|| StringUtils.isBlank(endCode)) {
+            msg.setCode("999");
+            msg.setMessage("流向码为空,无法查询相关信息!");
+            return msg;
+        }
+        if (directionCode.length()!= 19 || endCode.length() != 5) {
+            msg.setCode("999");
+            msg.setMessage("流向码不符合规则,请重新输入!");
+            return msg;
+        }
+        /*DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(directionCode);
+        DirectionDetail directionDetail2 = FireworkDeal.dealDirectionCode(directionCode.substring(0,14)+endCode);*/
+
+        List<ProductVo>productVos = new ArrayList<>();
+        ProductVo productVo = productService.selectVoByDirection(directionCode);
+        try {
+            Integer first = Integer.parseInt(directionCode.substring(14,19));
+            Integer last = Integer.parseInt(endCode);
+            if (first > last){
+                Integer temp = first;
+                first = last;
+                last = temp;
+            }
+            for (int i = first; i <= last; i++){
+                ProductVo productVoCopy = BeanUtils.copy(productVo, ProductVo.class);
+                productVoCopy.setDirectionCode(directionCode.substring(0, 14) + String.format("%05d", i));
+                productVos.add(productVoCopy);
+            }
+        }catch (Exception e){
+            msg.setCode("999");
+            msg.setMessage("流向码不符合规则,请重新输入!");
+            return msg;
+        }
+
+        return success(productVos);
+    }
+
+    @GetMapping("/getSingle")
+    public Msg getSingleProductByCode(@RequestParam(value = "directionCode") String directionCode) {
+        Msg msg = new Msg(true);
+
+        if (StringUtils.isBlank(directionCode)) {
+            msg.setCode("999");
+            msg.setMessage("流向码为空,无法查询相关信息!");
+            return msg;
+        }
+
+        DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(directionCode);
+        if (directionDetail == null) {
+            msg.setCode("999");
+            msg.setMessage("流向码不符合规则,请重新输入!");
+            return msg;
+        }
+
+        ProductInfo productInfo = new ProductInfo();
+        productInfo.setDirectionCode(directionDetail.getItemCode());
+        List<ProductInfo> productInfos = productService.selectByProduct(productInfo);
+
+        if (productInfos == null || productInfos.size() == 0) {
+            msg.setCode("999");
+            msg.setMessage("未找到相应的产品信息!");
+            return msg;
+        }
+
+        if (productInfos.size() > 1) {
+            msg.setCode("999");
+            msg.setMessage("错误:存在多个对应的产品信息!");
+            return msg;
+        }
+
+        ProductVo productVo = BeanUtils.copy(productInfos.get(0), ProductVo.class);
+        productVo.setDirectionCode(directionCode);
+        productVo.setItemCode(directionDetail.getItemCode());
+        productVo.setDateCode(directionDetail.getDateCode());
+        productVo.setSerialNo(directionDetail.getSerialNo());
+
+        msg.setResult(productVo);
+        return msg;
+    }
+
+    @PostMapping("/explain")
+    public Msg getProductListByCodes(@RequestBody JSONObject object) {
+        Msg msg = new Msg(true);
+        JSONArray jsonArray = object.getJSONArray("data");
+        String userName = object.getString("userName");
+        List<ProductVo>productVos = new ArrayList<>();
+        for (int i = 0; i < jsonArray.size(); i++) {
+            // 遍历 jsonArray 数组,把每一个对象转成 json 对象
+            JSONObject jsonObject = jsonArray.getJSONObject(i);
+            String directionCode = jsonObject.getString("directionCode");
+            DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(directionCode);
+            if (FireworkDeal.is22Characters(directionCode)){
+                ProductVo productVo = productService.selectVoByDirection(directionCode);
+                FireworkDeal.getProductVos(directionCode, directionDetail, directionDetail, productVos,productVo);
+            }else if (FireworkDeal.is19Characters(directionCode)){
+                ProductVo productVo = productService.selectVoByDirection(directionCode);
+                productVos.add(productVo);
+            }
+        }
+        UserInfo userInfo = userService.selectByUser(userName);
+        if (userInfo == null){
+            msg.setCode("999");
+            msg.setMessage("未找到用户信息!");
+            return msg;
+        }
+
+        //移除重复元素
+        List<ProductVo> productVoList = ProductVo.removeListDuplicateObject(productVos);
+        stockService.setProductEntryStatus(productVoList,userInfo);
+        msg.setResult(productVoList);
+
+        return msg;
+    }
+
+    @PostMapping("/removeDuplicate")
+    public Msg removeDuplicateListElement(@RequestBody JSONArray array) {
+        Msg msg = new Msg(true);
+        List<ProductVo>productVos = new ArrayList<>();
+        for (int i = 0; i < array.size(); i++) {
+            // 遍历 jsonArray 数组,把每一个对象转成 json 对象
+            JSONObject jsonObject = array.getJSONObject(i);
+            String directionCode = jsonObject.getString("directionCode");
+            DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(directionCode);
+            if (FireworkDeal.is22Characters(directionCode)){
+                ProductVo productVo = productService.selectVoByDirection(directionCode);
+                FireworkDeal.getProductVos(directionCode, directionDetail, directionDetail, productVos,productVo);
+            }else if (FireworkDeal.is19Characters(directionCode)){
+                ProductVo productVo = productService.selectVoByDirection(directionCode);
+                productVos.add(productVo);
+            }
+        }
+        //移除重复元素
+        List<ProductVo> productVoList = ProductVo.removeListDuplicateObject(productVos);
+        msg.setResult(productVoList);
+
+        return msg;
+    }
+
+    @GetMapping(value = "getThreshold")
+    public Msg getProductThreshold(){
+        Msg msg = new Msg(true);
+        ProductThresholdInfo productThresholdInfo = productThresholdService.getOne(new LambdaQueryWrapper<>());
+        if (productThresholdInfo == null){
+            msg.setCode(ErrorCode.ERROR_999.getCode());
+            msg.setMessage("未找到产品阈值设置");
+            return msg;
+        }
+        String levels = productThresholdInfo.getLevel();
+        List<String>list = StringUtils.toList(levels);
+        ProductThresholdVo productThresholdVo = BeanUtils.copy(productThresholdInfo, ProductThresholdVo.class);
+        productThresholdVo.setLevels(list);
+        msg.setResult(productThresholdVo);
+        return msg;
+    }
+
+    @PostMapping(value = "setThreshold")
+    public Msg setProductThreshold(@RequestBody JSONObject jsonObject){
+        Msg msg = new Msg(true);
+        ProductThresholdInfo productThresholdInfo = productThresholdService.getOne(new LambdaQueryWrapper<>());
+        String explosiveContent = jsonObject.getString("explosiveContent") == null?"1000":jsonObject.getString("explosiveContent");
+        String boxNumber = jsonObject.getString("boxNumber") == null?"999":jsonObject.getString("boxNumber");
+        String levels = jsonObject.getString("levels") == null?"":jsonObject.getString("levels");
+        productThresholdInfo.setExplosivecontent(new BigDecimal(explosiveContent));
+        productThresholdInfo.setBoxnumber(Integer.parseInt(boxNumber));
+        productThresholdInfo.setLevel(levels);
+        boolean i = productThresholdService.updateById(productThresholdInfo);
+        return msg;
+    }
+
+    @GetMapping("/categorise")
+    public Msg getProductCategories(@RequestParam("name")String name){
+        Msg msg = new Msg(true);
+        List<ProductCategory> categories = productCategoryService.selectAllOrByName(name);
+        msg.setResult(categories);
+        return msg;
+    }
+
+    @PostMapping("/addCategory")
+    public Msg addCategory(@RequestBody ProductCategory category){
+        Msg msg = new Msg(true);
+        Msg checkMsg = checkCategory(category,ADD_OPTION);
+        if(!checkMsg.getCode().equals(ErrorCode.SUCCESS.getCode())){
+            return checkMsg;
+        }
+        productCategoryService.save(category);
+        return msg;
+    }
+
+    @PostMapping("/editCategory")
+    public Msg editCategory(@RequestBody ProductCategory category){
+        Msg msg = new Msg(true);
+        Msg checkMsg = checkCategory(category,EDIT_OPTION);
+        if(!checkMsg.getCode().equals(ErrorCode.SUCCESS.getCode())){
+            return checkMsg;
+        }
+        productCategoryService.updateById(category);
+        return msg;
+    }
+
+    @PostMapping("/delCategory")
+    public Msg deleteCategory(@RequestBody ProductCategory category){
+        Msg msg = new Msg(true);
+        Msg checkMsg = checkCategory(category,DEL_OPTION);
+        if(!checkMsg.getCode().equals(ErrorCode.SUCCESS.getCode())){
+            return checkMsg;
+        }
+        productCategoryService.removeById(category.getId());
+        return msg;
+    }
+
+    @GetMapping("/majorTree")
+    public List<Tree> majorTree(){
+        List<Tree> trees = new ArrayList<>();
+        byte type = 1;
+        List<ProductCategory> categories = productCategoryService.selectCategoryByType(type);
+        for (ProductCategory category :categories) {
+            Tree tree = new Tree();
+            tree.setText(category != null ? category.getName() : null);
+            tree.setAttributes(category != null ? category.getName() : null);
+            trees.add(tree);
+        }
+        return trees;
+    }
+
+    @GetMapping("/secondaryTree")
+    public List<Tree> secondaryTree(@RequestParam("major")String major){
+        List<Tree> trees = new ArrayList<>();
+        if (StringUtils.isBlank(major)){
+            return trees;
+        }
+        List<ProductCategory> categories = productCategoryService.selectCategoryByMajorType(major);
+        for (ProductCategory category :categories) {
+            Tree tree = new Tree();
+            tree.setText(category != null ? category.getName() : null);
+            tree.setAttributes(category != null ? category.getName() : null);
+            trees.add(tree);
+        }
+        return trees;
+    }
+
+    @GetMapping("/permitLevelTree")
+    public List<Tree> permitLevelTree(@RequestParam("secondary")String secondary){
+        List<Tree> trees = new ArrayList<>();
+        if (StringUtils.isBlank(secondary)){
+            return trees;
+        }
+        ProductCategory productCategory = new ProductCategory();
+        productCategory.setType((byte)2);
+        productCategory.setName(secondary);
+        List<ProductCategory> categories = productCategoryService.selectCategoryByTypeAndName(productCategory);
+        if (categories == null ){
+            return trees;
+        }
+        for (ProductCategory category : categories){
+            Tree tree = new Tree();
+            tree.setText(category.getLevel());
+            tree.setAttributes(category.getLevel());
+            trees.add(tree);
+        }
+        return trees;
+    }
+
+    private Msg checkCategory(ProductCategory category,Byte option){
+        Msg msg = new Msg("999","");
+        if (category == null){
+            msg.setMessage("操作失败:未找到对应的类别信息");
+            return msg;
+        }
+        if (category.getName() == null){
+            msg.setMessage("类别名称不能未空");
+            return msg;
+        }
+        if (category.getType() == null){
+            msg.setMessage("类型不能未空");
+            return msg;
+        }
+        if (category.getType() == 2 && StringUtils.isBlank(category.getParentname())){
+            msg.setMessage("选择小类对应大类不能未空");
+            return msg;
+        }
+        if (option.equals(ADD_OPTION)){
+            List<ProductCategory> categoryExist = productCategoryService.selectCategoryByTypeAndName(category);
+            if (categoryExist != null && categoryExist.size()>0){
+                msg.setMessage("当前类别名称已存在");
+                return msg;
+            }
+        }else {
+            List<ProductCategory> categoryExist = productCategoryService.selectCategoryByTypeAndName(category);
+            if (categoryExist == null || categoryExist.size() == 0){
+                msg.setMessage("未找到当前类别名称");
+                return msg;
+            }
+        }
+        msg.setCode("200");
+        return msg;
+    }
+
+    private Msg isFitThreshold(ProductInfo productInfo) {
+        Msg msg = new Msg(ErrorCode.ERROR_999.getCode(),"");
+        ProductThresholdInfo productThresholdInfo = productThresholdService.getOne(new LambdaQueryWrapper<>());
+        if (productInfo.getExplosiveContent().compareTo(productThresholdInfo.getExplosivecontent()) > 0){
+            msg.setMessage("含药量最大为:"+productThresholdInfo.getExplosivecontent()+",超过限制,录入失败!");
+            return msg;
+        }
+        if (productInfo.getBoxNumber() > productThresholdInfo.getBoxnumber()){
+            msg.setMessage("箱数最大为:"+productThresholdInfo.getBoxnumber()+"超过限制,录入失败!");
+            return msg;
+        }
+        if (productThresholdInfo.getLevel().contains(productInfo.getLevel())){
+            msg.setMessage("当前产品级别为限制录入级别,录入失败!");
+            return msg;
+        }
+        msg.setCode(ErrorCode.SUCCESS.getCode());
+        return msg;
+    }
+
+
+    @PostMapping("/import/old-system")
+    public Msg importDataByExcel(MultipartFile file) {
+        productService.importDataByExcel(file, getUser());
+        return success();
+    }
+
+
+}

--
Gitblit v1.9.2