package com.steerinfo.dil.service.impl; import com.steerinfo.dil.mapper.WmspInboundDistributeMapper; import com.steerinfo.dil.model.WmspInboundDistribute; import com.steerinfo.dil.service.IWmspInboundDistributeService; import com.steerinfo.dil.util.IDUtils; import com.steerinfo.framework.mapper.IBaseMapper; import com.steerinfo.framework.service.impl.BaseServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.*; /** * WmspInboundDistribute服务实现: * @author generator * @version 1.0-SNAPSHORT 2022-01-10 02:48 * 类描述 * 修订历史: * 日期:2022-01-10 * 作者:generator * 参考: * 描述:WmspInboundDistribute服务实现 * @see null * @Copyright 湖南视拓信息技术股份有限公司. All rights reserved. */ @Service(value = "wmspInboundDistributeService") public class WmspInboundDistributeServiceImpl extends BaseServiceImpl implements IWmspInboundDistributeService { @Autowired private WmspInboundDistributeMapper wmspInboundDistributeMapper; @Autowired private CommonServiceImpl commonService; @Autowired private WmspInboundDistributeServiceImpl wmspInboundDistributeService; @Override protected IBaseMapper getMapper() { return wmspInboundDistributeMapper; } @Override public WmspInboundDistribute initAndCreateInboundDistribute(BigDecimal personnelWorkshopid,BigDecimal groupId, String userName, int batch) { //一、创建一个批次信息 WmspInboundDistribute wmspInboundDistribute=new WmspInboundDistribute(); //初始化下发批次信息 //主键 wmspInboundDistribute.setDistributeId(IDUtils.createIDYMDHMS(commonService.getSeqCount("seq_WMSP_INBOUND_DISTRIBUTE"))); //分组 wmspInboundDistribute.setInboundGroupId(groupId); //入库状态 1、下发中、2、已完成、3、已接受、4、已结束 //如果两个都已经下发改变状态为已下发、只有一个下发改变状态为下发中 //2、并且当前改变当前用户的,未下发状态为已经下发(给扫码实绩赋值入库实绩id) wmspInboundDistribute.setResultStatus(new BigDecimal(1)); //当前用户批次 wmspInboundDistribute.setBatch(new BigDecimal(batch)); //行车工 没有接收是没有这个字段的 //wmspInboundDistribute.setDistributeId(); //创建用户 wmspInboundDistribute.setInsertUsername(userName); //创建时间 wmspInboundDistribute.setInsertTime(new Date()); //仓库 wmspInboundDistribute.setPersonnelWorkshopid(personnelWorkshopid); //插入数据库 int status = wmspInboundDistributeMapper.insertSelective(wmspInboundDistribute); return status>0?wmspInboundDistribute:null; } @Override public List> getNewDistribute(Integer personnelWorkshopid) { List> result= wmspInboundDistributeMapper.getNewDistribute(personnelWorkshopid); return wmspInboundDistributeService.getInboundList(result); } /** * 改变状态,添加行车工信息 * @param mapValue * @return */ @Override public synchronized Integer grabDistribute(Map mapValue) { //判断这一批是否被其他人抢了 Integer status= wmspInboundDistributeMapper.getDistributeStatus(mapValue.get("distributeId")); //如果没有被抢就设置位当前用户得单 if (status==2){ return wmspInboundDistributeMapper.grabDistribute(mapValue); } return 0; } // 根据获取到的带吊装list进行处理 @Override public List> getInboundList(List> result) { // 创建set集合用来存储唯一的number HashSet set =new HashSet<>(); List> result1=new ArrayList<>(); // 遍历result for(Map map:result){ // 判断number是否取值为空 if (map.get("gridSequenceNumber")!=null) { // 取出map中的number值 // 层序号 BigDecimal gridSequenceNumber = (BigDecimal) map.get("gridSequenceNumber"); // 月台Id BigDecimal platformId = (BigDecimal)map.get("platformId"); // 层次号 BigDecimal gridGradationNumber = (BigDecimal)map.get("gridGradationNumber"); // 仓库Id String warehouseId = map.get("warehouseId").toString(); // 垛位Id BigDecimal stackingId = (BigDecimal)map.get("stackingId"); // 拼接物资的存储位置 String number = warehouseId.toString()+platformId.toString()+stackingId.toString()+gridSequenceNumber.toString()+gridGradationNumber.toString(); // 判断这个number值在set集合中是否已经存在,如果不存在则进行存储 System.out.println(number); if (!set.contains(number)){ set.add(number); result1.add(map); } }else { // 月台Id BigDecimal platformId = (BigDecimal)map.get("platformId"); // 仓库Id String warehouseId = map.get("warehouseId").toString(); // 垛位Id BigDecimal resultNumber = (BigDecimal)map.get("resultNumber"); // 拼接物资的存储位置 String number = warehouseId.toString()+platformId.toString()+resultNumber.toString(); // 判断这个number值在set集合中是否已经存在,如果不存在则进行存储 System.out.println(number); if (!set.contains(number)){ set.add(number); result1.add(map); } } } // 遍历list集合,对数据按照resultNumber从小到大排序 // 方法1: // 遍历result1,获取关于resultNumber正确排序的集合 int [] array =new int[result1.size()]; int i=0; for (Map map:result1){ Integer num = Integer.valueOf(map.get("resultNumber").toString()); array[i] = num; i++; } // 对list排序 Arrays.sort(array); // 根据排序好的array数组进行对list的重新排序 List> result2=new ArrayList<>(); // 遍历result1和遍历数组 for(int j=0;j map:result1){ int a = Integer.valueOf(map.get("resultNumber").toString()); if (array[j]==a){ result2.add(map); } } } // 返回过滤之后的list return result2; } @Override public int updateDistributeStatus(String distributeId) { return wmspInboundDistributeMapper.updateDistributeStatus(distributeId); } }