package com.consum.base.controller; 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.*; 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.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 org.apache.commons.compress.utils.Lists; 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 **/ @Api(value = "仓库表单采购", tags = "仓库表单采购") @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() { LWhFormProcureParam param = CommonUtil.getObjFromReqBody(LWhFormProcureParam.class); LWhFormProcureParam param2 = new LWhFormProcureParam(); CommonUtil.copyProperties(param, param2); param = param2; return this.add(param); } 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 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 = Long.valueOf(param.getProcureTime()); Set supplierList = new HashSet<>(); ArrayList procureGoodList = new ArrayList<>(); ArrayList 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 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("型号的采购数量只能为正整数"); } 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, 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); // 插入 采购单物品【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 列表查询 */ @ApiOperation(value = "采购单列表查询", notes = "采购单列表查询") @ApiImplicitParams({ @ApiImplicitParam(name = "param", value = "采购查询条件", required = true, dataType = "FormProcureQryDto", paramType = "query") }) @GetMapping("/list") public ResponseValue queryFormProcureList() { FormProcureQry param = CommonUtil.getObjFromReq(FormProcureQry.class); FormProcureQry param2 = new FormProcureQry(); CommonUtil.copyProperties(param, param2); param = param2; S_user_core currentUser = this.getCurrentUser(); if (currentUser == null) { return ResponseValue.error("登录用户信息不存在"); } /*当前登录人只能看到自己机构下的列表*/ FinSysTenantUser sysInfo = this.getSysInfo(); String tenantId = sysInfo.getTenantId(); if (param.getAgencyId() == null) { param.setAgencyId(Long.valueOf(tenantId)); } PageUtil genericPager = lWhFormProcureService.queryFormProcureList(param); List data = genericPager.getDatas(); ArrayList result = new ArrayList<>(); if (!CollectionUtils.isEmpty(data)) { data.forEach(item -> { FormProcureVO fromProcureVO = new FormProcureVO(); BeanUtils.copyProperties(item, fromProcureVO); List 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 paramMap = new HashMap<>(); paramMap.put("id", item.getId()); List> procureModelList = lWhProcureModelService.select(sql, paramMap, new MapperUtil()); for (Map map : procureModelList) { FromProcureTemplateInfoVO procureTemplateInfoVO = MapUtils.convertMapToObj(map, FromProcureTemplateInfoVO.class); procureTemplateInfoList.add(procureTemplateInfoVO); } fromProcureVO.setFromProcureTemplateInfoList(procureTemplateInfoList); 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(); } genericPager.setDatas(result); return ResponseValue.success(genericPager); } /** * @Description 编辑 */ @PostMapping("/edit") public ResponseValue edit() { LWhFormProcureParam param = CommonUtil.getObjFromReqBody(LWhFormProcureParam.class); LWhFormProcureParam param2 = new LWhFormProcureParam(); CommonUtil.copyProperties(param, param2); param = param2; 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)); if (lWhFormProcure == null) { return ResponseValue.error("采购单不存在"); } LWhFormProcureExtendVO lWhFormProcureExtendVO = new LWhFormProcureExtendVO(); BeanUtils.copyProperties(lWhFormProcure, lWhFormProcureExtendVO); // 物品 LWhFormProcureGoods lWhFormProcureGoods = new LWhFormProcureGoods(); lWhFormProcureGoods.setWhFormProcureId(id); List formProcureGoods = lWhFormProcureGoodsService.select(lWhFormProcureGoods); // Field fieldModels = null; // try { // fieldModels = LWhFormProcureGoodsVO.class.getDeclaredField("models"); // } catch (NoSuchFieldException e) { // e.printStackTrace(); // } // fieldModels.setAccessible(true); ArrayList procureGoodsVOList = new ArrayList<>(); for (LWhFormProcureGoods formProcureGood : formProcureGoods) { LWhFormProcureGoodsVO lWhFormProcureGoodsVO = new LWhFormProcureGoodsVO(); BeanUtils.copyProperties(formProcureGood, lWhFormProcureGoodsVO); Long baseGoodsTemplateId = formProcureGood.getBaseGoodsTemplateId(); BaseGoodsTemplate queryEntity = new BaseGoodsTemplate(); queryEntity.setId(baseGoodsTemplateId); BaseGoodsTemplate baseGoodsTemplate = baseGoodsTemplateService.get(queryEntity); lWhFormProcureGoodsVO.setBaseCategoryName(baseGoodsTemplate.getCategoryName()); // 查询型号数量 Map 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> procureModelList = lWhProcureModelService.select(sql, paramMap, new MapperUtil()); List 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); procureGoodsVOList.add(lWhFormProcureGoodsVO); } lWhFormProcureExtendVO.setProcureGoods(procureGoodsVOList); return ResponseValue.success("查询成功!", lWhFormProcureExtendVO); } @ApiOperation(value = "采购单明细查询", notes = "采购单明细查询") @ApiImplicitParams({@ApiImplicitParam(name = "param", value = "采购单明细查询", required = true, dataType = "FormProcureQryDto", paramType = "query")}) @GetMapping("detail/list") public ResponseValue queryFormProcureDetailList() { FormProcureQry formProcureQry = CommonUtil.getObjFromReq(FormProcureQry.class); FormProcureQry param2 = new FormProcureQry(); CommonUtil.copyProperties(formProcureQry, param2); formProcureQry = param2; S_user_core currentUser = this.getCurrentUser(); if (currentUser == null) { return ResponseValue.error("登录用户信息不存在"); } GenericPager genericPager = lWhFormProcureService.queryFormProcureDetailList(formProcureQry); return ResponseValue.success(genericPager); } }