package com.fzzy.igds; import com.bstek.dorado.annotation.DataProvider; import com.bstek.dorado.annotation.DataResolver; import com.bstek.dorado.annotation.Expose; import com.bstek.dorado.data.provider.Page; import com.fzzy.common.constant.BizTypeEnum; import com.fzzy.igds.constant.Constant; import com.fzzy.igds.data.BaseResp; import com.fzzy.igds.data.InoutData; import com.fzzy.igds.data.InoutParam; import com.fzzy.igds.domain.InoutNoticeIn; import com.fzzy.igds.domain.InoutNoticeOut; import com.fzzy.igds.domain.InoutRecord; import com.fzzy.igds.service.DepotService; import com.fzzy.igds.service.ExportService; import com.fzzy.igds.service.InoutNoticeService; import com.fzzy.igds.service.InoutRecordService; import com.fzzy.igds.utils.ContextUtil; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.StringUtils; import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.commons.lang3.time.DateUtils; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.*; /** * @Description 出入库详单页面管理 * @Author CZT * @Date 2025/12/05 10:40 */ @Component public class InoutDataPR { @Resource private InoutRecordService inoutRecordService; @Resource private ExportService exportService; @Resource private InoutNoticeService noticeService; @Resource private DepotService depotService; /** * inoutDataPR#pageInoutData * * @param page * @param param */ @DataProvider public void pageInoutData(Page page, InoutParam param) { com.baomidou.mybatisplus.extension.plugins.pagination.Page corePage = new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(page.getPageNo(), page.getPageSize()); if (null == param) { param = new InoutParam(); } inoutRecordService.listPageInout(corePage, param); // 重新封装 page.setEntities(corePage.getRecords()); page.setEntityCount(Integer.parseInt(String.valueOf(corePage.getTotal()))); } /** * 保存出入库数据 inoutDataPR#saveInoutData */ @DataResolver public String saveInoutData(InoutRecord data) { if (Constant.RECORD_STATUS_DEL.equals(data.getRecordStatus())) { return "系统:已经删除的数据不支持修改!"; } if (!Constant.PROGRESS_RECORD.equals(data.getProgress())) { return "系统:未结束流程的数据不支持修改!"; } int i = inoutRecordService.updateInoutRecord(data); if (i > 0) { return null; } else { return "保存失败!"; } } /** * inoutDataPR#errorInoutData 出入库数据执行 异常终止 * * @param data * @return * @throws Exception */ @DataResolver @Transactional @Log(title = "出入库数据执行异常终止", businessType = BusinessType.UPDATE,bizType = BizTypeEnum.INOUT) public String errorInoutData(InoutRecord data) { return inoutRecordService.errorInoutData(data); } /** * inoutDataPR#printWeightBill 获取打印单信息 * * @param data * @return * @throws Exception */ @Expose public String printWeightBill(InoutRecord data) { if (Constant.RECORD_STATUS_DEL.equals(data.getRecordStatus())) { return "删除的数据不支持打印!"; } if (!Constant.PROGRESS_RECORD.equals(data.getProgress())) { return "未完成的数据不支持打印!"; } if (Constant.TYPE_IN.equals(data.getType())) { return inoutRecordService.inWeightBill(data); } else { return inoutRecordService.outWeightBill(data); } } /** * inoutDataPR#initDataByHand 新增 * * @return */ @DataProvider public InoutData initDataByHand(String type) { SysUser user = ContextUtil.getLoginUser(); InoutData data = new InoutData(); data.setCompanyId(user.getCompanyId()); data.setRegisterTime(new Date()); data.setType(type); data.setRegisterUser(user.getUserName()); data.setDeptId(ContextUtil.subDeptId(user)); data.setCheckUser(user.getUserName()); data.setProgress(Constant.PROGRESS_RECORD); data.setRecordStatus(Constant.RECORD_STATUS_ADD); return data; } /** * 补单 inoutDataPR#addData */ @DataResolver public String addData(InoutData data) { if (data.getSettleWeight() <= 0.0) { return "系统:结算重量必须大于0"; } return inoutRecordService.handAddInoutRecord(data); } /** * inoutDataPR#printWeightBill 获取打印单信息 * * @param data * @return * @throws Exception */ @Expose public String printWeightBillHand(InoutData data) { if (Constant.RECORD_STATUS_DEL.equals(data.getRecordStatus())) { return "删除的数据不支持打印!"; } if (!Constant.PROGRESS_RECORD.equals(data.getProgress())) { return "未完成的数据不支持打印!"; } if (Constant.TYPE_IN.equals(data.getType())) { return inoutRecordService.inWeightBill(data); } else { return inoutRecordService.outWeightBill(data); } } /** * inoutDataPR#analysisExcel * * @param fileName * @return */ @Expose public BaseResp analysisExcel(String fileName) { try { List inoutRecords = exportService.readExcel(fileName); if (null == inoutRecords || inoutRecords.isEmpty()) { return BaseResp.error("导入失败,原因-->未获取到excel中文档数据!"); } //判断数据完整性 boolean addTag = false; int hour = 10; int min = 10; for (InoutRecord inoutRecord : inoutRecords) { //设置数据状态及流程 inoutRecord.setRecordStatus(Constant.RECORD_STATUS_ADD); inoutRecord.setProgress(Constant.PROGRESS_RECORD); //校验通知单 String noticeId = inoutRecord.getNoticeId(); if(StringUtils.isBlank(noticeId)){ addTag = true; break; } if(noticeId.startsWith("RK_")){ InoutNoticeIn noticeInOne = noticeService.getNoticeInOne(noticeId); if(null == noticeInOne){ addTag = true; break; } inoutRecord.setDeptId(noticeInOne.getDeptId()); } if(noticeId.startsWith("CK_")){ InoutNoticeOut noticeOut = noticeService.getNoticeOutOne(noticeId); if(null == noticeOut){ addTag = true; break; } inoutRecord.setDeptId(noticeOut.getDeptId()); } //校验仓库 String depotName = inoutRecord.getDepotId(); if(StringUtils.isBlank(depotName)){ addTag = true; break; } //根据仓库名称获取仓库编码 String depotId = depotService.getDepotId(inoutRecord.getDeptId(), depotName); if(StringUtils.isBlank(depotId)){ addTag = true; break; } inoutRecord.setDepotId(depotId); //校验日期是否完整 String plateNum = inoutRecord.getPlateNum(); if(null == plateNum){ addTag = true; break; } inoutRecord.setPlateNum(plateNum); //校验日期是否完整 Date registerTime = inoutRecord.getRegisterTime(); if(null == registerTime){ addTag = true; break; } //设置登记、称重、完成时间 String time = DateFormatUtils.format(registerTime, "yyyy-MM-dd"); if(min >= 60){ min = 10; hour ++; } time += " " + hour + ":" + min + ":00"; inoutRecord.setRegisterTime(DateUtils.parseDate(time,"yyyy-MM-dd HH:mm:ss")); if(Constant.TYPE_IN.equals(inoutRecord.getType())){ inoutRecord.setFullWeightTime(DateUtils.addMinutes(inoutRecord.getRegisterTime(), 3)); inoutRecord.setHandleEnd(DateUtils.addMinutes(inoutRecord.getRegisterTime(), 30)); inoutRecord.setEmptyWeightTime(DateUtils.addMinutes(inoutRecord.getRegisterTime(), 50)); } if(Constant.TYPE_OUT.equals(inoutRecord.getType())){ inoutRecord.setEmptyWeightTime(DateUtils.addMinutes(inoutRecord.getRegisterTime(), 3)); inoutRecord.setHandleEnd(DateUtils.addMinutes(inoutRecord.getRegisterTime(), 30)); inoutRecord.setFullWeightTime(DateUtils.addMinutes(inoutRecord.getRegisterTime(), 50)); } inoutRecord.setCompleteTime(DateUtils.addHours(inoutRecord.getRegisterTime(), 1)); inoutRecord.setCompanyId(ContextUtil.getCompanyId()); min ++; } if(addTag){ return BaseResp.error("导入失败,原因-->数据校验失败,请核查数据<日期、类型、车牌、通知单、仓库、品种等信息>!!!"); } //新增数据 String msg = inoutRecordService.addInoutRecordList(inoutRecords); if(null == msg){ return BaseResp.success("导入成功,共计导入" + inoutRecords.size() + "条数据!" ); }else { return BaseResp.error(msg); } } catch (Exception e) { return BaseResp.error("导入失败,原因-->" + e.getMessage()); } } }