package com.ld.igds.inout.manager; import com.bstek.bdf2.core.business.IUser; import com.ld.igds.check.CheckStandardManager; import com.ld.igds.check.dto.CheckItemData; import com.ld.igds.check.dto.CheckUpdateResult; import com.ld.igds.common.CoreCommonService; import com.ld.igds.constant.RespCodeEnum; import com.ld.igds.data.Page; import com.ld.igds.data.PageResponse; import com.ld.igds.file.CoreFileService; import com.ld.igds.file.dto.FileData; import com.ld.igds.inout.InoutConstant; import com.ld.igds.inout.dto.*; import com.ld.igds.inout.service.InoutService; import com.ld.igds.m.service.InoutCommonService; import com.ld.igds.models.Depot; import com.ld.igds.models.InoutConf; import com.ld.igds.models.InoutSysConf; import com.ld.igds.util.ContextUtil; import com.ld.igds.util.DateUtil; import com.ld.igds.util.NumberUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.Arrays; import java.util.Date; import java.util.List; /** * 出入库相关业务1 * * @author */ @Slf4j @Component public class InoutManager { @Autowired private InoutService inoutService; @Autowired private CoreFileService fileService; @Autowired private CoreCommonService commonService; @Resource private InoutCommonService inoutCommonService; @Autowired private CheckStandardManager checkStandardManager; @Resource private InoutDeviceManager inoutDeviceManager; /** * 首先从缓存中获取,缓存中,从数据库中获取 * * @param param * @return */ public PageResponse inoutQuery(InoutParam param) { if (StringUtils.isEmpty(param.getPlateNum()) && StringUtils.isEmpty(param.getIntelCard()) && StringUtils.isEmpty(param.getUserId())) { return new PageResponse<>(RespCodeEnum.CODE_1007.getCode(), "查询参数不完整,查询失败!"); } InoutData result; String progress = param.getProgress(); try { param.setProgress(null); result = inoutService.inoutProgressQuery(param); if (null == result) { return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(), "系统为查询到执行中的车辆信息", null); } // 如果没有流程条件说明不需要做判断,直接返回 if (StringUtils.isEmpty(progress)) { return new PageResponse<>(RespCodeEnum.CODE_0000, result); } //流程类型验证 if (!result.getType().equals(param.getType())) { String msg = "流程错误:当前车辆流程为【入库】"; if (InoutConstant.TYPE_OUT.equals(result.getType())) msg = "流程错误:当前车辆流程为【出库】"; return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(), msg, result); } //流程环节验证 if (progress.equals(InoutConstant.PROGRESS_WEIGHT_TAG)) { if (result.getProgress().equals( InoutConstant.PROGRESS_WEIGHT_EMPTY) || result.getProgress().equals( InoutConstant.PROGRESS_WEIGHT_FULL)) { // 表示当前流程正常 } else { return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(), "提示:非当前环节,请到" + InoutConstant.getProcessName( param.getType(), result.getProgress()), result); } } else { if (!result.getProgress().equals(progress)) { return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(), "提示:非当前环节,请到" + InoutConstant.getProcessName( param.getType(), result.getProgress()), result); } } return new PageResponse<>(RespCodeEnum.CODE_0000, result); } catch (Exception e) { return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(), e.getMessage()); } } public PageResponse outNextStep(InoutData data) throws Exception { String msg; IUser user = ContextUtil.getLoginUser(); if (StringUtils.isEmpty(data.getCompanyId())) { data.setCompanyId(user.getCompanyId()); } if (StringUtils.isEmpty(data.getDeptId())) { data.setDeptId(ContextUtil.subDeptId(user)); } if (StringUtils.isEmpty(data.getIntelCard())) { data.setIntelCard(data.getUserId()); } String curProgress = data.getProgress(); List files = data.getFiles(); // 更新下一个状态和基本信息 InoutSysConf inoutSysConf = inoutCommonService.getCacheInoutSysConf( data.getCompanyId(), data.getDeptId()); if (null == inoutSysConf || StringUtils.isEmpty(inoutSysConf.getProgressIn())) { return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), "当前库区未配置出库流程信息,请联系管理员配置。", data); } data = updateBasicInfo(data, inoutSysConf); // 如果当前节点是注册,则需要验证下,是否有为完成的流程在执行中 if (InoutConstant.PROGRESS_REGISTER.equals(curProgress)) { InoutData progressData = this.inoutProgressQuery(data); if (null != progressData) { return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), "当前卡片/车牌号有流程未结束。", progressData); } } if (null != data.getPrice() && null != data.getRecordWeight()) { data.setSettleMoney(NumberUtil.keepPrecision(data.getPrice() * data.getRecordWeight(), 2)); } // 流程完成,直接调用流程完成接口 if (InoutConstant.PROGRESS_RECORD.equals(data.getProgress())) { inoutService.updateData(data); // 执行附件信息 if (null != files) { fileService.saveInoutFiles(files, data.getCompanyId(), data.getId(), curProgress); } // 通知称重主控流程结束 inoutDeviceManager.noticeProgressComplete(data); return inoutComplete(data); } // 调用保存方法执行 if (StringUtils.isEmpty(data.getId())) { msg = inoutService.insertData(data); } else { msg = inoutService.updateData(data); } // 执行附件信息 if (null != files) { fileService.saveInoutFiles(files, data.getCompanyId(), data.getId(), curProgress); } if (null != msg) { return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), msg, data); } return new PageResponse<>(RespCodeEnum.CODE_0000.getCode(), "执行成功", data); } public PageResponse inNextStep(InoutData data) throws Exception { String msg; String curProgress = data.getProgress(); List files = data.getFiles(); if (StringUtils.isEmpty(data.getIntelCard())) { data.setIntelCard(data.getUserId()); } // 更新下一个状态和基本信息 InoutSysConf inoutSysConf = inoutCommonService.getCacheInoutSysConf(data.getCompanyId(), data.getDeptId()); if (null == inoutSysConf || StringUtils.isEmpty(inoutSysConf.getProgressIn())) { return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), "当前库区未配置入库流程信息,请联系管理员配置。", data); } data = updateBasicInfo(data, inoutSysConf); // 如果当前节点是注册,则需要验证下,是否有为完成的流程在执行中 if (InoutConstant.PROGRESS_REGISTER.equals(curProgress)) { InoutData progressData = this.inoutProgressQuery(data); if (null != progressData) { return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), "当前卡片/车牌号有流程未结束。", progressData); } } if (null != data.getPrice() && null != data.getRecordWeight()) { data.setSettleMoney(NumberUtil.keepPrecision(data.getPrice() * data.getRecordWeight(), 2)); } // 流程完成,直接调用流程完成接口 if (InoutConstant.PROGRESS_RECORD.equals(data.getProgress())) { if (StringUtils.isEmpty(data.getCompanyId())) { data.setCompanyId(ContextUtil.getCompanyId()); } inoutService.updateData(data); // 执行附件信息 if (null != files) { fileService.saveInoutFiles(files, data.getCompanyId(), data.getId(), curProgress); } // 通知称重主控流程结束 inoutDeviceManager.noticeProgressComplete(data); return inoutComplete(data); } // 调用保存方法执行 if (StringUtils.isEmpty(data.getId())) { msg = inoutService.insertData(data); } else { msg = inoutService.updateData(data); } // 执行附件信息 if (null != files) { fileService.saveInoutFiles(files, data.getCompanyId(), data.getId(), curProgress); } if (null != msg) { return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), msg); } return new PageResponse<>(RespCodeEnum.CODE_0000.getCode(), "执行成功", data); } public InoutData inoutProgressQuery(InoutData data) throws Exception { InoutParam param = new InoutParam(); param.setCompanyId(data.getCompanyId()); param.setPlateNum(data.getPlateNum()); param.setIntelCard(data.getIntelCard()); param.setType(data.getType()); return inoutService.inoutProgressQuery(param); } @Transactional(rollbackFor = Exception.class) public PageResponse updateCheck(InoutData data) throws Exception { if (InoutConstant.PROGRESS_RECORD.equals(data.getProgress())) { return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), "当前流程已经结束,不支持修改", data); } CheckUpdateResult checkResult = this.updateCheckItems(data); String tag = checkResult.getMsg(); if (null != tag) { return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), "后台执行异常:" + tag, data); } // 获取业务数据信息 InoutParam param = new InoutParam(); param.setCompanyId(data.getCompanyId()); param.setId(data.getId()); InoutData progressData = inoutService.inoutProgressQuery(param); if (null == progressData) { return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), "没有获取到出入库业务数据信息,更新失败", data); } if (InoutConstant.PROGRESS_RECORD.equals(progressData.getProgress())) { return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), "当前流程已经结束,不支持修改"); } progressData.setCheckStatus(data.getCheckStatus()); // 更新下一个状态和基本信息 if (InoutConstant.PROGRESS_CHECK.equals(progressData.getProgress())) { progressData = updateBasicInfo(progressData, null); // 若化验结果不合格,判断配置后续流程 if (InoutConstant.STATUS_UNPASS.equals(progressData .getCheckStatus())) { progressData = checkNoPass(progressData); } } progressData.setCheckUser(ContextUtil.getLoginUserCName()); if (StringUtils.isNotEmpty(data.getDepotId())) { progressData.setDepotId(data.getDepotId()); } if (StringUtils.isNotEmpty(data.getFoodVariety())) { progressData.setFoodVariety(data.getFoodVariety()); } if (StringUtils.isNotEmpty(data.getFoodLevel())) { progressData.setFoodLevel(data.getFoodLevel()); } if (StringUtils.isNotEmpty(data.getFoodLocation())) { progressData.setFoodLocation(data.getFoodLocation()); } if (StringUtils.isNotEmpty(data.getFoodYear())) { progressData.setFoodYear(data.getFoodYear()); } if (null != data.getPrice()) { progressData.setPrice(data.getPrice()); } if (StringUtils.isNotEmpty(data.getRemarks())) { progressData.setRemarks(data.getRemarks()); } if (StringUtils.isNotEmpty(data.getNoticeId())) { progressData.setNoticeId(data.getNoticeId()); } String msg = inoutService.updateData(progressData); if (null != msg) { return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), msg); } if (InoutConstant.PROGRESS_RECORD.equals(progressData.getProgress())) { inoutComplete(progressData); } return new PageResponse<>(RespCodeEnum.CODE_0000.getCode(), "执行成功"); } /** * 化验结果不通过时校验配置信息 * * @param data * @return */ private InoutData checkNoPass(InoutData data) { InoutSysConf inoutSysConf = inoutCommonService.getCacheInoutSysConf( data.getCompanyId(), data.getDeptId()); if (inoutSysConf.getNoPassNext().equals(InoutConstant.CHECK_NOPASS_RECORD)) { // 流程结束 data.setProgress(InoutConstant.PROGRESS_RECORD); data.setCompleteTime(new Date()); } if (inoutSysConf.getNoPassNext().equals(InoutConstant.CHECK_NOPASS_BACK)) { // 离库收卡 data.setProgress(InoutConstant.PROGRESS_CARD_BACK); } return data; } /** * 更新质检信息 * * @param data * @return */ private CheckUpdateResult updateCheckItems(InoutData data) { CheckUpdateResult result = new CheckUpdateResult(); if (null == data.getCheckItems()) return result; try { // 更新检验项数据 result = checkStandardManager.updateCheckItems(data.getCheckId(), data.getCompanyId(), data.getCheckItems()); // 将化验数据存入缓存中 inoutService.setCheckCache(data); return result; } catch (Exception e) { log.error("后台异常:{}", e); result.setMsg("执行异常:" + e.getMessage()); } return result; } /** * 从缓存中获取下一流程 * * @return */ private String getNextProgress(String curProgress, String type, InoutSysConf sysConf) { String nextProgress = null; List list = null; if (InoutConstant.TYPE_IN.equals(type)) { list = Arrays.asList(sysConf.getProgressIn().split("-")); } if (InoutConstant.TYPE_OUT.equals(type)) { list = Arrays.asList(sysConf.getProgressOut().split("-")); } if (list != null) { for (int i = 0; i < list.size() - 1; i++) { if (curProgress.equals(list.get(i))) { nextProgress = list.get(i + 1); break; } } } return nextProgress; } /** * 根据数据当前状态和下一个状态,更新基础信息 * * @param data * @return */ private InoutData updateBasicInfo(InoutData data, String curProgress, String nextProgress) { if (InoutConstant.PROGRESS_REGISTER.equals(curProgress)) { data.setRegisterTime(new Date()); data.setRegisterUser(ContextUtil.getLoginUserCName()); data.setProgress(nextProgress); } if (InoutConstant.PROGRESS_WEIGHT_EMPTY.equals(curProgress)) { data.setEmptyWeightTime(new Date()); data.setEmptyWeightUser(ContextUtil.getLoginUserCName()); data.setProgress(nextProgress); } if (InoutConstant.PROGRESS_WEIGHT_FULL.equals(curProgress)) { data.setFullWeightTime(new Date()); data.setFullWeightUser(ContextUtil.getLoginUserCName()); data.setProgress(nextProgress); } if (InoutConstant.PROGRESS_HANDLE.equals(curProgress)) { if (null == data.getHandleUser()) { data.setHandleUser(ContextUtil.getLoginUserCName()); } data.setProgress(nextProgress); } //如果下一个数据状态=流程结束,直接补充完整信息 if (InoutConstant.PROGRESS_RECORD.equals(nextProgress)) { data.setCompleteTime(DateUtils.addMinutes(new Date(), 2)); data.setCompleteUser(ContextUtil.getLoginUserCName()); data.setProgress(nextProgress); } return data; } /** * 当前方法需要删除 *

* 根据需要保存的数据,调整下一个流程状态 不同的仓库组织流程可能不一样,需要根据实际调整 * * @param data * @return */ private InoutData updateBasicInfo(InoutData data, InoutSysConf sysConf) { if (InoutConstant.PROGRESS_REGISTER.equals(data.getProgress())) { data.setRegisterTime(new Date()); data.setRegisterUser(ContextUtil.getLoginUserCName()); data.setProgress(getNextProgress(data.getProgress(), data.getType(), sysConf)); return data; } if (InoutConstant.PROGRESS_WEIGHT_EMPTY.equals(data.getProgress())) { data.setEmptyWeightTime(new Date()); data.setEmptyWeightUser(ContextUtil.getLoginUserCName()); data.setProgress(getNextProgress(data.getProgress(), data.getType(), sysConf)); return data; } if (InoutConstant.PROGRESS_HANDLE.equals(data.getProgress())) { // 查询缓存中仓库信息,根据仓库id设置值仓人为仓库保管员 Depot depot = commonService.getCacheDepot(data.getCompanyId(), data.getDepotId()); data.setHandleUser(depot == null ? "" : depot.getStoreKeeperName()); data.setProgress(getNextProgress(data.getProgress(), data.getType(), sysConf)); return data; } if (InoutConstant.PROGRESS_WEIGHT_FULL.equals(data.getProgress())) { data.setFullWeightTime(new Date()); data.setFullWeightUser(ContextUtil.getLoginUserCName()); data.setProgress(getNextProgress(data.getProgress(), data.getType(), sysConf)); if (InoutConstant.PROGRESS_RECORD.equals(data.getProgress())) { data.setCompleteTime(DateUtils.addMinutes(new Date(), 2)); data.setCompleteUser(ContextUtil.getLoginUserCName()); } return data; } if (InoutConstant.PROGRESS_CARD_BACK.equals(data.getProgress())) { data.setCompleteTime(new Date()); data.setCompleteUser(ContextUtil.getLoginUserCName()); data.setProgress(getNextProgress(data.getProgress(), data.getType(), sysConf)); return data; } return data; } public PageResponse inoutComplete(InoutData data) throws Exception { if (StringUtils.isEmpty(data.getId()) || StringUtils.isEmpty(data.getType())) { return new PageResponse<>(RespCodeEnum.CODE_1007.getCode(), "没有获取到车辆信息。", data); } InoutParam param = new InoutParam(); param.setCompanyId(data.getCompanyId()); param.setId(data.getId()); param.setType(data.getType()); param.setDeptId(data.getDeptId()); param.setIntelCard(data.getIntelCard()); param.setUserId(ContextUtil.getLoginUserCName()); param.setDepotId(data.getDepotId()); param.setCompleteTime(data.getCompleteTime()); if (null == param.getCompleteTime()) { param.setCompleteTime(new Date()); } // 设置流程节点直接完成 param.setProgress(InoutConstant.PROGRESS_RECORD); if (null == data.getCompleteTime()) { data.setCompleteTime(DateUtil.getNewByMinute(new Date(), 2)); } String msg = inoutService.toComplete(param); if (null != msg) { return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), msg); } // 库存调整 commonService.initInoutDepotStore(data); return new PageResponse<>(RespCodeEnum.CODE_0000.getCode(), null, data); } // /** // * 扦样化验页面获取检验项条目信息 // * // * @param data // * @return // */ // public PageResponse> getCheckItem(InoutData data) { // // List result = checkStandardManager.listCheckItem( // data.getCheckId(), data.getCompanyId(), data.getDeptId(), // data.getFoodVariety()); // // return new PageResponse<>(RespCodeEnum.CODE_0000, result); // } /** * 删除并完成 * * @param data * @return */ public PageResponse deleteInoutData(InoutData data, String msg) { try { data.setRemarks(msg); String result = this.delInoutData(data, false); if (null != result) { return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), result, data); } } catch (Exception e) { log.error("后台异常:{}", e); return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), "后台异常:" + e.getMessage(), data); } return new PageResponse<>(RespCodeEnum.CODE_0000.getCode(), "执行完成", data); } /** * 卡回收逻辑处理 * * @param data * @return */ public PageResponse inoutBack(InoutData data) { try { // 从缓存中获取最新的数据,如果没有则表示流程已经结束。 InoutParam param = new InoutParam(); param.setCompanyId(data.getCompanyId()); param.setId(data.getId()); InoutData curData = inoutService.inoutProgressQuery(param); if (InoutConstant.PROGRESS_RECORD.equals(curData.getProgress())) { return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(), "当前卡流程已经完成,无需执行卡回收", data); } if (InoutConstant.RECORD_STATUS_DEL.equals(curData .getRecordStatus())) { return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(), "当前卡信息已被删除,不能执行卡回收", data); } // 如果当前流程状态是卡回收状态,就是完成流程。 if (InoutConstant.PROGRESS_CARD_BACK.equals(curData.getProgress())) { return inoutComplete(curData); } // 如果是其他状态,则执行删除逻辑 return deleteInoutData(curData, "卡回收删除"); } catch (Exception e) { return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), "后端执行异常:" + e.getMessage()); } } /* ============================== 详单页面相关操作 ================================= */ /** * 补单操作 补单因为完成时间不确定,所以需要系统根据当前数据进行自动检测,调整原来流水信息和库存 * * @param data * @return * @throws Exception */ @Transactional public String addInoutData(InoutData data) throws Exception { if (data.getSettleWeight() <= 0.0) { return "补单数据要求结算重量必须大于0"; } // 补单数据直接到结果状态 data.setRecordStatus(InoutConstant.RECORD_STATUS_ADD); data.setProgress(InoutConstant.PROGRESS_RECORD); if (InoutConstant.STATUS_NONE.equals(data.getCheckStatus())) { data.setCheckStatus(InoutConstant.STATUS_PASS); } String loginUser = ContextUtil.getLoginUserCName(); data.setRegisterUser(loginUser); data.setFullWeightUser(loginUser); data.setEmptyWeightUser(loginUser); data.setHandleUser(loginUser); data.setCompleteUser(loginUser); if (null == data.getCompleteTime()) { data.setCompleteTime(new Date()); } // 注册时间比完成时间早一个小时 data.setRegisterTime(DateUtil.getNewByMinute(new Date(), -60)); if (StringUtils.isEmpty(data.getUserId())) { data.setUserId(InoutConstant.DEFAULT_ID_CARD); } if (null == data.getIntelCard()) { data.setIntelCard(data.getUserId()); } if (null != data.getCheckItems()) { data.setCheckUser(loginUser); } // 保存检测项目 if (InoutConstant.TYPE_IN.equals(data.getType())) { if (null == data.getFullWeightTime()) { data.setFullWeightTime(DateUtil.getNewByMinute(new Date(), -50)); } if (null == data.getEmptyWeightTime()) { data.setEmptyWeightTime(DateUtil.getNewByMinute(new Date(), -10)); } // 先执行化验信息保存 CheckUpdateResult checkResult = checkStandardManager.updateCheckItems(data.getCheckId(), data.getCompanyId(), data.getCheckItems()); if (null != checkResult) { // if (null == data.getWet())data.setWet(checkResult.getWet()); // if (null == data.getImpurity())data.setImpurity(checkResult.getImpurity()); } } else { if (null == data.getEmptyWeightTime()) { data.setEmptyWeightTime(DateUtil.getNewByMinute(new Date(), -50)); } if (null == data.getFullWeightTime()) { data.setFullWeightTime(DateUtil.getNewByMinute(new Date(), -10)); } } // 添加补单数据 String msg = inoutService.insertData(data); // 初始化验证出入库库存 commonService.initInoutDepotStore(data); return msg; } /** * 修改操作 修改逻辑说明:修改数据需要获取原数据库中的数据进行对比。 * * @param data * @return * @throws Exception */ @javax.transaction.Transactional(rollbackOn = Exception.class) public String updateInoutData(InoutData data) throws Exception { if (InoutConstant.RECORD_STATUS_DEL.equals(data.getRecordStatus())) { return "系统:已经删除的数据不支持修改!"; } if (InoutConstant.RECORD_STATUS_ERROR.equals(data.getRecordStatus())) { return "系统:异常终止的数据不支持修改!"; } // 如果流程未结束,只更新数据 if (!InoutConstant.PROGRESS_RECORD.equals(data.getProgress())) { return inoutService.updateData(data); } // 如果是已经完成的数据,先获取到修改直接的数据根据数据进行对比 InoutParam param = new InoutParam(); param.setId(data.getId()); param.setCompanyId(data.getCompanyId()); param.setType(data.getType()); InoutData record = inoutService.inoutQueryById(param); if (null == record) { return "当前修改数据已经不存在!"; } // 避免数据库中的数据已经被其他人修改 if (InoutConstant.RECORD_STATUS_DEL.equals(record.getRecordStatus())) { return "系统:已经删除的数据不支持修改!"; } if (InoutConstant.RECORD_STATUS_ERROR.equals(record.getRecordStatus())) { return "系统:异常终止的数据不支持修改!"; } // 保存检测项目 if (InoutConstant.TYPE_IN.equals(data.getType())) { // 先执行化验信息保存 CheckUpdateResult checkResult = checkStandardManager .updateCheckItems(data.getCheckId(), data.getCompanyId(), data.getCheckItems()); if (null != checkResult) { // if (null == data.getWet()) // data.setWet(checkResult.getWet()); // if (null == data.getImpurity()) // data.setImpurity(checkResult.getImpurity()); } } // 更新数据 inoutService.updateData(data); return null; } /** * 删除操作 删除数据为软删除,删除数据后需要根据删除情况联动库存等信息 * * @param data * @param selected 是否已经查询过数据 * @return * @throws Exception */ @Transactional public String delInoutData(InoutData data, boolean selected) throws Exception { // 避免页面缓存首先获取数据库中最新的当前数据信息 InoutParam param = new InoutParam(); param.setCompanyId(data.getCompanyId()); param.setId(data.getId()); param.setMsg(" [" + ContextUtil.getLoginUserCName() + "]执行删除,原因:" + data.getRemarks()); if (!selected) { data = inoutService.inoutQueryById(param); if (InoutConstant.RECORD_STATUS_DEL.equals(data.getRecordStatus())) { return "已经删除的数据,不支持重复删除!"; } if (InoutConstant.RECORD_STATUS_ERROR .equals(data.getRecordStatus())) { return "当前数据已经被标记为异常,不支持删除!"; } } // 执行删除 param.setProgress(InoutConstant.PROGRESS_RECORD); param.setRecordStatus(InoutConstant.RECORD_STATUS_DEL); param.setType(data.getType()); inoutService.deleteData(param); // 如果流程未结束,直接删除,不牵扯到联动调整 if (!InoutConstant.PROGRESS_RECORD.equals(data.getProgress())) { return null; } return null; } /** * 异常终止操作 设置异常 为了避免页面数据缓存,需要重新获取最新数据判断 * * @param data * @return * @throws Exception */ @Transactional public String errorInoutData(InoutData data) { InoutParam param = new InoutParam(); param.setCompanyId(data.getCompanyId()); param.setId(data.getId()); param.setMsg(" [" + ContextUtil.getLoginUserCName() + "]执行异常终止,原因:" + data.getRemarks()); data = inoutService.inoutQueryById(param); if (InoutConstant.RECORD_STATUS_DEL.equals(data.getRecordStatus())) { return "已经删除的数据,不支持异常处理!"; } if (InoutConstant.RECORD_STATUS_ERROR.equals(data.getRecordStatus())) { return "不支持重复异常处理!"; } if (InoutConstant.PROGRESS_RECORD.equals(data.getProgress())) { return "流程结束的数据不支持异常处理!"; } return inoutService.inoutStop(param); } /** * 快速结束操作 流程没有结束的单据进行结束 * * @param data * @return */ public String completeInoutData(InoutData data) throws Exception { if (InoutConstant.RECORD_STATUS_DEL.equals(data.getRecordStatus())) { return "已经删除的数据,不支持完成!"; } if (InoutConstant.RECORD_STATUS_ERROR.equals(data.getRecordStatus())) { return "异常终止的数据,不支持完成!"; } if (InoutConstant.PROGRESS_RECORD.equals(data.getProgress())) { return "流程已完成的数据,不支持完成!"; } // 从新查询数据 InoutParam param = new InoutParam(); param.setId(data.getId()); param.setCompanyId(data.getCompanyId()); param.setType(data.getType()); InoutData cuData = inoutService.inoutProgressQuery(param); if (null == cuData) { return "当前车辆流程状态已经变化,请刷新页面重新操作!"; } if (!cuData.getProgress().equals(data.getProgress())) { return "当前车辆流程状态已经变化,请刷新页面重新操作!"; } if (null == data.getCompleteTime()) { return "请填写完成时间!!"; } if (StringUtils.isEmpty(data.getDepotId())) { return "请填写仓库信息!"; } if (StringUtils.isEmpty(data.getFoodYear())) { return "请填写粮食年份信息!"; } if (StringUtils.isEmpty(data.getFoodVariety())) { return "请填写粮食品种信息!"; } if (data.getSettleWeight() <= 0) { return "请填写结算净重信息!"; } String msg = inoutService.quickComplete(data); if (null == msg) { data.setProgress(InoutConstant.PROGRESS_RECORD); commonService.initInoutDepotStore(data); } return msg; } public void initLpr(InoutConf conf) { inoutDeviceManager.initLpr(conf); } /** * 出入库注册数据提交,入库登记和出入库登记使用同一个方法 * * @param data * @return * @throws Exception */ public PageResponse submitRegisterInout(InoutData data) throws Exception { //首先判断流程中是否有已经存在的车辆信息未执行完成,直接从数据库中查询 InoutParam param = new InoutParam(); param.setCompanyId(data.getCompanyId()); param.setPlateNum(data.getPlateNum()); param.setIntelCard(data.getIntelCard()); param.setType(data.getType()); param.setStart(DateUtil.getNewByDay(null, -10)); int num = inoutService.checkExist(param); if (num > 0) { return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), "当前车牌或智慧卡有正在执行流程未结束,请联系管理员", data); } //获取系统参数配置 InoutSysConf inoutSysConf = inoutCommonService.getCacheInoutSysConf(data.getCompanyId(), data.getDeptId()); if (null == inoutSysConf) { return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), "提示:当前库区未配置出入库流程信息,请联系管理员", data); } //获取下一个流程状态 String curProgress = data.getProgress(); String nextProgress = getNextProgress(curProgress, data.getType(), inoutSysConf); data = updateBasicInfo(data, curProgress, nextProgress); String msg = inoutService.insertData(data); if (null != msg) { return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), msg, data); } // 执行附件信息 fileService.saveInoutFiles(data.getFiles(), data.getCompanyId(), data.getId(), curProgress); return new PageResponse<>(RespCodeEnum.CODE_0000.getCode(), "执行成功", data); } public PageResponse submitWeightIn(InoutData data) throws Exception { //获取系统参数配置 InoutSysConf inoutSysConf = inoutCommonService.getCacheInoutSysConf(data.getCompanyId(), data.getDeptId()); if (null == inoutSysConf) { return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), "提示:当前系统中流程配置异常,请联系管理员", data); } //获取下一个流程状态 String curProgress = data.getProgress(); String nextProgress = getNextProgress(curProgress, data.getType(), inoutSysConf); data = updateBasicInfo(data, curProgress, nextProgress); //入库称重可能调整质检单 CheckUpdateResult checkUpdateResult = updateCheckItems(data); if (data.getDeCheck() == 0) { data.setDeCheck(checkUpdateResult.getDeSum()); } if (data.getAddCheck() == 0) { data.setAddCheck(checkUpdateResult.getAddSum()); } //执行数据更新 String msg = inoutService.updateData(data); if (null != msg) { return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), msg, data); } // 执行附件信息 fileService.saveInoutFiles(data.getFiles(), data.getCompanyId(), data.getId(), curProgress); //称重完成,调用出入库控制逻辑处理 inoutDeviceManager.controlWeight(data, curProgress, nextProgress); return new PageResponse<>(RespCodeEnum.CODE_0000.getCode(), "执行成功", data); } public PageResponse submitWeightOut(InoutData data) throws Exception { //获取系统参数配置 InoutSysConf inoutSysConf = inoutCommonService.getCacheInoutSysConf(data.getCompanyId(), data.getDeptId()); if (null == inoutSysConf) { return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), "提示:当前系统中流程配置异常,请联系管理员", data); } //获取下一个流程状态 String curProgress = data.getProgress(); String nextProgress = getNextProgress(curProgress, data.getType(), inoutSysConf); data = updateBasicInfo(data, curProgress, nextProgress); //执行数据更新 String msg = inoutService.updateData(data); if (null != msg) { return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), msg, data); } // 执行附件信息 fileService.saveInoutFiles(data.getFiles(), data.getCompanyId(), data.getId(), curProgress); //称重后根据当前流程状态和下一个状态,通知称重控制器 inoutDeviceManager.controlWeight(data, curProgress, nextProgress); return new PageResponse<>(RespCodeEnum.CODE_0000.getCode(), "执行成功", data); } public PageResponse submitHandle(InoutData data) throws Exception { //获取系统参数配置 InoutSysConf inoutSysConf = inoutCommonService.getCacheInoutSysConf(data.getCompanyId(), data.getDeptId()); if (null == inoutSysConf) { return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), "提示:当前系统中流程配置异常,请联系管理员", data); } //获取下一个流程状态 String curProgress = data.getProgress(); String nextProgress = getNextProgress(curProgress, data.getType(), inoutSysConf); data = updateBasicInfo(data, curProgress, nextProgress); //执行数据更新 String msg = inoutService.updateDataByHandle(data); if (null != msg) { return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), msg, data); } // 执行附件信息 fileService.saveInoutFiles(data.getFiles(), data.getCompanyId(), data.getId(), curProgress); return new PageResponse<>(RespCodeEnum.CODE_0000.getCode(), "执行成功", data); } /** * 根据条件获取扦样数据 * * @param param * @return */ public PageResponse> pageSampleData(InoutCheckParam param) { if (StringUtils.isEmpty(param.getCompanyId())) { param.setCompanyId(ContextUtil.getCompanyId()); } if (StringUtils.isEmpty(param.getDeptId())) { param.setDeptId(ContextUtil.subDeptId(null)); } //若查询条件为已扦样,则流程置空;若未扦样,则流程不处理,仍为扦样化验流程(CHECK) if (!"NONE".equals(param.getSampleStatus())) { param.setProgress(null); } //获取扦样数据 Page sampleList = inoutService.pageSampleData(param); if (null == sampleList.getRecords() || sampleList.getRecords().isEmpty()) { return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(), "获取到数据信息为空"); } return new PageResponse<>(RespCodeEnum.CODE_0000, sampleList); } @Transactional(rollbackFor = Exception.class) public PageResponse updateSampleData(InoutCheckData data) { try { // 获取业务数据信息 InoutParam param = new InoutParam(); param.setCompanyId(data.getCompanyId()); param.setId(data.getId()); InoutData curData = inoutService.inoutProgressQuery(param); if (null == curData) { return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), "没有获取到入库业务数据信息,更新失败", data); } if (InoutConstant.PROGRESS_RECORD.equals(curData.getProgress())) { return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), "当前流程已经结束,不支持修改"); } //扦样时间和扦样人 if (StringUtils.isEmpty(data.getSampleUser())) { data.setSampleUser(ContextUtil.getLoginUserCName()); } if (null == data.getSampleTime()) { data.setSampleTime(new Date()); } String msg = inoutService.updateSampleData(data); if (null != msg) { return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), msg); } return new PageResponse<>(RespCodeEnum.CODE_0000.getCode(), "执行成功"); } catch (Exception e) { log.error("后台异常:{}", e); return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), "后台异常:" + e.getMessage(), null); } } /** * @param param * @return */ public PageResponse> pageCheckData(InoutCheckParam param) { if (StringUtils.isEmpty(param.getCompanyId())) { param.setCompanyId(ContextUtil.getCompanyId()); } if (StringUtils.isEmpty(param.getDeptId())) { param.setDeptId(ContextUtil.subDeptId(null)); } // 如果是已化验,则将流程状态置空,如果是未化验,则流程状态不处理,仍是CHECK状态 if (!"NONE".equals(param.getCheckStatus())) { param.setProgress(null); } Page checkList = inoutService.pageCheckData(param); if (null == checkList.getRecords() || checkList.getRecords().isEmpty()) { return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(), "获取到数据信息为空"); } return new PageResponse<>(RespCodeEnum.CODE_0000, checkList); } /** * 获取化验项信息 * * @param param * @return */ public PageResponse> getCheckItemData(InoutCheckParam param) { try { List result = checkStandardManager.listCheckItem(param.getCheckId(), param.getCompanyId(), param.getFoodVariety()); return new PageResponse<>(RespCodeEnum.CODE_0000, result); } catch (Exception e) { return new PageResponse<>( RespCodeEnum.CODE_1111.getCode(), "后台异常:" + e.getMessage(), null); } } @Transactional(rollbackFor = Exception.class) public PageResponse updateCheckData(InoutCheckData data) { try { // 获取业务数据信息 InoutParam param = new InoutParam(); param.setCompanyId(data.getCompanyId()); param.setId(data.getId()); InoutData curData = inoutService.inoutProgressQuery(param); if (null == curData) { return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), "没有获取到入库业务数据信息,更新失败", data); } if (InoutConstant.PROGRESS_RECORD.equals(curData.getProgress())) { return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), "当前流程已经结束,不支持修改"); } curData.setCheckStatus(data.getCheckStatus()); //更新下一流程状态 if (InoutConstant.PROGRESS_CHECK.equals(curData.getProgress())) { curData = updateBasicInfo(curData, null); // 若化验结果不合格,判断配置后续流程 if (InoutConstant.STATUS_UNPASS.equals(curData.getCheckStatus())) { curData = checkNoPass(curData); } } data.setCheckStatus(curData.getCheckStatus()); //化验人、化验时间 if (StringUtils.isEmpty(data.getCheckUser())) { data.setCheckUser(ContextUtil.getLoginUserCName()); } if (null == data.getCheckTime()) { data.setCheckTime(new Date()); } String msg = inoutService.updateCheckData(data); if (null != msg) { return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), msg); } //TODO 更新化验项信息 return new PageResponse<>(RespCodeEnum.CODE_0000.getCode(), "执行成功"); } catch (Exception e) { return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), "后台异常:" + e.getMessage(), null); } } }