From 537a57d5e81d4c6da8a0eca1690f61644a1dc462 Mon Sep 17 00:00:00 2001 From: YYC <1833023622@qq.com> Date: 星期四, 12 十月 2023 22:32:43 +0800 Subject: [PATCH] 出入库快速结束,异常终止 --- igds-inout/src/main/java/com/ld/igds/inout/service/impl/InoutServiceImpl.java | 420 +++++++++++++++++++++++++++++------------------------------ 1 files changed, 208 insertions(+), 212 deletions(-) diff --git a/igds-inout/src/main/java/com/ld/igds/inout/service/impl/InoutServiceImpl.java b/igds-inout/src/main/java/com/ld/igds/inout/service/impl/InoutServiceImpl.java index 88ab4fd..2ece18d 100644 --- a/igds-inout/src/main/java/com/ld/igds/inout/service/impl/InoutServiceImpl.java +++ b/igds-inout/src/main/java/com/ld/igds/inout/service/impl/InoutServiceImpl.java @@ -1,25 +1,23 @@ package com.ld.igds.inout.service.impl; import com.bstek.dorado.data.entity.EntityUtils; -import com.ld.igds.check.dto.CheckItemData; -import com.ld.igds.common.CoreCommonService; -import com.ld.igds.constant.BizType; import com.ld.igds.constant.Constant; import com.ld.igds.constant.RedisConst; import com.ld.igds.data.CommonData; import com.ld.igds.data.Page; import com.ld.igds.inout.InoutConstant; +import com.ld.igds.inout.dto.InoutCheckData; +import com.ld.igds.inout.dto.InoutCheckParam; import com.ld.igds.inout.dto.InoutData; import com.ld.igds.inout.dto.InoutParam; +import com.ld.igds.inout.mapper.InoutCheckMapper; import com.ld.igds.inout.mapper.InoutRecordMapper; import com.ld.igds.inout.service.InoutService; -import com.ld.igds.io.constant.OrderRespEnum; -import com.ld.igds.models.Depot; +import com.ld.igds.models.InoutLossOver; +import com.ld.igds.models.InoutPrice; import com.ld.igds.util.ContextUtil; import com.ld.igds.util.DateUtil; import com.ld.igds.util.RedisUtil; -import com.ld.igds.websocket.WebSocketPacket; -import com.ld.igds.websocket.WebSocketServer; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateFormatUtils; @@ -28,9 +26,6 @@ import javax.annotation.Resource; import java.util.*; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.FutureTask; @Slf4j @Component @@ -39,15 +34,16 @@ @Resource private InoutRecordMapper inoutMapper; @Resource - private RedisUtil redisUtil; + private InoutCheckMapper inoutCheckMapper; @Resource - private CoreCommonService commonService; + private RedisUtil redisUtil; @Override public InoutData inoutProgressQuery(InoutParam param) throws Exception { if (StringUtils.isEmpty(param.getCompanyId())) { param.setCompanyId(ContextUtil.getCompanyId()); } + // 棣栧厛浠庣紦瀛樹腑鑾峰彇锛屽鏋滄病鏈夊垯浠庢暟鎹簱鑾峰彇 InoutData result = this.getFromInoutCache(param); if (null != result) { @@ -92,24 +88,26 @@ return "娌℃湁鑾峰彇鍒拌鍒犻櫎鏁版嵁鐨処D锛屾棤娉曞垹闄わ紒"; } - // 缂撳瓨涓垹闄� - this.delInoutFromCache(param.getDeptId(), param.getType(), param.getId(), false); - inoutMapper.deleteData(param); + + delFromCache(param.getDeptId(), param.getType(), param.getId()); return null; } @Override - public String inoutStop(InoutParam param) { + public String inoutStop(InoutParam param) throws Exception { if (StringUtils.isEmpty(param.getCompanyId())) { - param.setCompanyId(ContextUtil.getCompanyId()); + param.setCompanyId(ContextUtil.getDefaultCompanyId()); } - // 缂撳瓨涓垹闄� - this.delInoutFromCache(param.getDeptId(), param.getType(), param.getId(), false); + param.setProgress(InoutConstant.PROGRESS_RECORD); - param.setRecordStatus(InoutConstant.RECORD_STATUS_ERROR); + param.setRecordStatus(InoutConstant.RECORD_STATUS_DEL); + + + // 缂撳瓨涓垹闄� + delFromCache(param.getDeptId(), param.getType(), param.getId()); inoutMapper.inoutStop(param); @@ -147,9 +145,18 @@ data.setUserName(""); } - inoutMapper.insertData(data); + InoutData newData; + if (EntityUtils.isEntity(data)) { + newData = new InoutData(); + BeanUtils.copyProperties(data, newData, new String[]{"checkItems", "files"}); + } else { + newData = data; + } - this.addInoutCache(data); + inoutMapper.insertData(newData); + + + updateInoutCache(newData); } catch (Exception e) { log.error("------------鍑哄叆搴撴墽琛屼繚瀛樺嚭閿�---{}", e); @@ -162,6 +169,8 @@ @Override public String updateData(InoutData data) throws Exception { + + data.setUpdateTime(new Date()); if (StringUtils.isEmpty(data.getCompanyId())) { data.setCompanyId(ContextUtil.getCompanyId()); } @@ -175,17 +184,33 @@ inoutMapper.updateData(newData); - //濡傛灉鏄畬鎴愮姸鎬佷笉鍦ㄨ繘琛屽悗鏈熷鐞嗭紝鍗曠嫭璧癱omplete鏂规硶 - if (InoutConstant.PROGRESS_RECORD.equals(newData.getProgress())) { - return null; + //鏇存柊缂撳瓨 + updateInoutCache(newData); + + return null; + } + + @Override + public String updateDataByHandle(InoutData data) { + data.setUpdateTime(new Date()); + + if (StringUtils.isEmpty(data.getCompanyId())) { + data.setCompanyId(ContextUtil.getCompanyId()); + } + InoutData newData; + if (EntityUtils.isEntity(data)) { + newData = new InoutData(); + BeanUtils.copyProperties(data, newData, new String[]{"checkItems", "files"}); + } else { + newData = data; } - // 鏇存柊绶╁瓨 - if (InoutConstant.PROGRESS_RECORD.equals(newData.getProgress())) { - this.delInoutFromCache(newData.getDeptId(), newData.getType(), newData.getId(), true); - } else { - this.updateInoutCache(newData); - } + inoutMapper.updateDataByHandle(newData); + InoutParam param = new InoutParam(); + param.setId(newData.getId()); + + //鏇存柊缂撳瓨 + updateInoutCache(inoutMapper.inoutQueryById(param)); return null; } @@ -217,6 +242,10 @@ param.setUserId("%" + param.getUserId() + "%"); } + if (null != param.getRecordStatus() && InoutConstant.RECORD_STATUS_NORMAL.equals(param.getRecordStatus())) { + param.setRecordStatus(null); + } + List<InoutData> records = inoutMapper.pageRecordData(page, param); //鍒ゆ柇鍏ュ簱閲嶉噺鏄惁涓虹┖锛屼负绌哄垯璧嬪�肩粨绠楅噸閲� if (records != null) { @@ -241,16 +270,6 @@ return records; } -// @Override -// public InoutData getLastRecord(InoutParam param) { -// return inoutMapper.getLastRecord(param); -// } - -// @Override -// public int updateCuStorage(InoutParam param) { -// return inoutMapper.updateCuStorage(param); -// } - @Override public String validate(String intelCard, String plateNum) { InoutParam param = new InoutParam(); @@ -269,27 +288,25 @@ @Override public String toComplete(InoutParam param) throws Exception { - if (null == param.getCompanyId()) { - param.setCompanyId(ContextUtil.getCompanyId()); - } + param.setUpdateTime(new Date()); - if (null == param.getFoodType()) { - // 鏍规嵁浠撳簱淇℃伅鑾峰彇缂撳瓨 - Depot depot = commonService.getCacheDepot(param.getCompanyId(), param.getDepotId()); - param.setFoodType(depot.getFoodType()); + if (null == param.getCompanyId()) { + param.setCompanyId(ContextUtil.getDefaultCompanyId()); } // 娓呴櫎缂撳瓨 - this.delInoutFromCache(param.getDeptId(), param.getType(), param.getId(), true); +// this.delFromCache(param.getDeptId(), param.getType(), param.getId()); + inoutMapper.toComplete(param); + return null; } @Override public String quickComplete(InoutData data) throws Exception { if (null == data.getCompanyId()) { - data.setCompanyId(ContextUtil.getCompanyId()); + data.setCompanyId(ContextUtil.getDefaultCompanyId()); } if (null == data.getCompleteTime()) { data.setCompleteTime(new Date()); @@ -300,7 +317,9 @@ if (null == data.getEmptyWeightTime()) { data.setEmptyWeightTime(new Date()); } - + if (null == data.getFullWeightTime()) { + data.setFullWeightTime(new Date()); + } //璋冩暣鏃堕棿宸� if (InoutConstant.TYPE_IN.equals(data.getType())) { @@ -329,50 +348,34 @@ // 璁剧疆娴佺▼缁撴潫 data.setProgress(InoutConstant.PROGRESS_RECORD); - - if (null == data.getFoodType()) { - // 鏍规嵁浠撳簱淇℃伅鑾峰彇缂撳瓨 - Depot depot = commonService.getCacheDepot(data.getCompanyId(), data.getDepotId()); - data.setFoodType(depot.getFoodType()); - } - - // 娓呴櫎缂撳瓨 - this.delInoutFromCache(data.getDeptId(), data.getType(), data.getId(), false); - + //鎵ц鏇存柊 inoutMapper.updateData(data); + + //鏇存柊缂撳瓨 + updateInoutCache(data); return null; } @Override - public void addInoutCache(InoutData data) { - data.setFiles(null); - data.setCheckItems(null); - - this.setInoutCache(data.getDeptId(), data); - - // 鎺ㄩ�佸埌澶у睆 - List<InoutData> list = this.getListInoutCache(data.getDeptId()); - - this.notifyToScreen(data.getDeptId(), list, null); - } - - @Override public void updateInoutCache(InoutData data) { + data.setFiles(null); data.setCheckItems(null); - this.setInoutCache(data.getDeptId(), data); + if (InoutConstant.PROGRESS_RECORD.equals(data.getProgress())) { - // 鎺ㄩ�佸埌澶у睆 - List<InoutData> list = this.getListInoutCache(data.getDeptId()); - List<InoutData> completeList = this.getCompleteListInoutCache(data.getDeptId()); + delFromCache(data.getDeptId(), data.getType(), data.getId()); - this.notifyToScreen(data.getCompanyId(), list, completeList); + setCompleteInoutCache(data.getDeptId(), data); + + } else { + setInoutCache(data.getDeptId(), data); + } } - @Override - public void delInoutFromCache(String deptId, String type, String id, boolean addToComplete) { + + public void delFromCache(String deptId, String type, String id) { if (StringUtils.isEmpty(deptId)) { return; } @@ -382,44 +385,14 @@ if (StringUtils.isEmpty(id)) { return; } - //鍒犻櫎鏈畬鎴愭祦绋嬬殑缂撳瓨 + //浠庢湭瀹屾垚鍒楄〃涓垹闄� String key = this.buildInoutKey(deptId, InoutConstant.KEY_INOUT_LIST, type, id); - InoutData inoutData = (InoutData) redisUtil.get(key); redisUtil.del(key); - List<InoutData> list = this.getListInoutCache(deptId); - - //鍒犻櫎宸插畬鎴愭祦绋嬬殑缂撳瓨 - key = this.buildInoutKey(deptId, InoutConstant.KEY_INOUT_COMPLETE_LIST, type, id); - redisUtil.del(key); - List<InoutData> completeList = this.getCompleteListInoutCache(deptId); - - if (addToComplete) { - addInoutCompleteCache(inoutData); - completeList = this.getCompleteListInoutCache(deptId); - } - - // 閫氱煡鍒板ぇ灞� - notifyToScreen(deptId, list, completeList); - } - - /** - * 娣诲姞鍒板凡缁忓畬鎴愮殑闃熷垪涓� - * - * @param data - */ - public void addInoutCompleteCache(InoutData data) { - - if (null == data.getCompleteTime()) { - data.setCompleteTime(new Date()); - } - if (!InoutConstant.PROGRESS_RECORD.equals(data.getProgress())) { - data.setProgress(InoutConstant.PROGRESS_RECORD); - } - this.setCompleteInoutCache(data.getDeptId(), data); } @Override public List<InoutData> getListInoutCache(String deptId) { + String pattern = RedisConst.buildKey(deptId, InoutConstant.KEY_INOUT_LIST); Set<String> keys = redisUtil.keys(pattern); if (null == keys || keys.isEmpty()) { @@ -452,6 +425,7 @@ if (StringUtils.isEmpty(param.getDeptId())) { param.setDeptId(ContextUtil.subDeptId(null)); } + List<InoutData> list = getListInoutCache(param.getDeptId()); if (null == list || list.isEmpty()) return null; @@ -475,35 +449,6 @@ } } return null; - } - - @Override - public void initInoutScreen(String deptId) { - if (null == deptId) { - deptId = ContextUtil.subDeptId(null); - } - - List<InoutData> curList = this.getListInoutCache(deptId); - List<InoutData> complateList = this.getCompleteListInoutCache(deptId); - - notifyToScreen(deptId, curList, complateList); - - } - - @Override - public void notifyWeb(InoutData result) { - // 濡傛灉褰撳墠涓烘弧杞︾О閲嶆墽琛屾帹閫� - if (result.getType().equals(InoutConstant.TYPE_IN) && result.getProgress().equals(InoutConstant.PROGRESS_WEIGHT_FULL)) { - WebSocketPacket packet = new WebSocketPacket(); - packet.setBizType(BizType.SCREEN_CHECK.getCode()); - packet.setCompanyId(result.getCompanyId()); - packet.setOrderResp(OrderRespEnum.MSG_SUCCESS.getCode()); - packet.setData(result); - packet.setBizTag(InoutConstant.PROGRESS_WEIGHT_FULL); - log.debug("----鍚戝寲楠屽ぇ灞忔帹閫佹弧杞︾О閲嶄俊鎭� ----{}", result.getPlateNum()); - WebSocketServer.sendByBizTag(packet); - } - } @Override @@ -539,10 +484,7 @@ } @Override - public InoutData getLastRecord(String companyId, String depotId) { - InoutParam param = new InoutParam(); - param.setCompanyId(companyId); - param.setDepotId(depotId); + public InoutData getLastRecord(InoutParam param) { return inoutMapper.getLastRecord(param); } @@ -550,7 +492,7 @@ public String addInoutDataByLossOver(InoutData data) { // 鑾峰彇涓婁竴杞︾殑娴佹按鏁版嵁 - InoutData inoutData = this.getLastRecord(data.getCompanyId(), data.getDepotId()); + // InoutData inoutData = this.getLastRecord(data.getCompanyId(), data.getDepotId()); // // 璁剧疆娴佹按鐨勫簱瀛� // if (InoutConstant.TYPE_IN.equals(inoutData.getType())) { @@ -570,22 +512,6 @@ @Override public void delInoutDataByLossOver(InoutParam param) { inoutMapper.deleteData(param); - } - - @Override - public void setCheckCache(InoutData data) { - - String cacheKey = RedisConst.buildKey(data.getCompanyId(), data.getCheckId()); - - //鍖栭獙缁撴灉瀛樺叆缂撳瓨3澶� - redisUtil.set(cacheKey, data.getCheckItems(), 60 * 60 * 24 * 3); - } - - @SuppressWarnings("unchecked") - @Override - public List<CheckItemData> getCheckCache(String companyId, String checkId) { - String cacheKey = RedisConst.buildKey(companyId, checkId); - return (List<CheckItemData>) redisUtil.get(cacheKey); } /** @@ -674,9 +600,7 @@ * @param data */ private void setInoutCache(String deptId, InoutData data) { - String key = this.buildInoutKey(deptId, - InoutConstant.KEY_INOUT_LIST, data.getType(), data.getId()); - + String key = this.buildInoutKey(deptId, InoutConstant.KEY_INOUT_LIST, data.getType(), data.getId()); redisUtil.set(key, data, InoutConstant.KEY_INOUT_LIST_TIME); } @@ -688,54 +612,8 @@ */ private void setCompleteInoutCache(String deptId, InoutData data) { String key = this.buildInoutKey(deptId, InoutConstant.KEY_INOUT_COMPLETE_LIST, data.getType(), data.getId()); - //璁剧疆缂撳瓨鍒扮浜屽ぉ鍑屾櫒(璁$畻褰撳墠鏃堕棿鍒扮浜屽ぉ鍑屾櫒鐨勬椂闂村樊绉掓暟) redisUtil.set(key, data, DateUtil.getNowToNextDaySeconds()); - } - - /** - * 鎺ㄩ�佸埌澶у睆锛屽垽鏂彧鏈夊綋澶у睆鍦ㄧ嚎鏃跺�欐墠澶勭悊褰撳墠閫昏緫锛岄伩鍏嶉〉闈㈠崱椤匡紝璋冪敤瀛愪换鍔″畬鎴愭帹閫� - * - * @param deptId - * @param curList 鏈畬鎴愭祦绋嬩釜鏁� - * @param completeList 宸茬粡瀹屾垚娴佺▼涓暟 - */ - private void notifyToScreen(String deptId, List<InoutData> curList, - List<InoutData> completeList) { - - if (null == WebSocketServer.contextOnLineMap.get(BizType.SCREEN - .getCode())) { - WebSocketServer.contextOnLineMap.put(BizType.SCREEN.getCode(), - false); - } - if (null == WebSocketServer.contextOnLineMap.get(BizType.SCREEN_INOUT - .getCode())) { - WebSocketServer.contextOnLineMap.put( - BizType.SCREEN_INOUT.getCode(), false); - } - if (null == WebSocketServer.contextOnLineMap.get(BizType.SCREEN_CHECK - .getCode())) { - WebSocketServer.contextOnLineMap.put( - BizType.SCREEN_CHECK.getCode(), false); - } - - if (WebSocketServer.contextOnLineMap.get(BizType.SCREEN.getCode()) - || WebSocketServer.contextOnLineMap.get(BizType.SCREEN_INOUT - .getCode()) - || WebSocketServer.contextOnLineMap.get(BizType.SCREEN_CHECK - .getCode())) { - - if (null == completeList) { - completeList = this.getCompleteListInoutCache(deptId); - } - - // 鍒涘缓涓�涓瓙浠诲姟杩涜鎺ㄩ�佷俊鎭� - FutureTask<String> futureTask = new FutureTask<>( - new NotifyScreenTask(curList, completeList, deptId)); - ExecutorService executorService = Executors.newCachedThreadPool(); - executorService.submit(futureTask); - executorService.shutdown(); - } } /** @@ -750,4 +628,122 @@ public String buildInoutKey(String deptId, String key, String type, String bizId) { return Constant.APP_NAME + ":" + deptId + ":" + key + ":" + type + ":" + bizId; } + + @Override + public Page<InoutCheckData> pageSampleData(InoutCheckParam param) { + + //璁剧疆璧峰鍜屾埅姝㈡椂闂� + if (null != param.getStart()) { + param.setStart(DateUtil.getCurZero(param.getStart())); + } + if (null != param.getEnd()) { + param.setEnd(DateUtil.getNextZero(param.getEnd())); + } + + // 璁剧疆杞︾墝鍜屾楠屽崟鎹殑妯$硦鏌ヨ + if (StringUtils.isNotEmpty(param.getPlateNum())) { + param.setPlateNum("%" + param.getPlateNum() + "%"); + } + if (StringUtils.isNotEmpty(param.getCheckId())) { + param.setCheckId("%" + param.getCheckId() + "%"); + } + + Page<InoutCheckData> page = new Page<>(param.getPage(), param.getLimit()); + page.setSearchCount(true); + + List<InoutCheckData> records = inoutCheckMapper.pageSampleData(page, param); + page.setRecords(records); + + return page; + } + + @Override + public String updateSampleData(InoutCheckData data) { + if (StringUtils.isEmpty(data.getCompanyId())) { + data.setCompanyId(ContextUtil.getCompanyId()); + } + if (StringUtils.isEmpty(data.getDeptId())) { + data.setDeptId(ContextUtil.subDeptId(null)); + } + + inoutCheckMapper.updateSampleData(data); + + return null; + } + + @Override + public Page<InoutCheckData> pageCheckData(InoutCheckParam param) { + + //璁剧疆璧峰鍜屾埅姝㈡椂闂� + if (null != param.getStart()) { + param.setStart(DateUtil.getCurZero(param.getStart())); + } + if (null != param.getEnd()) { + param.setEnd(DateUtil.getNextZero(param.getEnd())); + } + + // 璁剧疆妫�楠屽崟鎹殑妯$硦鏌ヨ + if (StringUtils.isNotEmpty(param.getCheckId())) { + param.setCheckId("%" + param.getCheckId() + "%"); + } + + Page<InoutCheckData> page = new Page<>(param.getPage(), param.getLimit()); + page.setSearchCount(true); + + List<InoutCheckData> records = inoutCheckMapper.pageCheckData(page, param); + page.setRecords(records); + + return page; + } + + @Override + public String updateCheckData(InoutData data) { + data.setUpdateTime(new Date()); + + inoutCheckMapper.updateCheckData(data); + + //鏇存柊缂撳瓨 + updateInoutCache(data); + + return null; + } + + @Override + public List<InoutPrice> getPrice(InoutCheckParam param) { + if (null == param.getStart()) { + param.setStart(new Date()); + } + if (null == param.getEnd()) { + param.setEnd(new Date()); + } + return inoutCheckMapper.getPrice(param); + } + + @Override + public InoutCheckData inoutDataByCheckId(InoutCheckParam param) throws Exception { + List<InoutCheckData> list = inoutCheckMapper.inoutDataByCheckId(param); + if (null == list || list.size() == 0) + return null; + if (list.size() == 1) { + return list.get(0); + } else { + throw new Exception("褰撳墠鏉′欢涓嬪瓨鍦ㄥ涓弧瓒虫潯浠剁殑鏁版嵁锛岃鏍告煡锛侊紒"); + } + } + + @Override + public List<InoutLossOver> listLossOver(InoutParam param) { + if (StringUtils.isEmpty(param.getCompanyId())) { + param.setCompanyId(ContextUtil.getCompanyId()); + } + List<InoutLossOver> list = inoutMapper.listLossOver(param); + + return list; + } + + @Override + public double sumLossOverWeight(InoutParam param) { + CommonData result = inoutMapper.sumLossOverWeight(param); + return result.getNumValue1(); + } } -- Gitblit v1.9.3