QisdaController.java 10.0 KB
package com.myproject.webapp.controller.qisda;

import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.myproject.bean.qisda.*;
import com.myproject.bean.update.qisda.DNInfo;
import com.myproject.bean.update.qisda.DNItem;
import com.myproject.bean.update.qisda.OutInfo;
import com.myproject.bean.update.qisda.OutItem;
import com.myproject.dao.mongo.IDataLogDao;
import com.myproject.dao.mongo.IStoragePosDao;
import com.myproject.dao.mongo.qisda.IDNInfoDao;
import com.myproject.dao.mongo.qisda.IDNItemDao;
import com.myproject.dao.mongo.qisda.IOutInfoDao;
import com.myproject.dao.mongo.qisda.IOutItemDao;
import com.myproject.exception.ApiException;
import com.myproject.manager.IBarcodeManager;
import com.myproject.util.QisdaApi;
import com.myproject.util.StorageConstants;
import com.myproject.webapp.controller.qisda.util.OutInfoCache;
import com.myproject.webapp.controller.storage.BaseController;
import com.myproject.webapp.controller.webService.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;


/**
 * 佳世达
 */
@Controller
public class QisdaController extends BaseController {

    @Autowired
    private DataCache dataCache;

    @Autowired
    private ITaskService taskService;

    @Autowired
    protected IBarcodeManager barcodeManager;
    @Autowired
    private IDataLogDao dataLogDao;
    @Autowired
    private IDNInfoDao dNInfoDao;
    @Autowired
    private IDNItemDao dNItemDao;

    @Autowired
    private IOutInfoDao outInfoDao;

    @Autowired
    private IOutItemDao outItemDao;


    @Autowired
    private OutInfoCache outInfoCache;

    /**
     * DN单收料
     * @param request
     * @return
     */
    @RequestMapping("/qisda/dnIn")
    public String dnIn(HttpServletRequest request){
        //if(currentDnInfo != null){
            //if(currentDnInfo.isDNIn())
        //}
        return "qisda/dnIn";
    }

    private static String vimRfid = "";

    /**
     * 当前DN单
     */
    private static DNInfo currentDnInfo;

    /**
     * VMI入料处的RFID, 用于绑定DN单或者Facility
     * @param request
     * @return
     */
    @RequestMapping("/service/store/qisda/vmiRfid")
    @ResponseBody
    public String vmiRfid(HttpServletRequest request){
        String rfid = request.getParameter("rfid");
        vimRfid = rfid;
        DNInfo dnInfo = QisdaCache.getDnInfo(rfid);
        if(dnInfo != null){
            return "move";
        }else{
            //料串和包装料料架
//            if(StorageConstants.SHEFL_TYPE.isAShelf(rfid) || StorageConstants.SHEFL_TYPE.isBShelf(rfid) ){
//                if(currentDnInfo != null){
//                    rfidDnMap.put(rfid, currentDnInfo);
//                    log.info("自动绑定["+rfid+"]"+ currentDnInfo.getShowStr());
//                    return "move";
//                }
//            }
        }
        return "stop";
    }

    /**
     * 上料完成时,清除RFID信息
     */
    @RequestMapping("/service/store/qisda/clearPutInRfid")
    @ResponseBody
    public String clearPutInRfid(HttpServletRequest request){
        String rfid = request.getParameter("rfid");
        log.info("上料机构上料完成后,清理RFID["+rfid+"]信息");
        if(!Strings.isNullOrEmpty(rfid)){
            QisdaCache.clearRfidDn(rfid);
            String usedRfid = "=" + rfid;
            QisdaCache.clearRfidDn(usedRfid);
        }
        return "OK";
    }


    /**
     * 清除所有的绑定信息
     */
    @RequestMapping("/service/store/qisda/clearAllBind")
    @ResponseBody
    public String unBindAllReel(HttpServletRequest request){
        String soseq = request.getParameter("soseq");
        if(Strings.isNullOrEmpty(soseq)){
            return "无工单序号参数soseq,无法解绑";
        }
        ResultBean resultBean  = outInfoCache.closeSoSeq(soseq);
        return resultBean.getMsg();
    }

    /**
     * 关闭需求单,不进行绑定
     */
    @RequestMapping("/service/store/qisda/closeHSerial")
    @ResponseBody
    public String closeHSerial(HttpServletRequest request){
        String hSerial = request.getParameter("hSerial");
        ResultBean resultBean = outInfoCache.closeHSerial(hSerial);
        return resultBean.getMsg();
    }


    /**
     * 获取VMI线上当前的RFID
     * @param request
     * @return
     */
    @RequestMapping("/service/store/qisda/getVmiRfid")
    @ResponseBody
    public String getVmiRfid(HttpServletRequest request){
        return vimRfid;
    }

    /**
     * 将RFID和DN单绑定起来
     */
    @RequestMapping("/service/store/qisda/bindDn")
    @ResponseBody
    public String bindDn(HttpServletRequest request){
        if(dataCache.getSettings().isStopOut()){
            return "x系统更新中,暂停出入库,请稍后再试";
        }
        String rfid = request.getParameter("rfid");
        String dnNo = request.getParameter("dnNo");
        String facility = request.getParameter("facility");
//        if(Strings.isNullOrEmpty(rfid)){
//            rfid = vimRfid;
//        }
        if(Strings.isNullOrEmpty(rfid)){
            return "x未读到RFID";
        }
        rfid = rfid.toUpperCase();

        DNInfo newDnInfo = new DNInfo();
        if(Strings.isNullOrEmpty(dnNo)){
            //Facility收料
            log.info("开始绑定Facility ["+facility+"]到["+rfid+"]");
            newDnInfo.setFacilityInfo(facility);
        }else{
            //DN单收料
            log.info("开始绑定DN单 ["+dnNo+"]到["+rfid+"]");
            newDnInfo.setDnNo(dnNo);
        }

        if(newDnInfo.isCisIn()){
            return "xDn单号不能为空";
        }

        //停止当前DN单,并进行切换
        String stopCurrent = request.getParameter("stopCurrent");
        if(stopCurrent != null && stopCurrent.equals("true") || currentDnInfo == null){
            log.info("DN单["+dnNo+"]facility["+facility+"]切换操作");
            DNInfo dbDN = dNInfoDao.findDNInfo(newDnInfo.getDnNo());
            if(dbDN == null){
                if(newDnInfo.isDNIn()){
                    log.info("未找到DN单["+dnNo+"],从佳世达获取");
                    boolean isCheck = false;
                    try {
                        List<DNItem> dnItems = QisdaApi.GetDNDetails(dnNo, isCheck);
                        dNItemDao.insertAll(dnItems);
                        newDnInfo = dNInfoDao.save(newDnInfo);
                        newDnInfo.addItems(dnItems);
                    } catch (ApiException e) {
                        return e.getMessage();
                    }
                }else if(newDnInfo.isFacilityIn()){
                    log.info("新建Facility["+newDnInfo.getDnNo()+"]收料");
                    newDnInfo = dNInfoDao.save(newDnInfo);
                }
            }

            currentDnInfo = newDnInfo;
            QisdaCache.bindRfidDnInfo(rfid, currentDnInfo);

            String msg = "设置["+rfid+"]"+ newDnInfo.getShowStr()+"成功";
            log.info(msg);
            return "OK"+msg;

        }else{
            String currentDnNo = "";
            if(currentDnInfo != null){
                currentDnNo = currentDnInfo.getDnNo();
            }
            if(!newDnInfo.getDnNo().equals(currentDnNo)){
                return "c是否停止当前操作:"+currentDnInfo.getShowStr()+"?";
            }
            QisdaCache.bindRfidDnInfo(rfid, currentDnInfo);
            String msg = "设置["+rfid+"]"+ newDnInfo.getShowStr()+"成功";
            log.info(msg);
            return "OK"+msg;
        }
    }

    /**
     * 需求单顺序调整页面
     */
    @RequestMapping("/qisda/orderOut")
    public String orderOut(HttpServletRequest request){
        return "qisda/orderOut";
    }

    @RequestMapping("/service/store/qisda/changePriority")
    public String changePriority(HttpServletRequest request){
        String hSerialListStr = request.getParameter("hSerialList");
        if(Strings.isNullOrEmpty(hSerialListStr)){
            return "参数为空";
        }
        log.info("更改需求单出库优先级:" + hSerialListStr);
        String[] hSerialArray = hSerialListStr.split(";");
        List<String> hSerialList = Lists.newArrayList(hSerialArray);
        outInfoCache.changePriority(hSerialList);
        return "";
    }



    @RequestMapping(value = "/service/store/qisda/outInfoList")
    @ResponseBody
    public Collection<OutInfo> outInfoList(HttpServletRequest request){
        return outInfoCache.getCachedOutInfos();
    }


    @RequestMapping("/service/store/qisda/dnInfo")
    @ResponseBody
    public DNInfo getDnItems(HttpServletRequest request){
        DNInfo dnInfo = currentDnInfo;
        if(dnInfo != null){
            List<DNItem> items = dNItemDao.findDnItems(dnInfo.getDnNo());
            dnInfo.addItems(items);
        }
        return dnInfo;
    }

    @RequestMapping(value = "/service/store/qisda/dnDetail")
    @ResponseBody
    public DNInfo dnDetail(HttpServletRequest request){
        String dnNo = request.getParameter("dnNo");
        if(Strings.isNullOrEmpty(dnNo)){
            return null;
        }
        DNInfo dnInfo = dNInfoDao.findDNInfo(dnNo);
        if(dnInfo != null){
            List<DNItem> items = dNItemDao.findDnItems(dnNo);
            dnInfo.addItems(items);
        }
        return dnInfo;
    }


    @RequestMapping(value = "/service/store/qisda/outDetail")
    @ResponseBody
    public OutInfo outDetail(HttpServletRequest request){
        String hSerial = request.getParameter("hSerial");
        if(Strings.isNullOrEmpty(hSerial)){
            return null;
        }
        OutInfo outInfo = outInfoDao.findByHSerial(hSerial);

        if(outInfo != null){
            List<OutItem> items = outItemDao.findByHSerial(hSerial);
            outInfo.updateOutItems(items);
        }
        return outInfo;
    }

}