From f65443d8abeaedc9d102324565e8368e7c9d90c8 Mon Sep 17 00:00:00 2001
From: 郑永安 <zyazyz250@sina.com>
Date: 星期一, 19 六月 2023 14:41:54 +0800
Subject: [PATCH] commit

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

diff --git a/src/main/java/com/gk/firework/Controller/ContractController.java b/src/main/java/com/gk/firework/Controller/ContractController.java
new file mode 100644
index 0000000..4ea4cc4
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/ContractController.java
@@ -0,0 +1,1209 @@
+package com.gk.firework.Controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Controller.Base.BaseController;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.Enum.ErrorCode;
+import com.gk.firework.Domain.Utils.*;
+import com.gk.firework.Domain.Vo.*;
+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.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.*;
+
+import static com.gk.firework.Domain.Enum.ErrorCode.*;
+
+@Api(tags = "在线交易合同接口")
+@RequestMapping("/contract")
+@RestController
+public class ContractController extends BaseController {
+    @Value("${contractPath}")
+    private String contractPath; //配置文件配置的物理保存地址
+
+    @Autowired
+    ContractOrderService contractOrderService;
+    @Autowired
+    ContractDetailService contractDetailService;
+    @Autowired
+    ContractLogService contractLogService;
+    @Autowired
+    ContractUnitDetailService contractUnitDetailService;
+    @Autowired
+    ProductService productService;
+    @Autowired
+    UserService userService;
+    @Autowired
+    ProductCodeService productCodeService;
+    @Autowired
+    ProductLocusService productLocusService;
+    @Autowired
+    ControlPrintParamService controlPrintParamService;
+
+    @GetMapping("/getApply")
+    @ApiOperation(value = "获取合同申请数据",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码"),
+            @ApiImplicitParam(name = "pageSize",value = "每页行数"),
+            @ApiImplicitParam(name = "sort",value = "排序规则"),
+            @ApiImplicitParam(name = "order",value = "排序字段"),
+//            @ApiImplicitParam(name = "operator",value = "购买企业"),
+            @ApiImplicitParam(name = "supplyunitname",value = "生产企业"),
+            @ApiImplicitParam(name = "status",value = "合同状态"),
+            @ApiImplicitParam(name = "ordercode",value = "合同单号"),
+//            @ApiImplicitParam(name = "province",value = "省份"),
+//            @ApiImplicitParam(name = "city",value = "城市"),
+//            @ApiImplicitParam(name = "area",value = "区县"),
+//            @ApiImplicitParam(name = "town",value = "乡镇"),
+//            @ApiImplicitParam(name = "community",value = "社区"),
+    })
+    public Msg getApplyInfo(@RequestParam(defaultValue = "0") Integer pageIndex, @RequestParam(defaultValue = "10") Integer pageSize, String sort, String order,
+                                    String supplyunitname, String status, String ordercode){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        HashMap<String, Object> condition = new HashMap<String, Object>();
+
+        if (StringUtils.isNotBlank(supplyunitname)) {
+            condition.put("supplyunitname", supplyunitname.trim());
+        }
+
+        if (StringUtils.isNotBlank(status)) {
+            condition.put("status", status.trim());
+        }
+
+        if (StringUtils.isNotBlank(ordercode)){
+            condition.put("ordercode",ordercode.trim());
+        }
+
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (userInfo.getCompanyid() != null){
+            condition.put("purchaseenterprisenumber", userInfo.getCompanynumber());
+        }else if (userInfo.getType() == 3){
+            condition.put("province",userInfo.getProvince());
+            condition.put("city",userInfo.getCity());
+            condition.put("area",userInfo.getArea());
+            condition.put("town",userInfo.getTown());
+            condition.put("community",userInfo.getCommunity());
+        }
+
+//        if (StringUtils.isNotBlank(province) && condition.get("province") == null){
+//            condition.put("province",province.trim());
+//
+//        if (StringUtils.isNotBlank(city)){
+//            condition.put("city",city.trim());
+//        }
+//
+//        if (StringUtils.isNotBlank(area)){
+//            condition.put("area",area.trim());
+//        }
+//
+//        if (StringUtils.isNotBlank(town)){
+//            condition.put("town",town.trim());
+//        }
+//
+//        if (StringUtils.isNotBlank(community)){
+//            condition.put("community",community.trim());
+//        }
+
+//        }
+
+
+        pageInfo.setCondition(condition);
+        contractOrderService.selectDataGrid(pageInfo);
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    @GetMapping("/getConfirm")
+    @ApiOperation(value = "获取合同确认数据",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码"),
+            @ApiImplicitParam(name = "pageSize",value = "每页行数"),
+            @ApiImplicitParam(name = "sort",value = "排序规则"),
+            @ApiImplicitParam(name = "order",value = "排序字段"),
+            @ApiImplicitParam(name = "operator",value = "购买企业"),
+//            @ApiImplicitParam(name = "manufacturer",value = "生产企业"),
+            @ApiImplicitParam(name = "status",value = "合同状态"),
+            @ApiImplicitParam(name = "ordercode",value = "合同单号"),
+    })
+    public Msg getConfirm(@RequestParam(defaultValue = "0") Integer pageIndex, @RequestParam(defaultValue = "10") Integer pageSize, String sort, String order,
+                                    String operator, String status, String ordercode){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        HashMap<String, Object> condition = new HashMap<String, Object>();
+
+        if (StringUtils.isNotBlank(operator)) {
+            condition.put("operator", operator.trim());
+        }
+
+        if (StringUtils.isNotBlank(status)) {
+            condition.put("status", status.trim());
+        }
+
+        if (StringUtils.isNotBlank(ordercode)){
+            condition.put("ordercode",ordercode.trim());
+        }
+
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (userInfo.getCompanyid() != null){
+            condition.put("supplyenterprisenumber", userInfo.getCompanynumber());
+        }else if (userInfo.getType() == 3){
+            condition.put("province",userInfo.getProvince());
+            condition.put("city",userInfo.getCity());
+            condition.put("area",userInfo.getArea());
+            condition.put("town",userInfo.getTown());
+            condition.put("community",userInfo.getCommunity());
+        }
+
+//        if (StringUtils.isNotBlank(province) && condition.get("province") == null){
+//            condition.put("province",province.trim());
+//
+//        if (StringUtils.isNotBlank(city)){
+//            condition.put("city",city.trim());
+//        }
+//
+//        if (StringUtils.isNotBlank(area)){
+//            condition.put("area",area.trim());
+//        }
+//
+//        if (StringUtils.isNotBlank(town)){
+//            condition.put("town",town.trim());
+//        }
+//
+//        if (StringUtils.isNotBlank(community)){
+//            condition.put("community",community.trim());
+//        }
+//        }
+
+        condition.put("confirm",(byte)1);
+        pageInfo.setCondition(condition);
+        contractOrderService.selectDataGrid(pageInfo);
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+
+    @ApiOperation(value = "添加合同", response = Msg.class)
+    @PostMapping("/addApply")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "purchaseunitname",value = "单位名称",required = true),
+            @ApiImplicitParam(name = "purchaseunitaddress",value = "单位地址",required = true),
+            @ApiImplicitParam(name = "purchaserepresentative",value = "法定代表人",required = true),
+            @ApiImplicitParam(name = "purchaserepresentativephone",value = "法定代表人联系电话",required = true),
+            @ApiImplicitParam(name = "purchaserepresentativeemail",value = "法定代表人电子邮箱",required = true),
+            @ApiImplicitParam(name = "purchasebank",value = "开户银行",required = true),
+            @ApiImplicitParam(name = "purchaselicensenumber",value = "许可证编号",required = true),
+            @ApiImplicitParam(name = "purchasezipcode",value = "邮政编码",required = true),
+            @ApiImplicitParam(name = "purchaseagent",value = "委托代理人",required = true),
+            @ApiImplicitParam(name = "purchaseagentphone",value = "委托代理人联系电话",required = true),
+            @ApiImplicitParam(name = "purchaseagentemail",value = "委托代理人电子邮箱",required = true),
+            @ApiImplicitParam(name = "purchaseaccount",value = "账户",required = true),
+            @ApiImplicitParam(name = "purchaseenterprisenumber",value = "企业编号",required = true),
+
+            @ApiImplicitParam(name = "supplyunitname",value = "单位名称",required = true),
+            @ApiImplicitParam(name = "supplyunitaddress",value = "单位地址",required = true),
+            @ApiImplicitParam(name = "supplyrepresentative",value = "法定代表人",required = true),
+            @ApiImplicitParam(name = "supplyrepresentativephone",value = "法定代表人联系电话",required = true),
+            @ApiImplicitParam(name = "supplyrepresentativeemail",value = "法定代表人电子邮箱",required = true),
+            @ApiImplicitParam(name = "supplybank",value = "开户银行",required = true),
+            @ApiImplicitParam(name = "supplylicensenumber",value = "许可证编号",required = true),
+            @ApiImplicitParam(name = "supplyzipcode",value = "邮政编码",required = true),
+            @ApiImplicitParam(name = "supplyagent",value = "委托代理人",required = true),
+            @ApiImplicitParam(name = "supplyagentphone",value = "委托代理人联系电话",required = true),
+            @ApiImplicitParam(name = "supplyagentemail",value = "委托代理人电子邮箱",required = true),
+            @ApiImplicitParam(name = "supplyaccount",value = "账户",required = true),
+            @ApiImplicitParam(name = "supplyenterprisenumber",value = "企业编号",required = true),
+
+
+            @ApiImplicitParam(name = "signtime",value = "签订时间",required = true),
+            @ApiImplicitParam(name = "signlocation",value = "签订地点",required = true),
+
+            @ApiImplicitParam(name = "qualitystandard",value = "产品质量标准及要求",required = true),
+            @ApiImplicitParam(name = "prohibiteddrug",value = "禁(限)用药物要求",required = true),
+            @ApiImplicitParam(name = "packingstandard",value = "产品包装标准及要求   ",required = true),
+            @ApiImplicitParam(name = "timeandlocation",value = "提(交)货时间和地点",required = true),
+            @ApiImplicitParam(name = "transportandcost",value = "运输方式及费用负担",required = true),
+            @ApiImplicitParam(name = "acceptstandard",value = "验收标准与方法",required = true),
+            @ApiImplicitParam(name = "objectdeadline",value = "提出异议期限",required = true),
+            @ApiImplicitParam(name = "settlemethod",value = "结算方式与期限",required = true),
+            @ApiImplicitParam(name = "productsafetyandquality",value = "产品安全与质量责任",required = true),
+            @ApiImplicitParam(name = "transportsafety",value = "运输安全责任",required = true),
+            @ApiImplicitParam(name = "breakcontract",value = "违约责任",required = true),
+            @ApiImplicitParam(name = "contractdisputesfelid",value = "合同争议的解决方式:序号",required = true),
+            @ApiImplicitParam(name = "contractdisputesfelidcontent",value = "合同争议的解决方式:序号内容",required = true),
+            @ApiImplicitParam(name = "otheragreedmatters",value = "其他约定事项",required = true),
+
+            @ApiImplicitParam(name = "validstarttime",value = "合同有效开始时间",required = true),
+            @ApiImplicitParam(name = "validendtime",value = "合同有效结束时间",required = true),
+
+            @ApiImplicitParam(name = "file",value = "合同附件",required = true),
+            @ApiImplicitParam(name = "productList",value = "合同产品列表",required = true),
+
+    }
+    )
+    public Msg addApply(ContractOrderVo contractOrderVo) throws Exception {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        contractOrderService.checkAdd(contractOrderVo);
+        contractOrderService.addApply(contractOrderVo, getUser());
+        return msg;
+    }
+
+    @ApiOperation(value = "修改合同",response = Msg.class)
+    @PostMapping("/putApply")
+    public Msg putApply(ContractOrderVo contractOrderVo) throws Exception {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        contractOrderService.checkAdd(contractOrderVo);
+        contractOrderService.putApply(contractOrderVo, getUser());
+        return msg;
+    }
+
+    @ApiOperation(value = "删除合同",response = Msg.class)
+    @PostMapping("/delApply")
+    public Msg putApply(@RequestBody JSONObject jsonObject) throws Exception {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        String operator = getUser().getUsername();
+        Long id = jsonObject.getLong("id");
+        ContractOrderInfo contractOrderInfo = contractOrderService.getById(id);
+        //
+        if (!contractOrderInfo.getStatus().equals(ContractStatus.WAIT_SUBMIT) &&
+                !contractOrderInfo.getStatus().equals(ContractStatus.Refuse_Product)){
+            msg.setCode("999");
+            msg.setMessage("合同状态不为待提交、拒绝生产,无法删除");
+            return msg;
+        }
+
+        contractOrderInfo.setIsdel((byte)1);
+        contractOrderInfo.setModifiedby(operator);
+        contractOrderInfo.setModifieddate(new Date());
+        contractOrderService.updateById(contractOrderInfo);
+
+        ContractLogInfo contractLogInfo = new ContractLogInfo();
+        contractLogInfo.setOptlog("删除合同");
+        contractLogInfo.setOperator(operator);
+        contractLogInfo.setOrdercode(contractOrderInfo.getOrdercode());
+        contractLogInfo.setOperatordate(new Date());
+        contractLogService.save(contractLogInfo);
+
+        return msg;
+    }
+
+    @ApiOperation(value = "提交合同",response = Msg.class)
+    @PostMapping("/submitApply")
+    public Msg submitApply(@RequestBody JSONObject jsonObject) throws Exception {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        String operator = getUser().getUsername();
+        Long id = jsonObject.getLong("id");
+        ContractOrderInfo contractOrderInfo = contractOrderService.getById(id);
+
+        if (!contractOrderInfo.getStatus().equals(ContractStatus.WAIT_SUBMIT) &&
+                !contractOrderInfo.getStatus().equals(ContractStatus.Refuse_Product)){
+            msg.setCode("999");
+            msg.setMessage("合同状态不为待提交、拒绝生产,无法提交");
+            return msg;
+        }
+
+        contractOrderInfo.setStatus(ContractStatus.WAIT_CONFIRM);
+        contractOrderInfo.setModifiedby(operator);
+        contractOrderInfo.setModifieddate(new Date());
+        contractOrderInfo.setOpinion("");
+        contractOrderService.updateById(contractOrderInfo);
+
+        ContractLogInfo contractLogInfo = new ContractLogInfo();
+        contractLogInfo.setOptlog("提交合同");
+        contractLogInfo.setOperator(operator);
+        contractLogInfo.setOrdercode(contractOrderInfo.getOrdercode());
+        contractLogInfo.setOperatordate(new Date());
+        contractLogService.save(contractLogInfo);
+
+        return msg;
+    }
+
+    @ApiOperation(value = "确认生产", response = Msg.class)
+    @PostMapping("/confirmProduct")
+    public Msg confirmProduct(@RequestBody ContractOrderVo contractOrderVo) {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        contractOrderService.checkConfirm(contractOrderVo);
+        contractOrderService.confirmProduct(contractOrderVo, getUser());
+        return msg;
+    }
+
+    @ApiOperation(value = "导出电子标签号",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "ordercode",value = "合同单号"),
+    })
+    @PostMapping("/exportRFID")
+    public Msg exportRFID(@RequestBody JSONObject jsonObject) throws Exception {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        String ordercode = jsonObject.getString("ordercode");
+        ContractOrderInfo contractOrderInfo = contractOrderService.selectByOrderCode(ordercode);
+        if (!contractOrderInfo.getStatus().equals(ContractStatus.Generated)) {
+            msg.setCode("999");
+            msg.setMessage("合同状态不为已生成,无法导出");
+            return msg;
+        }
+        List<ProductCodeInfo> productCodeInfos = productCodeService.selectByOrderCode(ordercode);
+        List<ProductCodeVo> productCodeVoList = new ArrayList<> ();
+        for (ProductCodeInfo productCodeInfo : productCodeInfos){
+            ProductCodeVo productCodeVo = BeanUtils.copy(productCodeInfo,ProductCodeVo.class);
+            String start = productCodeInfo.getOriginalcode().substring(14,19);
+            Integer end = Integer.parseInt(start)+productCodeInfo.getBoxnumber()-1;
+            productCodeVo.setBoxrange("("+start+"-"+String.format("%05d", end)+")");
+            productCodeVo.setCrc(productCodeInfo.getOrdercode().substring(productCodeInfo.getOrdercode().length()-8));
+            productCodeVoList.add(productCodeVo);
+        }
+        msg.setResult(productCodeVoList);
+        return msg;
+    }
+
+    @ApiOperation(value = "导出内包装码",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "ordercode",value = "合同单号"),
+    })
+    @PostMapping("/exportBarCode")
+    public Msg exportBarCode(@RequestBody JSONObject jsonObject) throws Exception {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        String ordercode = jsonObject.getString("ordercode");
+        ContractOrderInfo contractOrderInfo = contractOrderService.selectByOrderCode(ordercode);
+        if (!contractOrderInfo.getStatus().equals(ContractStatus.Generated)) {
+            msg.setCode("999");
+            msg.setMessage("合同状态不为已生成,无法导出");
+            return msg;
+        }
+        List<ProductCodeVo> productCodeVos = new ArrayList<>();
+        List<ProductCodeVo> printCodeVos = new ArrayList<>();
+        List<ProductCodeInfo> productCodeInfos = productCodeService.selectByOrderCode(ordercode);
+        for (ProductCodeInfo productCodeInfo : productCodeInfos){
+            ProductCodeVo productCodeVo = BeanUtils.copy(productCodeInfo,ProductCodeVo.class);
+
+            BigDecimal explosiveContent = new BigDecimal(productCodeVo.getExplosivecontent().replace("kg","").replace("g",""));
+            Integer boxNumber = productCodeVo.getBoxnumber();
+//            try {
+//                productCodeVo.setImg(MatrixToImageWriter.getBase64Img(productCodeInfo.getOriginalcode()));
+//            }catch (Exception e){
+//                e.printStackTrace();
+//            }
+
+            if (productCodeVo.getExplosivecontent().contains("kg")){
+                BigDecimal explosive = explosiveContent.multiply(new BigDecimal(1000)).divide(new BigDecimal(boxNumber),0, RoundingMode.HALF_UP);
+                productCodeVo.setExplosivecontent(explosive + "g");
+            } else {
+                BigDecimal explosive = explosiveContent.divide(new BigDecimal(boxNumber),0, RoundingMode.HALF_UP);
+                productCodeVo.setExplosivecontent(explosive + "g");
+            }
+
+            Map<String,List<ProductCodeVo>> result = FireworkDeal.getProductCodeVoList(productCodeVo);
+
+            productCodeVos.addAll(result.get("productCodeVoList"));
+            printCodeVos.addAll(result.get("printCodeVoList"));
+        }
+
+        // printCodeVos
+        int length = printCodeVos.size();
+        int pageSize = 10;
+        int quotient  = length / pageSize;
+        int remainder = length % pageSize;
+        int maxPageIndex = quotient;
+        if (remainder > 0) maxPageIndex++;
+        List<List<ProductCodeVo>> splitPrintSize = new ArrayList<>();
+        for (int pageIndex = 0; pageIndex < maxPageIndex; pageIndex++) {
+            if (pageIndex + 1 == maxPageIndex) {
+                splitPrintSize.add(printCodeVos.subList(pageIndex * pageSize, length));
+                break;
+            }
+            splitPrintSize.add(printCodeVos.subList(pageIndex * pageSize, (pageIndex + 1) * pageSize));
+        }
+
+        HashMap<String, Object> result = new HashMap<>();
+//        result.put("exportInfo", productCodeVos);
+        result.put("printInfo", splitPrintSize);
+        msg.setResult(result);
+        return msg;
+    }
+
+    @ApiOperation(value = "显示内包装码批次",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "ordercode",value = "合同单号"),
+    })
+    @PostMapping("/batchBarCode")
+    public Msg batchBarCode(@RequestBody JSONObject jsonObject) throws Exception {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        String ordercode = jsonObject.getString("ordercode");
+        Integer needBlank = jsonObject.getInteger("needBlank");
+        ContractOrderInfo contractOrderInfo = contractOrderService.selectByOrderCode(ordercode);
+        if (!contractOrderInfo.getStatus().equals(ContractStatus.Generated)) {
+            msg.setCode("999");
+            msg.setMessage("合同状态不为已生成,无法打印");
+            return msg;
+        }
+        List<ProductCodeVo> printCodeVos = new ArrayList<>();
+        List<ProductCodeInfo> productCodeInfos = productCodeService.selectByOrderCode(ordercode);
+        for (ProductCodeInfo productCodeInfo : productCodeInfos){
+            ProductCodeVo productCodeVo = BeanUtils.copy(productCodeInfo,ProductCodeVo.class);
+            BigDecimal explosiveContent = new BigDecimal(productCodeVo.getExplosivecontent().replace("kg","").replace("g",""));
+            Integer boxNumber = productCodeVo.getBoxnumber();
+            if (productCodeVo.getExplosivecontent().contains("kg")){
+                BigDecimal explosive = explosiveContent.multiply(new BigDecimal(1000)).divide(new BigDecimal(boxNumber),0, RoundingMode.HALF_UP);
+                productCodeVo.setExplosivecontent(explosive + "g");
+            } else {
+                BigDecimal explosive = explosiveContent.divide(new BigDecimal(boxNumber),0, RoundingMode.HALF_UP);
+                productCodeVo.setExplosivecontent(explosive + "g");
+            }
+            printCodeVos.addAll(FireworkDeal.getBatchProductCodeList(productCodeVo,needBlank));
+        }
+
+        // printCodeVos
+        int length = printCodeVos.size();
+        int pageSize = 1000;
+        int quotient  = length / pageSize;
+        int remainder = length % pageSize;
+        int maxPageIndex = quotient;
+        if (remainder > 0) maxPageIndex++;
+        List<ProductCodePrint> splitPrintSize = new ArrayList<>();
+        for (int pageIndex = 0; pageIndex < maxPageIndex; pageIndex++) {
+            ProductCodePrint productCodePrint = new ProductCodePrint();
+            productCodePrint.setOrderCode(ordercode);
+            productCodePrint.setBatchCode(pageIndex+1);
+            if (pageIndex + 1 == maxPageIndex) {
+                List<ProductCodeVo> productCodeVoList = printCodeVos.subList(pageIndex * pageSize, length);
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(i).getItemcode())) {
+                        productCodePrint.setStartCode(productCodeVoList.get(i).getItemcode());
+                        break;
+                    }
+                }
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(productCodeVoList.size()-1-i).getItemcode())) {
+                        productCodePrint.setEndCode(productCodeVoList.get(productCodeVoList.size()-1-i).getItemcode());
+                        break;
+                    }
+                }
+                splitPrintSize.add(productCodePrint);
+            }
+            else {
+                List<ProductCodeVo> productCodeVoList = printCodeVos.subList(pageIndex * pageSize, (pageIndex + 1) * pageSize);
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(i).getItemcode())) {
+                        productCodePrint.setStartCode(productCodeVoList.get(i).getItemcode());
+                        break;
+                    }
+                }
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(productCodeVoList.size()-1-i).getItemcode())) {
+                        productCodePrint.setEndCode(productCodeVoList.get(productCodeVoList.size()-1-i).getItemcode());
+                        break;
+                    }
+                }
+                splitPrintSize.add(productCodePrint);
+            }
+        }
+
+        HashMap<String, Object> result = new HashMap<>();
+        result.put("printInfo", splitPrintSize);
+        msg.setResult(result);
+        return msg;
+    }
+
+    @ApiOperation(value = "分批打印内包装码",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "orderCode",value = "合同单号"),
+            @ApiImplicitParam(name = "batchCode",value = "批次号"),
+    })
+    @PostMapping("/printBarCode")
+    public Msg printBarCode(@RequestBody JSONObject jsonObject) throws Exception {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        String orderCode = jsonObject.getString("orderCode");
+        Integer batchCode = jsonObject.getInteger("batchCode");
+        Integer needBlank = jsonObject.getInteger("needBlank");
+        ContractOrderInfo contractOrderInfo = contractOrderService.selectByOrderCode(orderCode);
+        if (!contractOrderInfo.getStatus().equals(ContractStatus.Generated)) {
+            msg.setCode("999");
+            msg.setMessage("合同状态不为已生成,无法打印");
+            return msg;
+        }
+        List<ProductCodeVo> printCodeVos = new ArrayList<>();
+        List<ProductCodeInfo> productCodeInfos = productCodeService.selectByOrderCode(orderCode);
+        for (ProductCodeInfo productCodeInfo : productCodeInfos){
+            ProductCodeVo productCodeVo = BeanUtils.copy(productCodeInfo,ProductCodeVo.class);
+            BigDecimal explosiveContent = new BigDecimal(productCodeVo.getExplosivecontent().replace("kg","").replace("g",""));
+            Integer boxNumber = productCodeVo.getBoxnumber();
+            if (productCodeVo.getExplosivecontent().contains("kg")){
+                BigDecimal explosive = explosiveContent.multiply(new BigDecimal(1000)).divide(new BigDecimal(boxNumber),0, RoundingMode.HALF_UP);
+                productCodeVo.setExplosivecontent(explosive + "g");
+            } else {
+                BigDecimal explosive = explosiveContent.divide(new BigDecimal(boxNumber),0, RoundingMode.HALF_UP);
+                productCodeVo.setExplosivecontent(explosive + "g");
+            }
+            printCodeVos.addAll(FireworkDeal.getBatchProductCodeList(productCodeVo,needBlank));
+        }
+
+        // printCodeVos
+        int length = printCodeVos.size();
+        int pageSize = 1000;
+        int quotient  = length / pageSize;
+        int remainder = length % pageSize;
+        int maxPageIndex = quotient;
+        if (remainder > 0) maxPageIndex++;
+        ProductCodePrint productPrint = new ProductCodePrint();
+        for (int pageIndex = 0; pageIndex < maxPageIndex; pageIndex++) {
+            ProductCodePrint productCodePrint = new ProductCodePrint();
+            productCodePrint.setOrderCode(orderCode);
+            productCodePrint.setBatchCode(pageIndex+1);
+            if (pageIndex + 1 == maxPageIndex) {
+                List<ProductCodeVo> productCodeVoList = printCodeVos.subList(pageIndex * pageSize, length);
+                productCodePrint.setProductCodeVos(productCodeVoList);
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(i).getItemcode())) {
+                        productCodePrint.setStartCode(productCodeVoList.get(i).getItemcode());
+                        break;
+                    }
+                }
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(productCodeVoList.size()-1-i).getItemcode())) {
+                        productCodePrint.setEndCode(productCodeVoList.get(productCodeVoList.size()-1-i).getItemcode());
+                        break;
+                    }
+                }
+            } else {
+                List<ProductCodeVo> productCodeVoList = printCodeVos.subList(pageIndex * pageSize, (pageIndex + 1) * pageSize);
+                productCodePrint.setProductCodeVos(productCodeVoList);
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(i).getItemcode())) {
+                        productCodePrint.setStartCode(productCodeVoList.get(i).getItemcode());
+                        break;
+                    }
+                }
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(productCodeVoList.size()-1-i).getItemcode())) {
+                        productCodePrint.setEndCode(productCodeVoList.get(productCodeVoList.size()-1-i).getItemcode());
+                        break;
+                    }
+                }
+            }
+
+            if (productCodePrint.getBatchCode().equals(batchCode)){
+                productPrint = productCodePrint;
+                break;
+            }
+        }
+        msg.setResult(productPrint);
+        return msg;
+    }
+
+    @ApiOperation(value = "分批打印内包装码",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "orderCode",value = "合同单号"),
+            @ApiImplicitParam(name = "batchCode",value = "批次号"),
+    })
+    @PostMapping("/zplPrint")
+    public Msg zplPrintBarCode(@RequestBody JSONObject jsonObject){
+        String orderCode = jsonObject.getString("orderCode");
+        Integer batchCode = jsonObject.getInteger("batchCode");
+        Integer needBlank = jsonObject.getInteger("needBlank");
+        ContractOrderInfo contractOrderInfo = contractOrderService.selectByOrderCode(orderCode);
+        if (!contractOrderInfo.getStatus().equals(ContractStatus.Generated)) {
+            return new Msg(ERROR_10004,"合同状态不为已生成,无法打印");
+        }
+        List<ProductCodeVo> printCodeVos = new ArrayList<>();
+        List<ProductCodeInfo> productCodeInfos = productCodeService.selectByOrderCode(orderCode);
+        for (ProductCodeInfo productCodeInfo : productCodeInfos){
+            ProductCodeVo productCodeVo = BeanUtils.copy(productCodeInfo,ProductCodeVo.class);
+            BigDecimal explosiveContent = new BigDecimal(productCodeVo.getExplosivecontent().replace("kg","").replace("g",""));
+            Integer boxNumber = productCodeVo.getBoxnumber();
+            if (productCodeVo.getExplosivecontent().contains("kg")){
+                BigDecimal explosive = explosiveContent.multiply(new BigDecimal(1000)).divide(new BigDecimal(boxNumber),0, RoundingMode.HALF_UP);
+                productCodeVo.setExplosivecontent(explosive + "g");
+            } else {
+                BigDecimal explosive = explosiveContent.divide(new BigDecimal(boxNumber),0, RoundingMode.HALF_UP);
+                productCodeVo.setExplosivecontent(explosive + "g");
+            }
+            printCodeVos.addAll(FireworkDeal.getBatchProductCodeList(productCodeVo,needBlank));
+        }
+
+        // printCodeVos
+        int length = printCodeVos.size();
+        int pageSize = 1000;
+        int quotient  = length / pageSize;
+        int remainder = length % pageSize;
+        int maxPageIndex = quotient;
+        if (remainder > 0) maxPageIndex++;
+        ProductCodePrint productPrint = new ProductCodePrint();
+        for (int pageIndex = 0; pageIndex < maxPageIndex; pageIndex++) {
+            ProductCodePrint productCodePrint = new ProductCodePrint();
+            productCodePrint.setOrderCode(orderCode);
+            productCodePrint.setBatchCode(pageIndex+1);
+            if (pageIndex + 1 == maxPageIndex) {
+                List<ProductCodeVo> productCodeVoList = printCodeVos.subList(pageIndex * pageSize, length);
+                productCodePrint.setProductCodeVos(productCodeVoList);
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(i).getItemcode())) {
+                        productCodePrint.setStartCode(productCodeVoList.get(i).getItemcode());
+                        break;
+                    }
+                }
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(productCodeVoList.size()-1-i).getItemcode())) {
+                        productCodePrint.setEndCode(productCodeVoList.get(productCodeVoList.size()-1-i).getItemcode());
+                        break;
+                    }
+                }
+            } else {
+                List<ProductCodeVo> productCodeVoList = printCodeVos.subList(pageIndex * pageSize, (pageIndex + 1) * pageSize);
+                productCodePrint.setProductCodeVos(productCodeVoList);
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(i).getItemcode())) {
+                        productCodePrint.setStartCode(productCodeVoList.get(i).getItemcode());
+                        break;
+                    }
+                }
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(productCodeVoList.size()-1-i).getItemcode())) {
+                        productCodePrint.setEndCode(productCodeVoList.get(productCodeVoList.size()-1-i).getItemcode());
+                        break;
+                    }
+                }
+            }
+
+            if (productCodePrint.getBatchCode().equals(batchCode)){
+                productPrint = productCodePrint;
+                break;
+            }
+        }
+
+        String zpl;
+        try {
+            zpl = contractOrderService.generateZplString(productPrint,userService.getById(getUser().getId()));
+        }catch (Exception e){
+            return new Msg(ERROR_40001,"打印出错");
+        }
+        return success(zpl);
+    }
+
+
+    @ApiOperation(value = "拒绝生产",response = Msg.class)
+    @PostMapping("/rejectProduct")
+    public Msg rejectProduct(@RequestBody JSONObject jsonObject) throws Exception {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        String operator = getUser().getUsername();
+        Long id = jsonObject.getLong("id");
+        ContractOrderInfo contractOrderInfo = contractOrderService.getById(id);
+
+        if (!contractOrderInfo.getStatus().equals(ContractStatus.WAIT_CONFIRM)) {
+            msg.setCode("999");
+            msg.setMessage("合同状态不为待确认,无法拒绝生产");
+            return msg;
+        }
+
+        contractOrderInfo.setStatus(ContractStatus.Refuse_Product);
+        contractOrderInfo.setOpinion(jsonObject.getString("opinion"));
+        contractOrderInfo.setModifiedby(operator);
+        contractOrderInfo.setModifieddate(new Date());
+        contractOrderService.updateById(contractOrderInfo);
+
+        ContractLogInfo contractLogInfo = new ContractLogInfo();
+        contractLogInfo.setOptlog("拒绝合同");
+        contractLogInfo.setOperator(operator);
+        contractLogInfo.setOrdercode(contractOrderInfo.getOrdercode());
+        contractLogInfo.setOperatordate(new Date());
+        contractLogService.save(contractLogInfo);
+
+        return msg;
+    }
+
+    @ApiOperation(value = "生成条码",response = Msg.class)
+    @PostMapping("produce")
+    public Msg produce(@RequestBody JSONObject jsonObject){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        Long id = jsonObject.getLong("id");
+        ContractOrderInfo contractOrderInfo = contractOrderService.getById(id);
+        if (!contractOrderInfo.getStatus().equals(ContractStatus.Confirm_Product)) {
+            msg.setCode("999");
+            msg.setMessage("合同状态不为确认生产,无法生成条码");
+            return msg;
+        }
+        Date producedate = jsonObject.getDate("producedate");
+        if (producedate == null){
+            return new Msg(ErrorCode.ERROR_10002);
+        }
+
+
+
+        {
+            //获取合同的产品信息
+            List<ContractDetailInfo> contractDetailInfos = contractDetailService.getBaseMapper().selectList(
+                    new LambdaQueryWrapper<ContractDetailInfo>()
+                            .eq(ContractDetailInfo::getOrdercode, contractOrderInfo.getOrdercode()));
+
+            for (ContractDetailInfo detail : contractDetailInfos) {
+
+                String productCode = detail.getDirectioncode();
+                //箱数
+                Integer boxNum = detail.getNum();
+                ProductInfo productInfo = productService.selectByDirection(productCode);
+                //箱含量
+                Integer numPerBox = productInfo.getBoxNumber();
+                //查找单日合同产品总数
+                int currentNum = boxNum * numPerBox;
+                List<ContractDetailInfo> detailInfos = contractDetailService.selectAllDetailAtSpecificDate(productCode, producedate);
+                int numAlready = detailInfos.stream().mapToInt(ContractDetailInfo::getNum).sum() * numPerBox;
+                //情况1.这个情况应该不会出现
+                if (numAlready >= 100000) {
+                    msg.setCode("999");
+                    msg.setMessage("产品:" + productInfo.getName() + ",指定日超过100000挂,数量为:" + numAlready);
+                    return msg;
+                }
+                //情况2
+                if (numAlready + currentNum >= 100000) {
+                    msg.setCode("999");
+                    msg.setMessage("产品:" + productInfo.getName() + "指定日挂数:" + numAlready + ",当前数量:" + currentNum + "总和超过100000");
+                    return msg;
+                }
+
+
+            }
+        }
+
+        contractOrderInfo.setProducedate(producedate);
+        contractOrderService.updateById(contractOrderInfo);
+
+        return msg;
+    }
+
+
+    @ApiOperation(value = "产品导入解析返回",response = Msg.class)
+    @PostMapping("/{enterprisenumber}/product2json")
+    public Msg product2json(@PathVariable("enterprisenumber") String enterprisenumber, MultipartFile file) {
+        List<Product2JsonVo> product2JsonVos = productService.transform2Json(enterprisenumber, file, getUser());
+        return success(product2JsonVos);
+    }
+
+
+    /**
+     * @Description: 查询供货或者购货单位信息
+     * @author celin
+     * @date 2021/5/26 9:33
+     */
+    @ApiOperation(value = "查询供货或者购货单位信息",response = Msg.class)
+    @PostMapping("/contractUnitList")
+    Msg supplyAndPurchaseUnitPage(@RequestBody FilterObject filter) {
+        Integer pageIndex = filter.getPageIndex();
+        Integer pageSize = filter.getPageSize();
+        IPage page = contractUnitDetailService.selectSupplyAndPurchaseUnitPage(new Page<>(pageIndex,pageSize),filter.getFilter(),getUser());
+        return success(page);
+    }
+
+    /**
+     * @Description: 新增供货或者购货单位信息
+     * @date 2021/5/26 9:47
+     */
+    @ApiOperation(value = "新增供货或者购货单位信息",response = Msg.class)
+    @PostMapping("/addContractUnit")
+    Msg addSupplyAndPurchaseUnit(@RequestBody ContractUnitDetail contractUnitDetail) {
+        contractUnitDetailService.checkAdd(contractUnitDetail);
+        contractUnitDetailService.addSupplyAndPurchaseUnit(contractUnitDetail,getUser());
+        return success();
+    }
+
+
+    /**
+     * @Description: 修改供货或者购货单位信息
+     * @date 2021/5/26 9:47
+     */
+    @ApiOperation(value = "修改供货或者购货单位信息",response = Msg.class)
+    @PostMapping("/contractUnit")
+    Msg modSupplyAndPurchaseUnit(@RequestBody ContractUnitDetail contractUnitDetail) {
+        contractUnitDetailService.checkAdd(contractUnitDetail);
+        contractUnitDetailService.modSupplyAndPurchaseUnit(contractUnitDetail,getUser());
+        return success();
+    }
+
+    /**
+     * @Description: 删除供货或者购货单位信息
+     * @date 2021/5/26 9:47
+     */
+    @ApiOperation(value = "删除供货或者购货单位信息",response = Msg.class)
+    @PostMapping("/delContractUnit")
+    Msg delSupplyAndPurchaseUnit(@RequestParam Long id) {
+        contractUnitDetailService.delSupplyAndPurchaseUnit(id,getUser());
+        return success();
+    }
+
+    @GetMapping("/replenishBox")
+    public Msg replenishBoxPrint(@RequestParam String code){
+        if (StringUtils.isBlank(code) || !FireworkDeal.is22Characters(code)){
+            return new Msg(ERROR_10004.getCode(),ERROR_10004.getMsg()+":流向码格式不符,请输入包装箱码!");
+        }
+        ProductCodeInfo productCodeInfo = productCodeService.selectByOriginalCode(code);
+        if (productCodeInfo == null){
+            return new Msg(ERROR_50001.getCode(),ERROR_50001.getMsg()+":没有找到相应的产品信息!");
+        }
+        ProductCodeVo productCodeVo = BeanUtils.copy(productCodeInfo,ProductCodeVo.class);
+        String start = productCodeInfo.getOriginalcode().substring(14,19);
+        Integer end = Integer.parseInt(start)+productCodeInfo.getBoxnumber()-1;
+        productCodeVo.setBoxrange("("+start+"-"+String.format("%05d", end)+")");
+        productCodeVo.setCrc(productCodeInfo.getOrdercode().substring(productCodeInfo.getOrdercode().length()-8));
+
+        return success(productCodeVo);
+    }
+
+    /** 打印日志插入 **/
+    @PostMapping("/printLog")
+    public Msg printLog(JSONArray array){
+        UserInfo userInfo = userService.getById(getUser().getId());
+        for (int i=0;i<array.size();i++){
+            String dire = array.getString(i);
+            ProductVo productVo = productService.selectVoByDirection(dire);
+
+            ProductLocusInfo productLocusInfo = new ProductLocusInfo(dire,new Date(),
+                    new Date(),userInfo.getCompany(),null,ProductLocusInfo.REPLENISH_PRINT_STATUS,
+                    productVo.getBoxNumber().toString());
+            productLocusService.insertProductLocus(productLocusInfo);
+        }
+
+        return success();
+    }
+
+
+    @ApiOperation(value = "退回电子标签",response = Msg.class)
+    @PostMapping("/{ordercode}/returnTag")
+    public Msg returnTag(@PathVariable("ordercode") String ordercode, MultipartFile file) {
+        contractOrderService.returnTag(ordercode, file,getUser());
+        List<ProductVo> productVoList = contractDetailService.selectByOrder(ordercode);
+        return success(productVoList);
+    }
+
+
+    @ApiOperation(value = "外包装箱码使用插件打印",response = Msg.class)
+    @PostMapping("/replenishBoxPrint")
+    public Msg replenishBoxZplPrint(@RequestBody JSONObject jsonObject){
+        String codes = jsonObject.getString("codes");
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (StringUtils.isBlank(codes)){
+            return new Msg(ERROR_10004);
+        }
+        List<String>codeList = StringUtils.toList(codes);
+        List<ProductCodeVo>productCodeVos = new ArrayList<>();
+        for (String code : codeList){
+            if (StringUtils.isBlank(code) || !FireworkDeal.is22Characters(code)){
+                return new Msg(ERROR_10004.getCode(),ERROR_10004.getMsg()+":流向码格式不符,请输入包装箱码!");
+            }
+            ProductCodeInfo productCodeInfo = productCodeService.selectByOriginalCode(code);
+            if (productCodeInfo == null){
+                return new Msg(ERROR_50001.getCode(),ERROR_50001.getMsg()+":没有找到相应的产品信息!");
+            }
+            ProductCodeVo productCodeVo = BeanUtils.copy(productCodeInfo,ProductCodeVo.class);
+            String start = productCodeInfo.getOriginalcode().substring(14,19);
+            Integer end = Integer.parseInt(start)+productCodeInfo.getBoxnumber()-1;
+            productCodeVo.setBoxrange("("+start+"-"+String.format("%05d", end)+")");
+            productCodeVo.setCrc(productCodeInfo.getOrdercode().substring(productCodeInfo.getOrdercode().length()-8));
+            productCodeVos.add(productCodeVo);
+        }
+        String zplString = contractOrderService.generateOuterTag(productCodeVos,userInfo);
+        return success(zplString);
+    }
+
+    @ApiOperation(value = "内包装码使用插件打印",response = Msg.class)
+    @PostMapping("/replenishInnerPrint")
+    public Msg replenishInnerZplPrint(@RequestBody JSONObject jsonObject){
+        String codes = jsonObject.getString("codes");
+        if (StringUtils.isBlank(codes)){
+            return new Msg(ERROR_10004);
+        }
+        List<String>codeList = StringUtils.toList(codes);
+        List<ProductCodeVo>productCodeVos = new ArrayList<>();
+        for (String code : codeList){
+            if (StringUtils.isBlank(code) || !FireworkDeal.is19Characters(code)){
+                return new Msg(ERROR_10004.getCode(),ERROR_10004.getMsg()+":流向码格式不符,请输入包装箱码!");
+            }
+
+            ProductInfo productInfo = productService.selectByDirection(code);
+            DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(code);
+            int j = Integer.parseInt(directionDetail.getSerialNo())%productInfo.getBoxNumber();
+            if (j == 0){
+                j = productInfo.getBoxNumber();
+            }
+            int i = Integer.parseInt(directionDetail.getSerialNo()) - j + 1;
+            String boxCode = directionDetail.getItemCode() + directionDetail.getDateCode()
+                    + String.format("%05d",i)+ String.format("%03d",productInfo.getBoxNumber());
+
+            ProductCodeInfo productCodeInfo = productCodeService.selectByOriginalCode(boxCode);
+            if (productCodeInfo == null){
+                return new Msg(ERROR_50001.getCode(),ERROR_50001.getMsg()+":没有找到相应的产品信息!");
+            }
+            ProductCodeVo productCodeVo = BeanUtils.copy(productCodeInfo,ProductCodeVo.class);
+            productCodeVo.setItemcode(code);
+            String start = productCodeInfo.getOriginalcode().substring(14,19);
+            Integer end = Integer.parseInt(start)+productCodeInfo.getBoxnumber()-1;
+            productCodeVo.setBoxrange("("+start+"-"+String.format("%05d", end)+")");
+            productCodeVo.setCrc(productCodeInfo.getOrdercode().substring(productCodeInfo.getOrdercode().length()-8));
+            productCodeVos.add(productCodeVo);
+        }
+        if (productCodeVos.size() % 2 == 1){
+            productCodeVos.add(new ProductCodeVo());
+        }
+        UserInfo userInfo = userService.getById(getUser().getId());
+        String zplString = contractOrderService.generateInnerTag(productCodeVos,userInfo);
+        return success(zplString);
+    }
+
+    @ApiOperation(value = "合同箱码获取批次信息",response = Msg.class)
+    @PostMapping("/replenishBoxBatch")
+    public Msg replenishBoxBatch(@RequestBody JSONObject jsonObject){
+        String orderCode = jsonObject.getString("orderCode");
+        ContractOrderInfo contractOrderInfo = contractOrderService.selectByOrderCode(orderCode);
+        if (!contractOrderInfo.getStatus().equals(ContractStatus.Generated)) {
+            return new Msg(ERROR_50002,"合同状态不为已生成,无法打印");
+        }
+        List<ProductCodeVo> printCodeVos = new ArrayList<>();
+        List<ProductCodeInfo> productCodeInfos = productCodeService.selectByOrderCode(orderCode);
+        int length = productCodeInfos.size();
+        int pageSize = 1000;
+        int quotient  = length / pageSize;
+        int remainder = length % pageSize;
+        int maxPageIndex = quotient;
+        if (remainder > 0) maxPageIndex++;
+        List<ProductCodePrint> splitPrintSize = new ArrayList<>();
+        for (ProductCodeInfo productCodeInfo : productCodeInfos){
+            ProductCodeVo productCodeVo = BeanUtils.copy(productCodeInfo,ProductCodeVo.class);
+            BigDecimal explosiveContent = new BigDecimal(productCodeVo.getExplosivecontent().replace("kg","").replace("g",""));
+            Integer boxNumber = productCodeVo.getBoxnumber();
+            if (productCodeVo.getExplosivecontent().contains("kg")){
+                BigDecimal explosive = explosiveContent.multiply(new BigDecimal(1000)).divide(new BigDecimal(boxNumber),0, RoundingMode.HALF_UP);
+                productCodeVo.setExplosivecontent(explosive + "g");
+            } else {
+                BigDecimal explosive = explosiveContent.divide(new BigDecimal(boxNumber),0, RoundingMode.HALF_UP);
+                productCodeVo.setExplosivecontent(explosive + "g");
+            }
+
+            printCodeVos.add(productCodeVo);
+        }
+        for (int pageIndex = 0; pageIndex < maxPageIndex; pageIndex++) {
+            ProductCodePrint productCodePrint = new ProductCodePrint();
+            productCodePrint.setOrderCode(orderCode);
+            productCodePrint.setBatchCode(pageIndex+1);
+            if (pageIndex + 1 == maxPageIndex) {
+                List<ProductCodeVo> productCodeVoList = printCodeVos.subList(pageIndex * pageSize, length);
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(i).getOriginalcode())) {
+                        productCodePrint.setStartCode(productCodeVoList.get(i).getOriginalcode());
+                        break;
+                    }
+                }
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(productCodeVoList.size()-1-i).getOriginalcode())) {
+                        productCodePrint.setEndCode(productCodeVoList.get(productCodeVoList.size()-1-i).getOriginalcode());
+                        break;
+                    }
+                }
+                splitPrintSize.add(productCodePrint);
+            }
+            else {
+                List<ProductCodeVo> productCodeVoList = printCodeVos.subList(pageIndex * pageSize, (pageIndex + 1) * pageSize);
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(i).getOriginalcode())) {
+                        productCodePrint.setStartCode(productCodeVoList.get(i).getOriginalcode());
+                        break;
+                    }
+                }
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(productCodeVoList.size()-1-i).getOriginalcode())) {
+                        productCodePrint.setEndCode(productCodeVoList.get(productCodeVoList.size()-1-i).getOriginalcode());
+                        break;
+                    }
+                }
+                splitPrintSize.add(productCodePrint);
+            }
+        }
+
+        HashMap<String, Object> result = new HashMap<>();
+        result.put("printInfo", splitPrintSize);
+        return success(result);
+    }
+
+    @ApiOperation(value = "合同箱码根据批次打印",response = Msg.class)
+    @PostMapping("/replenishBoxBatchPrint")
+    public Msg replenishBoxBatchPrint(@RequestBody JSONObject jsonObject){
+        String orderCode = jsonObject.getString("orderCode");
+        Integer batchCode = jsonObject.getInteger("batchCode");
+        UserInfo userInfo = userService.getById(getUser().getId());
+        ContractOrderInfo contractOrderInfo = contractOrderService.selectByOrderCode(orderCode);
+        if (!contractOrderInfo.getStatus().equals(ContractStatus.Generated)) {
+            return new Msg(ERROR_50002,"合同状态不为已生成,无法打印");
+        }
+        List<ProductCodeVo> printCodeVos = new ArrayList<>();
+        List<ProductCodeInfo> productCodeInfos = productCodeService.selectByOrderCode(orderCode);
+        for (ProductCodeInfo productCodeInfo : productCodeInfos){
+            ProductCodeVo productCodeVo = BeanUtils.copy(productCodeInfo,ProductCodeVo.class);
+            String start = productCodeInfo.getOriginalcode().substring(14,19);
+            Integer end = Integer.parseInt(start)+productCodeInfo.getBoxnumber()-1;
+            productCodeVo.setBoxrange("("+start+"-"+String.format("%05d", end)+")");
+            productCodeVo.setCrc(productCodeInfo.getOrdercode().substring(productCodeInfo.getOrdercode().length()-8));
+            printCodeVos.add(productCodeVo);
+        }
+
+        // printCodeVos
+        int length = printCodeVos.size();
+        int pageSize = 1000;
+        int quotient  = length / pageSize;
+        int remainder = length % pageSize;
+        int maxPageIndex = quotient;
+        if (remainder > 0) maxPageIndex++;
+        ProductCodePrint productPrint = new ProductCodePrint();
+        for (int pageIndex = 0; pageIndex < maxPageIndex; pageIndex++) {
+            ProductCodePrint productCodePrint = new ProductCodePrint();
+            productCodePrint.setOrderCode(orderCode);
+            productCodePrint.setBatchCode(pageIndex+1);
+            if (pageIndex + 1 == maxPageIndex) {
+                List<ProductCodeVo> productCodeVoList = printCodeVos.subList(pageIndex * pageSize, length);
+                productCodePrint.setProductCodeVos(productCodeVoList);
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(i).getOriginalcode())) {
+                        productCodePrint.setStartCode(productCodeVoList.get(i).getOriginalcode());
+                        break;
+                    }
+                }
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(productCodeVoList.size()-1-i).getOriginalcode())) {
+                        productCodePrint.setEndCode(productCodeVoList.get(productCodeVoList.size()-1-i).getOriginalcode());
+                        break;
+                    }
+                }
+            } else {
+                List<ProductCodeVo> productCodeVoList = printCodeVos.subList(pageIndex * pageSize, (pageIndex + 1) * pageSize);
+                productCodePrint.setProductCodeVos(productCodeVoList);
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(i).getOriginalcode())) {
+                        productCodePrint.setStartCode(productCodeVoList.get(i).getOriginalcode());
+                        break;
+                    }
+                }
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(productCodeVoList.size()-1-i).getOriginalcode())) {
+                        productCodePrint.setEndCode(productCodeVoList.get(productCodeVoList.size()-1-i).getOriginalcode());
+                        break;
+                    }
+                }
+            }
+
+            if (productCodePrint.getBatchCode().equals(batchCode)){
+                productPrint = productCodePrint;
+                break;
+            }
+        }
+
+        String zpl;
+        try {
+            List<ProductCodeVo>productCodeVos = productPrint.getProductCodeVos();
+            zpl = contractOrderService.generateOuterTag(productCodeVos, userInfo);
+        }catch (Exception e){
+            return new Msg(ERROR_40001,"生成标签出错");
+        }
+        return success(zpl);
+    }
+
+    @GetMapping("/getControlParams")
+    public Msg getControlParams(@RequestParam(defaultValue = "0") Integer pageIndex, @RequestParam(defaultValue = "10") Integer pageSize, String sort, String order,
+                                String enterprisename, String type) {
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize, sort, order);
+        HashMap<String, Object> condition = new HashMap<String, Object>();
+
+        if (StringUtils.isNotBlank(enterprisename)) {
+            condition.put("enterprisename", enterprisename.trim());
+        }
+
+        if (StringUtils.isNotBlank(type)) {
+            condition.put("type", type.trim());
+        }
+        Integer userType = getUser().getType();
+        //非admin只能看自己的
+        if (userType != 1) {
+            condition.put("owner", getUser().getUsername());
+        }
+
+        pageInfo.setCondition(condition);
+        controlPrintParamService.selectDataGrid(pageInfo);
+
+        return success(pageInfo);
+    }
+
+    @PostMapping("/setControlParams")
+    public Msg setControlParams(ControlPrintParam controlPrintParam){
+
+        return success();
+    }
+
+
+    /**
+     * @Description: 获取特定type配置
+     * @date 2022/2/11 14:09
+     */
+    @GetMapping("/getOwnSelectType")
+    public Msg getControlParams(@RequestParam Byte type) {
+        ControlPrintParam res = controlPrintParamService.getOwnSelectType(type, getUser());
+        return success(res);
+    }
+
+
+    /**
+     * @Description: 新增配置方案
+     * @date 2022/2/11 16:16
+     */
+    @PostMapping("/addControlParams")
+    public Msg addControlParams(@RequestBody ControlPrintParam controlPrintParam){
+        controlPrintParamService.addOrUpdateControlParams(controlPrintParam,getUser());
+        return success();
+    }
+
+
+    /**
+    * @Description: 更新配置方案
+    * @date 2022/2/11 17:29
+    */
+
+    @PostMapping("/updateControlParams")
+    public Msg updateControlParams(@RequestBody ControlPrintParam controlPrintParam){
+        controlPrintParamService.updateControlParams(controlPrintParam,getUser());
+        return success();
+    }
+
+
+}

--
Gitblit v1.9.2