自动化立体仓库 - WMS系统
pang.jiabao
4 天以前 74863c38a407b1e0f36250dfa0c63e5da7fe5f66
src/main/java/com/zy/asrs/service/impl/DigitalTwinServiceImpl.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.common.R;
import com.zy.asrs.entity.BasCrnp;
import com.zy.asrs.entity.LocCount;
import com.zy.asrs.entity.LocDetl;
import com.zy.asrs.entity.LocMast;
@@ -10,12 +11,16 @@
import com.zy.asrs.entity.mes.StockDetl;
import com.zy.asrs.mapper.DigitalTwinMapper;
import com.zy.asrs.mapper.LocCountMapper;
import com.zy.asrs.service.BasCrnpService;
import com.zy.asrs.service.DigitalTwinService;
import com.zy.asrs.service.LocDetlService;
import com.zy.asrs.service.LocMastService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
@@ -63,24 +68,32 @@
     */
    public List<DtOrderVo> order(String startDate, String endDate) {
        String startTime;
        String endTime;
        Date startTime = new Date();
        Date endTime = new Date();
        if (startDate == null || endDate == null || startDate.isEmpty() || endDate.isEmpty()){
            Date now = new Date();
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(now);
            calendar.add(Calendar.DAY_OF_MONTH, -7);
            Date start = calendar.getTime();
            startTime = calendar.getTime();
            endTime = now;
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
            endDate = sdf.format(now);
            startDate = sdf.format(start);
        } else {
            SimpleDateFormat sdf =
                    new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
            try {
                startTime  = sdf.parse(startDate);
                endTime = sdf.parse(endDate);
            } catch (ParseException e) {
                e.printStackTrace();
        }
        startTime = startDate.substring(0, 4) + "-" + startDate.substring(4, 6) + "-" + startDate.substring(6, 8) + "00:00:00";
        endTime = endDate.substring(0, 4) + "-" + endDate.substring(4, 6) + "-" + endDate.substring(6, 8) + "00:00:00";
        }
        List<DtOrderVo> dbOrder = digitalTwinMapper.recentOrder(startTime, endTime);
        // 空日期补全
        for (DtOrderVo dtOrderVo : dbOrder) {
            dtOrderVo.setOrderDate(dtOrderVo.getOrderDate());
        }
        return dbOrder;
    }
@@ -95,27 +108,34 @@
     */
    public List<DtInAndOutBoundVo> inAndOutBound(String areaId, String startDate, String endDate) {
        List<DtInAndOutBoundVo> dtInAndOutBoundVos = new ArrayList<>();
        String startTime;
        String endTime;
        Date startTime = new Date();
        Date endTime = new Date();
        if (startDate == null || endDate == null || startDate.isEmpty() || endDate.isEmpty()){
            Date now = new Date();
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(now);
            calendar.add(Calendar.DAY_OF_MONTH, -7);
            Date start = calendar.getTime();
            startTime = calendar.getTime();
            endTime = now;
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
            endDate = sdf.format(now);
            startDate = sdf.format(start);
        } else {
            SimpleDateFormat sdf =
                    new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
            try {
                startTime  = sdf.parse(startDate);
                endTime = sdf.parse(endDate);
            } catch (ParseException e) {
                e.printStackTrace();
        }
        startTime = startDate.substring(0, 4) + "-" + startDate.substring(4, 6) + "-" + startDate.substring(6, 8) + "00:00:00";
        endTime = endDate.substring(0, 4) + "-" + endDate.substring(4, 6) + "-" + endDate.substring(6, 8) + "00:00:00";
        }
        List<DtInAndOutBoundVo> dtInBoundVos = digitalTwinMapper.recentInBound(areaId, startTime, endTime);
        List<DtInAndOutBoundVo> dtOutBoundVos = digitalTwinMapper.recentOutBound(areaId, startTime, endTime);
        // 格式整理
        List<DtInAndOutBoundVo> dtInAndOutBoundVos = new ArrayList<>(dtInBoundVos);
        dtInAndOutBoundVos.addAll(dtOutBoundVos);
        return dtInAndOutBoundVos;
    }
@@ -140,12 +160,10 @@
        calendar.setTime(now);
        calendar.add(Calendar.DAY_OF_MONTH, -overDayNum);
        Date start = calendar.getTime();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String startTime = sdf.format(start);
//        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        Date startTime = sdf.parse(start);
        List<DtDetainMatVo> dbDetainMats = digitalTwinMapper.recentDetainMat(areaId, startTime, pageIndex, pageSize);
        return dbDetainMats;
        return digitalTwinMapper.recentDetainMat(areaId, start, pageIndex, pageSize);
    }
    @Resource
@@ -160,36 +178,73 @@
     * @param areaId
     * @return
     */
    public List<DtLocDetailVo> warehouseDetail2(String areaId) {
        List<LocMast> locMastList = locMastService.selectList(new EntityWrapper<>());
        return locMastList.stream()
                .map(loc -> {
                    DtLocDetailVo vo = new DtLocDetailVo();
                    BeanUtils.copyProperties(loc, vo);
                    return vo;
                })
                .collect(Collectors.toList());
    }
    /**
     * 查询库存和库位详细信息
     *
     * @param areaId
     * @return
     */
    public R warehouseDetail(String areaId) {
        List<LocDetl> locDetls;
        locDetls = locDetlService.selectList(new EntityWrapper<>());
        List<DtLocDetailVo> locDetailVos = new ArrayList<>();
        List<String> locNoList = locDetls.stream().map(LocDetl::getLocNo).distinct().collect(Collectors.toList());
        List<DtLocDetailVo> dtLocDetailVoList = new ArrayList<>();
        for (String locNo: locNoList) {
            LocMast locMast = locMastService.selectById(locNo);
        List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts","F"));
        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<>());
        for (LocMast locMast : locMasts) {
            DtLocDetailVo dtLocDetailVo = new DtLocDetailVo();
            dtLocDetailVo.setLocNo(locNo);
            dtLocDetailVo.setLocMast(locMast);
            dtLocDetailVo.setLocNo(locMast.getLocNo());
            dtLocDetailVo.setLocSts(locMast.getLocSts());
            dtLocDetailVo.setRow1(locMast.getRow1());
            dtLocDetailVo.setBay1(locMast.getBay1());
            dtLocDetailVo.setLev1(locMast.getLev1());
            List<LocDetl> locDetlList2 = locDetls.parallelStream().filter(o-> o.getLocNo().equals(locNo)).collect(Collectors.toList());
            List<StockDetl> stockDetls = new ArrayList<>();
            for(LocDetl locDetl:locDetlList2) {
                StockDetl stockDetl = new StockDetl();
                stockDetl.setMatnr(locDetl.getMatnr());
                stockDetl.setMaktx(locDetl.getMaktx());
                stockDetl.setAnfme(locDetl.getAnfme());
                stockDetls.add(stockDetl);
            for (LocDetl locDetl : locDetls) {
                List<LocDetl> locDetl1 = locDetls.parallelStream().filter(a -> a.getLocNo().equals(locDetl.getLocNo())).collect(Collectors.toList());
                if (locDetl1.size() == 1) {
                    dtLocDetailVo.setLocDetl(locDetl1.get(0));
//                    dtLocDetailVo.setAreaId(locDetl.getAreaId());
//                    dtLocDetailVo.setAreaName(locDetl.getAreaName());
            }
            dtLocDetailVo.setLocDetl(stockDetls);
            dtLocDetailVoList.add(dtLocDetailVo);
            }
            locDetailVos.add(dtLocDetailVo);
        }
        return R.ok(dtLocDetailVoList);
        return R.ok(locDetailVos);
//        List<DtLocDetailVo> locDetailVos = new ArrayList<>();
//
//        List<LocMast> locMasts = new ArrayList<>();
//        List<LocDetl> locDetls = new ArrayList<>();
//
//        for (LocMast locMast : locMasts) {
//            DtLocDetailVo dtLocDetailVo = new DtLocDetailVo();
//            dtLocDetailVo.setLocMast(locMast);
//            dtLocDetailVo.setLocNo(locMast.getLocNo());
//            dtLocDetailVo.setLocSts(locMast.getLocSts());
//            dtLocDetailVo.setRow1(locMast.getRow1());
//            dtLocDetailVo.setBay1(locMast.getBay1());
//            dtLocDetailVo.setLev1(locMast.getLev1());
//            for (LocDetl locDetl : locDetls) {
//                List<LocDetl> locDetl1 = locDetls.parallelStream().filter(a -> a.getLocNo().equals(locDetl.getLocNo())).collect(Collectors.toList());
//                if (locDetl1 != null && locDetl1.size() == 1) {
//                    dtLocDetailVo.setLocDetl(locDetl1.get(0));
//                    dtLocDetailVo.setAreaId(locDetl.getAreaId());
//                    dtLocDetailVo.setAreaName(locDetl.getAreaName());
//                }
//            }
//            locDetailVos.add(dtLocDetailVo);
//        }
//
//        return locDetailVos;
    }
    /**
@@ -217,11 +272,11 @@
        }
        List<LocCount> locCounts;
        if(areaId.isEmpty()){
//        if(areaId.isEmpty()){
            locCounts = locCountMapper.getByDate(Integer.parseInt(startDate), Integer.parseInt(endDate));
        } else {
            locCounts = locCountMapper.getByAreaAndDate(areaId, Integer.parseInt(startDate), Integer.parseInt(endDate));
        }
//        } else {
//            locCounts = locCountMapper.getByAreaAndDate(areaId, Integer.parseInt(startDate), Integer.parseInt(endDate));
//        }
        for (LocCount locCount : locCounts) {
            String date = locCount.getDate().toString();
@@ -240,30 +295,34 @@
     * 定期统计剩余库存
     *
     */
    @Transactional
    public void locNumCount() {
        List<LocCount> result = new ArrayList<>();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        String date = sdf.format(new Date());
        List<LocCount> totalLoc = locCountMapper.totalLoc();
        List<LocCount> useLoc = locCountMapper.useLoc();
        for (LocCount locCount : totalLoc) {
            LocCount locCount1 = new LocCount();
            locCount1.setDate(Integer.valueOf(date));
            locCount1.setAreaId(locCount.getAreaId());
            locCount1.setLocNum(locCount1.getLocNum());
            for (LocCount locCount2 : useLoc) {
                if(locCount1.getAreaId().equals(locCount2.getAreaId())){
                    locCount1.setRemainNum(locCount1.getLocNum() - locCount2.getLocNum());
                }
            }
            result.add(locCount1);
        locCount1.setLocNum(totalLoc.get(0).getLocNum());
        locCount1.setRemainNum(locCount1.getLocNum() - useLoc.get(0).getLocNum());
        locCountMapper.insertOrUpdate(locCount1);
        }
        for (LocCount locCount  : result) {
            locCountMapper.insertOrUpdate(locCount);
        }
    @Resource
    private BasCrnpService basCrnpService;
    @Override
    public DtEquipmentVo equipment(String areaId) {
        return new DtEquipmentVo();
//        BasCrnp crnp = basCrnpService.selectOne(new EntityWrapper<>());
//        return DtEquipmentVo.builder()
//                .equipmentId("1").equipmentName("堆垛机1").equipmentType(1)
//                .belongAreaId("A").belongAreaName("加工库").verticalSpeed(Integer.valueOf(crnp.getCtlHp()))
//                .horizontalSpeed(Integer.valueOf(crnp.getCtlRest())).voltage(220).status(crnp.getCrnErr() == 0 ? 1 : 3).operateMethod(crnp.getCrnSts() == 3 ? 1 : 3).build();
    }