From 8e4000461f3a6bbee34068b78ed60292c0ada611 Mon Sep 17 00:00:00 2001
From: futian.liu <liufutianyoo@163.com>
Date: 星期二, 05 十二月 2023 13:46:52 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 consum-base/src/main/java/com/consum/base/service/impl/LWhFormProcureServiceImpl.java |  316 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 316 insertions(+), 0 deletions(-)

diff --git a/consum-base/src/main/java/com/consum/base/service/impl/LWhFormProcureServiceImpl.java b/consum-base/src/main/java/com/consum/base/service/impl/LWhFormProcureServiceImpl.java
new file mode 100644
index 0000000..40cd9a8
--- /dev/null
+++ b/consum-base/src/main/java/com/consum/base/service/impl/LWhFormProcureServiceImpl.java
@@ -0,0 +1,316 @@
+package com.consum.base.service.impl;
+
+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 javax.annotation.Resource;
+
+import org.apache.commons.compress.utils.Lists;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.consum.base.core.CodeGeneratorEnum;
+import com.consum.base.core.CodeGeneratorService;
+import com.consum.base.core.WhBusinessEnum;
+import com.consum.base.core.utils.CurrencyUtil;
+import com.consum.base.core.utils.IdUtil;
+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.excel.ProcureExcelTemplate;
+import com.consum.base.pojo.query.FormProcureQry;
+import com.consum.base.service.BaseGoodsTemplateService;
+import com.consum.base.service.BaseWarehouseService;
+import com.consum.base.service.LOrgSupplierServiceImpl;
+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.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.StringUtils;
+import com.walker.jdbc.service.BaseServiceImpl;
+
+/**
+ * @ClassName lWhFormProcureService
+ * @Date 2023/10/24
+ * @Description 閲囪喘鍗�
+ * @Version 1.0
+ **/
+@Service
+public class LWhFormProcureServiceImpl extends BaseServiceImpl implements LWhFormProcureService {
+
+    @Autowired
+    private BaseWarehouseService baseWarehouseService;
+    @Resource
+    private LOrgSupplierServiceImpl lOrgSupplierService;
+    @Autowired
+    private BaseGoodsTemplateService baseGoodsTemplateService;
+    @Autowired
+    private LWhGoodsService lWhGoodsService;
+    @Autowired
+    private LWhFormProcureGoodsService lWhFormProcureGoodsService;
+    @Autowired
+    private LWhProcureModelService lWhProcureModelService;
+    @Autowired
+    private CodeGeneratorService codeGeneratorService;
+
+    private static String QUERY_FORM_PROCURE_LIST = "SELECT * FROM L_WH_FORM_PROCURE WHERE 1 = 1";
+
+    @Override
+    public PageUtil<LWhFormProcure> queryFormProcureList(FormProcureQry param) {
+        HashMap<String, Object> paramts = new HashMap<>();
+        StringBuilder sql = new StringBuilder(QUERY_FORM_PROCURE_LIST);
+        // 鍏ュ簱鍗曞彿
+        if (!StringUtils.isEmpty(param.getBusinessFormCode())) {
+            sql.append(" and BUSINESS_FORM_CODE like :businessFormCode ");
+            paramts.put("businessFormCode",
+                StringUtils.CHAR_PERCENT + param.getBusinessFormCode() + StringUtils.CHAR_PERCENT);
+        }
+        if (param.getAgencyId() != null) {
+            sql.append(" and AGENCY_ID like :agencyId ");
+            paramts.put("agencyId", param.getAgencyId() + StringUtils.CHAR_PERCENT);
+        }
+        // 鍒涘缓浜�
+        if (!StringUtils.isEmpty(param.getCreateName())) {
+            sql.append(" and buyer_Name =:buyerName ");
+            paramts.put("buyerName", param.getCreateName());
+        }
+        // 鐘舵��
+        if (param.getStates() != null) {
+            sql.append(" and states =:states ");
+            paramts.put("states", param.getStates());
+        }
+        // 鍏ュ簱鏃堕棿
+        if (param.getStartTime() != null) {
+            sql.append(" and INCOME_TIME >=:incomeTimeStart ");
+            paramts.put("incomeTimeStart", param.getStartTime() * 1000000);
+        }
+        if (param.getEndTime() != null) {
+            sql.append(" and INCOME_TIME <:incomeTimeEnd ");
+            paramts.put("incomeTimeEnd", param.getEndTime() * 1000000 + 240000);
+        }
+        // 鐗╁搧鍚嶇О
+        if (!StringUtils.isEmpty(param.getGoodsTemplateName())) {
+            sql.append(
+                " AND id IN (SELECT BUSINESS_ID FROM L_WH_PROCURE_MODEL procureModel LEFT JOIN BASE_GOODS_MODELS baseModel ON procureModel.BASE_GOODS_MODELS_ID=baseModel.ID LEFT JOIN BASE_GOODS_TEMPLATE baseTemp ON baseModel.GOODS_TEMPLATES_ID=baseTemp.id WHERE procureModel.BUSINESS_TYPE=1 AND baseTemp.GOODS_NAME LIKE :goodsTemplateName)");
+            paramts.put("goodsTemplateName",
+                StringUtils.CHAR_PERCENT + param.getGoodsTemplateName() + StringUtils.CHAR_PERCENT);
+        }
+        sql.append(" ORDER BY PROCURE_TIME DESC");
+        GenericPager genericPager = selectSplit(sql.toString(), paramts, new LWhFormProcure());
+        PageUtil pageUtil = new PageUtil(genericPager);
+        return pageUtil;
+
+    }
+
+    @Override
+    public GenericPager<Map<String, Object>> queryFormProcureDetailList(FormProcureQry param) {
+        HashMap<String, Object> paramts = new HashMap<>();
+        StringBuilder sql =
+            new StringBuilder("SELECT pm.id,fp.BUSINESS_FORM_CODE,fpg.GOODS_TEMPLATE_NAME,pm.PRICE,pm.COUNTS, "
+                + "( pm.PRICE * pm.COUNTS ) amount,fp.AGENCY_NAME,fp.BUYER_NAME,fp.PROCURE_TIME,pm.BUSINESS_ID,pm.BASE_GOODS_MODELS_NAME FROM l_wh_procure_model pm "
+                + "LEFT JOIN l_wh_form_procure fp ON pm.BUSINESS_ID = fp.id "
+                + "LEFT JOIN l_wh_form_procure_goods fpg ON fp.id = fpg.WH_FORM_PROCURE_ID WHERE pm.BUSINESS_TYPE = 1 ");
+        // 鍏ュ簱鍗曞彿
+        if (!StringUtils.isEmpty(param.getBusinessFormCode())) {
+            sql.append("and BUSINESS_FORM_CODE = :businessFormCode ");
+            paramts.put("businessFormCode", param.getBusinessFormCode());
+        }
+        // 鐗╁搧鍚嶇О
+        if (!StringUtils.isEmpty(param.getGoodsTemplateName())) {
+            sql.append("and fpg.GOODS_TEMPLATE_NAME like :goodsTemplateName ");
+            paramts.put("goodsTemplateName",
+                StringUtils.CHAR_PERCENT + param.getGoodsTemplateName() + StringUtils.CHAR_PERCENT);
+        }
+        if (param.getAgencyId() != null) {
+            sql.append("and AGENCY_ID like :agencyId ");
+            paramts.put("agencyId", param.getAgencyId() + StringUtils.CHAR_PERCENT);
+        }
+        // 鍒涘缓浜�
+        if (!StringUtils.isEmpty(param.getCreateName())) {
+            sql.append("and buyer_Name =:buyerName ");
+            paramts.put("buyerName", param.getCreateName());
+        }
+        // 鍏ュ簱寮�濮嬫椂闂�
+        if (param.getStartTime() != null) {
+            sql.append("and INCOME_TIME >=:incomeTimeStart ");
+            paramts.put("incomeTimeStart", param.getStartTime() * 1000000);
+        }
+        // 鍏ュ簱缁撴潫鏃堕棿
+        if (param.getEndTime() != null) {
+            sql.append("and INCOME_TIME <:incomeTimeEnd ");
+            paramts.put("incomeTimeEnd", param.getEndTime() * 1000000 + 240000);
+        }
+        // 瑙勬牸鍨嬪彿
+        if (param.getBaseGoodsModelsId() != null) {
+            sql.append("and pm.BASE_GOODS_MODELS_ID =:baseGoodsModelsId ");
+            paramts.put("baseGoodsModelsId", param.getBaseGoodsModelsId());
+        }
+
+        sql.append("ORDER BY PROCURE_TIME DESC");
+        GenericPager genericPager =
+            selectSplit(sql.toString(), paramts, param.getPageNum(), param.getPageSize(), new MapperUtil());
+        return genericPager;
+
+    }
+
+    @Override
+    public List<ProcureExcelTemplate> getExportList(Long id) {
+        String sql = "SELECT\n" + "\tfp.BUSINESS_FORM_CODE,\n" + "\tfp.AGENCY_NAME tenantName,\n"
+            + "\tfp.INCOME_TIME createTime,\n" + "\tfp.INCOME_NAME operatorName,\n" + "\tGOODS_NAME templateName,\n"
+            + "\tpm.BASE_GOODS_MODELS_NAME baseModelName,\n" + "\tcounts num,\n" + "\tprice,\n"
+            + "\ttotal_amount totalAmount,\n" + "\tWAREHOUSE_NAME,\n" + "\tBEIZ remark\n" + "FROM\n"
+            + "\tl_wh_procure_model pm\n" + "\tLEFT JOIN base_goods_models bgm ON pm.BASE_GOODS_MODELS_ID = bgm.id\n"
+            + "\tLEFT JOIN base_goods_template bgt ON bgm.GOODS_TEMPLATES_ID = bgt.id\n"
+            + "\tLEFT JOIN l_wh_form_procure fp ON fp.ID = pm.BUSINESS_ID\n" + "WHERE\n" + "\tpm.BUSINESS_ID = :id";
+        Map<String, Object> param = new HashMap<>();
+        param.put("id", id);
+        List<Map<String, Object>> select = this.select(sql, param, new MapperUtil());
+        if (CollectionUtils.isEmpty(select)) {
+            return null;
+        }
+
+        List<ProcureExcelTemplate> list = Lists.newArrayList();
+        select.forEach(item -> {
+            ProcureExcelTemplate templateExcelExport = MapUtils.convertMapToObj(item, ProcureExcelTemplate.class);
+            templateExcelExport.setAmount(CurrencyUtil.convertFenToYuan(templateExcelExport.getTotalAmount()));
+            templateExcelExport.setPrice(CurrencyUtil.convertFenToYuan(templateExcelExport.getPrice()));
+            list.add(templateExcelExport);
+        });
+        return list;
+
+    }
+
+    @Override
+    public void add(LWhFormProcureParam param, FinSysTenantUser sysTenantUser, S_user_core currentUser) {
+        Long warehouseId = param.getWarehouseId();
+        BaseWarehouse baseWarehouse = baseWarehouseService.getById(warehouseId);
+        String tenantId = sysTenantUser.getTenantId();
+        String tenantName = sysTenantUser.getTenantName();
+
+        // 閲囪喘鍗昳d
+        Long whFormProcureId = param.getId();
+        if (whFormProcureId == null) {
+            whFormProcureId = IdUtil.generateId();
+        }
+        long procureTime = Long.valueOf(param.getProcureTime());
+
+        Set<String> supplierList = new HashSet<>();
+
+        ArrayList<LWhFormProcureGoods> procureGoodList = new ArrayList<>();
+        ArrayList<LWhProcureModel> procureModelList = new ArrayList<>();
+
+        List<LWhFormProcureGoodsInfoParam> procureGoods = param.getProcureGoods();
+        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)) {
+                throw new RuntimeException("閲囪喘鍗曚笉鑳戒负绌�");
+            }
+            LWhFormProcureGoods procureGood = new LWhFormProcureGoods();
+            long fromProcureGoodsId = IdUtil.generateId();
+            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) {
+                    throw new RuntimeException("鍨嬪彿鐨勯噰璐暟閲忓彧鑳戒负姝f暣鏁�");
+                }
+                Long price = modelT.getPrice();
+                if (price == null || price <= 0) {
+                    throw new RuntimeException("鍨嬪彿鐨勯噰璐环鏍煎彧鑳戒负姝f暟");
+                }
+                Long baseGoodsModelsId = modelT.getBaseGoodsModelsId();
+                if (baseGoodsModelsId == null) {
+                    throw new RuntimeException("閲囪喘鐨勪环鍨嬪彿鏈壘鍒�");
+                }
+                // 鏌ヨ鍨嬪彿淇℃伅
+                Map<String, Object> tempGoodsInfo = baseGoodsTemplateService.queryGoodsInfoByModelId(baseGoodsModelsId);
+                if (tempGoodsInfo == null) {
+                    throw new RuntimeException("閲囪喘鐨勪环鍨嬪彿鏈壘鍒�");
+                }
+                String modelName = (String)tempGoodsInfo.get("modelname");
+                // 鏌ヨ鍨嬪彿搴撳瓨
+                int goodsModelNum = lWhGoodsService.queryGoodsModelNum(0, warehouseId, baseGoodsModelsId, 1, null);
+                LWhProcureModel model = new LWhProcureModel();
+                model.setId(IdUtil.generateId());
+                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);
+
+        LWhFormProcure lWhFormProcure =
+            getlWhFormProcure(param, whFormProcureId, warehouseId, baseWarehouse, currentUser, procureTime);
+        insert(lWhFormProcure);
+
+        supplierList.forEach(supplier -> {
+            LOrgSupplier lOrgSupplier = new LOrgSupplier();
+            lOrgSupplier.setId(IdUtil.generateId());
+            lOrgSupplier.setAgencyId(tenantId);
+            lOrgSupplier.setAgencyName(tenantName);
+            lOrgSupplier.setSupplier(supplier);
+            lOrgSupplierService.insert(lOrgSupplier);
+        });
+    }
+
+    private LWhFormProcure getlWhFormProcure(LWhFormProcureParam param, Long whFormProcureId, Long warehouseId,
+        BaseWarehouse baseWarehouse, S_user_core currentUser, long procureTime) {
+        // 鎻掑叆 閲囪喘鍗曠墿鍝併�怢_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());
+        return lWhFormProcure;
+    }
+}

--
Gitblit v1.9.1