From 24c4699005da96f45562d7057d80c103b8e428a2 Mon Sep 17 00:00:00 2001
From: WangHan <wwh_work@126,com>
Date: 星期五, 03 一月 2025 10:32:34 +0800
Subject: [PATCH] 子级分类在用删除

---
 consum-base/src/main/java/com/consum/base/controller/LWhFormProcureController.java |  653 +++++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 415 insertions(+), 238 deletions(-)

diff --git a/consum-base/src/main/java/com/consum/base/controller/LWhFormProcureController.java b/consum-base/src/main/java/com/consum/base/controller/LWhFormProcureController.java
index f621b84..7d7b63b 100644
--- a/consum-base/src/main/java/com/consum/base/controller/LWhFormProcureController.java
+++ b/consum-base/src/main/java/com/consum/base/controller/LWhFormProcureController.java
@@ -1,69 +1,64 @@
 package com.consum.base.controller;
 
-import cn.afterturn.easypoi.excel.ExcelExportUtil;
-import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
-import cn.hutool.core.util.ReflectUtil;
-import com.consum.base.BaseController;
-import com.consum.base.core.CodeGeneratorEnum;
-import com.consum.base.core.CodeGeneratorService;
-import com.consum.base.core.WhBusinessEnum;
-import com.consum.base.core.utils.CommonUtil;
-import com.consum.base.core.utils.MapUtils;
-import com.consum.base.core.utils.MapperUtil;
-import com.consum.base.core.utils.PageUtil;
-import com.consum.base.pojo.LWhFormProcureGoodsInfoParam;
-import com.consum.base.pojo.LWhFormProcureParam;
-import com.consum.base.pojo.LWhProcureModelParam;
-import com.consum.base.pojo.query.FormProcureQry;
-import com.consum.base.pojo.response.FormProcureVO;
-import com.consum.base.pojo.response.FromProcureTemplateInfoVO;
-import com.consum.base.pojo.response.GoodsModelVO;
-import com.consum.base.pojo.response.LWhFormProcureExtendVO;
-import com.consum.base.pojo.response.LWhFormProcureGoodsVO;
-import com.consum.base.service.BaseGoodsTemplateServiceImpl;
-import com.consum.base.service.BaseWarehouseServiceImpl;
-import com.consum.base.service.LOrgSupplierServiceImpl;
-import com.consum.base.service.LWhFormProcureCoreService;
-import com.consum.base.service.LWhFormProcureGoodsService;
-import com.consum.base.service.LWhFormProcureService;
-import com.consum.base.service.LWhGoodsService;
-import com.consum.base.service.LWhProcureModelService;
-import com.consum.model.po.BaseGoodsTemplate;
-import com.consum.model.po.BaseWarehouse;
-import com.consum.model.po.FinSysTenantUser;
-import com.consum.model.po.LOrgSupplier;
-import com.consum.model.po.LWhFormProcure;
-import com.consum.model.po.LWhFormProcureGoods;
-import com.consum.model.po.LWhProcureModel;
-import com.iplatform.model.po.S_user_core;
-import com.walker.db.page.GenericPager;
-import com.walker.infrastructure.utils.CollectionUtils;
-import com.walker.infrastructure.utils.NumberGenerator;
-import com.walker.web.ResponseValue;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
 import java.io.IOException;
-import java.io.OutputStream;
 import java.lang.reflect.Field;
-import java.net.URLEncoder;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
+import java.util.Optional;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.excel.exception.ExcelAnalysisException;
+import com.alibaba.fastjson.JSONObject;
+import com.consum.base.core.utils.IdUtil;
+import com.consum.base.pojo.*;
+import com.consum.base.service.*;
+import com.consum.base.util.DateUtil;
+import com.consum.model.po.*;
 import org.apache.commons.compress.utils.Lists;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import com.alibaba.excel.EasyExcelFactory;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.alibaba.excel.exception.ExcelDataConvertException;
+import com.consum.base.BaseController;
+import com.consum.base.core.utils.CommonUtil;
+import com.consum.base.core.utils.PageUtil;
+import com.consum.base.pojo.dto.GoodModelInfoDTO;
+import com.consum.base.pojo.excel.ImportProcureOrderTemplate;
+import com.consum.base.pojo.excel.ProcureExcelTemplate;
+import com.consum.base.pojo.query.FormProcureQry;
+import com.consum.base.pojo.response.FormProcureVO;
+import com.consum.base.pojo.response.GoodsModelVO;
+import com.consum.base.pojo.response.GoodsTemplateCountVO;
+import com.consum.base.pojo.response.GoodsTemplateInfoVO;
+import com.consum.base.pojo.response.LWhFormProcureExtendVO;
+import com.consum.base.service.core.LWhFormProcureCoreService;
+import com.iplatform.model.po.S_user_core;
+import com.walker.db.page.GenericPager;
+import com.walker.infrastructure.utils.CollectionUtils;
+import com.walker.infrastructure.utils.DateUtils;
+import com.walker.web.ResponseValue;
+import cn.afterturn.easypoi.excel.ExcelExportUtil;
+import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
+import cn.hutool.core.util.ReflectUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
 
 /**
  * @ClassName LWhFormProcureController
@@ -79,21 +74,31 @@
     @Resource
     private LWhFormProcureService lWhFormProcureService;
     @Resource
-    private BaseWarehouseServiceImpl baseWarehouseService;
-    @Resource
-    private CodeGeneratorService codeGeneratorService;
-    @Resource
-    private LWhFormProcureGoodsService lWhFormProcureGoodsService;
+    private LWhFormProcureGoodsService lWhFormProcureGoodsServiceImpl;
     @Resource
     private LWhFormProcureCoreService lWhFormProcureCoreService;
     @Resource
-    private LWhGoodsService lWhGoodsService;
-    @Resource
-    private BaseGoodsTemplateServiceImpl baseGoodsTemplateService;
-    @Resource
     private LWhProcureModelService lWhProcureModelService;
     @Resource
-    private LOrgSupplierServiceImpl lOrgSupplierService;
+    private BaseCategoryService baseCategoryService;
+
+    /**
+     * 浠撳簱鏈嶅姟
+     */
+    @Autowired
+    private BaseWarehouseService baseWarehouseService;
+
+    /**
+     * 鍏ュ簱id
+     */
+    @Autowired
+    private BaseGoodsTemplateService baseGoodsTemplateService;
+
+    /**
+     * 鐗╁搧model鏈嶅姟
+     */
+    @Autowired
+    private BaseGoodsModelsService baseGoodsModelsService;
 
     /**
      * @Description 鏂板
@@ -108,134 +113,26 @@
     }
 
     private ResponseValue add(LWhFormProcureParam param) {
-        Long warehouseId = param.getWarehouseId();
         if (param.getWarehouseId() == null) {
             return ResponseValue.error("浠撳簱ID涓嶈兘涓虹┖");
         }
-        BaseWarehouse baseWarehouse = baseWarehouseService.getById(warehouseId);
-        FinSysTenantUser sysTenantUser = this.getSysInfo();
-        String tenantId = sysTenantUser.getTenantId();
-        String tenantName = sysTenantUser.getTenantName();
 
         List<LWhFormProcureGoodsInfoParam> procureGoods = param.getProcureGoods();
         if (CollectionUtils.isEmpty(procureGoods)) {
             return ResponseValue.error("閲囪喘鍗曚笉鑳戒负绌�");
         }
-
+        FinSysTenantUser sysTenantUser = this.getSysInfo();
         S_user_core currentUser = this.getCurrentUser();
-        // 閲囪喘鍗昳d
-        Long whFormProcureId = param.getId();
-        if (whFormProcureId == null) {
-            whFormProcureId = NumberGenerator.getLongSequenceNumber();
-        }
-        long procureTime = Long.valueOf(param.getProcureTime());
-
-        Set<String> supplierList = new HashSet<>();
-
-        ArrayList<LWhFormProcureGoods> procureGoodList = new ArrayList<>();
-        ArrayList<LWhProcureModel> procureModelList = new ArrayList<>();
-
-        for (int i = 0; i < procureGoods.size(); i++) {
-            LWhFormProcureGoodsInfoParam procureGoodT = procureGoods.get(i);
-            Long baseCategoryId = procureGoodT.getBaseCategoryId();
-            Long baseGoodsTemplateId = procureGoodT.getBaseGoodsTemplateId();
-            String supplier = procureGoodT.getSupplier();
-            // 鍒ゆ柇褰撳墠渚涘簲鍟嗘槸鍚﹀凡瀛樺湪
-            if (!supplierList.contains(supplier) && !lOrgSupplierService.supplierIsContain(tenantId, supplier)) {
-                supplierList.add(supplier);
-            }
-
-            List<LWhProcureModelParam> models = procureGoodT.getModels();
-            if (CollectionUtils.isEmpty(models)) {
-                return ResponseValue.error("閲囪喘鍗曚笉鑳戒负绌�");
-            }
-            LWhFormProcureGoods procureGood = new LWhFormProcureGoods();
-            long fromProcureGoodsId = NumberGenerator.getLongSequenceNumber();
-            procureGood.setId(fromProcureGoodsId);
-            procureGood.setWhFormProcureId(whFormProcureId);
-            procureGood.setBaseCategoryId(baseCategoryId);
-            procureGood.setBaseGoodsTemplateId(baseGoodsTemplateId);
-            // TODO 鐗╁搧鍘嗗彶鐗堟湰
-            procureGood.setGoodsTemplateName(procureGoodT.getGoodsTemplateName());
-            procureGood.setSupplier(supplier);
-            procureGood.setSort(i);
-            for (LWhProcureModelParam modelT : models) {
-                Integer counts = modelT.getCounts();
-                if (counts == null || counts <= 0) {
-                    return ResponseValue.error("鍨嬪彿鐨勯噰璐暟閲忓彧鑳戒负姝f暣鏁�");
-                }
-                Long price = modelT.getPrice();
-                if (price == null || price <= 0) {
-                    return ResponseValue.error("鍨嬪彿鐨勯噰璐环鏍煎彧鑳戒负姝f暟");
-                }
-                Long baseGoodsModelsId = modelT.getBaseGoodsModelsId();
-                if (baseGoodsModelsId == null) {
-                    return ResponseValue.error("閲囪喘鐨勪环鍨嬪彿鏈壘鍒�");
-                }
-                //鏌ヨ鍨嬪彿淇℃伅
-                Map<String, Object> tempGoodsInfo = baseGoodsTemplateService.queryGoodsInfoByModelId(baseGoodsModelsId);
-                if (tempGoodsInfo == null) {
-                    return ResponseValue.error("閲囪喘鐨勪环鍨嬪彿鏈壘鍒�");
-                }
-                String modelName = (String) tempGoodsInfo.get("modelname");
-                // 鏌ヨ鍨嬪彿搴撳瓨
-                int goodsModelNum = lWhGoodsService.queryGoodsModelNum(0, warehouseId, baseGoodsModelsId, 1, null);
-                LWhProcureModel model = new LWhProcureModel();
-                model.setId(NumberGenerator.getLongSequenceNumber());
-                model.setFromProcureGoodsId(fromProcureGoodsId);
-                model.setBusinessType(WhBusinessEnum.CAIGOU.getValue() + 0);
-                model.setBusinessId(whFormProcureId);
-                model.setBaseGoodsModelsId(baseGoodsModelsId);
-                model.setBaseGoodsModelsName(modelName);
-                model.setPrice(price);
-                model.setCounts(counts);
-                model.setWorehouseCount(goodsModelNum);
-                model.setSupplier(supplier);
-                model.setTotalAmount(price * counts);
-                procureModelList.add(model);
-            }
-            procureGoodList.add(procureGood);
-        }
-        lWhFormProcureGoodsService.insertBatch(procureGoodList);
-        lWhProcureModelService.insertBatch(procureModelList);
-
-        // 鎻掑叆 閲囪喘鍗曠墿鍝併�怢_WH_FORM_PROCURE_GOODS銆�
-        LWhFormProcure lWhFormProcure = new LWhFormProcure();
-        lWhFormProcure.setId(whFormProcureId);
-        lWhFormProcure.setBusinessFormCode(codeGeneratorService.createBusinessFormCode(CodeGeneratorEnum.Procure_Warehouse));
-        lWhFormProcure.setWarehouseId(warehouseId);
-        lWhFormProcure.setWarehouseName(baseWarehouse.getWarehouseName());
-        lWhFormProcure.setBuyerId(currentUser.getId());
-        lWhFormProcure.setBuyerName(currentUser.getNick_name());
-        lWhFormProcure.setProcureTime(procureTime);
-        lWhFormProcure.setProcureDoc(param.getProcureDoc());
-        lWhFormProcure.setBuyType(param.getBuyType());
-        lWhFormProcure.setStates(1);
-        lWhFormProcure.setAgencyId(baseWarehouse.getAgencyId());
-        lWhFormProcure.setAgencyName(baseWarehouse.getAgencyName());
-        int result = lWhFormProcureService.insert(lWhFormProcure);
-
-        supplierList.forEach(supplier -> {
-            LOrgSupplier lOrgSupplier = new LOrgSupplier();
-            lOrgSupplier.setId(NumberGenerator.getLongSequenceNumber());
-            lOrgSupplier.setAgencyId(tenantId);
-            lOrgSupplier.setAgencyName(tenantName);
-            lOrgSupplier.setSupplier(supplier);
-            lOrgSupplierService.insert(lOrgSupplier);
-        });
-        if (result > 0) {
-            return ResponseValue.success(1);
-        }
-        return ResponseValue.error("鏂板澶辫触锛�");
+        lWhFormProcureService.add(param, sysTenantUser, currentUser);
+        return ResponseValue.success();
     }
 
     /**
      * @Description 鍒楄〃鏌ヨ
      */
     @ApiOperation(value = "閲囪喘鍗曞垪琛ㄦ煡璇�", notes = "閲囪喘鍗曞垪琛ㄦ煡璇�")
-    @ApiImplicitParams({
-        @ApiImplicitParam(name = "param", value = "閲囪喘鏌ヨ鏉′欢", required = true, dataType = "FormProcureQryDto", paramType = "query")
-    })
+    @ApiImplicitParams({@ApiImplicitParam(name = "param", value = "閲囪喘鏌ヨ鏉′欢", required = true,
+            dataType = "FormProcureQryDto", paramType = "query")})
     @GetMapping("/list")
     public ResponseValue queryFormProcureList() {
         FormProcureQry param = CommonUtil.getObjFromReq(FormProcureQry.class);
@@ -257,31 +154,19 @@
         ArrayList<FormProcureVO> result = new ArrayList<>();
         if (!CollectionUtils.isEmpty(data)) {
             data.forEach(item -> {
-
                 FormProcureVO fromProcureVO = new FormProcureVO();
                 BeanUtils.copyProperties(item, fromProcureVO);
-                List<FromProcureTemplateInfoVO> procureTemplateInfoList = Lists.newArrayList();
 
                 // 鏌ヨ鍨嬪彿鏁伴噺
-                String sql = "select fpg.id,BASE_CATEGORY_ID ,BASE_GOODS_TEMPLATE_ID ,GOODS_TEMPLATE_NAME ,sum(counts) count "
-                    + "from L_WH_FORM_PROCURE_GOODS fpg left join L_WH_PROCURE_MODEL pm on fpg.id = pm.FROM_PROCURE_GOODS_ID "
-                    + "where fpg.WH_FORM_PROCURE_ID =:id group by pm.FROM_PROCURE_GOODS_ID";
-                Map<String, Object> paramMap = new HashMap<>();
-                paramMap.put("id", item.getId());
-                List<Map<String, Object>> procureModelList = lWhProcureModelService.select(sql, paramMap, new MapperUtil());
-                for (Map<String, Object> map : procureModelList) {
-                    FromProcureTemplateInfoVO procureTemplateInfoVO = MapUtils.convertMapToObj(map, FromProcureTemplateInfoVO.class);
-                    procureTemplateInfoList.add(procureTemplateInfoVO);
-                }
-                fromProcureVO.setFromProcureTemplateInfoList(procureTemplateInfoList);
+                List<GoodsTemplateCountVO> procureCount =
+                        lWhProcureModelService.getProcureCountByBusinessId(item.getId());
+                fromProcureVO.setFromProcureTemplateInfoList(procureCount);
 
                 result.add(fromProcureVO);
             });
         }
         try {
             Field fieldDatas = GenericPager.class.getDeclaredField("datas");
-//            fieldDatas.setAccessible(true);
-//            fieldDatas.set(genericPager, result);
             ReflectUtil.setFieldValue(genericPager, fieldDatas, result);
         } catch (Exception e) {
             e.printStackTrace();
@@ -325,7 +210,7 @@
         if (num == 0) {
             return ResponseValue.error("鍒犻櫎澶辫触锛�");
         }
-        lWhFormProcureGoodsService.update("delete from L_WH_FORM_PROCURE_GOODS where WH_FORM_PROCURE_ID=" + id);
+        lWhFormProcureGoodsServiceImpl.update("delete from L_WH_FORM_PROCURE_GOODS where WH_FORM_PROCURE_ID=" + id);
 
         lWhProcureModelService.update("delete from L_WH_PROCURE_MODEL where BUSINESS_TYPE =1 and BUSINESS_ID=" + id);
         return ResponseValue.success(1);
@@ -347,7 +232,7 @@
      * 鏍规嵁id鏌ヨ璇︽儏
      */
     @GetMapping("/detail")
-    public ResponseValue getById(Long id) throws IllegalAccessException {
+    public ResponseValue getById(Long id) throws Exception {
         if (id == null) {
             return ResponseValue.error("閲囪喘鍗昳d涓虹┖");
         }
@@ -361,49 +246,54 @@
         // 鐗╁搧
         LWhFormProcureGoods lWhFormProcureGoods = new LWhFormProcureGoods();
         lWhFormProcureGoods.setWhFormProcureId(id);
-        List<LWhFormProcureGoods> formProcureGoods = lWhFormProcureGoodsService.select(lWhFormProcureGoods);
+        List<LWhFormProcureGoods> formProcureGoods = lWhFormProcureGoodsServiceImpl.select(lWhFormProcureGoods);
 
-//        Field fieldModels = null;
-//        try {
-//            fieldModels = LWhFormProcureGoodsVO.class.getDeclaredField("models");
-//        } catch (NoSuchFieldException e) {
-//            e.printStackTrace();
-//        }
-//        fieldModels.setAccessible(true);
-        ArrayList<LWhFormProcureGoodsVO> procureGoodsVOList = new ArrayList<>();
+        List<GoodsTemplateInfoVO> goodsTemplateInfoList = new ArrayList<>();
         for (LWhFormProcureGoods formProcureGood : formProcureGoods) {
-            LWhFormProcureGoodsVO lWhFormProcureGoodsVO = new LWhFormProcureGoodsVO();
-            BeanUtils.copyProperties(formProcureGood, lWhFormProcureGoodsVO);
+            GoodsTemplateInfoVO goodsTemplateInfoVO = new GoodsTemplateInfoVO();
+            BeanUtils.copyProperties(formProcureGood, goodsTemplateInfoVO);
 
-            Long baseGoodsTemplateId = formProcureGood.getBaseGoodsTemplateId();
-            BaseGoodsTemplate queryEntity = new BaseGoodsTemplate();
-            queryEntity.setId(baseGoodsTemplateId);
-            BaseGoodsTemplate baseGoodsTemplate = baseGoodsTemplateService.get(queryEntity);
-            lWhFormProcureGoodsVO.setBaseCategoryName(baseGoodsTemplate.getCategoryName());
-            // 鏌ヨ鍨嬪彿鏁伴噺
-            Map<String, Object> paramMap = new HashMap<>();
-            paramMap.put("formProcureGoodId", formProcureGood.getId());
-            String sql = "SELECT\n" + "pm.BASE_GOODS_MODELS_ID,pm.BASE_GOODS_MODELS_NAME,pm.PRICE,pm.COUNTS,pm.WOREHOUSE_COUNT,bgm.unit " + "FROM\n"
-                + "\tl_wh_procure_model pm\n"
-                + "\tLEFT JOIN base_goods_models bgm on pm.BASE_GOODS_MODELS_ID = bgm.id where pm.FROM_PROCURE_GOODS_ID =:formProcureGoodId";
-            List<Map<String, Object>> procureModelList = lWhProcureModelService.select(sql, paramMap, new MapperUtil());
-            List<GoodsModelVO> goodsModelVOList = Lists.newArrayList();
-            procureModelList.forEach(item -> {
-                GoodsModelVO goodsModelVO = MapUtils.convertMapToObj(item, GoodsModelVO.class);
-                goodsModelVOList.add(goodsModelVO);
-            });
-//            fieldModels.set(lWhFormProcureGoodsVO, goodsModelVOList);
-            ReflectUtil.setFieldValue(lWhFormProcureGoodsVO, "models", goodsModelVOList);
+            List<GoodModelInfoDTO> goodsModelInfoList =
+                    lWhProcureModelService.getGoodsModelListByBusinessId(null, formProcureGood.getId());
+            if (CollectionUtils.isEmpty(goodsModelInfoList)) {
+                continue;
+            }
+            GoodModelInfoDTO goodModelInfoDTO = goodsModelInfoList.stream().findFirst().orElse(null);
+            if (goodModelInfoDTO != null) {
+                goodsTemplateInfoVO.setBaseCategoryName(goodModelInfoDTO.getCategoryName());
+            }
+            List<GoodsModelVO> goodsModelList = Lists.newArrayList();
+            for (GoodModelInfoDTO goodModelInfo : goodsModelInfoList) {
+                GoodsModelVO goodsModelVO = getGoodsModelVO(goodModelInfo);
+                goodsModelList.add(goodsModelVO);
+            }
 
-            procureGoodsVOList.add(lWhFormProcureGoodsVO);
+            ReflectUtil.setFieldValue(goodsTemplateInfoVO, "models", goodsModelList);
+
+            goodsTemplateInfoList.add(goodsTemplateInfoVO);
         }
-        lWhFormProcureExtendVO.setProcureGoods(procureGoodsVOList);
+        lWhFormProcureExtendVO.setProcureGoods(goodsTemplateInfoList);
         return ResponseValue.success("鏌ヨ鎴愬姛!", lWhFormProcureExtendVO);
     }
 
+    private GoodsModelVO getGoodsModelVO(GoodModelInfoDTO goodModelInfo) {
+        GoodsModelVO goodsModelVO = new GoodsModelVO();
+
+        goodsModelVO.setId(goodModelInfo.getId());
+        goodsModelVO.setBaseGoodsModelsName(goodModelInfo.getBaseGoodsModelsName());
+        goodsModelVO.setUnit(goodModelInfo.getUnit());
+        goodsModelVO.setCounts(goodModelInfo.getCounts());
+        goodsModelVO.setTotalAmount(
+                goodModelInfo.getTotalAmount() != null ? goodModelInfo.getTotalAmount().doubleValue() : null);
+        goodsModelVO.setWorehouseCount(goodModelInfo.getWorehouseCount());
+        goodsModelVO.setPrice(goodModelInfo.getPrice());
+        goodsModelVO.setBaseGoodsModelsId(goodModelInfo.getBaseGoodsModelsId());
+        return goodsModelVO;
+    }
 
     @ApiOperation(value = "閲囪喘鍗曟槑缁嗘煡璇�", notes = "閲囪喘鍗曟槑缁嗘煡璇�")
-    @ApiImplicitParams({@ApiImplicitParam(name = "param", value = "閲囪喘鍗曟槑缁嗘煡璇�", required = true, dataType = "FormProcureQryDto", paramType = "query")})
+    @ApiImplicitParams({@ApiImplicitParam(name = "param", value = "閲囪喘鍗曟槑缁嗘煡璇�", required = true,
+            dataType = "FormProcureQryDto", paramType = "query")})
     @GetMapping("detail/list")
     public ResponseValue queryFormProcureDetailList() {
         FormProcureQry formProcureQry = CommonUtil.getObjFromReq(FormProcureQry.class);
@@ -411,35 +301,322 @@
         CommonUtil.copyProperties(formProcureQry, param2);
         formProcureQry = param2;
 
-        S_user_core currentUser = this.getCurrentUser();
-        if (currentUser == null) {
+        FinSysTenantUser sysInfo = this.getSysInfo();
+        if (sysInfo == null) {
             return ResponseValue.error("鐧诲綍鐢ㄦ埛淇℃伅涓嶅瓨鍦�");
         }
-
+        if (param2.getAgencyId() == null) {
+            formProcureQry.setAgencyId(Long.valueOf(sysInfo.getTenantId()));
+        }
         GenericPager genericPager = lWhFormProcureService.queryFormProcureDetailList(formProcureQry);
         return ResponseValue.success(genericPager);
     }
 
     @ApiOperation(value = "閲囪喘鍗曞鍑�", notes = "閲囪喘鍗曞鍑�")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "閲囪喘鍗昳d", required = true, dataType = "Long", paramType = "query")})
     @GetMapping("/list/export")
-    public void export(Long id, HttpServletResponse response) throws IOException {
-        TemplateExportParams params = new TemplateExportParams(
-            "import/閲囪喘鍏ュ簱鍗�.xls");
-
+    public ResponseValue<String> export(Long id, HttpServletResponse response) throws Exception {
+        TemplateExportParams params = new TemplateExportParams("import/閲囪喘鍏ュ簱鍗�.xls");
+        params.setHeadingStartRow(2);
         FinSysTenantUser sysInfo = this.getSysInfo();
-        String userName = sysInfo.getUserName();
+        if (sysInfo == null) {
+            throw new RuntimeException("鐧诲綍鐢ㄦ埛淇℃伅涓嶅瓨鍦�");
+        }
 
-        Map<String, Object> map = lWhFormProcureService.getExportList(id, userName);
-        if (CollectionUtils.isEmpty(map)) {
+        List<ProcureExcelTemplate> exportList = lWhFormProcureService.getExportList(id);
+        if (CollectionUtils.isEmpty(exportList)) {
             throw new RuntimeException("鏁版嵁涓虹┖");
         }
-        Workbook workbook = ExcelExportUtil.exportExcel(params, map);
 
-        try (OutputStream outputStream = response.getOutputStream()) {
-            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
-            response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode("閲囪喘鍏ュ簱鍗�.xls", "utf-8"));
-            workbook.write(outputStream);
-            workbook.close();
-        }
+        int countNum =
+                exportList.stream().filter(item -> item.getNum() != null).mapToInt(ProcureExcelTemplate::getNum).sum();
+        double totalAmount = exportList.stream().filter(export -> export.getTotalAmount() != null)
+                .mapToDouble(ProcureExcelTemplate::getAmount).sum();
+        Optional<ProcureExcelTemplate> first = exportList.stream().findFirst();
+        ProcureExcelTemplate templateExcelExport = first.get();
+        String businessFormCode = templateExcelExport.getBusinessFormCode();
+        Long createTime = templateExcelExport.getCreateTime();
+        String operatorName = templateExcelExport.getOperatorName();
+
+        Map<String, Object> map = new HashMap<>();
+        map.put("code", businessFormCode);
+        map.put("date", DateUtils.toShowDate(createTime));
+        map.put("name", operatorName);
+        map.put("countNum", countNum);
+        map.put("totalAmount", totalAmount);
+
+        Workbook workbook = ExcelExportUtil.exportExcel(params, ProcureExcelTemplate.class, exportList, map);
+        String filePath = downLoadExcel("閲囪喘鍏ュ簱鍗�", workbook);
+        return ResponseValue.success("瀵煎嚭鎴愬姛", filePath);
+
     }
+
+    /**
+     * 閲囪喘鍗曞鍏�
+     *
+     * @param file
+     * @return
+     */
+    @ApiOperation(value = "閲囪喘鍗曞鍏�", notes = "閲囪喘鍗曞鍏�")
+    @PostMapping("/import")
+    public ResponseValue upload(MultipartFile file) {
+        String originalFilename = file.getOriginalFilename();
+        // 鏂囦欢鏍煎紡鏍¢獙
+//        if (!".xls".endsWith(originalFilename)) {
+//            return ResponseValue.error("鏂囦欢鏍煎紡鏈夎!");
+//        }
+        FinSysTenantUser sysInfo = this.getSysInfo();
+        if (sysInfo == null) {
+            return ResponseValue.error("褰撳墠鐧诲綍鐢ㄦ埛涓虹┖");
+        }
+        try {
+            EasyExcelFactory.read(file.getInputStream(), ImportProcureOrderTemplate.class,
+                    new AnalysisEventListener<ImportProcureOrderTemplate>() {
+                        /**
+                         * 鑷噰閲囪喘鍗曠殑鍐呭眰鏁版嵁
+                         */
+                        final List<LWhFormProcureGoodsInfoParam> zcList = Lists.newArrayList();
+
+                        /**
+                         * 闆嗛噰閲囪喘鍗曠殑鍐呭眰鏁版嵁
+                         */
+                        final List<LWhFormProcureGoodsInfoParam> jcList = Lists.newArrayList();
+
+                        /**
+                         * 閲囪喘鍗曠殑涓绘暟鎹�
+                         */
+                        final LWhFormProcureParam lWhFormProcureParam = new LWhFormProcureParam();
+
+                        /**
+                         * 绗嚑鏉℃暟鎹�
+                         */
+                        Integer index = 0;
+
+                        /**
+                         * 琛ㄥご淇℃伅
+                         * @param headMap
+                         * @param context
+                         */
+                        @Override
+                        public void invokeHeadMap(Map headMap, AnalysisContext context) {
+                            // 楠岃瘉琛ㄥご鏁伴噺
+                            logger.info("瑙f瀽鍒嗗彂鍗曠殑琛ㄥご闀垮害: {}", headMap.size());
+                            if (headMap.size() != 12) {
+                                throw new ExcelAnalysisException("涓婁紶鐨勬枃浠朵笉绗�!");
+                            }
+                        }
+
+                        /**
+                         * 鏁版嵁澶勭悊
+                         * @param data
+                         * @param analysisContext
+                         */
+                        @Override
+                        public void invoke(ImportProcureOrderTemplate data, AnalysisContext analysisContext) {
+                            index++;
+                            String categoryOne = data.getCategoryOne();
+                            String categoryTwo = data.getCategoryTwo();
+                            String categoryThree = data.getCategoryThree();
+                            if (StrUtil.isEmpty(categoryThree)) {
+                                throw new ExcelAnalysisException("绗�" + index + "鏉℃暟鎹紝鍝佺被鍚嶇О涓嶈兘涓虹┖锛�" + categoryThree);
+                            }
+                            String goodsName = data.getGoodsName();
+                            if (StrUtil.isEmpty(goodsName)) {
+                                throw new ExcelAnalysisException("绗�" + index + "鏉℃暟鎹紝鍝佸悕涓嶈兘涓虹┖锛�" + goodsName);
+                            }
+                            String goodModelName = data.getGoodModelName();
+                            if (StrUtil.isEmpty(goodModelName)) {
+                                throw new ExcelAnalysisException("绗�" + index + "鏉℃暟鎹紝瑙勬牸鍨嬪彿涓嶈兘涓虹┖锛�" + goodModelName);
+                            }
+                            String unit = data.getUnit();
+                            if (StrUtil.isEmpty(unit)) {
+                                throw new ExcelAnalysisException("绗�" + index + "鏉℃暟鎹紝鍗曚綅涓嶈兘涓虹┖锛�" + unit);
+                            }
+                            String type = data.getType();
+                            //String agencyName = data.getAgencyName();
+                            String warehouseName = data.getWarehouseName();
+                            if (StrUtil.isEmpty(warehouseName)) {
+                                throw new ExcelAnalysisException("绗�" + index + "鏉℃暟鎹紝鎵�鍦ㄤ粨搴撲笉鑳戒负绌猴細" + warehouseName);
+                            }
+                            String supplierName = data.getSupplierName();
+                            if (StrUtil.isEmpty(supplierName)) {
+                                throw new ExcelAnalysisException("绗�" + index + "鏉℃暟鎹紝渚涜揣鍟嗕笉鑳戒负绌猴細" + supplierName);
+                            }
+
+                            String price = data.getPrice();
+                            if (StrUtil.isEmpty(price)) {
+                                throw new ExcelAnalysisException("绗�" + index + "鏉℃暟鎹紝鍗曚环(鍏�)涓嶈兘涓虹┖锛�" + price);
+                            }
+                            String num = data.getNum();
+                            if (StrUtil.isEmpty(num)) {
+                                throw new ExcelAnalysisException("绗�" + index + "鏉℃暟鎹紝搴撳瓨鏁伴噺涓嶈兘涓虹┖锛�" + num);
+                            }
+                            // 鐗╁搧绫诲瀷(鑷噰闆嗛噰)
+                            String goodsType = data.getGoodsType();
+                            if (StrUtil.isEmpty(goodsType)) {
+                                throw new ExcelAnalysisException("绗�" + index + "鏉℃暟鎹紝鐗╁搧绫诲瀷涓嶈兘涓虹┖锛�" + goodsType);
+                            }
+                            if(!"鑷噰".equals(goodsType) && !"闆嗛噰".equals(goodsType)){
+                                throw new ExcelAnalysisException("绗�" + index + "鏉℃暟鎹紝鐗╁搧绫诲瀷鍙栧�间负[鑷噰/闆嗛噰] 鏁版嵁婧愬�间负锛�" + goodsType);
+                            }
+
+                            // 绗竴娆¤繘鏉ユ妸澶栧眰鐨勫�艰缃竴涓�
+                            if (lWhFormProcureParam.getAgencyId() == null) {
+                                // [閫氳繃浠撳簱鍚嶏紝鏌ユ壘瀵瑰簲鐨勪粨搴搃d]
+                                FinSysTenantUser currentUser = getSysInfo();
+                                BaseWarehouseParam baseWarehouseParam = new BaseWarehouseParam();
+                                baseWarehouseParam.setStates(1);
+                                baseWarehouseParam.setWarehouseName(warehouseName);
+                                GenericPager<BaseWarehouse> pager = baseWarehouseService.queryList(baseWarehouseParam, currentUser);
+                                List<BaseWarehouse> datas = pager.getDatas();
+                                Long ckId = null;
+                                if (!CollectionUtil.isEmpty(datas)) {
+                                    BaseWarehouse baseWarehouse = datas.get(0);
+                                    ckId = baseWarehouse.getId();
+                                } else {
+                                    // 鎶ラ敊 浠撳簱涓嶅瓨鍦�
+                                    throw new ExcelAnalysisException("绗�" + index + "鏉℃暟鎹紝浠撳簱涓嶅瓨鍦細" + warehouseName);
+                                }
+                                lWhFormProcureParam.setProcureDoc("");
+                                lWhFormProcureParam.setWarehouseId(ckId);
+                                lWhFormProcureParam.setProcureTime(DateUtil.getNowDate() + "");
+                                lWhFormProcureParam.setBuyType(2);
+                            }
+                            // 鏌ヨ鍒嗙被id
+                            BaseCategory baseCategory = baseCategoryService.getByCategoryByName(categoryThree);
+                            if (baseCategory == null) {
+                                throw new ExcelAnalysisException("绗�" + index + "鏉℃暟鎹紝姝ゅ垎绫讳笉瀛樺湪锛�" + categoryThree);
+                            }
+                            Long categoryId = baseCategory.getId();
+                            // 涓嶅悓閲囬泦绫诲瀷锛屼笉鍚岀瓫閫�
+                            Optional<LWhFormProcureGoodsInfoParam> optional = null;
+                            if ("鑷噰".equals(goodsType)) {
+                                optional = zcList.stream().filter(item -> item.getCategoryId().equals(categoryId)).findFirst();
+                            } else if ("闆嗛噰".equals(goodsType)) {
+                                optional = jcList.stream().filter(item -> item.getCategoryId().equals(categoryId)).findFirst();
+                            }
+
+                            Optional<LWhFormProcureGoodsInfoParam> optional1 = null;
+                            if ("鑷噰".equals(goodsType)) {
+                                optional1 = zcList.stream().filter(item -> item.getGoodsTemplateName().equals(goodsName)).findFirst();
+                            } else if ("闆嗛噰".equals(goodsType)) {
+                                optional1 = jcList.stream().filter(item -> item.getGoodsTemplateName().equals(goodsName)).findFirst();
+                            }
+
+                            // 鍝佺被 鍜� 鍟嗗搧鍚嶅畬鍏ㄤ竴鏍锋墠鍔犲叆
+                            if (optional.isPresent() && optional1.isPresent()) {
+                                LWhProcureModelParam lWhProcureModelParam = new LWhProcureModelParam();
+                                lWhProcureModelParam.setCounts(StrUtil.isEmpty(num) ? 0 : Integer.valueOf(num));
+                                lWhProcureModelParam.setPrice(new BigDecimal(price).multiply(new BigDecimal("100")).longValue());
+                                lWhProcureModelParam.setBaseUnit(unit);
+
+
+                                // 鏁版嵁绗簩灞�-鐗╁搧鐨刬d
+                                BaseGoodsTemplate goodsTemplate = baseGoodsTemplateService.getByGoodsNameAndCategoryId(goodsName, categoryId);
+                                if (goodsTemplate == null) {
+                                    throw new ExcelAnalysisException("绗�" + index + "鏉℃暟鎹紝姝ょ墿鍝佷笉瀛樺湪锛�" + goodsName);
+                                }
+                                BaseGoodsModels baseGoodsModels = new BaseGoodsModels();
+                                baseGoodsModels.setModelName(goodModelName);
+                                baseGoodsModels.setGoodsTemplatesId(goodsTemplate.getId());
+                                BaseGoodsModels byModelNameAndGoodsTemplatesId = baseGoodsModelsService.getByModelNameAndGoodsTemplatesId(baseGoodsModels);
+                                if (byModelNameAndGoodsTemplatesId == null) {
+                                    throw new ExcelAnalysisException("绗�" + index + "鏉℃暟鎹�" + "鍝佸悕锛�" + goodsName + "锛岃鏍煎瀷鍙凤細" + goodModelName + "鏈壘鍒�");
+                                }
+                                lWhProcureModelParam.setBaseGoodsModelsId(byModelNameAndGoodsTemplatesId.getId());
+                                optional.get().getModels().add(lWhProcureModelParam);
+                            } else {
+                                LWhFormProcureGoodsInfoParam lWhFormProcureGoodsInfoParam = new LWhFormProcureGoodsInfoParam();
+                                // 鏁版嵁绗簩灞�-鐗╁搧涓夌骇鍒嗙被绗笁绾х殑id
+                                lWhFormProcureGoodsInfoParam.setCategoryId(categoryId);
+                                // 鏁版嵁绗簩灞�-鐗╁搧鐨刬d
+                                BaseGoodsTemplate goodsTemplate = baseGoodsTemplateService.getByGoodsNameAndCategoryId(goodsName, categoryId);
+                                if (goodsTemplate == null) {
+                                    throw new ExcelAnalysisException("绗�" + index + "鏉℃暟鎹紝姝ょ墿鍝佷笉瀛樺湪锛�" + goodsName);
+                                }
+                                lWhFormProcureGoodsInfoParam.setBaseGoodsTemplateId(goodsTemplate.getId());
+                                // 鏁版嵁绗簩灞�-渚涘簲鍟�
+                                lWhFormProcureGoodsInfoParam.setSupplier(supplierName);
+                                // 鏁版嵁绗簩灞�-鐗╁搧鍚�
+                                lWhFormProcureGoodsInfoParam.setGoodsTemplateName(goodsName);
+                                // 鏁版嵁绗笁灞傛暟鎹�
+                                List<LWhProcureModelParam> lWhProcureModelParams = new ArrayList<>();
+                                LWhProcureModelParam lWhProcureModelParam = new LWhProcureModelParam();
+                                lWhProcureModelParam.setCounts(StrUtil.isEmpty(num) ? 0 : Integer.valueOf(num));
+                                BigDecimal multiply = new BigDecimal(price).multiply(new BigDecimal("100"));
+                                lWhProcureModelParam.setPrice(multiply.longValue());
+                                lWhProcureModelParam.setBaseUnit(unit);
+                                BaseGoodsModels baseGoodsModels = new BaseGoodsModels();
+                                baseGoodsModels.setModelName(goodModelName);
+                                baseGoodsModels.setGoodsTemplatesId(goodsTemplate.getId());
+                                BaseGoodsModels byModelNameAndGoodsTemplatesId = baseGoodsModelsService.getByModelNameAndGoodsTemplatesId(baseGoodsModels);
+                                if (byModelNameAndGoodsTemplatesId == null) {
+                                    throw new ExcelAnalysisException("绗�" + index + "鏉℃暟鎹�" + "鍝佸悕锛�" + goodsName + "锛岃鏍煎瀷鍙凤細" + goodModelName + "鏈壘鍒�");
+                                }
+                                lWhProcureModelParam.setBaseGoodsModelsId(byModelNameAndGoodsTemplatesId.getId());
+                                lWhProcureModelParams.add(lWhProcureModelParam);
+                                lWhFormProcureGoodsInfoParam.setModels(lWhProcureModelParams);
+                                // 涓嶅悓閲囬泦绫诲瀷鍒颁笉鍚宭ist
+                                if ("鑷噰".equals(goodsType)) {
+                                    zcList.add(lWhFormProcureGoodsInfoParam);
+                                } else if ("闆嗛噰".equals(goodsType)) {
+                                    jcList.add(lWhFormProcureGoodsInfoParam);
+                                }
+                            }
+                        }
+
+                        /**
+                         * 澶勭悊鍚庣殑鏁版嵁瀵煎叆
+                         * @param analysisContext
+                         */
+                        @Override
+                        public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+                            lWhFormProcureParam.setProcureGoods(zcList);
+                            // 閲囪喘鍗�-鑷噰
+                            long zcId = IdUtil.generateId();
+                            lWhFormProcureParam.setId(zcId);
+                            String zcJsonString = JSONObject.toJSONString(lWhFormProcureParam);
+                            logger.info("瀵煎叆閲囪喘鍗�(鑷噰)json鏁版嵁 --------------------");
+                            logger.info(zcJsonString);
+                            add(lWhFormProcureParam);
+
+                            // 閲囪喘鍗�-闆嗛噰
+                            long jcId = IdUtil.generateId();
+                            lWhFormProcureParam.setId(jcId);
+                            lWhFormProcureParam.setBuyType(1);
+                            lWhFormProcureParam.setProcureGoods(jcList);
+                            String jcJsonString = JSONObject.toJSONString(lWhFormProcureParam);
+                            logger.info("瀵煎叆閲囪喘鍗�(闆嗛噰)json鏁版嵁 --------------------");
+                            logger.info(jcJsonString);
+                            add(lWhFormProcureParam);
+                            // 鑷噰鍜岄泦閲囧叆搴�
+                            income(zcId);
+                            income(jcId);
+                        }
+
+                        @Override
+                        public void onException(Exception exception, AnalysisContext analysisContext) throws Exception {
+                            if (exception instanceof ExcelDataConvertException) {
+                                ExcelDataConvertException excelDataConvertException = (ExcelDataConvertException) exception;
+                                Integer row = excelDataConvertException.getRowIndex() + 1;
+                                Integer column = excelDataConvertException.getColumnIndex() + 1;
+                                throw new ExcelAnalysisException("绗�" + row + "琛岋紝绗�" + column + "鍒楄В鏋愬紓甯革紝璇锋纭~鍐�");
+                            } else {
+                                throw new ExcelAnalysisException(exception.getMessage());
+                            }
+                        }
+                    }).sheet(0).doRead();
+        }catch (ExcelAnalysisException e) {
+            return ResponseValue.error(e.getMessage());
+        }catch (RuntimeException e) {
+            e.printStackTrace();
+            return ResponseValue.error("绯荤粺閿欒");
+        } catch (Exception e) {
+            e.printStackTrace();
+            return ResponseValue.error("绯荤粺閿欒");
+        }
+        return ResponseValue.success("瀵煎叆鎴愬姛!");
+    }
+
 }

--
Gitblit v1.9.1