package com.tld.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.tld.excel.ExcelUtils; import com.tld.mapper.*; import com.tld.model.*; import com.tld.model.Error; import com.tld.service.AskGoodsService; import com.tld.util.DateUtil; import com.tld.util.HttpClientUtil; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.text.SimpleDateFormat; import java.util.*; @Service public class AskGoodsServiceImpl implements AskGoodsService { @Autowired private AskGoodsMapper askGoodsMapper; //redis锁 @Autowired private RedissonClient redissonClient; //入库 @Autowired private WarehousingMapper warehousingMapper; @Autowired private ErrorMapper errorMapper; @Autowired private DeliveryMapper deliveryMapper; @Autowired private DictionaryMapper dictionaryMapper; @Autowired private QueryListMapper queryListMapper; /** * @Description: 要货申请单(生产领用申请) * @Param: mapList * @return: Map 成功失败状态 * @Author: XiaoChen * @Date: 2023/4/10 */ @Override @Transactional(rollbackFor = Exception.class) public Map addAskGoods(List> mapList) { Map map = new HashMap<>(); try{ List askGoodsList = new LinkedList(); for(Map jsonMap:mapList) { List> list = (List) jsonMap.get("datalist"); for (Map element : list) { AskGoods ag = new AskGoods(); //父表 ag.setAskGoodsId(jsonMap.get("requestOrderId").toString()); ag.setAskGoodsCode(jsonMap.get("requestOrderNo").toString()); ag.setCompanyNumber(jsonMap.get("companyNo").toString()); ag.setSqrq(jsonMap.get("requestDate").toString());//申请日期 ag.setDepartmentId(jsonMap.get("useDepartment").toString()); ag.setSourceType(jsonMap.get("sourceType").toString()); ag.setMoveType(jsonMap.get("moveType").toString()); ag.setRequestTypeNumber(jsonMap.get("requestTypeNumber").toString()); ag.setRequestTypeName(jsonMap.get("requestTypeName").toString()); ag.setIfCommodity(jsonMap.get("ifCommodity").toString()); //子表 ag.setType("0"); ag.setEntryNumber(element.get("entryNumber").toString()); ag.setProductionCode(element.get("prodOrderNo").toString()); ag.setMaterialId(element.get("materialId").toString()); ag.setWbs(element.get("WBS").toString()); ag.setMeasurementId(element.get("measUnitId").toString()); ag.setNum(element.get("orderCount").toString()); askGoodsList.add(ag); } } for(AskGoods askGoods : askGoodsList) { // int count = askGoodsMapper.getAskGoods(askGoods); // if (count != 0) { // askGoodsMapper.updateAskGoodsNum(askGoods); // } else { if (askGoodsMapper.getAskGoodsf(askGoods) == 0) { askGoodsMapper.addAskGoodsf(askGoods); } askGoodsMapper.addAskGoods(askGoods); // } askGoodsMapper.addAskGoodsLog(askGoods); } //新增日志 Access access = new Access().setType("生产领料信息").setData(JSON.toJSONString(mapList)).setAccessType("0"); dictionaryMapper.addAccess(access); map.put("status", "0000"); map.put("msg","成功"); }catch (Exception e){ e.printStackTrace(); map.put("status", "0009"); map.put("msg", "服务器请求异常,请稍后再试"); } return map; } @Override public Map getAskGoodsfList(AskGoods askGoods) { Map map = new HashMap<>(); try{ List list = askGoodsMapper.getAskGoodsfList(askGoods); map.put("data", list); map.put("msg", "200"); }catch (Exception e){ e.printStackTrace(); map.put("msg", "500"); map.put("errMsg", "失败"); } return map; } @Override public Map getAskGoodsMaterial(AskGoods askGoods) { Map map = new HashMap<>(); try{ List list = askGoodsMapper.getAskGoodsMaterial(askGoods); List scanNum = new LinkedList<>(); List mapVal = new LinkedList<>(); for(AskGoods askGoods1 : list){ askGoods1.setUniqueCode(askGoods.getUniqueCode()); askGoods1.setWllbCode(askGoods1.getMaterialCode()); scanNum.add(askGoodsMapper.getScanNum(askGoods1));//扫描总数 Inventory inventory = new Inventory() .setMaterialId(askGoods1.getMaterialId()) .setWbs(askGoods1.getWbs()) .setCompanyCode(askGoods1.getCompanyNumber()) .setGroupBy(askGoods.getGroupBy()); List> inventorVal = queryListMapper.storageLocation(inventory); if(inventorVal.size() != 0) { mapVal.add(inventorVal.get(0).get("sum").toString()); } else { mapVal.add("0"); } } map.put("scanNum", scanNum); map.put("sum", mapVal); map.put("data", list); map.put("msg", "200"); }catch (Exception e){ e.printStackTrace(); map.put("msg", "500"); map.put("errMsg", "失败"); } return map; } @Override public Map getMaterialCk(AskGoods askGoods) { Map map = new HashMap<>(); try{ List list = new LinkedList<>(); for(Inventory inventory : askGoodsMapper.getMaterialCk(askGoods)){ AskGoods askGoods1 = askGoodsMapper.getAsk(inventory); if(askGoods1 != null){ if(Double.doubleToLongBits(Double.parseDouble(askGoods1.getNum())) != Double.doubleToLongBits(Double.parseDouble(inventory.getAmount())) ){ list.add(inventory); } } else { list.add(inventory); } } map.put("data", list); map.put("msg", "200"); }catch (Exception e){ e.printStackTrace(); map.put("msg", "500"); map.put("errMsg", "失败"); } return map; } @Override @Transactional(rollbackFor = Exception.class) public Map addAskGoodsVitrual(AskGoods askGoods) { Map map = new HashMap<>(); //redis并发锁 RLock lock = redissonClient.getLock(askGoods.getUniqueCode()); lock.lock(); try{ Map mapVal = askGoodsMapper.getScanIsNot(askGoods); if(Double.doubleToLongBits(Double.parseDouble(mapVal.get("inventoryNum").toString()) - Double.parseDouble(mapVal.get("virtualNum").toString())) == 0){ map.put("msg", "500"); map.put("errMsg", "已全部出库"); return map; } Inventory inventory = askGoodsMapper.getInventory(askGoods); //库存数量 AskGoods askGoods1 = askGoodsMapper.getAsknInfo(askGoods); //要货单数量 int alreadyNum = askGoodsMapper.getAskInfoNumVitrual(askGoods);//已扫描总数 int inventoryAlready = askGoodsMapper.getInventoryAlready(askGoods);//库存已扫描数量 Double inventorySurplus = (Double.parseDouble(inventory.getAmount()) - Double.parseDouble(inventory.getAmountLock())) - inventoryAlready; //库存剩余数量 Double surplusNum = Double.parseDouble(askGoods1.getNum()) - Double.parseDouble(askGoods1.getOutNum()) - alreadyNum; //剩余要扫描数量 if(Double.doubleToLongBits(surplusNum) >= Double.doubleToLongBits(inventorySurplus)){ askGoods.setNum(String.valueOf(inventorySurplus)); } else { askGoods.setNum(String.valueOf(surplusNum)); } askGoods.setStorageLocationCode(inventory.getStorageLocationCode());//库存编号 askGoodsMapper.addAskGoodsVitrual(askGoods); map.put("msg", "200"); }catch (Exception e){ e.printStackTrace(); map.put("msg", "500"); map.put("errMsg", "失败"); } finally { //判断要解锁的key是否已被锁定;判断要解锁的key是否被当前线程持有 if (lock.isLocked() && lock.isHeldByCurrentThread()) { //释放锁 lock.unlock(); } } return map; } @Override @Transactional(rollbackFor = Exception.class) public Map OutOfLibrary(String uniqueCode, String type, String askGoodsId) { Map map = new HashMap<>(); //redis并发锁 RLock lock = redissonClient.getLock(uniqueCode); lock.lock(); try{ //出库流水 String removalCode = codeGenerateCk(); List list = askGoodsMapper.getVirtualUniqueCode(uniqueCode, type, askGoodsId); for(AskGoods askGoods : list){ askGoods.setStorageCode(removalCode); askGoods.setCompanyNumber(askGoods.getAccountSleeve()); Inventory inventory = askGoodsMapper.getInventory(askGoods); if(inventory == null){ // throw new Exception("库存不存在"); System.out.println("库存不存在"); continue; } //如果出库库存等于虚拟表库存则删除此库存 if(Double.parseDouble(askGoods.getNum()) == Double.parseDouble(inventory.getAmount())){ askGoodsMapper.deleteInventory(inventory); } else { inventory.setAmount(askGoods.getNum()); askGoodsMapper.updateInventory(inventory); } String materialId = askGoodsMapper.getMaterialId(askGoods.getWllbCode());//查询物料id AskGoods askGoods1 = askGoodsMapper.getAskDetailed(askGoodsId, materialId, askGoods.getEntryNumber());//查询要料申请单内容 ReturRemoval returRemoval = new ReturRemoval() .setMaterialId(materialId) .setDocumentId(askGoodsId) .setWbs(askGoods1.getWbs()) .setNum(askGoods.getNum()) .setEntryNumber(askGoods1.getEntryNumber()) .setDocumentPointsId(askGoods1.getId()) .setStorageLocationCode(askGoods.getStorageLocationCode()); askGoodsMapper.addRemoval(askGoods);//插入出库流水 askGoodsMapper.deleteVirtual(askGoods.getId());//删除已出虚拟表库存 askGoodsMapper.addReturnGsRemoval(returRemoval);//新增返回gs数据子表信息 askGoodsMapper.updateOutNum(askGoods.getNum(), askGoodsId, materialId, askGoods.getEntryNumber());//修改出库数量 } //查询要货单父级信息 AskGoods askGoods3 = askGoodsMapper.getAskDetailedF(askGoodsId); ReturRemoval returRemoval1 = new ReturRemoval() .setDocumentId(askGoods3.getAskGoodsId()) .setRemovalCode(removalCode) .setSourceType(askGoods3.getSourceType()) .setMoveType(askGoods3.getMoveType()); askGoodsMapper.addReturnGsRemovalF(returRemoval1);//新增返回gs数据父表信息 map.put("data", askGoods3.getAskGoodsId()); map.put("msg", "200"); }catch (Exception e){ e.printStackTrace(); map.put("msg", "500"); map.put("errMsg", "失败"); } finally { //判断要解锁的key是否已被锁定;判断要解锁的key是否被当前线程持有 if (lock.isLocked() && lock.isHeldByCurrentThread()) { //释放锁 lock.unlock(); } } return map; } /** * 出库回传 * @param removalCode 单据id */ @Override @Transactional(rollbackFor = Exception.class) public void plugOutRemoval(String removalCode, String realName) { try{ for(String warehouseWhere : askGoodsMapper.getWarehouseWhere(removalCode)){ List> mapList = askGoodsMapper.plugOutRemoval(removalCode); if(mapList.size() >0 ) { JSONObject strJson = new JSONObject();//4 //父表 strJson.put("GIReqBillID", mapList.get(0).get("askGoodsId").toString());//要货单id strJson.put("WMSID", mapList.get(0).get("id").toString());//出库单id strJson.put("WMSCode", mapList.get(0).get("removalCode").toString());//出库单编号 strJson.put("WareHouse", warehouseWhere);//仓库ID strJson.put("SourceBillDate",DateUtil.dateConversion(mapList.get(0).get("scrq").toString()));//业务日期 strJson.put("SourceType", mapList.get(0).get("sourceType").toString());//来源类型 strJson.put("MoveType", mapList.get(0).get("moveType").toString());//移动类型 strJson.put("IsRed", 0);//是否红单1 strJson.put("Creator", realName);//制单人姓名1 //子表 for (Map map : askGoodsMapper.getRemovalz(mapList.get(0).get("askGoodsId").toString(), warehouseWhere)) { List list = new LinkedList<>();//5 JSONObject BillItems = new JSONObject();//6 List retunList = new LinkedList<>();//3 JSONObject ReqOutStocks = new JSONObject();//2 JSONObject returnData = new JSONObject();//1 BillItems.put("WMSItemID", map.get("id"));//分录ID BillItems.put("GIReqBillID", map.get("askGoodsId"));//要货申请单ID BillItems.put("GIReqBillItemID", map.get("entryNumber"));//要货申请明细ID BillItems.put("Material", map.get("materialId"));//物料id BillItems.put("Quantity", map.get("num"));//数量 BillItems.put("FlexField1", map.get("wbsId"));//wbs BillItems.put("FlexField1Code", map.get("wbsCode"));//WBS编号 BillItems.put("FlexField1Name", map.get("wbsName"));//WBS名称 list.add(BillItems);//*1 子表信息放在集合中 strJson.put("BillItems", list);//*2 将子表集合放在父表中 retunList.add(strJson);//*3 将父子表信息放在集合中 ReqOutStocks.put("ReqOutStocks",retunList);//*4 将放集合的数据封装到ReqOutStocks returnData.put("strJson", JSON.toJSONString(ReqOutStocks));//*5 将封装好的ReqOutStocks放进strJson System.out.println("封装好的:"+returnData); //回传地址 String url = "https://erp4.teld.cn:8443/cwbase/sg/V1/ERP/TELD/TELD_WMS/TELD_API_WMS_StockManage/CreateProductiveOutStock"; // String url = "http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateProductiveOutStock"; HttpClientUtil httpClientUtil1 = new HttpClientUtil(); Map result = httpClientUtil1.doPost(url, returnData); //如果失败存入错误信息 Error error = new Error(); if(Integer.parseInt(result.get("msg").toString()) != 200){ //如果失败存入报错信息跟数据 error.setErrorInfo(result.get("data").toString()); error.setUrl(url); error.setDataVal(returnData.toJSONString()).setType("出库回传"); //修改流水传输状态 for(Map maps : askGoodsMapper.plugOutRemoval(removalCode)){ askGoodsMapper.updateRemoval(maps.get("removalCode").toString(), null); } errorMapper.addError(error); }else { JSONObject jsonObject = (JSONObject) JSONObject.parse(result.get("data").toString()); JSONObject jsonObject1 = (JSONObject) JSONObject.parse(jsonObject.get("result").toString()); if ( jsonObject1.get("State").toString().equals("0") ){ //如果失败存入报错信息跟数据 error.setErrorInfo(jsonObject1.get("Msg").toString()); error.setUrl(url); error.setDataVal(returnData.toJSONString()).setType("出库回传"); errorMapper.addError(error); //修改流水传输状态 for(Map maps : askGoodsMapper.plugOutRemoval(removalCode)){ askGoodsMapper.updateRemoval(maps.get("removalCode").toString(), null); } }else { List data1 = (List) JSONObject.parse(jsonObject1.get("data").toString()); for (JSONObject map1 : data1) { if (map1.get("State").toString().equals("0")){ for(JSONObject jsonObject2 : retunList){ if(jsonObject2.get("WMSCode").toString().equals(map1.get("WMSCode")) && jsonObject2.get("WareHouse").toString().equals(map1.get("WareHouse"))){ //如果失败存入报错信息跟数据 List retunList2 = new LinkedList<>(); retunList2.add(jsonObject2); JSONObject ReqOutStocks1 = new JSONObject(); ReqOutStocks1.put("ReqOutStocks", retunList2); JSONObject ReqOutStocks2 = new JSONObject(); ReqOutStocks2.put("strJson",ReqOutStocks1); //如果失败存入报错信息跟数据 error.setErrorInfo(map1.get("FailReason").toString()); error.setUrl(url); error.setDataVal(ReqOutStocks2.toString()).setType("出库回传"); errorMapper.addError(error); List list1 = (List) jsonObject2.get("BillItems"); for(JSONObject jsonObject3 : list1){ MaterialClass material = warehousingMapper.getMaterial(new Notice().setMaterialId(jsonObject3.get("Material").toString())); askGoodsMapper.updateRemoval(jsonObject2.get("WMSCode").toString(), material.getWllbCode()); } } } } } } } //添加记录到tld_access String names = "出库回传" ; String accessType = "1" ; String returnGsRemoval = returnData.toString() ; askGoodsMapper.addAccess(names,returnGsRemoval,accessType); } } } //删除父子表信息 askGoodsMapper.delPlugOutRemoval(removalCode); askGoodsMapper.delRemovalz(removalCode); }catch (Exception e){ e.printStackTrace(); } } @Override public Map getRemoval(AskGoods askGoods) { Map map = new HashMap<>(); try{ //查询数据 PageHelper.startPage(askGoods.getPage(), askGoods.getLimit()); PageInfo list = new PageInfo<>(askGoodsMapper.getRemoval(askGoods)); map.put("data", list); map.put("msg", "200"); }catch (Exception e){ e.printStackTrace(); map.put("msg", "500"); map.put("errMsg", "失败"); } return map; } @Override public void export(AskGoods askGoods, HttpServletResponse response) { try{ //导出数据汇总 List> sheetDataList = new ArrayList<>(); //表头数据 List head = Arrays.asList("物料名称", "供应商名称", "连番号", "类型", "出库用户", "领用部门", "库位名称", "出库日期", "出库数量","要货单编号","真实姓名","公司名称"); //查询数据 List> list = askGoodsMapper.export(askGoods); sheetDataList.add(head); for(Map userMap : list){ List listSheet = new ArrayList<>(); for(String key: userMap.keySet()){ listSheet.add(userMap.get(key)); } sheetDataList.add(listSheet); } //当前时间 Date time = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMddHHmmss"); ExcelUtils.export(response, "出库流水数据导出" + sdf.format(time), sheetDataList); }catch (Exception e){ e.printStackTrace(); } } @Override public Map getAskGoodsVitrual(String uniqueCode, String type) { Map map = new HashMap<>(); try{ List list = askGoodsMapper.getAskGoodsVitrual(uniqueCode, type); map.put("data", list); map.put("msg", "200"); }catch (Exception e){ e.printStackTrace(); map.put("msg", "500"); map.put("errMsg", "失败"); } return map; } @Override @Transactional(rollbackFor = Exception.class) public Map delAskGoodsVitrual(String id, String type) { Map map = new HashMap<>(); try{ askGoodsMapper.delAskGoodsVitrual(id, type); map.put("msg", "200"); }catch (Exception e){ e.printStackTrace(); map.put("msg", "500"); map.put("errMsg", "失败"); } return map; } @Override public Map getGoodsHalf(AskGoods askGoods) { Map map = new HashMap<>(); try{ //查询数据 PageHelper.startPage(askGoods.getPage(), askGoods.getLimit()); PageInfo list = new PageInfo<>(askGoodsMapper.getGoodsHalf(askGoods)); for (AskGoods goods : list.getList()) { String amount = askGoodsMapper.getAmount(goods); goods.setAmount(amount); } map.put("data", list); map.put("msg", "200"); }catch (Exception e){ e.printStackTrace(); map.put("msg", "500"); map.put("errMsg", "失败"); } return map; } @Override public Map getRemovalHalfProduct(AskGoods askGoods) { Map map = new HashMap<>(); try{ //查询数据 PageHelper.startPage(askGoods.getPage(), askGoods.getLimit()); PageInfo list = new PageInfo<>(askGoodsMapper.getRemovalHalfProduct(askGoods)); map.put("data", list); map.put("msg", "200"); }catch (Exception e){ e.printStackTrace(); map.put("msg", "500"); map.put("errMsg", "失败"); } return map; } @Override public void getRemovalHalfProductExcel(AskGoods askGoods, HttpServletResponse response) { try{ //导出数据汇总 List> sheetDataList = new ArrayList<>(); //表头数据 List head = Arrays.asList("要货单", "出库编号","物料编号","物料名称", "出库数量", "出库人", "领用部门", "WBS编号", "出库时间","真实姓名","所属公司"); //查询数据 List> list = askGoodsMapper.getRemovalHalfProductExcel(askGoods); sheetDataList.add(head); for(Map userMap : list){ List listSheet = new ArrayList<>(); for(String key: userMap.keySet()){ listSheet.add(userMap.get(key)); } sheetDataList.add(listSheet); } //当前时间 Date time = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMddHHmmss"); ExcelUtils.export(response, "半成品出库流水数据导出" + sdf.format(time), sheetDataList); }catch (Exception e){ e.printStackTrace(); } } @Override public Map getRemovalHalf(AskGoods askGoods) { Map map = new HashMap<>(); try{ //查询数据 PageHelper.startPage(askGoods.getPage(), askGoods.getLimit()); PageInfo list = new PageInfo<>(askGoodsMapper.getRemovalHalf(askGoods)); map.put("data", list); map.put("msg", "200"); }catch (Exception e){ e.printStackTrace(); map.put("msg", "500"); map.put("errMsg", "失败"); } return map; } @Override public void getRemovalHalfExcel(AskGoods askGoods, HttpServletResponse response) { try{ //导出数据汇总 List> sheetDataList = new ArrayList<>(); //表头数据 List head = Arrays.asList("交货单编号","物料名称", "出库数量", "用户名称", "出库时间", "公司名称", "客户名称", "出库单编号", "WBS","真实姓名"); //查询数据 List> list = askGoodsMapper.getRemovalHalfExcel(askGoods); sheetDataList.add(head); for(Map userMap : list){ List listSheet = new ArrayList<>(); for(String key: userMap.keySet()){ listSheet.add(userMap.get(key)); } sheetDataList.add(listSheet); } //当前时间 Date time = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMddHHmmss"); ExcelUtils.export(response, "产成品出库流水数据导出" + sdf.format(time), sheetDataList); }catch (Exception e){ e.printStackTrace(); } } /** * @Description: 其他出库 * @Param: AskGoods askGoods * @return: Map map * @Author: XiaoChen * @Date: 2023/4/15 */ @Override public Map otherAskGoods(AskGoods askGoods) { Map map = new HashMap<>(); //redis并发锁 RLock lock = redissonClient.getLock(askGoods.getWllbCode() + askGoods.getStorageLocationCode()); lock.lock(); try{ //查询物料信息 MaterialClass material = warehousingMapper.getMaterial(new Notice().setMaterialCode(askGoods.getWllbCode())); if(material.getPartType().equals("原材料")){ if(askGoods.getSerial() == null) { map.put("msg", "500"); map.put("errMsg", "此物料是" + material.getPartType() + "连番号参数不能为空!"); return map; } } else if(material.getPartType().equals("产成品")) { if(askGoods.getAttribute() == null) { map.put("msg", "500"); map.put("errMsg", "此物料是" + material.getPartType() + "属性参数不能为空!"); return map; } } else if(material.getPartType().equals("半成品")) { askGoods.setProducDate(null); if(askGoods.getStorageLocationCode() == null) { map.put("msg", "500"); map.put("errMsg", "此物料是" + material.getPartType() + "库位参数不能为空!"); return map; } } askGoods.setMaterialId(material.getTldId()); //查询库存 List inventory = askGoodsMapper.getInventoryInfo(askGoods); if(inventory.size() == 0){ map.put("msg", "500"); map.put("errMsg", "未查询到该库位的库存"); return map; } if(Double.parseDouble(inventory.get(0).getAmount()) < Double.parseDouble(askGoods.getNum())){ map.put("msg", "500"); map.put("errMsg", "库存数量不足"); return map; } //如果出库库存等于虚拟表库存则删除此库存 if(Double.doubleToLongBits(Double.parseDouble(askGoods.getNum())) == Double.doubleToLongBits(Double.parseDouble(inventory.get(0).getAmount()))){ askGoodsMapper.deleteInventory(inventory.get(0)); } else { inventory.get(0).setAmount(askGoods.getNum()); askGoodsMapper.updateInventory(inventory.get(0)); } String removalCode = codeGenerateCk(); if(material.getPartType().equals("半成品")){ //新增半成品出库流水 AskGoods askGoods1 = new AskGoods() .setWllbCode(material.getWllbCode()) .setNum(askGoods.getNum()) .setUserId(askGoods.getUserId()) .setAskGoodsId("") .setDepartment(askGoods.getDepartment()) .setWbs(askGoods.getWbs()) .setStorageCode(removalCode) .setStorageLocationCode(askGoods.getStorageLocationCode()) .setCompanyNumber(askGoods.getAccountSleeve());//新增出库流水 warehousingMapper.addRemovalHalfProduct(askGoods1); } else if(material.getPartType().equals("产成品")){ //产成品销售流水 Delivery delivery1 = new Delivery() .setMaterialCode(material.getWllbCode()) //物料code .setOutNum(askGoods.getNum()) //出库数量 .setUserId(askGoods.getUserId()) //用户id .setDeliveryId("") //销售单id .setCompanyNumber(askGoods.getAccountSleeve()) //公司编号 .setCustomerCode("")//客户编号 .setWbs(askGoods.getWbs()) .setStorageCode(removalCode); deliveryMapper.addRemovalHalf(delivery1); //流水录入 } else { askGoods.setSupplierId(inventory.get(0).getSupplierId()); askGoods.setType("其他出库"); askGoods.setProducDate(inventory.get(0).getProducDate()); askGoods.setSerial(inventory.get(0).getSerial()); askGoods.setStorageCode(removalCode); askGoods.setWbs(askGoods.getWbs()); askGoodsMapper.addRemoval(askGoods);//插入出库流水 } //新增返回gs信息 ReturRemoval returRemoval = new ReturRemoval() .setMaterialId(material.getTldId()) .setWbs(askGoods.getWbs()) .setNum(askGoods.getNum()) .setStorageLocationCode(inventory.get(0).getStorageLocationCode()) .setRemovalCode(removalCode) .setSourceType(askGoods.getSourceType()) .setMoveType(askGoods.getMoveType()) .setDocumentId(askGoods.getAskGoodsId()) .setEntryNumber(askGoods.getEntryNumber()) .setDocumentPointsId(askGoods.getId()); askGoodsMapper.updateEnquiryOutNum(askGoods); //增加数量 askGoodsMapper.addReturnGsRemovalF(returRemoval);//新增返回gs数据父表信息 askGoodsMapper.addReturnGsRemoval(returRemoval);//新增返回gs数据子表信息 map.put("data", removalCode); map.put("msg", "200"); }catch (Exception e){ map.put("msg", "500"); map.put("errMsg", "失败"); e.printStackTrace(); } finally { //判断要解锁的key是否已被锁定;判断要解锁的key是否被当前线程持有 if (lock.isLocked() && lock.isHeldByCurrentThread()) { //释放锁 lock.unlock(); } } return map; } @Override @Transactional(rollbackFor = Exception.class) public Map delAskGoods(String id, HttpServletRequest request) { Map map = new HashMap<>(); try{ String userId = request.getHeader("userId"); Map mapVal = askGoodsMapper.getDelAskGoods(id); if(Double.parseDouble(mapVal.get("out_num").toString()) > 0){ map.put("msg", "500"); map.put("errMsg", "此单据已出库!"); return map; } LogData logData = new LogData() .setUserId(userId) .setData(mapVal.toString()) .setType("0") .setDocumentType("生产领料"); dictionaryMapper.addLogdata(logData); askGoodsMapper.delAskGoods(id); map.put("msg","200"); } catch (Exception e) { e.printStackTrace(); map.put("msg", "500"); map.put("errMsg", "服务器请求异常,请稍后再试"); } return map; } /** * 销售发货单接口 * @return */ @Override public void CreateBOLOutStock(String removalCode, String realName) { try{ String documentId = null ; for(String warehouseWhere : askGoodsMapper.getWarehouseWheres(removalCode)){ List> mapList = askGoodsMapper.getGsRemoval(removalCode); if(mapList.size() >0 ) { JSONObject strJson = new JSONObject(); //父表 documentId = mapList.get(0).get("askGoodsId").toString(); strJson.put("BOLID", mapList.get(0).get("askGoodsId").toString());//要货单id strJson.put("WMSID", mapList.get(0).get("id").toString());//出库单id strJson.put("WMSCode", mapList.get(0).get("removalCode").toString());//出库单编号 strJson.put("WareHouse", warehouseWhere);//仓库ID strJson.put("SourceBillDate",DateUtil.dateConversion(mapList.get(0).get("scrq").toString()));//业务日期 strJson.put("SourceType", mapList.get(0).get("sourceType").toString());//来源类型 strJson.put("MoveType", mapList.get(0).get("moveType").toString());//移动类型 strJson.put("IsRed", 0);//是否红单1 strJson.put("Creator", realName);//制单人姓名1 //子表 for (Map map : askGoodsMapper.getRemovalz(mapList.get(0).get("askGoodsId").toString(), warehouseWhere)) { List list = new LinkedList<>(); JSONObject BillItems = new JSONObject(); List retunList = new LinkedList<>(); JSONObject ReqOutStocks = new JSONObject(); JSONObject returnData = new JSONObject(); BillItems.put("WMSItemID", map.get("id"));//分录ID BillItems.put("BOLID", map.get("askGoodsId"));//要货申请单ID BillItems.put("BOLItemID", map.get("entryNumber"));//要货申请明细ID BillItems.put("Material", map.get("materialId"));//物料id BillItems.put("Quantity", map.get("num"));//数量 BillItems.put("FlexField1", map.get("wbsId"));//wbs BillItems.put("FlexField1Code", map.get("wbsCode"));//WBS编号 BillItems.put("FlexField1Name", map.get("wbsName"));//WBS名称 list.add(BillItems); strJson.put("BillItems", list); retunList.add(strJson); ReqOutStocks.put("BILLs",retunList); returnData.put("strJson", JSON.toJSONString(ReqOutStocks)); System.out.println("封装好的:"+returnData); //回传地址 // String url = "http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateBOLOutStock"; String url = "https://erp4.teld.cn:8443/cwbase/sg/V1/ERP/TELD/TELD_WMS/TELD_API_WMS_StockManage/CreateBOLOutStock"; HttpClientUtil httpClientUtil1 = new HttpClientUtil(); Map result = httpClientUtil1.doPost(url, returnData); // Error error = new Error(); if(Integer.parseInt(result.get("msg").toString()) != 200){ //如果失败存入报错信息跟数据 error.setErrorInfo(result.get("data").toString()); error.setUrl(url); error.setDataVal(returnData.toJSONString()).setType("销售出库"); errorMapper.addError(error); queryListMapper.updateType(removalCode, 1, null); }else { JSONObject jsonObject = (JSONObject) JSONObject.parse(result.get("data").toString()); JSONObject jsonObject1 = (JSONObject) JSONObject.parse(jsonObject.get("result").toString()); if ( jsonObject1.get("State").toString().equals("0") ){ //如果失败存入报错信息跟数据 error.setErrorInfo(jsonObject1.get("Msg").toString()); error.setUrl(url); error.setDataVal(returnData.toJSONString()).setType("销售出库"); errorMapper.addError(error); queryListMapper.updateType(removalCode, 1, null); }else { List data1 = (List) JSONObject.parse(jsonObject1.get("data").toString()); for (JSONObject map1 : data1) { if (map1.get("State").toString().equals("0")){ for(JSONObject jsonObject2 : retunList){ if(jsonObject2.get("WMSCode").toString().equals(map1.get("WMSCode")) && jsonObject2.get("WareHouse").toString().equals(map1.get("WareHouse"))){ //如果失败存入报错信息跟数据 List retunList2 = new LinkedList<>(); retunList2.add(jsonObject2); JSONObject ReqOutStocks1 = new JSONObject(); ReqOutStocks1.put("BILLs", retunList2); JSONObject ReqOutStocks2 = new JSONObject(); ReqOutStocks2.put("strJson",ReqOutStocks1); //如果失败存入报错信息跟数据 error.setErrorInfo(map1.get("FailReason").toString()); error.setUrl(url); error.setDataVal(ReqOutStocks2.toString()).setType("销售出库"); errorMapper.addError(error); List list1 = (List) jsonObject2.get("BillItems"); for(JSONObject jsonObject3 : list1){ MaterialClass material = warehousingMapper.getMaterial(new Notice().setMaterialId(jsonObject3.get("Material").toString())); queryListMapper.updateType(jsonObject2.get("WMSCode").toString(), 1, material.getWllbCode()); } } } } } } } //添加记录到tld_access String names = "销售发货单" ; String accessType = "1" ; String returnGsRemoval = returnData.toString() ; askGoodsMapper.addAccess(names,returnGsRemoval,accessType); } } } //删除父子表信息 askGoodsMapper.delPlugOutRemoval(documentId); askGoodsMapper.delRemovalz(documentId); }catch (Exception e){ e.printStackTrace(); } } @Override public Map addWarehouseTransferVitrual(AskGoods askGoods) { Map map = new HashMap<>(); //redis并发锁 RLock lock = redissonClient.getLock(askGoods.getUniqueCode()); lock.lock(); try{ Map mapVal = askGoodsMapper.getScanIsNot(askGoods); if((Double.parseDouble(mapVal.get("inventoryNum").toString()) - Double.parseDouble(mapVal.get("virtualNum").toString())) == 0){ map.put("msg", "500"); map.put("errMsg", "已全部出库"); return map; } Inventory inventory = askGoodsMapper.getInventory(askGoods); //库存数量 if(inventory == null){ map.put("msg", "500"); map.put("errMsg", "暂无库存"); return map; } AskGoods askGoods1 = askGoodsMapper.getWareInfo(askGoods); //要货单数量 int alreadyNum = askGoodsMapper.getAskInfoNumVitrual(askGoods);//已扫描总数 int inventoryAlready = askGoodsMapper.getInventoryAlready(askGoods);//库存已扫描数量 Double inventorySurplus = (Double.parseDouble(inventory.getAmount()) - Double.parseDouble(inventory.getAmountLock())) - inventoryAlready; //库存剩余数量 Double surplusNum = Double.parseDouble(askGoods1.getNum()) - Double.parseDouble(askGoods1.getOutNum()) - alreadyNum; //剩余要扫描数量 if(Double.doubleToLongBits(surplusNum) >= Double.doubleToLongBits(inventorySurplus)){ askGoods.setNum(String.valueOf(inventorySurplus)); } else { askGoods.setNum(String.valueOf(surplusNum)); } askGoods.setStorageLocationCode(inventory.getStorageLocationCode());//库存编号 askGoodsMapper.addAskGoodsVitrual(askGoods); map.put("msg", "200"); }catch (Exception e){ e.printStackTrace(); map.put("msg", "500"); map.put("errMsg", "失败"); }finally { //判断要解锁的key是否已被锁定;判断要解锁的key是否被当前线程持有 if (lock.isLocked() && lock.isHeldByCurrentThread()) { //释放锁 lock.unlock(); } } return map; } /** * 移库单接口文档 */ @Override public void CreateGMReqOutStock(String removalCode, String realName) { try { //通过code查询id String warehouseTransferTd = askGoodsMapper.getSupplyWarehouseWheres(removalCode); //根据id查询子表的供货仓库 for (String warehouseWhere : askGoodsMapper.getSupplyWarehouseWhere(warehouseTransferTd)) { //查询父表信息 List> mapList = askGoodsMapper.getReturnWarehouseTransfer(removalCode); if (mapList.size() > 0) { JSONObject strJson = new JSONObject(); //父表 strJson.put("GMReqBillID", mapList.get(0).get("warehouseTransferId").toString());//移库通知ID strJson.put("WMSID", mapList.get(0).get("id").toString());//利道WMS出库单id strJson.put("WMSCode", mapList.get(0).get("warehouseTransferCode").toString());//利道WMS出库单编号 strJson.put("TOWareHouse", mapList.get(0).get("askGoodsWarehouseId").toString());//要货仓库ID strJson.put("FromWareHouse", warehouseWhere);//供货仓库ID strJson.put("SourceBillDate", DateUtil.dateConversion(mapList.get(0).get("scrq").toString()));//业务日期 strJson.put("MoveType", mapList.get(0).get("warehouseTransferType").toString());//移动类型 strJson.put("IsRed", 0);//是否红单1 strJson.put("Creator", realName);//制单人姓名1 //子表 for (Map map : askGoodsMapper.getReturnWarehouseTransferZ(mapList.get(0).get("warehouseTransferId").toString(), warehouseWhere)) { List list = new LinkedList<>(); JSONObject BillItems = new JSONObject(); List retunList = new LinkedList<>(); JSONObject ReqOutStocks = new JSONObject(); JSONObject returnData = new JSONObject(); BillItems.put("WMSItemID", map.get("id"));//分录ID BillItems.put("GMReqBillID", map.get("warehouseTransferId"));//移库通知单ID BillItems.put("GMReqBillItemID", map.get("entryNumber"));//移库通知明细ID BillItems.put("Material", map.get("materialId"));//物料id BillItems.put("Quantity", map.get("outNum"));//数量 BillItems.put("FlexField1", map.get("wbsId"));//wbs BillItems.put("FlexField1Code", map.get("wbsCode"));//WBS编号 BillItems.put("FlexField1Name", map.get("wbsName"));//WBS名称 list.add(BillItems); strJson.put("BillItems", list); retunList.add(strJson); ReqOutStocks.put("BILLs", retunList); returnData.put("strJson", JSON.toJSONString(ReqOutStocks)); System.out.println("封装好的:"+returnData); // // String url = "http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateGMReqOutStock"; String url = "https://erp4.teld.cn:8443/cwbase/sg/V1/ERP/TELD/TELD_WMS/TELD_API_WMS_StockManage/CreateGMReqOutStock"; HttpClientUtil httpClientUtil1 = new HttpClientUtil(); Map result = httpClientUtil1.doPost(url, returnData); Error error = new Error(); if (Integer.parseInt(result.get("msg").toString()) != 200) { //如果失败存入报错信息跟数据 error.setErrorInfo(result.get("data").toString()); error.setUrl(url); error.setDataVal(returnData.toJSONString()).setType("移库"); errorMapper.addError(error); } else { JSONObject jsonObject = (JSONObject) JSONObject.parse(result.get("data").toString()); JSONObject jsonObject1 = (JSONObject) JSONObject.parse(jsonObject.get("result").toString()); if (jsonObject1.get("State").toString().equals("0")) { //如果失败存入报错信息跟数据 error.setErrorInfo(jsonObject1.get("Msg").toString()); error.setUrl(url); error.setDataVal(returnData.toJSONString()).setType("移库"); errorMapper.addError(error); } else { List data1 = (List) JSONObject.parse(jsonObject1.get("data").toString()); for (JSONObject map1 : data1) { if (map1.get("State").toString().equals("0")) { for (JSONObject jsonObject2 : retunList) { if (jsonObject2.get("WMSCode").toString().equals(map1.get("WMSCode")) && jsonObject2.get("FromWareHouse").toString().equals(map1.get("FromWareHouse"))) { //如果失败存入报错信息跟数据 List retunList2 = new LinkedList<>(); retunList2.add(jsonObject2); JSONObject ReqOutStocks1 = new JSONObject(); ReqOutStocks1.put("BILLs", retunList2); JSONObject ReqOutStocks2 = new JSONObject(); ReqOutStocks2.put("strJson",ReqOutStocks1); //如果失败存入报错信息跟数据 error.setErrorInfo(map1.get("FailReason").toString()); error.setUrl(url); error.setDataVal(ReqOutStocks2.toString()).setType("移库"); errorMapper.addError(error); } } } } } } //添加记录到tld_access String names = "移库单"; String accessType = "1"; String returnGsRemoval = returnData.toString(); askGoodsMapper.addAccess(names, returnGsRemoval, accessType); } } } //删除父子表信息 //根据code askGoodsMapper.delReturnWarehouseTransfer(removalCode); //根据id askGoodsMapper.delReturnWarehouseTransferZ(warehouseTransferTd); } catch (Exception e) { e.printStackTrace(); } } /** * @Description: 生产收货接口文档 * @Param: removalCode 入库单编号 * @return: void * @Author: XiaoChen * @Date: 2023/4/7 */ @Override public void CreateGRReqInStock(String removalCode, String realName) { try { String orderNumber = null ; //通过入库单编号查询入库单信息 // ReturnWarehousing returnWarehousing = askGoodsMapper.getReturnGsWarehousing(removalCode); //根据id查询子表的供货仓库 for (Map returnWarehousing1 : askGoodsMapper.getStorageLocationWarehouseWhere(removalCode)) { orderNumber = returnWarehousing1.get("orderNumber").toString() ; //查询父表信息 List> mapList = askGoodsMapper.getNoticeParent(returnWarehousing1.get("orderNumber").toString()); if (mapList.size() > 0) { JSONObject strJson = new JSONObject(); //父表 strJson.put("GRReqBillID", mapList.get(0).get("noticeId").toString());//入库通知单ID strJson.put("WMSID", mapList.get(0).get("id").toString());//利道WMS出库单id strJson.put("WMSCode", mapList.get(0).get("noticeCode").toString());//利道WMS出库单编号 strJson.put("WareHouse", returnWarehousing1.get("warehouseWhere"));//仓库ID strJson.put("SourceBillDate", DateUtil.dateConversion(mapList.get(0).get("noticeTime").toString()));//业务日期 strJson.put("SourceType", mapList.get(0).get("sourceType").toString());//来源类型 strJson.put("MoveType", mapList.get(0).get("moveType").toString());//移动类型 strJson.put("IsRed", 0);//是否红单1 strJson.put("Creator", realName);//制单人姓名1 //子表 for (Map map : askGoodsMapper.getNoticeSubtabulation(mapList.get(0).get("noticeId").toString())) { List list = new LinkedList<>(); JSONObject BillItems = new JSONObject(); List retunList = new LinkedList<>(); JSONObject ReqOutStocks = new JSONObject(); JSONObject returnData = new JSONObject(); BillItems.put("WMSItemID", map.get("id"));//分录ID BillItems.put("GRReqBillID", map.get("noticeId"));//入库通知单ID BillItems.put("GRReqBillItemID", map.get("entryNumber"));//入库通知单明细ID BillItems.put("Material", map.get("materialId"));//物料id BillItems.put("Quantity", map.get("num"));//数量 BillItems.put("FlexField1", map.get("wbsId"));//wbs BillItems.put("FlexField1Code", map.get("wbsCode"));//WBS编号 BillItems.put("FlexField1Name", map.get("wbsName"));//WBS名称 list.add(BillItems); strJson.put("BillItems", list); retunList.add(strJson); ReqOutStocks.put("BILLs", retunList); returnData.put("strJson", JSON.toJSONString(ReqOutStocks)); System.out.println("封装好的:"+returnData); //回传地址 // String url = "http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateGRReqInStock"; String url = "https://erp4.teld.cn:8443/cwbase/sg/V1/ERP/TELD/TELD_WMS/TELD_API_WMS_StockManage/CreateGRReqInStock"; HttpClientUtil httpClientUtil1 = new HttpClientUtil(); Map result = httpClientUtil1.doPost(url, returnData); Error error = new Error(); if (Integer.parseInt(result.get("msg").toString()) != 200) { //如果失败存入报错信息跟数据 error.setErrorInfo(result.get("data").toString()); error.setUrl(url); error.setDataVal(returnData.toJSONString()).setType("生产收货"); errorMapper.addError(error); //修改流水传输状态 for(Map map1 : askGoodsMapper.plugOutRemoval(removalCode)){ askGoodsMapper.updateRemoval(map1.get("removalCode").toString(), null); } } else { JSONObject jsonObject = (JSONObject) JSONObject.parse(result.get("data").toString()); JSONObject jsonObject1 = (JSONObject) JSONObject.parse(jsonObject.get("result").toString()); if (jsonObject1.get("State").toString().equals("0")) { //如果失败存入报错信息跟数据 error.setErrorInfo(jsonObject1.get("Msg").toString()); error.setUrl(url); error.setDataVal(returnData.toJSONString()).setType("生产收货"); errorMapper.addError(error); } else { List data1 = (List) JSONObject.parse(jsonObject1.get("data").toString()); for (JSONObject map1 : data1) { if (map1.get("State").toString().equals("0")) { for (JSONObject jsonObject2 : retunList) { if (jsonObject2.get("WMSCode").toString().equals(map1.get("WMSCode")) && jsonObject2.get("WareHouse").toString().equals(map1.get("WareHouse"))) { //如果失败存入报错信息跟数据 List retunList2 = new LinkedList<>(); retunList2.add(jsonObject2); JSONObject ReqOutStocks1 = new JSONObject(); ReqOutStocks1.put("BILLs", retunList2); JSONObject ReqOutStocks2 = new JSONObject(); ReqOutStocks2.put("strJson",ReqOutStocks1); error.setErrorInfo(map1.get("FailReason").toString()); error.setUrl(url); error.setDataVal(ReqOutStocks2.toJSONString()).setType("生产收货"); errorMapper.addError(error); } } } } } } //添加记录到tld_access String names = "生产收货"; String accessType = "1"; String returnGsRemoval = returnData.toString(); askGoodsMapper.addAccess(names, returnGsRemoval, accessType); } } } //删除虚拟表 askGoodsMapper.delReturnGsWarehousing(orderNumber); } catch (Exception e) { e.printStackTrace(); } } /** * @Description: 其他收货接口文档/其它入库 * @Param: removalCode * @return: void * @Author: XiaoChen * @Date: 2023/4/12 */ @Override public void CreateOtherInStock(String removalCode, String realName) { try { LinkedList noticeIds = new LinkedList<>(); //通过入库单编号查询通知单ID // List returnWarehousing = askGoodsMapper.getReturnGsOtherWarehousing(removalCode); //根据id查询子表的供货仓库 for (Map returnWarehousing1 : askGoodsMapper.getCreateOtherInStockWarehouseWhere(removalCode)) { JSONObject strJson = new JSONObject(); //父表 strJson.put("GRReqBillID", returnWarehousing1.get("noticeId").toString());//入库通知单ID strJson.put("WMSID", returnWarehousing1.get("wmsId").toString());//利道WMS出库单id strJson.put("WMSCode", returnWarehousing1.get("noticeCode").toString());//利道WMS出库单编号 strJson.put("WareHouse", returnWarehousing1.get("warehouseWhere"));//仓库ID strJson.put("SourceBillDate", DateUtil.dateConversion(returnWarehousing1.get("noticeTime").toString()));//业务日期 strJson.put("SourceType", returnWarehousing1.get("sourceType").toString());//来源类型 strJson.put("MoveType", returnWarehousing1.get("moveType").toString());//移动类型 strJson.put("IsRed", 0);//是否红单1 strJson.put("Creator", realName);//制单人姓名1 //查询信息 List> mapList = askGoodsMapper.getNoticesParent(removalCode,returnWarehousing1.get("storageLocationCode").toString()); if (mapList.size() > 0) { for (Map map : mapList) { //子表 List list = new LinkedList<>(); JSONObject BillItems = new JSONObject(); List retunList = new LinkedList<>(); JSONObject ReqOutStocks = new JSONObject(); JSONObject returnData = new JSONObject(); BillItems.put("WMSItemID", map.get("wmsItemId"));//分录ID BillItems.put("GRReqBillID", map.get("noticeId"));//入库通知单ID BillItems.put("GRReqBillItemID", map.get("entryNumber"));//入库通知单明细ID BillItems.put("Material", map.get("materialId"));//物料id BillItems.put("Quantity", map.get("amount"));//数量 BillItems.put("FlexField1", map.get("wbsId"));//wbs BillItems.put("FlexField1Code", map.get("wbsCode"));//WBS编号 BillItems.put("FlexField1Name", map.get("wbsName"));//WBS名称 list.add(BillItems); strJson.put("BillItems", list); retunList.add(strJson); ReqOutStocks.put("BILLs", retunList); returnData.put("strJson", JSON.toJSONString(ReqOutStocks)); System.out.println("封装好的:"+returnData); // String url = "http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateOtherInStock"; String url = "https://erp4.teld.cn:8443/cwbase/sg/V1/ERP/TELD/TELD_WMS/TELD_API_WMS_StockManage/CreateOtherInStock"; HttpClientUtil httpClientUtil1 = new HttpClientUtil(); Map result = httpClientUtil1.doPost(url, returnData); System.out.println("result:" + result); Error error = new Error(); if (Integer.parseInt(result.get("msg").toString()) != 200) { //如果失败存入报错信息跟数据 error.setErrorInfo(result.get("data").toString()); error.setUrl(url); error.setDataVal(returnData.toJSONString()).setType("其它入库"); errorMapper.addError(error); } else { JSONObject jsonObject = (JSONObject) JSONObject.parse(result.get("data").toString()); JSONObject jsonObject1 = (JSONObject) JSONObject.parse(jsonObject.get("result").toString()); if (jsonObject1.get("State").toString().equals("0")) { //如果失败存入报错信息跟数据 error.setErrorInfo(jsonObject1.get("Msg").toString()); error.setUrl(url); error.setDataVal(returnData.toJSONString()).setType("其它入库"); errorMapper.addError(error); } else { List data1 = (List) JSONObject.parse(jsonObject1.get("data").toString()); for (JSONObject map1 : data1) { if (map1.get("State").toString().equals("0")) { for (JSONObject jsonObject2 : retunList) { if (jsonObject2.get("WMSCode").toString().equals(map1.get("WMSCode")) && jsonObject2.get("WareHouse").toString().equals(map1.get("WareHouse"))) { //如果失败存入报错信息跟数据 List retunList2 = new LinkedList<>(); retunList2.add(jsonObject2); JSONObject ReqOutStocks1 = new JSONObject(); ReqOutStocks1.put("BILLs", retunList2); JSONObject ReqOutStocks2 = new JSONObject(); ReqOutStocks2.put("strJson",ReqOutStocks1); //如果失败存入报错信息跟数据 error.setErrorInfo(map1.get("FailReason").toString()); error.setUrl(url); error.setDataVal(ReqOutStocks2.toString()).setType("其它入库"); errorMapper.addError(error); } } } } } } //添加记录到tld_access String names = "其它入库"; String accessType = "1"; String returnGsRemoval = returnData.toString(); askGoodsMapper.addAccess(names, returnGsRemoval, accessType); } } noticeIds.add(returnWarehousing1.get("noticeId").toString()); } askGoodsMapper.delNoticesParent(removalCode); } catch (Exception e) { e.printStackTrace(); } } /** * @Description: 其他发货补领料/其他出货接口文档/其它出库 * @Param: removalCode 单据id * @return: void * @Author: XiaoChen * @Date: 2023/4/13 */ @Override public void CreateOtherDeliveryMaterials(String removalCode, String realName) { try { String documentId = null ; //通过出库单编号查询单据ID List> lists = askGoodsMapper.getCreateOtherDeliveryMaterialsWarehouseWhere(removalCode); //根据id查询子表的供货仓库 //根据仓库 for (Map maps : lists) { List> mapList = askGoodsMapper.getGsRemovals(removalCode); if(mapList.size() >0 ) { JSONObject strJson = new JSONObject(); //父表 documentId = mapList.get(0).get("askGoodsId").toString(); strJson.put("GIReqBillID", mapList.get(0).get("askGoodsId").toString());//要货单id strJson.put("WMSID", mapList.get(0).get("id").toString());//出库单id strJson.put("WMSCode", mapList.get(0).get("removalCode").toString());//出库单编号 strJson.put("WareHouse", maps.get("warehouseWhere"));//仓库ID strJson.put("SourceBillDate",DateUtil.dateConversion(mapList.get(0).get("scrq").toString()));//业务日期 strJson.put("SourceType", mapList.get(0).get("sourceType").toString());//来源类型 strJson.put("MoveType", mapList.get(0).get("moveType").toString());//移动类型 strJson.put("IsRed", 0);//是否红单1 strJson.put("Creator", realName);//制单人姓名1 //子表 for (Map map : askGoodsMapper.getRemovalz(mapList.get(0).get("askGoodsId").toString(),maps.get("warehouseWhere").toString())) { List list = new LinkedList<>(); JSONObject BillItems = new JSONObject(); List retunList = new LinkedList<>(); JSONObject ReqOutStocks = new JSONObject(); JSONObject returnData = new JSONObject(); BillItems.put("WMSItemID", map.get("askId"));//分录ID BillItems.put("GIReqBillID", map.get("askGoodsId"));//要货申请单ID BillItems.put("GIReqBillItemID", map.get("entryNumber"));//要货申请明细ID BillItems.put("Material", map.get("materialId"));//物料id BillItems.put("Quantity", map.get("num"));//数量 BillItems.put("FlexField1", map.get("wbsId"));//wbs BillItems.put("FlexField1Code", map.get("wbsCode"));//WBS编号 BillItems.put("FlexField1Name", map.get("wbsName"));//WBS名称 list.add(BillItems); strJson.put("BillItems", list); retunList.add(strJson); ReqOutStocks.put("ReqOutStocks", retunList); returnData.put("strJson", JSON.toJSONString(ReqOutStocks)); System.out.println("封装好的:"+returnData); // String url = "http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateMakeUpOtherOutStock"; String url = "https://erp4.teld.cn:8443/cwbase/sg/V1/ERP/TELD/TELD_WMS/TELD_API_WMS_StockManage/CreateMakeUpOtherOutStock"; HttpClientUtil httpClientUtil1 = new HttpClientUtil(); Map result = httpClientUtil1.doPost(url, returnData); System.out.println("result:" + result); Error error = new Error(); if (Integer.parseInt(result.get("msg").toString()) != 200) { //如果失败存入报错信息跟数据 error.setErrorInfo(result.get("data").toString()); error.setUrl(url); error.setDataVal(returnData.toJSONString()).setType("其它出库"); errorMapper.addError(error); } else { JSONObject jsonObject = (JSONObject) JSONObject.parse(result.get("data").toString()); JSONObject jsonObject1 = (JSONObject) JSONObject.parse(jsonObject.get("result").toString()); if (jsonObject1.get("State").toString().equals("0")) { //如果失败存入报错信息跟数据 error.setErrorInfo(jsonObject1.get("Msg").toString()); error.setUrl(url); error.setDataVal(returnData.toJSONString()).setType("其它出库"); errorMapper.addError(error); } else { List data1 = (List) JSONObject.parse(jsonObject1.get("data").toString()); for (JSONObject map1 : data1) { if (map1.get("State").toString().equals("0")) { for (JSONObject jsonObject2 : retunList) { if (jsonObject2.get("WMSCode").toString().equals(map1.get("WMSCode")) && jsonObject2.get("WareHouse").toString().equals(map1.get("WareHouse"))) { //如果失败存入报错信息跟数据 List retunList2 = new LinkedList<>(); retunList2.add(jsonObject2); JSONObject ReqOutStocks1 = new JSONObject(); ReqOutStocks1.put("ReqOutStocks", retunList2); JSONObject ReqOutStocks2 = new JSONObject(); ReqOutStocks2.put("strJson",ReqOutStocks1); //如果失败存入报错信息跟数据 error.setErrorInfo(map1.get("FailReason").toString()); error.setUrl(url); error.setDataVal(ReqOutStocks2.toString()).setType("其它出库"); errorMapper.addError(error); } } } } } } //添加记录到tld_access String names = "其它出库"; String accessType = "1"; String returnGsRemoval = returnData.toString(); askGoodsMapper.addAccess(names, returnGsRemoval, accessType); } } } //删除父子表信息 askGoodsMapper.delPlugOutRemoval(documentId); askGoodsMapper.delRemovalz(documentId); } catch (Exception e) { e.printStackTrace(); } } /** * @Description: 其他发货(参照要货申请制单(其他发货通知_青岛工厂))接口文档 * @Param: removalCode * @return: void * @Author: XiaoChen * @Date: 2023/4/14 */ @Override public void CreateOtherDeliveryMaterial(String removalCode, String realName) { try { String documentId = null ; //通过出库单编号查询单据ID List> lists = askGoodsMapper.getCreateOtherDeliveryMaterialsWarehouseWhere(removalCode); //根据id查询子表的供货仓库 //根据仓库循环 for (Map maps : lists) { List> mapList = askGoodsMapper.getGsRemovals(removalCode); if(mapList.size() >0 ) { JSONObject strJson = new JSONObject(); //父表 documentId = mapList.get(0).get("askGoodsId").toString(); strJson.put("GIReqBillID", mapList.get(0).get("askGoodsId").toString());//要货单id strJson.put("WMSID", mapList.get(0).get("id").toString());//出库单id strJson.put("WMSCode", mapList.get(0).get("removalCode").toString());//出库单编号 strJson.put("WareHouse", maps.get("warehouseWhere"));//仓库ID strJson.put("SourceBillDate",DateUtil.dateConversion(mapList.get(0).get("scrq").toString()));//业务日期 strJson.put("SourceType", mapList.get(0).get("sourceType").toString());//来源类型 strJson.put("MoveType", mapList.get(0).get("moveType").toString());//移动类型 strJson.put("IsRed", 0);//是否红单1 strJson.put("Creator", realName);//制单人姓名1 //子表 for (Map map : askGoodsMapper.getRemovalz(mapList.get(0).get("askGoodsId").toString(),maps.get("warehouseWhere").toString())) { List list = new LinkedList<>(); JSONObject BillItems = new JSONObject(); List retunList = new LinkedList<>(); JSONObject ReqOutStocks = new JSONObject(); JSONObject returnData = new JSONObject(); BillItems.put("WMSItemID", map.get("askId"));//分录ID BillItems.put("GIReqBillID", map.get("askGoodsId"));//要货申请单ID BillItems.put("GIReqBillItemID", map.get("entryNumber"));//要货申请明细ID BillItems.put("Material", map.get("materialId"));//物料id BillItems.put("Quantity", map.get("num"));//数量 BillItems.put("FlexField1", map.get("wbsId"));//wbs BillItems.put("FlexField1Code", map.get("wbsCode"));//WBS编号 BillItems.put("FlexField1Name", map.get("wbsName"));//WBS名称 list.add(BillItems); strJson.put("BillItems", list); retunList.add(strJson); ReqOutStocks.put("ReqOutStocks", retunList); returnData.put("strJson", JSON.toJSONString(ReqOutStocks)); System.out.println("封装好的:"+returnData); HttpClientUtil httpClientUtil1 = new HttpClientUtil(); // String url = "http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateOtherOutStock"; String url = "https://erp4.teld.cn:8443/cwbase/sg/V1/ERP/TELD/TELD_WMS/TELD_API_WMS_StockManage/CreateOtherOutStock"; Map result = httpClientUtil1.doPost(url, returnData); System.out.println("result:" + result); Error error = new Error(); if (Integer.parseInt(result.get("msg").toString()) != 200) { //如果失败存入报错信息跟数据 error.setErrorInfo(result.get("data").toString()); error.setUrl(url); error.setDataVal(returnData.toJSONString()).setType("其它出库"); errorMapper.addError(error); } else { JSONObject jsonObject = (JSONObject) JSONObject.parse(result.get("data").toString()); JSONObject jsonObject1 = (JSONObject) JSONObject.parse(jsonObject.get("result").toString()); if (jsonObject1.get("State").toString().equals("0")) { //如果失败存入报错信息跟数据 error.setErrorInfo(jsonObject1.get("Msg").toString()); error.setUrl(url); error.setDataVal(returnData.toJSONString()).setType("其它出库"); errorMapper.addError(error); } else { List data1 = (List) JSONObject.parse(jsonObject1.get("data").toString()); for (JSONObject map1 : data1) { if (map1.get("State").toString().equals("0")) { for (JSONObject jsonObject2 : retunList) { if (jsonObject2.get("WMSCode").toString().equals(map1.get("WMSCode")) && jsonObject2.get("WareHouse").toString().equals(map1.get("WareHouse"))) { //如果失败存入报错信息跟数据 List retunList2 = new LinkedList<>(); retunList2.add(jsonObject2); JSONObject ReqOutStocks1 = new JSONObject(); ReqOutStocks1.put("ReqOutStocks", retunList2); JSONObject ReqOutStocks2 = new JSONObject(); ReqOutStocks2.put("strJson",ReqOutStocks1); //如果失败存入报错信息跟数据 error.setErrorInfo(map1.get("FailReason").toString()); error.setUrl(url); error.setDataVal(ReqOutStocks2.toString()).setType("其它出库"); errorMapper.addError(error); } } } } } } //添加记录到tld_access String names = "其它出库"; String accessType = "1"; String returnGsRemoval = returnData.toString(); askGoodsMapper.addAccess(names, returnGsRemoval, accessType); } } } //删除父子表信息 askGoodsMapper.delPlugOutRemoval(documentId); askGoodsMapper.delRemovalz(documentId); } catch (Exception e) { e.printStackTrace(); } } /** * 产成品出库流水修改连翻号 * @param askGoods 参数 * @return 返回结果 */ @Override public Map getRemovalHalfUpdSerial(AskGoods askGoods) { Map map = new HashMap<>(); try{ askGoodsMapper.UpdSerial(askGoods); map.put("msg", "200"); }catch (Exception e){ e.printStackTrace(); map.put("msg", "500"); map.put("errMsg", "失败"); } return map; } @Override public void test() { AskGoods askGoods = new AskGoods(); List list = askGoodsMapper.getAskGoodsMaterial(askGoods); for(AskGoods askGoods1 : list) { Inventory inventory = new Inventory() .setMaterialId(askGoods1.getMaterialId()) .setCompanyCode(askGoods1.getCompanyNumber()) .setAmount(askGoods1.getNum()) .setWbs(askGoods1.getWbs()); List> list1 = queryListMapper.storageLocationNum(inventory); if(list1.size() == 0){ continue; } String aaa = "8130"; String bbb = "000000"; if(askGoods1.getCompanyNumber().equals("8400")){ aaa = "8400"; bbb = "100000"; } AskGoods askGoods2 = new AskGoods().setUniqueCode("1111") .setSupplierId("EC13437") .setSerial(bbb) .setWllbCode(list1.get(0).get("code").toString()) .setProducDate("20230425") .setAskGoodsId(askGoods1.getAskGoodsId()) .setType("计划出库") .setStorageLocationCode(list1.get(0).get("storageLocationCode").toString()) .setNum(askGoods1.getNum()) .setUserId("27") .setDepartment("000300020001") .setCompanyNumber(askGoods1.getCompanyNumber()) .setWbs(askGoods1.getWbs()) .setEntryNumber(askGoods1.getEntryNumber()); askGoodsMapper.addAskGoodsVitrual(askGoods2); } } @Override public void testTwo() { List> list1 = queryListMapper.getTestTwo(); for(Map map : list1){ Map map1 = OutOfLibrary("1111", "计划出库", map.get("ask_goods_id").toString()); plugOutRemoval(map1.get("data").toString(), "王孝苗"); } } /** * 出库单生成 * @return */ public String codeGenerateCk(){ StringBuilder stringBuilder = new StringBuilder("YHCK"); Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd"); stringBuilder.append(sdf.format(date)); int count = askGoodsMapper.getReturnRemovalCount(); for(int i = 0; i < 4 - (count + "").length(); i++){ stringBuilder.append("0"); } return (stringBuilder.append(count + 1)).toString(); } }