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.utils.CommonUtil; 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.pojo.GoodsUseRecordVO; import com.consum.base.pojo.LWhFormTransferGoodsInfoParam; import com.consum.base.pojo.RecordUserInfoVO; import com.consum.base.pojo.UseRecordSkuVO; import com.consum.base.pojo.dto.UseRecordDTO; import com.consum.base.pojo.excel.TransferExcelTemplate; import com.consum.base.pojo.query.TransferQry; import com.consum.base.pojo.request.LWhFormTransferParam; import com.consum.base.pojo.request.ProcureModelInfoParam; import com.consum.base.pojo.request.RecordInfoParam; import com.consum.base.pojo.response.FormTransferVO; import com.consum.base.pojo.response.FromTransferTemplateInfoVO; import com.consum.base.pojo.response.LWHFromTransferExtendVO; import com.consum.base.pojo.response.TransferInfoVO; import com.consum.base.service.BaseWarehouseService; import com.consum.base.service.LWhFormTransferCoreService; import com.consum.base.service.LWhFormTransferService; import com.consum.base.service.LWhProcureModelService; import com.consum.base.service.LWhProcureModelUserRecordServiceImpl; import com.consum.base.service.LWhProcureModelUserServiceImpl; import com.consum.model.po.BaseWarehouse; import com.consum.model.po.FinSysTenantUser; import com.consum.model.po.LWhFormTransfer; import com.consum.model.po.LWhProcureModelUser; import com.consum.model.po.LWhProcureModelUserRecord; 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 io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; import javax.servlet.http.HttpServletResponse; 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.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * @Description 调拨管理 * @Author 卢庆阳 * @Date 2023/10/30 */ @RestController @RequestMapping("/pc/l/wh/form/transfer") @Api(value = "调拨分发管理", tags = "调拨分发管理") public class LWhFormTransferController extends BaseController { @Autowired private LWhFormTransferService lWhFormTransferService; @Autowired private LWhProcureModelService lWhProcureModelService; @Autowired private LWhFormTransferCoreService lWhFormTransferCoreService; @Autowired private LWhProcureModelUserServiceImpl lWhProcureModelUserService; @Autowired private LWhProcureModelUserRecordServiceImpl lWhProcureModelUserRecordService; @Autowired private BaseWarehouseService baseWarehouseService; /** * @Description 新增 */ @ApiOperation(value = "单据新增", notes = "单据新增") @ApiImplicitParam(name = "param", value = "单据新增", required = true, dataType = "LWhFormTransferParam") @PostMapping("/add") public ResponseValue add() throws Exception { LWhFormTransferParam param = CommonUtil.getObjFromReqBody(LWhFormTransferParam.class); LWhFormTransferParam param2 = new LWhFormTransferParam(); CommonUtil.copyProperties(param, param2); param = param2; S_user_core currentUser = this.getCurrentUser(); if (currentUser == null) { return ResponseValue.error("登录用户信息不存在"); } List transferGoods = param.getTransferGoods(); if (CollectionUtils.isEmpty(transferGoods)) { return ResponseValue.error("调拨单不能为空"); } long id = this.lWhFormTransferService.add(param, this.getSysInfo()); Integer transferBusinessType = param.getTransferBusinessType(); //部门分发业务需要处理 if (transferBusinessType == 1) { // 先出库,再入库 // 出库前 设置出库仓库 FinSysTenantUser sysTenantUser = this.getSysInfo(); String agencyId = sysTenantUser.getTenantId(); List baseWarehouseList = baseWarehouseService.getByAgencyId(Long.valueOf(agencyId), (short) 1, (short) 1); if (CollectionUtils.isEmpty(baseWarehouseList)) { return ResponseValue.error("机构无默认仓库!"); } BaseWarehouse baseWarehouse = baseWarehouseList.get(0); Long wareHouseId = baseWarehouse.getId(); String warehouseName = baseWarehouse.getWarehouseName(); LWhFormTransfer lWhFormTransfer = new LWhFormTransfer(id); lWhFormTransfer.setOutWarehouseId(wareHouseId); lWhFormTransfer.setOutWarehouseName(warehouseName); lWhFormTransferService.update(lWhFormTransfer); lWhFormTransferCoreService.doTransferOutPut(id, getCurrentUser()); lWhFormTransferCoreService.doTransferInPut(id, getCurrentUser()); } return ResponseValue.success(); } /** * @Description 列表查询(调拨明细) * @Author 卢庆阳 * @Date 2023/10/30 *

* 1.查询调拨单 *

* 2.查询物品型号 */ @ApiOperation(value = "单据列表查询", notes = "单据列表查询") @ApiImplicitParams({ @ApiImplicitParam(name = "page", value = "页码", required = true, dataType = "int"), @ApiImplicitParam(name = "size", value = "每页条数", required = true, dataType = "int"), @ApiImplicitParam(name = "param", value = "条件参数", required = true, dataType = "TransferQry"), }) @GetMapping("/list") public ResponseValue queryFormTransferList() { TransferQry param = CommonUtil.getObjFromReq(TransferQry.class); TransferQry param2 = new TransferQry(); CommonUtil.copyProperties(param, param2); param = param2; S_user_core currentUser = this.getCurrentUser(); if (currentUser == null) { return ResponseValue.error("登录用户信息不存在"); } /*当前登录人只能看到自己机构下的列表*/ GenericPager genericPager = lWhFormTransferService.queryFormTransferList(param); List datas = genericPager.getDatas(); ArrayList result = new ArrayList<>(); if (!CollectionUtils.isEmpty(datas)) { datas.forEach(item -> { FormTransferVO formTransferVO = new FormTransferVO(); BeanUtils.copyProperties(item, formTransferVO); List templateInfoList = Lists.newArrayList(); // 查询型号数量 String sql = "SELECT bgt.id,bgm.GOODS_TEMPLATES_ID,GOODS_NAME,sum( counts ) count FROM " + "l_wh_procure_model pm LEFT JOIN base_goods_models bgm ON pm.BASE_GOODS_MODELS_ID = bgm.id " + "LEFT JOIN base_goods_template bgt ON bgm.GOODS_TEMPLATES_ID = bgt.id " + "WHERE pm.BUSINESS_ID =:id GROUP BY bgm.GOODS_TEMPLATES_ID"; Map paramMap = new HashMap<>(); paramMap.put("id", item.getId()); List> procureModelList = lWhProcureModelService.select(sql, paramMap, new MapperUtil()); for (Map map : procureModelList) { FromTransferTemplateInfoVO procureTemplateInfoVO = MapUtils.convertMapToObj(map, FromTransferTemplateInfoVO.class); templateInfoList.add(procureTemplateInfoVO); } formTransferVO.setFromTransferTemplateInfoList(templateInfoList); result.add(formTransferVO); }); } try { Field fieldDatas = GenericPager.class.getDeclaredField("datas"); // fieldDatas.setAccessible(true); // fieldDatas.set(genericPager, result); ReflectUtil.setFieldValue(genericPager, fieldDatas, result); } catch (Exception e) { e.printStackTrace(); } return ResponseValue.success(genericPager); } /** * @Description 根据id查询详情 * @Author 卢庆阳 * @Date 2023/10/30 */ @ApiOperation(value = "根据id查询详情", notes = "根据id查询详情") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "调拨单id", required = true, dataType = "Long"), }) @GetMapping("/detail") public ResponseValue getById(Long id) { if (id == null) { return ResponseValue.error("调拨单id为空"); } LWHFromTransferExtendVO vo = this.lWhFormTransferService.getById(id); return ResponseValue.success(vo); } @ApiOperation(value = "调拨明细列表", notes = "调拨明细列表") @ApiImplicitParams({ @ApiImplicitParam(name = "param", value = "条件", required = true, dataType = "TransferQry"), }) @GetMapping("/detail/list") public ResponseValue queryFormTransferDetailList() { TransferQry param = CommonUtil.getObjFromReq(TransferQry.class); TransferQry param2 = new TransferQry(); CommonUtil.copyProperties(param, param2); param = param2; FinSysTenantUser sysInfo = this.getSysInfo(); if (sysInfo == null) { return ResponseValue.error("登录用户信息不存在"); } GenericPager> mapGenericPager = lWhFormTransferService.queryFormTransferDetailList(param); return ResponseValue.success(mapGenericPager); } /** * 撤销 * * @author 卢庆阳 * @date 2023/10/31 */ @ApiOperation(value = "撤销", notes = "撤销") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "调拨单id", required = true, dataType = "Long"), }) @PostMapping("/updStatus") public ResponseValue updateStatus(Long id) { if (id == null) { return ResponseValue.error("参数错误"); } int num = this.lWhFormTransferService.updateStatus(id); return num > 0 ? ResponseValue.success(1) : ResponseValue.error("修改失败!"); } /** * @Description 调拨入库 * @Author 卢庆阳 * @Date 2023/10/31 */ @ApiOperation(value = "调拨入库", notes = "调拨入库") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "调拨单id", required = true, dataType = "Long"), }) @PostMapping("/income") public ResponseValue income(Long id) { lWhFormTransferCoreService.doTransferInPut(id, getCurrentUser()); return ResponseValue.success(); } /** * @Description 调拨出库 * @Author 卢庆阳 * @Date 2023/10/31 */ @ApiOperation(value = "调拨出库", notes = "调拨出库") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "调拨单id", required = true, dataType = "Long"), }) @PostMapping("/output") public ResponseValue output(Long id) { // 出库前 设置出库仓库 FinSysTenantUser sysTenantUser = this.getSysInfo(); String agencyId = sysTenantUser.getTenantId(); List baseWarehouseList = baseWarehouseService.getByAgencyId(Long.valueOf(agencyId), (short) 1, (short) 1); if (CollectionUtils.isEmpty(baseWarehouseList)) { return ResponseValue.error("机构无默认仓库!"); } BaseWarehouse baseWarehouse = baseWarehouseList.get(0); Long wareHouseId = baseWarehouse.getId(); String warehouseName = baseWarehouse.getWarehouseName(); LWhFormTransfer lWhFormTransfer = new LWhFormTransfer(id); lWhFormTransfer.setOutWarehouseId(wareHouseId); lWhFormTransfer.setOutWarehouseName(warehouseName); lWhFormTransferService.update(lWhFormTransfer); lWhFormTransferCoreService.doTransferOutPut(id, getCurrentUser()); return ResponseValue.success(); } @ApiOperation(value = "调拨单导出", notes = "调拨单导出") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "调拨单id", required = true, dataType = "Long"), @ApiImplicitParam(name = "type", value = "导出类型 1 入库 2 出库", required = true, dataType = "Integer"), }) @GetMapping("/list/export") public void export(Long id, Integer type, HttpServletResponse response) throws Exception { TemplateExportParams params; String fileName; if (type == 1) { params = new TemplateExportParams("import/调拨入库单.xls"); fileName = "调拨入库单"; } else { params = new TemplateExportParams("import/调拨出库单.xls"); fileName = "调拨出库单"; } params.setHeadingStartRow(2); List export = this.lWhFormTransferService.export(id, type); int countNum = export.stream().filter(item -> item.getNum() != null).mapToInt(TransferExcelTemplate::getNum).sum(); int totalAmount = export.stream().filter(item -> item.getTotalAmount() != null).mapToInt(TransferExcelTemplate::getTotalAmount).sum(); Optional first = export.stream().findFirst(); TransferExcelTemplate entity = first.get(); String businessFormCode = entity.getBusinessFormCode(); Long createTime = entity.getCreateTime(); String operatorName = entity.getOperatorName(); String tenantName = entity.getTenantName(); Map map = new HashMap<>(); map.put("code", businessFormCode); map.put("date", DateUtils.toShowDate(createTime)); map.put("tenantName", tenantName); map.put("name", operatorName); map.put("countNum", countNum); map.put("totalAmount", totalAmount); Workbook workbook = ExcelExportUtil.exportExcel(params, TransferExcelTemplate.class, export, map); downLoadExcel(fileName, response, workbook); } /** * 部门物品分发列表明细 * * @param * @return */ @ApiOperation(value = "部门物品分发列表明细", notes = "部门物品分发列表明细") @ApiImplicitParams({ @ApiImplicitParam(name = "transferQryDto", value = "调拨单查询条件", required = true) }) @GetMapping("/department/list") public ResponseValue departmentTransferList() { TransferQry param = CommonUtil.getObjFromReq(TransferQry.class); TransferQry param2 = new TransferQry(); CommonUtil.copyProperties(param, param2); param = param2; S_user_core currentUser = this.getCurrentUser(); if (currentUser == null) { return ResponseValue.error("登录用户信息不存在"); } GenericPager> transferInfoDetailsVoGenericPager = this.lWhFormTransferService.queryTransferInfo(param); return ResponseValue.success(transferInfoDetailsVoGenericPager); } @ApiOperation(value = "使用人修改", notes = "使用人修改") @ApiImplicitParams({ @ApiImplicitParam(name = "procureModelInfoDto", value = "使用信息", required = true) }) @PostMapping("/useInfo/update") public ResponseValue infoUpdate() { RecordInfoParam param = CommonUtil.getObjFromReqBody(RecordInfoParam.class); RecordInfoParam recordInfoParam = new RecordInfoParam(); CommonUtil.copyProperties(param, recordInfoParam); param = recordInfoParam; S_user_core currentUser = this.getCurrentUser(); if (currentUser == null) { return ResponseValue.error("登录用户信息不存在"); } if (CollectionUtils.isEmpty(param.getRecordInfoList())) { return ResponseValue.error("参数错误"); } Map> collect = param.getRecordInfoList().stream() .collect(Collectors.groupingBy(ProcureModelInfoParam::getBaseGoodModelId)); for (Map.Entry> entry : collect.entrySet()) { Long baseGoodModelId = entry.getKey(); List procureModelInfoList = entry.getValue(); Optional first = procureModelInfoList.stream().findFirst(); ProcureModelInfoParam procureModelInf = first.get(); Long businessId = procureModelInf.getBusinessId(); LWhProcureModelUserRecord lWhProcureModelUserRecord = new LWhProcureModelUserRecord(); lWhProcureModelUserRecord.setId(IdUtil.generateId()); lWhProcureModelUserRecord.setTransBusinessId(businessId); FinSysTenantUser sysInfo = getSysInfo(); lWhProcureModelUserRecord.setOperatorId(sysInfo.getId()); lWhProcureModelUserRecord.setOperatorName(sysInfo.getUserName()); lWhProcureModelUserRecord.setDealTime(DateUtils.getDateTimeNumber(System.currentTimeMillis())); lWhProcureModelUserRecordService.insert(lWhProcureModelUserRecord); List procureModelUserList = Lists.newArrayList(); if (!CollectionUtils.isEmpty(procureModelInfoList)) { for (ProcureModelInfoParam item : procureModelInfoList) { LWhProcureModelUser lWhProcureModelUser = new LWhProcureModelUser(); lWhProcureModelUser.setId(IdUtil.generateId()); lWhProcureModelUser.setTransBusinessId(businessId); lWhProcureModelUser.setProcureModelUserRecordId(lWhProcureModelUserRecord.getId()); lWhProcureModelUser.setWhProcureModelId(procureModelInf.getProcureModelId()); lWhProcureModelUser.setBaseGoodsModelsId(baseGoodModelId); lWhProcureModelUser.setNowUserPhone(item.getPhone()); lWhProcureModelUser.setNowUserName(item.getUserName()); lWhProcureModelUser.setGoodsNum(item.getCount()); procureModelUserList.add(lWhProcureModelUser); } lWhProcureModelUserService.insert(procureModelUserList); } } // TODO 使用人修改调用 return ResponseValue.success(); } /** * 部门物品使用记录 * * @param transferOrderId * @return */ @ApiOperation(value = "部门物品使用人记录", notes = "部门物品使用人记录") @ApiImplicitParams({ @ApiImplicitParam(name = "transferOrderId", value = "调拨单id", required = true) }) @GetMapping("/use/record") public ResponseValue useRecord(Long transferOrderId) { S_user_core currentUser = this.getCurrentUser(); if (currentUser == null) { return ResponseValue.error("登录用户信息不存在"); } List useRecordDTOList = lWhProcureModelUserService.selectUseRecord(transferOrderId); if (CollectionUtils.isEmpty(useRecordDTOList)) { return ResponseValue.error("未查询到使用记录"); } List goodsUseRecordList = Lists.newArrayList(); //分组 Map>> collect = useRecordDTOList.stream() .collect(Collectors.groupingBy(UseRecordDTO::getId, Collectors.groupingBy(UseRecordDTO::getBaseGoodsModelsId))); //开始循环collect for (Map.Entry>> entry : collect.entrySet()) { Long id = entry.getKey(); Map> value = entry.getValue(); //开始循环value List useRecordSkuList = Lists.newArrayList(); for (Map.Entry> item : value.entrySet()) { List list = item.getValue(); List recordUserInfoList = Lists.newArrayList(); for (UseRecordDTO useRecordDto : list) { GoodsUseRecordVO goodsUseRecordVO = new GoodsUseRecordVO(); goodsUseRecordVO.setId(id); goodsUseRecordVO.setUpdateUserName(useRecordDto.getUpdateUserName()); goodsUseRecordVO.setUpdateTime(useRecordDto.getUpdateTime()); UseRecordSkuVO useRecordSkuVO = new UseRecordSkuVO(); useRecordSkuVO.setBaseGoodModelId(useRecordDto.getBaseGoodsModelsId()); useRecordSkuVO.setBaseGoodModelName(useRecordDto.getBaseGoodsModelsName()); useRecordSkuVO.setUnit(useRecordDto.getUnit()); useRecordSkuVO.setProcureModelId(useRecordDto.getProcureModelId()); RecordUserInfoVO recordUserInfoVO = new RecordUserInfoVO(); recordUserInfoVO.setUseName(useRecordDto.getUseName()); recordUserInfoVO.setPhone(useRecordDto.getPhone()); recordUserInfoVO.setNum(useRecordDto.getNum()); recordUserInfoList.add(recordUserInfoVO); useRecordSkuVO.setRecordUserInfos(recordUserInfoList); useRecordSkuList.add(useRecordSkuVO); goodsUseRecordVO.setRecordSkuDtoList(useRecordSkuList); goodsUseRecordList.add(goodsUseRecordVO); } } } //分组之后重新排序 List result = goodsUseRecordList.stream() .sorted(Comparator.comparing(GoodsUseRecordVO::getUpdateTime , Comparator.nullsFirst(Long::compareTo)).reversed()) .collect(Collectors.toList()); return ResponseValue.success(result); } @ApiOperation(value = "查询部门下的分发单", notes = "查询部门下的分发单") @ApiImplicitParams({ @ApiImplicitParam(name = "agencyId", value = "机构id", required = true, dataType = "Long", paramType = "query") }) @GetMapping("/query/transfList") public ResponseValue queryDepartmentTransferOrderList() { TransferInfoVO transferInfoVO = new TransferInfoVO(); lWhFormTransferService.queryDepartmentTransferOrder(); return ResponseValue.success(transferInfoVO); } }