package com.consum.base.controller; 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.pojo.LWhFormProcureExtend; import com.consum.base.pojo.LWhFormProcureGoodsParams; import com.consum.base.pojo.LWhFormProcureParam; import com.consum.base.pojo.LWhProcureModelParams; import com.consum.base.service.*; import com.consum.model.po.*; 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.infrastructure.utils.NumberGenerator; import com.walker.web.ResponseValue; import org.springframework.beans.BeanUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.lang.reflect.Field; import java.util.*; /** * @ClassName LWhFormProcureController * @Date 2023/10/27 * @Description * @Version 1.0 **/ @RestController @RequestMapping("/pc/whForm/procure") public class LWhFormProcureController extends BaseController { @Resource private LWhFormProcureService lWhFormProcureService; @Resource private BaseWarehouseServiceImpl baseWarehouseService; @Resource private FinSysTenantServiceImpl finSysTenantService; @Resource private CodeGeneratorService codeGeneratorService; @Resource private LWhFormProcureGoodsService lWhFormProcureGoodsService; @Resource private LWhFormProcureCoreService lWhFormProcureCoreService; @Resource private LWhGoodsService lWhGoodsService; @Resource private BaseGoodsTemplateServiceImpl baseGoodsTemplateService; @Resource private LWhProcureModelService lWhProcureModelService; @Resource private LOrgSupplierServiceImpl lOrgSupplierService; /** * @Description 新增 */ @PostMapping("/add") public ResponseValue add(@RequestBody 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 procureGoods = param.getProcureGoods(); if (CollectionUtils.isEmpty(procureGoods)) { return ResponseValue.error("采购单不能为空"); } S_user_core currentUser = this.getCurrentUser(); // 采购单id Long whFormProcureId = param.getId(); if (whFormProcureId == null) { whFormProcureId = NumberGenerator.getLongSequenceNumber(); } long procureTime = DateUtils.getDateTimeNumber(param.getProcureTime()); Set supplierList = new HashSet<>(); ArrayList procureGoodList = new ArrayList<>(); ArrayList whProcureModeLlist = new ArrayList<>(); for (int i = 0; i < procureGoods.size(); i++) { LWhFormProcureGoodsParams 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 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); procureGood.setGoodsTemplateName(null); procureGood.setSupplier(supplier); procureGood.setSort(i); for (LWhProcureModelParams modelT : models) { Integer counts = modelT.getCounts(); if (counts == null || counts <= 0) { return ResponseValue.error("型号的采购数量只能为正整数"); } Long price = modelT.getPrice(); if (price == null || price <= 0) { return ResponseValue.error("型号的采购价格只能为正数"); } Long baseGoodsModelsId = modelT.getBaseGoodsModelsId(); if (baseGoodsModelsId == null) { return ResponseValue.error("采购的价型号未找到"); } //查询型号信息 Map tempGoodsInfo = baseGoodsTemplateService.queryGoodsInfoByModelId(baseGoodsModelsId); if (tempGoodsInfo == null) { return ResponseValue.error("采购的价型号未找到"); } String modelName = (String) tempGoodsInfo.get("modelname"); // 查询型号库存 int goodsModelNum = lWhGoodsService.queryGoodsModelNum(0, warehouseId, baseGoodsModelsId, (short) 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); whProcureModeLlist.add(model); } procureGoodList.add(procureGood); } lWhFormProcureGoodsService.insertBatch(procureGoodList); lWhProcureModelService.insertBatch(whProcureModeLlist); // 插入 采购单物品【L_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("新增失败!"); } /** * @Description 列表查询 */ @GetMapping("/list") public ResponseValue queryFormProcureList(LWhFormProcureParam param) { S_user_core currentUser = this.getCurrentUser(); if (currentUser == null) { return ResponseValue.error("登录用户信息不存在"); } FinSysTenantUser sysInfo = getSysInfo(); //只能查询本级 及以下机构的进货单 //?????? GenericPager genericPager = lWhFormProcureService.queryFormProcureList(param); List datas = genericPager.getDatas(); ArrayList newDatas = new ArrayList<>(); if (!CollectionUtils.isEmpty(datas)) { datas.forEach(item -> { // 查询型号数量 LWhProcureModel lWhProcureModel = new LWhProcureModel(); lWhProcureModel.setBusinessType(1); lWhProcureModel.setBusinessId(item.getId()); List models = lWhProcureModelService.select(lWhProcureModel); LWhFormProcureExtend formProcureExtend = new LWhFormProcureExtend(); BeanUtils.copyProperties(item, formProcureExtend); formProcureExtend.setModels(models); newDatas.add(formProcureExtend); }); } try { Field fieldDatas = GenericPager.class.getDeclaredField("datas"); fieldDatas.setAccessible(true); fieldDatas.set(genericPager, newDatas); } catch (Exception e) { e.printStackTrace(); } // genericPager.setDatas(newDatas); return ResponseValue.success(genericPager); } /** * @Description 编辑 */ @PostMapping("/edit") public ResponseValue edit(@RequestBody LWhFormProcureParam param) { ResponseValue delFlag = delById(param.getId()); if (delFlag.getCode() == ResponseValue.CODE_SUCCESS) { return this.add(param); } return ResponseValue.error("编辑失败!"); } /** * @Description 根据id删除 */ @DeleteMapping("/del") public ResponseValue delById(Long id) { if (id == null) { return ResponseValue.error("参数不能为空!"); } LWhFormProcure lWhFormProcure = lWhFormProcureService.get(new LWhFormProcure(id)); if (lWhFormProcure == null) { return ResponseValue.error("删除失败!"); } if (lWhFormProcure.getStates() != 1) { return ResponseValue.error("待入库状态才能删除!"); } int num = lWhFormProcureService.delete(new LWhFormProcure(id)); if (num == 0) { return ResponseValue.error("删除失败!"); } lWhFormProcureGoodsService.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); } /** * 入库操作 */ @PostMapping("/income") public ResponseValue income(Long id) { String errMsg = lWhFormProcureCoreService.doProcure(id, getCurrentUser()); if (errMsg == null) { return ResponseValue.success(); } return ResponseValue.error(errMsg); } /** * 根据id查询详情 */ @GetMapping("/detail") public ResponseValue getById(Long id) throws IllegalAccessException { if (id == null) { return ResponseValue.error("采购单id为空"); } LWhFormProcure lWhFormProcure = lWhFormProcureService.get(new LWhFormProcure(id)); LWhFormProcureExtend formProcureExtend = new LWhFormProcureExtend(); BeanUtils.copyProperties(lWhFormProcure, formProcureExtend); // 物品 LWhFormProcureGoods lWhFormProcureGoods = new LWhFormProcureGoods(); lWhFormProcureGoods.setWhFormProcureId(id); List formProcureGoods = lWhFormProcureGoodsService.select(lWhFormProcureGoods); Field fieldModels = null; try { fieldModels = LWhFormProcureGoodsParams.class.getDeclaredField("models"); } catch (NoSuchFieldException e) { e.printStackTrace(); } fieldModels.setAccessible(true); ArrayList procureGoodsParams = new ArrayList<>(); for (LWhFormProcureGoods formProcureGood : formProcureGoods) { LWhFormProcureGoodsParams lWhFormProcureGoodsParams = new LWhFormProcureGoodsParams(); BeanUtils.copyProperties(formProcureGood, lWhFormProcureGoodsParams); // 查询型号数量 LWhProcureModel lWhProcureModel = new LWhProcureModel(); lWhProcureModel.setFromProcureGoodsId(formProcureGood.getId()); List models = lWhProcureModelService.select(lWhProcureModel); fieldModels.set(lWhFormProcureGoodsParams, models); procureGoodsParams.add(lWhFormProcureGoodsParams); } formProcureExtend.setProcureGoods(procureGoodsParams); return ResponseValue.success("查询成功!", formProcureExtend); } }