package com.tld.service.impl; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.tld.excel.ExcelUtils; import com.tld.mapper.UserMapper; import com.tld.mapper.WarehousingMapper; import com.tld.model.*; import com.tld.service.WarehousingService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletResponse; import java.text.SimpleDateFormat; import java.util.*; @Service public class WarehousingServiceImpl implements WarehousingService { @Autowired private WarehousingMapper warehousingMapper; @Autowired private UserMapper userMapper; @Override public Map getRecommend(String wllbCode, String suppId, String num, String unique, String producDate) { Map map = new HashMap<>(); try{ //判断物料是否录入 int count = warehousingMapper.getMateriaIsExist(wllbCode); if(count == 0){ map.put("msg", "500"); map.put("errMsg", "物料信息未录入,请联系管理员"); return map; } Map mapVal = warehousingMapper.getScanIsNot(wllbCode, suppId, unique, producDate); if(Integer.parseInt(mapVal.get("inventoryCount").toString()) != 0 || Integer.parseInt(mapVal.get("virtualCount").toString()) != 0){ map.put("msg", "500"); map.put("errMsg", "已被扫描"); return map; } //判断如果是混合则走单独逻辑 String isNotSisable = warehousingMapper.getIsNotSisable(wllbCode); if(isNotSisable.equals("1")){ List list1 = warehousingMapper.getIsNotSisableLocation("1"); map.put("data", list1); map.put("msg", "200"); return map; } List listMaterialClass = warehousingMapper.getMaterialClass(wllbCode); if(listMaterialClass.size() == 0){ listMaterialClass = warehousingMapper.getMaterialClassType(wllbCode); } StringBuffer stringBuffer = new StringBuffer(); List listString = new LinkedList<>();//库存剩余数量 for(int i = 0; i < listMaterialClass.size(); i++) { Map map1 = warehousingMapper.getScanNum(listMaterialClass.get(i).getStorageLocationCode(), num); if(Double.parseDouble(String.valueOf(map1.get("scanNum"))) < Double.parseDouble(String.valueOf(map1.get("storageLocationCapacity")))){ //查询库存是否同物料同批次存在 int countProduc = warehousingMapper.getInventoryProduc(listMaterialClass.get(i).getWllbCode(), producDate, listMaterialClass.get(i).getStorageLocationCode()); if(countProduc == 0){ stringBuffer.append(listMaterialClass.get(i).getStorageLocationCode() + ","); int surplusNum = (int) (Double.parseDouble(String.valueOf(map1.get("storageLocationCapacity"))) - Double.parseDouble(String.valueOf(map1.get("scanNum"))) + Double.parseDouble(num)); listString.add(surplusNum); } } } List list = warehousingMapper.recommend(stringBuffer.toString()); map.put("data", list); map.put("listString", listString);//返回库位剩余数量 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 addWarehousingVirtual(WarehousingVirtual warehousingVirtual) { Map map = new HashMap<>(); try{ warehousingMapper.addWarehousingVirtual(warehousingVirtual); 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 delWarehousingVirtual(WarehousingVirtual warehousingVirtual) { Map map = new HashMap<>(); try{ warehousingMapper.delWarehousingVirtual(warehousingVirtual); map.put("msg", "200"); } catch (Exception e){ e.printStackTrace(); map.put("msg", "500"); map.put("errMsg", "服务器请求异常,请稍后再试"); } return map; } @Override public Map warehousing(String uniqueCode) { Map map = new HashMap<>(); try{ //入库信息 List list = new LinkedList<>(); //查询入库所需要的信息 for(WarehousingVirtual warehousingVirtual : warehousingMapper.getVirtual(uniqueCode)){ //查询采购单信息 List receiveGoods = warehousingMapper.getReceiveGoods(warehousingVirtual); if(receiveGoods.size() != 0) { //所属账套 warehousingVirtual.setAccountSleeve(receiveGoods.get(0).getCompanyNumber()); //WBS warehousingVirtual.setWbs(receiveGoods.get(0).getWbs()); } //查询部门编号 List listUser = userMapper.getAllUser(new User().setId(Integer.parseInt(warehousingVirtual.getUserId()))); warehousingVirtual.setDepartmentId(listUser.get(0).getDepartmentId()); //查询物料分类 WarehousingVirtual warehousingVirtual1 = warehousingMapper.getWlClass(warehousingVirtual); warehousingVirtual.setWllbClass(warehousingVirtual1.getWllbClass()); warehousingVirtual.setMaterialId(warehousingVirtual1.getMaterialId()); list.add(warehousingVirtual); } //入库 warehousingMapper.addStorage(list);//入库流水 warehousingMapper.addInventory(list);//库存 //返回采购单id StringBuilder stringBuilder = new StringBuilder(); //入质检入库数量 for(WarehousingVirtual warehousingVirtual1 : warehousingMapper.getVirtual(uniqueCode)) { //查询采购单信息 List receiveGoods = warehousingMapper.getReceiveGoods(warehousingVirtual1); for(ReceiveGoods receiveGoods1 : receiveGoods) { if(Integer.parseInt(warehousingVirtual1.getNum()) <= 0){ break; } //采购单剩余入库数量 int surplusNum = Integer.parseInt(receiveGoods1.getQualifiedNum()) - Integer.parseInt(receiveGoods1.getWarehousingNum()); //剩余入库数量 int numInto = Integer.parseInt(warehousingVirtual1.getNum()) - surplusNum; if(numInto < 0){ receiveGoods1.setWarehousingNum(warehousingVirtual1.getNum()); warehousingMapper.updateReceiveGood(receiveGoods1); } else { receiveGoods1.setWarehousingNum(String.valueOf(surplusNum)); warehousingMapper.updateReceiveGood(receiveGoods1); //存入给gs的返回数据 ReturnWarehousing returnWarehousing = new ReturnWarehousing() .setWarehousingNum(receiveGoods1.getWarehousingNum()) .setGsCk(warehousingVirtual1.getGsCk()) .setSourceType(receiveGoods1.getSourceType()) .setMoveType(receiveGoods1.getMoveType()) .setEntryNumber(receiveGoods1.getEntryNumber()) .setWbs(receiveGoods1.getWbs()) .setReceiveGoodsId(receiveGoods1.getId()) .setMaterialId(receiveGoods1.getMaterialId()) .setStorageCode(codeGenerateRk()) .setOrderNumber(receiveGoods1.getOrderNumber()); warehousingMapper.addReturnWarehousing(returnWarehousing); //判断是否有已存在的采购单号 if(!stringBuilder.toString().contains(receiveGoods1.getOrderNumber() + ",")){ stringBuilder.append(receiveGoods1.getOrderNumber() + ","); } } warehousingVirtual1.setNum(String.valueOf(numInto)); } } warehousingMapper.delVirtual(uniqueCode);//删除临时表数据 map.put("data", stringBuilder.toString()); map.put("msg", "200"); } catch (Exception e){ e.printStackTrace(); map.put("msg", "500"); map.put("errMsg", "服务器请求异常,请稍后再试"); } return map; } @Override public void plugOutWarehousing(String orderNumber) { try{ Calendar cal = Calendar.getInstance(); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH) + 1; int day = cal.get(Calendar.DATE) ; List list = new ArrayList<>(); for(ReturnWarehousing returnWarehousing : warehousingMapper.getPlugOutWarehousing(orderNumber)){ returnWarehousing.setYear(String.valueOf(year)); returnWarehousing.setMonth(String.valueOf(month)); returnWarehousing.setTime(year + "-" + month + "-" + day); returnWarehousing.setIsNotRed("0"); list.add(returnWarehousing); } }catch (Exception e){ e.printStackTrace(); } } @Override public Map warehousingFlowing(Storage storage) { Map map = new HashMap<>(); try{ PageHelper.startPage(storage.getPage(), storage.getLimit()); PageInfo list = new PageInfo<>(warehousingMapper.warehousingFlowing(storage)); 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 getWarehousingVirtual(String uniqueCode) { Map map = new HashMap<>(); try{ List list = warehousingMapper.getWarehousingVirtual(uniqueCode); 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(Storage storage, HttpServletResponse response) { try{ //导出数据汇总 List> sheetDataList = new ArrayList<>(); //表头数据 List head = Arrays.asList("物料名称", "供应商名称", "连翻号", "生产日期", "生产批次", "容量", "序列号", "类型", "用户名称", "部门", "库位名称", "入库日期"); //查询数据 PageHelper.startPage(storage.getPage(), storage.getLimit()); PageInfo> list = new PageInfo<>(warehousingMapper.export(storage)); sheetDataList.add(head); for(Map userMap : list.getList()){ 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(); } } /** * 入库单生成 * @return */ public String codeGenerateRk(){ StringBuilder stringBuilder = new StringBuilder("RK"); Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd"); stringBuilder.append(sdf.format(date)); int count = warehousingMapper.getWarehousingCount(); for(int i = 0; i < 4 - (count + "").length(); i++){ stringBuilder.append("0"); } return (stringBuilder.append(count + 1)).toString(); } }