package com.ycsoft.sysmanager.component.resource; import java.io.File; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; import org.springframework.stereotype.Component; import com.ycsoft.beans.config.TBusiCmdSupplier; import com.ycsoft.beans.config.TDeviceBuyMode; import com.ycsoft.beans.core.common.CDoneCode; import com.ycsoft.beans.core.common.CDoneCodeDetail; import com.ycsoft.beans.core.cust.CCust; import com.ycsoft.beans.core.cust.CCustDevice; import com.ycsoft.beans.core.user.CUser; import com.ycsoft.beans.depot.RDepotDefine; import com.ycsoft.beans.device.RCard; import com.ycsoft.beans.device.RCardModel; import com.ycsoft.beans.device.RDevice; import com.ycsoft.beans.device.RDeviceChange; import com.ycsoft.beans.device.RDeviceDoneDetail; import com.ycsoft.beans.device.RDeviceDoneDeviceid; import com.ycsoft.beans.device.RDeviceEdit; import com.ycsoft.beans.device.RDeviceInput; import com.ycsoft.beans.device.RDeviceModel; import com.ycsoft.beans.device.RDeviceOrder; import com.ycsoft.beans.device.RDeviceOrderDetail; import com.ycsoft.beans.device.RDeviceOutput; import com.ycsoft.beans.device.RDeviceProcure; import com.ycsoft.beans.device.RDeviceReclaim; import com.ycsoft.beans.device.RDeviceSupplier; import com.ycsoft.beans.device.RDeviceTransfer; import com.ycsoft.beans.device.RModem; import com.ycsoft.beans.device.RModemModel; import com.ycsoft.beans.device.RPairCfg; import com.ycsoft.beans.device.RStb; import com.ycsoft.beans.device.RStbModel; import com.ycsoft.beans.system.SCounty; import com.ycsoft.beans.system.SDataRightType; import com.ycsoft.beans.system.SDept; import com.ycsoft.beans.system.SOptr; import com.ycsoft.beans.system.SRole; import com.ycsoft.business.commons.pojo.BusiParameter; import com.ycsoft.business.dao.config.TBusiCmdSupplierDao; import com.ycsoft.business.dao.config.TDeviceBuyModeDao; import com.ycsoft.business.dao.core.common.CDoneCodeDetailDao; import com.ycsoft.business.dao.core.job.JBusiCmdDao; import com.ycsoft.business.dao.core.user.CUserDao; import com.ycsoft.business.dao.resource.device.RCardDao; import com.ycsoft.business.dao.resource.device.RDepotDefineDao; import com.ycsoft.business.dao.resource.device.RDeviceChangeDao; import com.ycsoft.business.dao.resource.device.RDeviceDifeenceDao; import com.ycsoft.business.dao.resource.device.RDeviceDoneDetailDao; import com.ycsoft.business.dao.resource.device.RDeviceDoneDeviceidDao; import com.ycsoft.business.dao.resource.device.RDeviceEditDao; import com.ycsoft.business.dao.resource.device.RDeviceHisDao; import com.ycsoft.business.dao.resource.device.RDeviceInputDao; import com.ycsoft.business.dao.resource.device.RDeviceModelDao; import com.ycsoft.business.dao.resource.device.RDeviceOrderDao; import com.ycsoft.business.dao.resource.device.RDeviceOrderDetailDao; import com.ycsoft.business.dao.resource.device.RDeviceOutputDao; import com.ycsoft.business.dao.resource.device.RDeviceProcureDao; import com.ycsoft.business.dao.resource.device.RDeviceReclaimDao; import com.ycsoft.business.dao.resource.device.RDeviceSupplierDao; import com.ycsoft.business.dao.resource.device.RDeviceTransferDao; import com.ycsoft.business.dao.resource.device.RDeviceTypeDao; import com.ycsoft.business.dao.resource.device.RDeviceUseRecordsDao; import com.ycsoft.business.dao.resource.device.RModemDao; import com.ycsoft.business.dao.resource.device.RStbDao; import com.ycsoft.business.dao.system.SCountyDao; import com.ycsoft.business.dao.system.SDeptDao; import com.ycsoft.business.dto.core.cust.CustFullInfoDto; import com.ycsoft.business.service.externalImpl.ICustServiceExternal; import com.ycsoft.commons.constants.BusiCodeConstants; import com.ycsoft.commons.constants.DataRight; import com.ycsoft.commons.constants.DataRightLevel; import com.ycsoft.commons.constants.StatusConstants; import com.ycsoft.commons.constants.SystemConstants; import com.ycsoft.commons.exception.ComponentException; import com.ycsoft.commons.exception.ErrorCode; import com.ycsoft.commons.helper.CollectionHelper; import com.ycsoft.commons.helper.DateHelper; import com.ycsoft.commons.helper.FileHelper; import com.ycsoft.commons.helper.LoggerHelper; import com.ycsoft.commons.helper.StringHelper; import com.ycsoft.daos.core.JDBCException; import com.ycsoft.daos.core.Pager; import com.ycsoft.sysmanager.dto.depot.RDeviceTransferDto; import com.ycsoft.sysmanager.dto.resource.DeviceDetailInputDto; import com.ycsoft.sysmanager.dto.resource.DeviceDto; import com.ycsoft.sysmanager.dto.resource.DeviceInputDetailDto; import com.ycsoft.sysmanager.dto.resource.DeviceProcureDto; import com.ycsoft.sysmanager.dto.resource.DeviceReclaimDto; import com.ycsoft.sysmanager.dto.system.RDepotDto; import com.ycsoft.sysmanager.dto.system.SDeptDto; import com.ycsoft.sysmanager.web.commons.interceptor.WebOptr; /** * @author liujiaqi * */ @Component public class DeviceComponent extends BaseDeviceComponent { private RDeviceTransferDao rDeviceTransferDao; private RDepotDefineDao rDepotDefineDao; private RDeviceSupplierDao rDeviceSupplierDao; private RDeviceInputDao rDeviceInputDao; private RDeviceDoneDetailDao rDeviceDoneDetailDao; private RDeviceOrderDao rDeviceOrderDao; private RDeviceDoneDeviceidDao rDeviceDoneDeviceidDao; private RDeviceHisDao rDeviceHisDao; private RStbDao rStbDao; private RCardDao rCardDao; private RModemDao rModemDao; private RDeviceOrderDetailDao rDeviceOrderDetailDao; private RDeviceProcureDao rDeviceProcureDao; private RDeviceOutputDao rDeviceOutputDao; private RDeviceEditDao rDeviceEditDao; private RDeviceReclaimDao rDeviceReclaimDao; private RDeviceChangeDao rDeviceChangeDao; private ICustServiceExternal custService; private TBusiCmdSupplierDao tBusiCmdSupplierDao; private CUserDao cUserDao; private RDeviceDifeenceDao rDeviceDifeenceDao; private CDoneCodeDetailDao cDoneCodeDetailDao; private RDeviceUseRecordsDao rDeviceUseRecordsDao; private JBusiCmdDao jBusiCmdDao; private SDeptDao sDeptDao; private TDeviceBuyModeDao tDeviceBuyModeDao; private SCountyDao sCountyDao; private RDeviceModelDao rDeviceModelDao; private RDeviceTypeDao rDeviceTypeDao; public void setRDeviceDifeenceDao(RDeviceDifeenceDao deviceDifeenceDao) { rDeviceDifeenceDao = deviceDifeenceDao; } public void updateDeviceLoss(String deviceId,String isLossed,SOptr optr) throws Exception { RDevice rd = rDeviceDao.findByKey(deviceId); rDeviceDao.updateDeviceLoss(deviceId, isLossed); saveDeviceChange(gDoneCode(), BusiCodeConstants.DEVICE_LOSS, rd .getDevice_id(), "is_loss", rd.getIs_loss(), isLossed, optr); } //查询空闲的设备 public Pager<DeviceDto> queryIdleDevice(String deviceCode, SOptr optr, Integer start, Integer limit) throws Exception { String depotId = findDepot(optr); return rDeviceDao.queryIdleDevice(deviceCode, depotId, start, limit); } public String saveLossDevice(String deviceCode, SOptr optr) throws Exception { RDevice rd = rDeviceDao.findByDeviceCode(deviceCode); String depotId = findDepot(optr); RDevice device = rDeviceDao.queryByDeviceCode(deviceCode); checkDevice(depotId, device,deviceCode,false); rDeviceDao.updateDeviceLoss(rd.getDevice_id(), SystemConstants.BOOLEAN_TRUE); saveDeviceChange(gDoneCode(), BusiCodeConstants.DEVICE_LOSS, rd .getDevice_id(), "is_loss", rd.getIs_loss(), SystemConstants.BOOLEAN_TRUE, optr); return rd.getDevice_type(); } private void saveDeviceChange(Integer doneCode, String busiCode, String deviceId, String columnName, String oldValue, String newValue, SOptr optr) throws Exception { RDeviceChange chg = new RDeviceChange(); chg.setDone_code(doneCode); chg.setBusi_code(busiCode); chg.setDevice_id(deviceId); chg.setColumn_name(columnName); chg.setOld_value(oldValue); chg.setNew_value(newValue); chg.setChange_date(DateHelper.now()); chg.setArea_id(optr.getArea_id()); chg.setCounty_id(optr.getCounty_id()); chg.setOptr_id(optr.getOptr_id()); chg.setDept_id(optr.getDept_id()); rDeviceChangeDao.save(chg); } /** * 修改退库单号 * @param deviceDoneCode * @param remark * @param procureNo * @throws Exception */ public void editOutputNo(Integer deviceDoneCode,String outputNo, String remark) throws Exception { rDeviceOutputDao.editOutputNo(deviceDoneCode, outputNo,remark); } /** * 修改领用单号 * @param deviceDoneCode * @param procureNo * @throws Exception */ public void editProcureNo(Integer deviceDoneCode,String procureNo) throws Exception { rDeviceProcureDao.editProcureNo(deviceDoneCode, procureNo); } /** * 修改待回收设备状态 * @param doneCode * @param status * @throws Exception */ public void updateDeviceReclaimStatus(Integer doneCode, String deviceId,String status) throws Exception { rDeviceReclaimDao.updateStatus(doneCode, deviceId, status); } public void saveDoneCode(Integer doneCode, String busiCode,String custId,SOptr optr) throws Exception{ CDoneCode cDoneCode = new CDoneCode(); cDoneCode.setDone_code(doneCode); cDoneCode.setBusi_code(busiCode); cDoneCode.setStatus(StatusConstants.ACTIVE); cDoneCode.setArea_id(optr.getArea_id()); cDoneCode.setCounty_id(optr.getCounty_id()); cDoneCode.setDept_id(optr.getDept_id()); cDoneCode.setOptr_id(optr.getOptr_id()); cDoneCodeDao.save(cDoneCode); if (StringHelper.isNotEmpty(custId)){ CDoneCodeDetail detail = new CDoneCodeDetail(); detail.setDone_code(doneCode); detail.setCust_id(custId); detail.setArea_id(optr.getArea_id()); detail.setCounty_id(optr.getCounty_id()); cDoneCodeDetailDao.save(detail); } } /** * 取消确认 * @param doneCode * @param deviceId * @throws Exception */ public void cancelReclaimDevice(Integer doneCode, String deviceId,SOptr optr) throws Exception { RDevice stbDevice = rDeviceDao.findByKey(deviceId); stbDevice.setDepot_status(StatusConstants.USE); rDeviceDao.update(stbDevice); rDeviceReclaimDao.updateReclaimDevice(doneCode, deviceId, StatusConstants.UNCONFIRM, null, null); saveDeviceChange(doneCode, BusiCodeConstants.CANCEL_RECLAIM_DEVICE,deviceId , "depot_status", StatusConstants.IDLE,StatusConstants.USE,optr); RStb stb = rStbDao.findByKey(deviceId); if(stb != null){ if(stb.getPair_card_id()!=null){ RDevice card = rDeviceDao.findByKey(stb.getPair_card_id()); card.setDepot_status(StatusConstants.USE); rDeviceDao.update(card); rDeviceReclaimDao.updateReclaimDevice(doneCode, stb.getPair_card_id(), StatusConstants.UNCONFIRM, null, null); saveDeviceChange(doneCode, BusiCodeConstants.CANCEL_RECLAIM_DEVICE,stb.getPair_card_id() , "depot_status", StatusConstants.IDLE,StatusConstants.USE,optr); } if(stb.getPair_modem_id()!=null){ RDevice modem = rDeviceDao.findByKey(stb.getPair_modem_id()); modem.setDepot_status(StatusConstants.USE); rDeviceDao.update(modem); rDeviceReclaimDao.updateReclaimDevice(doneCode, stb.getPair_modem_id(), StatusConstants.UNCONFIRM, null, null); saveDeviceChange(doneCode, BusiCodeConstants.CANCEL_RECLAIM_DEVICE,stb.getPair_modem_id() , "depot_status", StatusConstants.IDLE,StatusConstants.USE,optr); } }else{ RStb cardStb = rStbDao.findPairStbByCardDeviceId(deviceId); if(cardStb != null){ cardStb.setDepot_status(StatusConstants.USE); rDeviceDao.update(cardStb); if(cardStb.getPair_modem_id()!=null){ RDevice modem = rDeviceDao.findByKey(cardStb.getPair_modem_id()); modem.setDepot_status(StatusConstants.USE); rDeviceDao.update(modem); rDeviceReclaimDao.updateReclaimDevice(doneCode, cardStb.getPair_modem_id(), StatusConstants.UNCONFIRM, null, null); saveDeviceChange(doneCode, BusiCodeConstants.CANCEL_RECLAIM_DEVICE,cardStb.getPair_modem_id() , "depot_status", StatusConstants.IDLE,StatusConstants.USE,optr); } } RStb modemStb = rStbDao.findPairStbByModemDeviceId(deviceId); if(modemStb != null){ modemStb.setDepot_status(StatusConstants.USE); rDeviceDao.update(modemStb); if(modemStb.getPair_card_id()!=null){ RDevice card = rDeviceDao.findByKey(modemStb.getPair_card_id()); card.setDepot_status(StatusConstants.USE); rDeviceDao.update(card); rDeviceReclaimDao.updateReclaimDevice(doneCode, modemStb.getPair_card_id(), StatusConstants.UNCONFIRM, null, null); saveDeviceChange(doneCode, BusiCodeConstants.CANCEL_RECLAIM_DEVICE,modemStb.getPair_card_id() , "depot_status", StatusConstants.IDLE,StatusConstants.USE,optr); } } } CCustDevice custDevice = rDeviceDao.findCustDeviceByDeviceId(deviceId); if(custDevice != null){ saveDoneCode(gDoneCode(), BusiCodeConstants.CANCEL_RECLAIM_DEVICE, custDevice.getCust_id(), optr); } } /** * 配对的设备,如果配对的不是虚拟的,一并处理了. * 确认是否回收 * @param doneCode * @param deviceId * @param deviceStatus 设备状态 正常、损坏 * @param flag Boolean 是否回收 */ public void reclaimDevice(SOptr optr, Integer doneCode, String deviceId, String deviceStatus, String flag,String isNewStb) throws Exception { List<String> deviceIds = new ArrayList<String>(); RDevice rd = rDeviceDao.findByDeviceId(deviceId); com.ycsoft.business.dto.device.DeviceDto deviceDto = null; if (rd.getDevice_type().equals(SystemConstants.DEVICE_TYPE_CARD)) { RStb stb = rStbDao.findPairStbByCardDeviceId(rd.getDevice_id()); if (stb != null) { deviceDto = queryDeviceByDeviceId(stb.getDevice_id()); } }else if (rd.getDevice_type().equals(SystemConstants.DEVICE_TYPE_MODEM)) { RStb stb = rStbDao.findPairStbByModemDeviceId(rd.getDevice_id()); if (stb != null) { deviceDto = queryDeviceByDeviceId(stb.getDevice_id()); } }else{ deviceDto = queryDeviceByDeviceId(rd); } deviceIds.add(rd.getDevice_id()); if(deviceDto != null){ RCard pairCard = deviceDto.getPairCard(); if(null !=pairCard && SystemConstants.BOOLEAN_FALSE.equals(pairCard.getIs_virtual()) ){ deviceIds.add(pairCard.getDevice_id()); } RModem pairModem = deviceDto.getPairModem(); if(null !=pairModem && SystemConstants.BOOLEAN_FALSE.equals(pairModem.getIs_virtual())){ deviceIds.add(pairModem.getDevice_id()); } } if(flag.equals(SystemConstants.BOOLEAN_TRUE)){ RDeviceReclaim dr = rDeviceReclaimDao.queryReclaimDevice(doneCode, deviceId); CCust cust = new CCust(); cust.setCust_id(dr.getCust_id()); CustFullInfoDto custFull = new CustFullInfoDto(); custFull.setCust(cust); BusiParameter p = new BusiParameter(); p.setBusiCode(BusiCodeConstants.CONFIRM_RECLAIM_DEVICE); p.setCustFullInfo(custFull); p.setOptr(optr); for(String devId:deviceIds){ rDeviceReclaimDao.updateReclaimConfirm(doneCode, devId, optr.getOptr_id()); } custService.saveCancelDevice(p,deviceId, deviceStatus); rDeviceDao.updateIsNewStb(deviceIds.toArray(new String[deviceIds.size()]),isNewStb); //变更新机的记录 rDeviceChangeDao.saveDeviceChangeIsNewStb(doneCode,BusiCodeConstants.CONFIRM_RECLAIM_DEVICE,deviceIds.toArray(new String[deviceIds.size()]),isNewStb,WebOptr.getOptr().getOptr_id() ,WebOptr.getOptr().getDept_id(),WebOptr.getOptr().getCounty_id(),WebOptr.getOptr().getArea_id()); if(cust != null){ saveDoneCode(gDoneCode(), BusiCodeConstants.CONFIRM_RECLAIM_DEVICE, cust.getCust_id(), optr); } }else if(flag.equals(SystemConstants.BOOLEAN_FALSE)){ for(String devId:deviceIds){ updateDeviceReclaimStatus(doneCode, devId, StatusConstants.NOTCONFIRM); } } } public com.ycsoft.business.dto.device.DeviceDto queryDeviceByDeviceId(String deviceId) throws JDBCException { RDevice rd = rDeviceDao.findByDeviceId(deviceId); if (rd == null) return null; return queryDeviceByDeviceId(rd); } public com.ycsoft.business.dto.device.DeviceDto queryDeviceByDeviceId(RDevice rd) throws JDBCException { RDeviceModel deviceModel = null; String deviceCode = null; com.ycsoft.business.dto.device.DeviceDto dto = new com.ycsoft.business.dto.device.DeviceDto(); BeanUtils.copyProperties(rd, dto); if (rd.getDevice_type().equals(SystemConstants.DEVICE_TYPE_STB)) { deviceModel = rStbModelDao.findByDeviceId(rd.getDevice_id()); deviceCode = rStbDao.findByKey(rd.getDevice_id()).getStb_id(); // 设置配对信息 dto.setPairCard(rCardDao.findPairCardByStbDeviceId(rd.getDevice_id())); dto.setPairModem(rModemDao.findPairModemByStbDeviceId(rd.getDevice_id())); } else if (rd.getDevice_type().equals(SystemConstants.DEVICE_TYPE_CARD)) { deviceModel = rCardModelDao.findByDeviceId(rd.getDevice_id()); deviceCode = rCardDao.findByKey(rd.getDevice_id()).getCard_id(); if(StringHelper.isEmpty(dto.getIs_virtual())) dto.setIs_virtual(deviceModel.getIs_virtual()); if(null != rStbDao.findPairStbByCardDeviceId(rd.getDevice_id())){ //设置是否配对智能卡的标识位 dto.setIsPairCard(SystemConstants.BOOLEAN_TRUE); } } else if (rd.getDevice_type() .equals(SystemConstants.DEVICE_TYPE_MODEM)) { deviceModel = rModemModelDao.findByDeviceId(rd.getDevice_id()); deviceCode = rModemDao.findByKey(rd.getDevice_id()).getModem_mac(); if(StringHelper.isEmpty(dto.getIs_virtual())) dto.setIs_virtual(deviceModel.getIs_virtual()); if(null != rStbDao.findPairStbByModemDeviceId(rd.getDevice_id())){ //设置是否配对MODEM的标识位 dto.setIsPairModem(SystemConstants.BOOLEAN_TRUE); } } dto.setDevice_code(deviceCode); dto.setDeviceModel(deviceModel); return dto; } /** * 查询待回收设备信息,支持设备编号模糊查询 * @param optrId * @param query * @param startDate * @param endDate * @param start * @param limit * @return * @throws Exception */ public Pager<DeviceReclaimDto> queryDeviceReclaim(SOptr optr, String query, String startDate, String endDate, String deviceType,String confirmType,String isHistory,Integer start, Integer limit) throws Exception { String depotId = findDepot(optr); return rDeviceReclaimDao.queryDeviceReclaim(depotId, query, startDate, endDate,deviceType,confirmType,isHistory, start, limit); } public void editInputNo(Integer deviceDoneCode,String inputNo, String remark) throws Exception { rDeviceInputDao.editInputNo(deviceDoneCode, inputNo,remark); } public void editTransferNo(Integer deviceDoneCode,String transferNo, String remark) throws Exception { rDeviceTransferDao.editTransferNo(deviceDoneCode, transferNo,remark); } public void editDeviceOrder(Integer deviceDoneCode,String isHistory) throws Exception { rDeviceOrderDao.editDeviceOrder(deviceDoneCode, isHistory); } public void editDeviceTransferHistory(Integer deviceDoneCode,String isHistory) throws Exception { rDeviceTransferDao.editDeviceTransferHistory(deviceDoneCode, isHistory); } public List<DeviceDto> queryDeviceInfo(List<DeviceDto> devices, String deviceType) throws Exception { String[] deviceCodes = CollectionHelper.converValueToArray(devices, "device_code"); List<DeviceDto> deviceList = rDeviceDao.queryByDeviceCodescount(deviceCodes,deviceType); //文件设备编号数量 和 通过设备编号查询出的设备数量不相等时 if(deviceList != null && devices.size() > deviceList.size()){ //文件中device_code集合 List<String> fileDevices = CollectionHelper.converValueToList(devices, "device_code"); //通过文件中device_code查询出来的device_code集合 List<String> queryDevices = CollectionHelper.converValueToList(deviceList, "device_code"); //删除在库的设备编号,保留不在库的设备编号 fileDevices.removeAll(queryDevices); if(fileDevices.size()>0){ int size = deviceList.size();//在库的设备集合 int len = fileDevices.size();//不在库的设备集合 if(size >= len ){ for(int i=0;i<size;i++){ if(i <= len-1){ deviceList.get(i).setWrong_device_code(fileDevices.get(i)); } } }else{ for(int i=0;i<len;i++){ if(i <= size-1){ deviceList.get(i).setWrong_device_code(fileDevices.get(i)); }else{ DeviceDto dto = new DeviceDto(); dto.setWrong_device_code(fileDevices.get(i)); deviceList.add(dto); } } } } }else if(deviceList != null && devices.size() < deviceList.size()){ deviceList = new ArrayList<DeviceDto>(); List<String> list = CollectionHelper.converValueToList(devices, "device_code"); for(int i=0;i<list.size();i++){ DeviceDto dto = new DeviceDto(); dto.setWrong_device_code(list.get(i)); deviceList.add(dto); } } return deviceList; } /** * 所有调拨明细,供下载excel * @param deviceDoneCode * @param deviceType * @param deviceModel * @return * @throws JDBCException */ public List<RDeviceTransferDto> queryAllTransferDeviceDtail( int deviceDoneCode, String deviceType, String deviceModel) throws JDBCException { return rDeviceTransferDao.queryAllTransferDeviceDtail(deviceDoneCode, deviceType, deviceModel); } /** * 查询调拨详细信息 * @param deviceDoneCode * @param deviceType * @param start * @param limit * @return * @throws Exception */ public Pager<DeviceDto> queryTransferDeviceDetail( int deviceDoneCode, String deviceType,Integer start, Integer limit) throws Exception { return rDeviceDao.queryTransferDeviceDetail(deviceDoneCode,deviceType,start, limit); } /** * 根据设备类型查询型号 * @param deviceType * @param modemType * @return * @throws Exception */ public List<RDeviceModel> queryDeviceModelByType(String deviceType, String modemType) throws Exception { return rDeviceDao.queryDeviceModelByType(deviceType,modemType); } /** * 根据设备编号查询设备及客户信息 * @param deviceCode * @return * @throws Exception */ public DeviceDto queryDeviceInfoByCode(String deviceCode) throws Exception { DeviceDto dev = rDeviceDao.queryDeviceInfoByCode(deviceCode); if(null == dev){ throw new ComponentException("查询设备不存在!"); } String deviceId = dev.getDevice_id(); String devId = dev.getDevice_id(); if(dev.getDevice_type().equals(SystemConstants.DEVICE_TYPE_CARD)){ RStb stb = rStbDao.findPairStbByCardDeviceId(dev.getDevice_id()); if(null != stb){ devId = stb.getDevice_id(); dev.setPair_device_stb_code(stb.getStb_id()); dev.setPair_device_stb_model(stb.getDevice_model()); } }else if(dev.getDevice_type().equals(SystemConstants.DEVICE_TYPE_MODEM)){ RStb stb = rStbDao.findPairStbByCardDeviceId(dev.getDevice_id()); if(null != stb){ devId = stb.getDevice_id(); dev.setPair_device_stb_code(stb.getStb_id()); dev.setPair_device_stb_model(stb.getDevice_model()); } } //设备入库信息 dev.setDeviceInput(rDeviceInputDao.queryByDeviceId(deviceId)); //设备调拨信息 dev.setDeviceTransferList(rDeviceTransferDao.queryByDeviceId(devId)); dev.setDeviceUseRecordsList(rDeviceChangeDao.queryDeviceUseRecored(devId)); return dev; } /** * 查询可以进行机卡配对配置. * @param stb_model * @return * @throws Exception */ public List<RCardModel> queryIdelCardModel(String stb_model) throws Exception{ return rPairCfgDao.queryIdelCardModel(stb_model ); } /** * 查询已配置过的机卡配对配置. * @param stb_model * @return * @throws Exception */ public List<RCardModel> queryStbCardPaired(String stb_model) throws Exception{ return rPairCfgDao.queryStbCardPaired(stb_model ); } /** * 保存机卡配对配置. * @param list */ public void saveStbCardPairCfg(String stb_model,String[] cardModes) throws Exception{ rPairCfgDao.removeOld(stb_model);//旧的删除 if(cardModes != null){ RPairCfg [] cfgs = new RPairCfg[cardModes.length]; for(int index = 0;index<cardModes.length;index++){ RPairCfg cfg = new RPairCfg(); String card_model = cardModes[index]; cfg.setCard_model(card_model ); cfg.setStb_model(stb_model); cfgs[index] = cfg; } rPairCfgDao.save(cfgs); } } /** * 多条件查询 * @param stbModel * @param cardModel * @param modemModel * @param depotId * @param status * @param mode * @param modemType * @return * @throws Exception */ public Pager<DeviceDto> queryDeviceByMultiCriteria(String deviceModel,String depotId,String status, String mode,String depotStatus,String modemType, String backup, String batch_num,String start_input_time, String end_input_time, Integer start,Integer limit) throws Exception { return rDeviceDao.queryDeviceByMultiCriteria(deviceModel, depotId, status, mode, depotStatus, modemType, backup,batch_num,start_input_time,end_input_time,start, limit); } /** * 多条件查询 */ public List<DeviceDto> queryDeviceByBatch(String depotId, String batch_num)throws Exception{ return rDeviceDao.queryDeviceByBatch(depotId, batch_num); } public List<DeviceDto> queryIDLEDeviceByMultiCriteria(String deviceModel,String depotId,String status, String mode,String depotStatus,String backup) throws Exception { return rDeviceDao.queryIDLEDeviceByMultiCriteria(deviceModel, depotId, status, mode, depotStatus,backup); } public List<DeviceDto> queryDeviceDetailByMultiCriteria(String deviceModel, String depotId, String status, String mode, String depotStatus, String modemType, String backup, String batch_num, String start_input_time, String end_input_time) throws Exception { return rDeviceDao.queryDeviceByMultiCriteria(deviceModel, depotId, status, mode, depotStatus, modemType, backup, batch_num, start_input_time, end_input_time); } /** * 检查盒号是否存在 * @param cardId * @return * @throws Exception */ public boolean isExistsStb(String stbId) throws Exception { return rStbDao.isExistsStb(stbId); } /** * 检查卡号是否存在 * @param cardId * @return * @throws Exception */ public boolean isExistsCard(String cardId) throws Exception { return rCardDao.isExistsCard(cardId); } public boolean isExistsStbCard(String cardId,String stbId) throws Exception { String depotId = findDepot(WebOptr.getOptr()); RDevice device = rDeviceDao.queryByDeviceCode(cardId); checkDevice(depotId, device,cardId,false); RDevice stbDevice = rDeviceDao.queryByDeviceCode(stbId); checkDevice(depotId, stbDevice,stbId,false); return true; } public boolean isExistsModem(String modemMac) throws Exception { return rModemDao.isExistsModem(modemMac); } /** * 查询往日入库未确认 * * @param optrId * @return * @throws Exception * @throws ComponentException */ public List<RDeviceTransfer> queryUnCheckInput(SOptr optr) throws Exception { return rDeviceTransferDao.queryInput( findDepot(optr), StatusConstants.UNCONFIRM, false); } /** * 查询往日出库未确认 * * @param optrId * @return * @throws Exception * @throws Exception * @throws ComponentException */ public List<RDeviceTransfer> queryUnCheckOutput(SOptr optr) throws Exception { return rDeviceTransferDao.queryOutput( findDepot(optr), StatusConstants.UNCONFIRM, false); } /** * 查询当天入库库确认 * * @param optrId * @return * @throws Exception * @throws ComponentException */ public List<RDeviceTransfer> queryTodayCheckInput(SOptr optr) throws Exception { return rDeviceTransferDao.queryInput( findDepot(optr), StatusConstants.ACTIVE, true); } /** * 查询当天出库确认 * * @param optrId * @return * @throws Exception * @throws Exception * @throws ComponentException */ public List<RDeviceTransfer> queryTodayCheckOutput(SOptr optr) throws Exception { return rDeviceTransferDao.queryOutput(findDepot(optr), StatusConstants.ACTIVE, true); } /** * 获取所有的供应商 * * @return * @throws Exception */ public List<RDeviceSupplier> queryDeviceSupplier() throws Exception { return rDeviceSupplierDao.findAll(); } /** * 查找设备入库信息 * * @param optrId * @return * @throws Exception * @throws ComponentException */ public Pager<RDeviceInput> queryDeviceInput(SOptr optr,String query,Integer start,Integer limit) throws Exception { String depotId = findDepot(optr); return rDeviceInputDao.queryByDepotId(depotId,query,start,limit); } /** * 查询设备修改信息(设备状态修改信息) * @param optrId * @return * @throws Exception */ public Pager<RDeviceEdit> queryDeviceStatusEdit(SOptr optr, String query, Integer start, Integer limit) throws Exception { String depotId = findDepot(optr); return rDeviceEditDao.queryByDepotIdAndEditType(depotId, SystemConstants.DEVICE_EDIT_TYPE_STATUS, query, start, limit); } public Pager<DeviceDto> queryEditDeviceDetail(Integer deviceDoneCode, String deviceType, Integer start, Integer limit, String optrId) throws Exception { return rDeviceEditDao.queryDeviceDetail(deviceDoneCode, deviceType, start, limit); } public Pager<DeviceDto> queryOutputDeviceDetail(Integer deviceDoneCode, String deviceType,String deviceModel, Integer start, Integer limit, String optrId) throws Exception { return rDeviceOutputDao.queryDeviceDetail(deviceDoneCode, deviceType,deviceModel, start, limit); } /** * 查询设备操作明细 * * @param deviceDoneCode * @return * @throws Exception */ public List<RDeviceDoneDetail> queryDeviceDoneDetail(int deviceDoneCode) throws Exception { return rDeviceDoneDetailDao.queryByDeviceDoneCode(deviceDoneCode); } /** * 查询待收货设备订单 * * @param optrId * @return * @throws Exception * @throws ComponentException */ public List<RDeviceOrder> queryUnSupplierDeviceOrder(SOptr optr) throws Exception { String depotId = findDepot(optr); return rDeviceOrderDao.queryUnInputByDepot(depotId); } private RDeviceChange saveDeviceChange(Integer doneCode, String busiCode,String deviceId, String columnName, String oldValue, String newValue,String pairCard,String pairModem, SOptr optr) throws Exception { RDeviceChange chg = new RDeviceChange(); chg.setDone_code(doneCode); chg.setBusi_code(busiCode); chg.setDevice_id(deviceId); chg.setColumn_name(columnName); chg.setOld_value(oldValue); chg.setNew_value(newValue); chg.setPair_card_id(pairCard); chg.setPair_modem_id(pairModem); chg.setChange_date(DateHelper.now()); chg.setArea_id(optr.getArea_id()); chg.setCounty_id(optr.getCounty_id()); chg.setOptr_id(optr.getOptr_id()); chg.setDept_id(optr.getDept_id()); return chg; } /** * 保存入库信息 (文件) * @param optrId * @param input * @param deviceModel * @param batchNum * @param devices * @throws Exception */ public void saveDeviceInputFile(SOptr optr, RDeviceInput input, List<DeviceDto> deviceDtoList,String deviceType, String deviceModel, String batchNum) throws Exception, ComponentException{ List<DeviceDto> devices = new ArrayList<DeviceDto>(); for(DeviceDto d : deviceDtoList){ d.setDevice_type(deviceType); d.setDevice_model(deviceModel); d.setBatch_num(batchNum); devices.add(d); } String[] deviceCodes = CollectionHelper.converValueToArray(devices, "device_code"); if(deviceCodes.length==0){ throw new ComponentException("文件中设备编号都是空的!"); } List<DeviceDto> deviceList = rDeviceDao.queryByDeviceCodescountIncludeWrongData(deviceCodes,deviceType); if (deviceList.size()>0){ String str = ""; int cout = 1; if(deviceList.size()>2){ cout = 2 ; } for(int i=0;i<cout;i++){ str += deviceList.get(i).getDevice_code()+","; } str = StringHelper.delEndChar( str , 1 ); throw new ComponentException("库里已存在的设备共:"+deviceList.size()+"个,明细:"+str+",..."); } saveDeviceInput(optr, input, devices); } /** * 保存入库信息 * @param optrId * @param input * @param devices * @throws Exception */ public void saveDeviceInput(SOptr optr, RDeviceInput input, List<DeviceDto> devices) throws Exception ,ComponentException{ if(devices.size()==0){ throw new ComponentException("无可入库的设备"); } checkDeviceOperRight(optr,devices); //验证设备是否重复 checkDeviceIsNull(CollectionHelper.converValueToArray(devices, "device_code"),"设备号"); //验证卡是否重复 checkDeviceIsNull(CollectionHelper.converValueToArray(devices, "pair_device_code"),"关联号"); String depotId = findDepot(optr); Integer doneCode = gDoneCode(); input.setDevice_done_code(doneCode); input.setOptr_id(optr.getOptr_id()); input.setDepot_id(depotId); input.setCreate_time(DateHelper.now()); input.setBatch_num(devices.get(0).getBatch_num()); List<RDeviceDoneDeviceid> doneDeviceidList = new ArrayList<RDeviceDoneDeviceid>(); List<RDevice> deviceList = new ArrayList<RDevice>(); List<RStb> stbList = new ArrayList<RStb>(); List<RCard> cardList = new ArrayList<RCard>(); List<RModem> modemList = new ArrayList<RModem>(); Map<String ,RStbModel> stbModelList = CollectionHelper.converToMapSingle(rStbModelDao.findAll(), "device_model"); Map<String, RCardModel> cardModelList = CollectionHelper.converToMapSingle(rCardModelDao.findAll(), "device_model"); Map<String ,RModemModel> modemModelList = CollectionHelper.converToMapSingle(rModemModelDao.findAll(), "device_model"); for (DeviceDto d : devices) { if(StringHelper.isEmpty(d.getDevice_model())){ throw new ComponentException("设备型号缺失"); } if(StringHelper.isEmpty(d.getDevice_type())){ throw new ComponentException("设备类型缺失"); } if(StringHelper.isEmpty(d.getDevice_code())){ throw new ComponentException("设备编号缺失"); } if(StringHelper.isEmpty(d.getBox_no())){ throw new ComponentException("箱号缺失"); } String deivceId = gDeviceId(); if(d.getDevice_type().equals(SystemConstants.DEVICE_TYPE_STB) || d.getDevice_type().equals(SystemConstants.DEVICE_TYPE_CARD) || d.getDevice_type().equals(SystemConstants.DEVICE_TYPE_MODEM)){ checkDeviceCodeNum(d); } if (d.getDevice_type().equals(SystemConstants.DEVICE_TYPE_STB)) { RStbModel stbCfg = stbModelList.get(d.getDevice_model()); if(stbCfg == null){ throw new ComponentException("设备型号不存在"); } if(StringHelper.isEmpty(d.getPair_device_code())){ throw new ComponentException("设备智能卡号或MAC缺失"); } //根据配置信息取已经配置了的配置型号, String pairCardModel = stbCfg.getVirtual_card_model();//与当前机顶盒型号配对的虚拟智能卡类型 RStb stb = new RStb(); stb.setDevice_id(deivceId); stb.setStb_id(d.getDevice_code()); stb.setDevice_model(d.getDevice_model()); //根据机顶盒设备型号判断DTT还是OTT, DTT设备插入卡,OTT设置MAC if(stbCfg.getInteractive_type().equals(SystemConstants.DTV_SERV_TYPE_SINGLE)){ if(StringHelper.isEmpty(pairCardModel)){ throw new ComponentException(ErrorCode.DevicePairModelNotExists,d.getDevice_model()); } // 有配对卡,保存配对卡 String carDeivceId = gDeviceId(); stb.setPair_card_id(carDeivceId); // 卡设备信息 RDevice cardDevice = new RDevice( SystemConstants.DEVICE_TYPE_CARD, StatusConstants.ACTIVE, StatusConstants.IDLE); cardDevice.setDevice_id(carDeivceId); cardDevice.setDevice_model(pairCardModel); cardDevice.setDepot_id(depotId); cardDevice.setOwnership(input.getOwnership()); cardDevice.setOwnership_depot(depotId); cardDevice.setIs_virtual(cardModelList.get(pairCardModel)!=null?cardModelList.get(pairCardModel).getIs_virtual():SystemConstants.BOOLEAN_FALSE); deviceList.add(cardDevice); // 卡信息 RCard card = new RCard(); card.setDevice_id(carDeivceId); card.setCard_id(d.getPair_device_code()); card.setDevice_model(pairCardModel); cardList.add(card); }else if(stbCfg.getInteractive_type().equals(SystemConstants.DTV_SERV_TYPE_SINGLE)){ //jpz OTT机顶盒管理mac号的 stb.setMac(d.getPair_device_code()); } stbList.add(stb); } else if (d.getDevice_type().equals(SystemConstants.DEVICE_TYPE_MODEM)) { RModemModel model = modemModelList.get(d.getDevice_model()); if (model == null) throw new ComponentException("错误的设备类型:" + d.getDevice_model()); RModem modem = new RModem(); modem.setDevice_id(deivceId); modem.setDepot_id(depotId); modem.setModem_id(d.getDevice_code()); if(StringHelper.isEmpty(d.getPair_device_code())){ modem.setModem_mac(d.getDevice_code()); }else{ modem.setModem_mac(d.getPair_device_code()); } modem.setDevice_model(d.getDevice_model()); modem.setModem_type(model.getModem_type()); modemList.add(modem); } RDevice device = new RDevice(d.getDevice_type(), StatusConstants.ACTIVE, StatusConstants.IDLE); device.setDevice_id(deivceId); device.setDevice_model(d.getDevice_model()); device.setDepot_id(depotId); device.setBatch_num(d.getBatch_num());//批号 device.setBox_no(d.getBox_no());//箱号 device.setOwnership(input.getOwnership()); device.setBackup(input.getBackup()); device.setOwnership_depot(depotId); //0001407: r_device.is_new_stb属性单卡 单猫都使用 device.setIs_new_stb(input.getIs_new_stb()); // device.setWarranty_date(); device.setTotal_num(1); deviceList.add(device); RDeviceDoneDeviceid doneDeviceid = new RDeviceDoneDeviceid(); doneDeviceid.setDevice_id(deivceId); doneDeviceid.setDevice_done_code(doneCode); doneDeviceidList.add(doneDeviceid); } String[] stbCodes = null; if(stbList.size()>0){ stbCodes = CollectionHelper.converValueToArray(stbList, "stb_id"); } //退库后又入库的机顶盒,默认是旧机 if(stbCodes != null){ List<String> deviceHisStr = rDeviceHisDao.queryByStbId(stbCodes); Map<String,RDevice> deviceMap = CollectionHelper.converToMapSingle(deviceList, "device_id"); String[] deviceArr = deviceHisStr.toArray(new String[deviceHisStr.size()]); String stbStrs = ""; for(int i=0;i<deviceArr.length;i++){ stbStrs = StringHelper.append(stbStrs,",",deviceArr[i]); } if(deviceHisStr.size()>0){ for(RStb stb:stbList){ if(stbStrs.indexOf(stb.getStb_id()) > -1){ if(null != deviceMap.get(stb.getDevice_id())) deviceMap.get(stb.getDevice_id()).setIs_new_stb(SystemConstants.BOOLEAN_FALSE); } } } } rStbDao.save(stbList.toArray(new RStb[stbList.size()])); rCardDao.save(cardList.toArray(new RCard[cardList.size()])); rModemDao.save(modemList.toArray(new RModem[modemList.size()])); rDeviceDao.save(deviceList.toArray(new RDevice[deviceList.size()])); rDeviceInputDao.save(input); rDeviceDoneDeviceidDao.save(doneDeviceidList .toArray(new RDeviceDoneDeviceid[doneDeviceidList.size()])); rDeviceDoneDetailDao.updateByDoneDeviceid(doneCode); // if(input.getOrder_done_code()!=null && input.getOrder_done_code()>0 ) // rDeviceOrderDetailDao.updateSupplyNum(input.getOrder_done_code(),doneCode); //记录异动 rDeviceChangeDao.saveInputChange(doneCode, BusiCodeConstants.DEVICE_INPUT, optr.getCounty_id(), optr.getArea_id()); } public void saveMateralDeviceInput(SOptr optr, RDeviceInput input, String batchNum, String deviceType, String deviceModel,String totalNum) throws Exception{ List<DeviceDto> devices = new ArrayList<>(); DeviceDto deviceDto = new DeviceDto(); deviceDto.setDevice_type(deviceType); devices.add(deviceDto); checkDeviceOperRight(optr,devices); String depotId = findDepot(optr); Integer orderDoneCode = input.getOrder_done_code(); Integer num = Integer.parseInt(totalNum); if(orderDoneCode != null){ List<RDeviceOrderDetail> orderList = rDeviceOrderDetailDao.queryByDoneCode(orderDoneCode); int orderNum = 0;//剩余可入库数 for(RDeviceOrderDetail r : orderList){ if(r.getDevice_type().equals(deviceType) && r.getDevice_model().equals(deviceModel)){ orderNum = r.getOrder_num()- (r.getSupply_num() !=null? r.getSupply_num():0); //到货数应当小于等于订货数 if(num> orderNum){ throw new ComponentException("入库数不能大于剩余的订货数!订单订货数:" + r.getOrder_num() + ";到货数:" + r.getSupply_num()+ ";入库数:" + num); } } } } Integer doneCode = gDoneCode(); input.setDevice_done_code(doneCode); input.setOptr_id(optr.getOptr_id()); input.setDepot_id(depotId); input.setCreate_time(DateHelper.now()); input.setIs_new_stb(SystemConstants.BOOLEAN_TRUE); input.setOwnership(SystemConstants.OWNERSHIP_GD); input.setBackup(SystemConstants.BOOLEAN_FALSE); input.setBatch_num(batchNum); String deviceId = null; RDevice device = rDeviceDao.queryIdleMateralDevice(deviceModel,depotId); if(device == null){ RDeviceModel model = rDeviceModelDao.lockModel(deviceModel); device = rDeviceDao.queryIdleMateralDevice(model.getDevice_model(),depotId); if(device != null){ deviceId = device.getDevice_id(); } }else{ deviceId = device.getDevice_id(); } if(deviceId == null){ device = new RDevice(deviceType, StatusConstants.ACTIVE,StatusConstants.IDLE); deviceId = gDeviceId(); device.setDevice_id(deviceId); device.setDevice_model(deviceModel); device.setDepot_id(depotId); // device.setBatch_num(batchNum); device.setOwnership(input.getOwnership()); device.setBackup(input.getBackup()); device.setOwnership_depot(depotId); device.setIs_new_stb(input.getIs_new_stb()); device.setTotal_num(num); rDeviceDao.save(device); }else{ //更新器材原总数 rDeviceDao.addMateralDevice(deviceId,num); checkDeviceNum(deviceId); } RDeviceDoneDeviceid doneDeviceid = new RDeviceDoneDeviceid(); doneDeviceid.setDevice_id(deviceId); doneDeviceid.setDevice_done_code(doneCode); RDeviceDoneDetail deviceDetail = new RDeviceDoneDetail(); deviceDetail.setCount(num); deviceDetail.setDevice_done_code(doneCode); deviceDetail.setDevice_model(deviceModel); deviceDetail.setDevice_type(deviceType); rDeviceInputDao.save(input); rDeviceDoneDeviceidDao.save(doneDeviceid); rDeviceDoneDetailDao.save(deviceDetail); //更新到货数量 if(orderDoneCode != null){ rDeviceOrderDetailDao.updateMateralNum(orderDoneCode,deviceType,deviceModel,num); RDeviceOrderDetail rDetail = rDeviceOrderDetailDao.queryMateralDeviceDetail(orderDoneCode,deviceType,deviceModel); if(rDetail.getOrder_num()<rDetail.getSupply_num()){ throw new ComponentException(ErrorCode.DeviceTotalNumIsTooBig); } } //记录异动 rDeviceChangeDao.saveInputChange(doneCode, BusiCodeConstants.DEVICE_INPUT, optr.getCounty_id(), optr.getArea_id()); } public List<RDevice> queryMateralTransferDeviceByDepotId(SOptr optr)throws Exception{ String depotId = optr.getDept_id(); List<RDevice> list = rDeviceDao.queryMateralDeviceByDepotId(depotId); return list; } /** * 查询当前仓库的设备订单 * @param optrId * @return * @throws Exception * @throws ComponentException */ public Pager<RDeviceOrder> queryDeviceOrder(SOptr optr, Integer start, Integer limit, String query, String isHistory) throws Exception { String depotId = findDepot(optr); return rDeviceOrderDao.queryDeviceOrder(depotId, start, limit,query,isHistory); } /** * 查询设备订单明细 * @param deviceDoneCode * @return * @throws Exception * @throws ComponentException */ public List<RDeviceOrderDetail> queryDeviceOrderDetail(int deviceDoneCode) throws Exception { return rDeviceOrderDetailDao.queryByDoneCode(deviceDoneCode); } /** * 查询设备到货明细 * @param deviceDoneCode * @return * @throws Exception * @throws ComponentException */ public List<DeviceInputDetailDto> queryDeviceOrderInputDetail(int deviceDoneCode) throws Exception { return rDeviceDoneDetailDao.queryInputByDoneCode(deviceDoneCode); } /** * 保存或修改产品订单, * * @param deviceOrder * 订单信息 * Device_done_code为空保存 * Device_done_code不为空修改原有订单 * @param details * 订单明细 * @throws Exception * @throws ComponentException */ public void saveDeviceOrder(SOptr optr, RDeviceOrder deviceOrder, List<RDeviceOrderDetail> details) throws Exception, ComponentException { String depotId = findDepot(optr); deviceOrder.setDepot_id(depotId); deviceOrder.setOptr_id(optr.getOptr_id()); Integer doneCode = deviceOrder.getDevice_done_code(); if (doneCode==null) { doneCode = gDoneCode(); deviceOrder.setDevice_done_code(doneCode); deviceOrder.setCreate_time(new Date()); rDeviceOrderDao.save(deviceOrder); }else{ rDeviceOrderDao.update(deviceOrder); } for (RDeviceOrderDetail d : details) { d.setDevice_done_code(doneCode); } rDeviceOrderDetailDao.removeByDoneCode(doneCode); rDeviceOrderDetailDao.save(details .toArray(new RDeviceOrderDetail[details.size()])); } /** * 查询设备调拨 * @param optrId * @return * @throws Exception * @throws ComponentException */ public Pager<RDeviceTransferDto> queryDeviceTransfer(SOptr optr, String query, String startDate, String endDate, Integer start, Integer limit ,String isHistory,String deviceModel) throws Exception { String depotId = findDepot(optr); return rDeviceTransferDao.queryByDepot(depotId,query,startDate,endDate,start,limit,isHistory,deviceModel); } /** * 查询当前仓库及以下子仓库 * @param depotId * @return * @throws JDBCException */ public List<RDepotDto> queryChildDepot(SOptr optr) throws Exception{ String[] depotIds=null; String dataRight = this.queryDataRightCon(optr, DataRight.DEVICE_MNG.toString()); if (dataRight.equals(DataRightLevel.AREA.toString())) { depotIds = new String[2]; depotIds[0] = SystemConstants.WH_COUNTY_ID; depotIds[1] = SystemConstants.ZS_COUNTY_ID; } else { String depotId = findDepot(optr); depotIds = new String[1]; depotIds[0] = depotId; } return rDepotDefineDao.queryChildDepot(depotIds); } public List<SDept> queryChildDept(SOptr optr) throws Exception{ if(this.queryDeptDataRightCon(optr, DataRight.DEVICE_MNG.toString())){ return sDeptDao.queryAllDept(); }else{ String depotId = findDepot(optr); return sDeptDao.queryChildDept(depotId); } } protected boolean queryDeptDataRightCon(SOptr optr,String dataRightType) throws Exception, ComponentException { //取操作员原来信息,参数optr有可能是切换后的 SOptr sOptr = sOptrDao.findByKey(optr.getOptr_id()); List<SRole> roleList = sRoleDao.queryByOptrId(sOptr.getOptr_id(),dataRightType,sOptr.getCounty_id()); for (SRole role : roleList) { if (StringHelper.isNotEmpty(role.getData_right_level()) || StringHelper.isNotEmpty(role.getRule_str())) return true; } return false; } /** * 查询当前仓库可以流转的上下级仓库 * @param optrId * @return * @throws ComponentException * @throws Exception */ public List<RDepotDefine> queryTransferDepot(SOptr optr) throws Exception { SDept dept = sDeptDao.findByKey(optr.getDept_id()); List<RDepotDefine> list = rDepotDefineDao.queryDepotForTransById(dept.getDept_id()); // if(dept.getDept_type().equals(SystemConstants.DEPT_TYPE_YYT)){ // list = rDepotDefineDao.queryYytDepotById(optr.getDept_id(),optr.getCounty_id()); // }else if(dept.getDept_type().equals(SystemConstants.DEPT_TYPE_CK) || dept.getDept_type().equals(SystemConstants.DEPT_TYPE_FGS)){ // list = rDepotDefineDao.queryCkDepotById(optr.getDept_id(),optr.getCounty_id()); // } return list; } /** * 根据设备编号查询信息,并判断设备是否可以操作 * @param optrId * @param deviceCode * @return * @throws Exception * @throws ComponentException * @throws BeansException */ public DeviceDto queryCanOptrDevice(SOptr optr,String deviceCode) throws Exception, BeansException, ComponentException { DeviceDto dto = new DeviceDto(); BeanUtils.copyProperties(queryDevice(optr,deviceCode), dto); return dto; } public DeviceDto queryCanProcureDevice(SOptr optr,String deviceCode) throws Exception, BeansException, ComponentException { List<DeviceDto> dList = rDeviceDao.queryCardModemByDeviceCodes(deviceCode.split(",")); if(dList.size()>0){ throw new ComponentException("设备存在配对的机顶盒号:["+dList.get(0).getDevice_code()+"],请使用该盒号进行领用!"); } DeviceDto dto = new DeviceDto(); BeanUtils.copyProperties(queryDevice(optr,deviceCode), dto); return dto; } public List<DeviceDto> queryByBatchNum(SOptr optr,String batchNum) throws Exception{ return rDeviceDao.queryByBatchNum(batchNum, optr.getDept_id()); } public List<RStbModel> queryAllDeviceMdoel() throws JDBCException { List<RStbModel> rStbModelList = rStbModelDao.queryAllDeviceMdoel(); for(RStbModel dto:rStbModelList){ dto.setModel_type_name(dto.getDevice_type_text()+"-"+dto.getModel_name()+"-"+dto.getDevice_model()); } return rStbModelList; } /** * 要更改的设备不能和选择的设备状态相同 * @param optrId * @param deviceCode * @param deviceStatus * @return * @throws Exception */ public DeviceDto queryCanUpdateDeviceStatus(SOptr optr,RDevice device) throws Exception { String deviceCode = device.getDevice_id(); String deviceStatus = device.getDevice_status(); String newStb = device.getIs_new_stb(); DeviceDto dto = queryCanOptrDevice(optr, deviceCode); if(StringHelper.isNotEmpty(deviceStatus ) && deviceStatus.equals(dto.getDevice_status()) && StringHelper.isNotEmpty(newStb) && device.getIs_new_stb().equals(dto.getIs_new_stb())){ throw new ComponentException("输入的设备状态和新旧与选择的一样!"); }else if(StringHelper.isEmpty(deviceStatus ) && StringHelper.isNotEmpty(newStb) && device.getIs_new_stb().equals(dto.getIs_new_stb())){ String neededInfo = newStb.equals(SystemConstants.BOOLEAN_TRUE) ? " 旧 " : " 新 "; throw new ComponentException("需要 【"+neededInfo+"】 的设备,当前输入的是 【 " + neededInfo + " 】 的!"); }else if(StringHelper.isEmpty(newStb) && StringHelper.isNotEmpty(deviceStatus ) && deviceStatus.equals(dto.getDevice_status())){ throw new ComponentException("设备状态为【"+dto.getDevice_status_text()+"】,请选择其他状态的设备!"); } return dto; } /** * 保存调拨(文件) * 验证设备是否存在 * @param optrId * @param transfer * @param devices * @throws Exception */ public void saveTransferFile(SOptr optr, RDeviceTransfer transfer, List<DeviceDto> devices,String deviceType) throws Exception { devices = removeRepeatDeviceCodes(devices); checkDeviceOperRight(optr,devices); String depotId = findDepot(optr); String[] deviceCodes = CollectionHelper.converValueToArray(devices, "device_code"); List<DeviceDto> deviceList = rDeviceDao.queryByDeviceCodescount(deviceCodes,deviceType); this.compareDevice(devices, deviceList); for (DeviceDto d : deviceList) { checkDevice(depotId, d,d.getDevice_code(),false); } saveTransfer(optr, transfer, deviceList); } /** * 保存调拨 * @param optrId * @param transfer * @param devices * @throws Exception * @throws ComponentException */ public void saveTransfer(SOptr optr, RDeviceTransfer transfer, List<DeviceDto> devices) throws Exception { checkDeviceOperRight(optr,devices); String depotId = findDepot(optr); Integer doneCode = gDoneCode(); transfer.setDevice_done_code(doneCode); transfer.setDepot_source(depotId); transfer.setOptr_id(optr.getOptr_id()); transfer.setStatus(StatusConstants.UNCONFIRM); transfer.setCreate_time(DateHelper.now()); String[] deviceCodes = CollectionHelper.converValueToArray(devices, "device_code"); //验证设备是否重复 checkDeviceIsNull(deviceCodes,"设备号"); List<DeviceDto> dList = rDeviceDao.queryCardModemByDeviceCodes(deviceCodes); if(dList.size()>0){ throw new ComponentException("设备:["+dList.get(0).getPair_device_code()+"]存在配对机顶盒号["+dList.get(0).getDevice_code()+"],使用该盒号调拨!"); } List<RDeviceDoneDeviceid> deviceList = new ArrayList<RDeviceDoneDeviceid>(); for (DeviceDto d : devices) { RDeviceDoneDeviceid device = new RDeviceDoneDeviceid(); device.setDevice_done_code(doneCode); device.setDevice_id(d.getDevice_id()); deviceList.add(device); } LoggerHelper.debug(DeviceComponent.class, "***check后device个数*** "+deviceList.size()); //如果是stb,获取配对卡device_id List<String> stbIds = CollectionHelper.converValueToList(deviceList, "device_id"); List<RStb> stbList = rStbDao.findPairCardByDeviceId(stbIds.toArray(new String[stbIds.size()])); if(stbList.size()>0){ List<String> cardIds = CollectionHelper.converValueToList(stbList, "pair_card_id"); stbIds.addAll(cardIds); } rDeviceTransferDao.save(transfer); rDeviceDoneDeviceidDao.save(deviceList.toArray(new RDeviceDoneDeviceid[deviceList.size()])); rDeviceDoneDetailDao.updateByDoneDeviceid(doneCode); rDeviceDao.updateTranOut(doneCode); //记录异动 rDeviceChangeDao.saveTransChange(doneCode, BusiCodeConstants.DEVICE_TRANSFER, optr.getCounty_id(), optr.getArea_id()); } /** * 器材调拨 * @param optr * @param transfer * @param deviceList * @throws Exception */ public void saveMateralTransfer(SOptr optr, RDeviceTransfer transfer, List<RDevice> deviceList) throws Exception { if(deviceList.size()== 0){ throw new ComponentException(ErrorCode.ParamIsNull); } String[] deviceIds = CollectionHelper.converValueToArray(deviceList, "device_id"); if(deviceList.size() != deviceIds.length){ throw new ComponentException(ErrorCode.DeviceRepeat); } String depotId = findDepot(optr); Integer doneCode = gDoneCode(); transfer.setDevice_done_code(doneCode); transfer.setDepot_source(depotId); transfer.setOptr_id(optr.getOptr_id()); transfer.setStatus(StatusConstants.UNCONFIRM); transfer.setCreate_time(DateHelper.now()); List<RDevice> rList = rDeviceDao.queryDeviceByIds(deviceIds); Map<String, RDevice> map = CollectionHelper.converToMapSingle(rList, "device_id"); List<RDeviceDoneDeviceid> deviceDoneList = new ArrayList<RDeviceDoneDeviceid>(); List<RDeviceDoneDetail> deviceDetailList = new ArrayList<RDeviceDoneDetail>(); String deviceType = SystemConstants.DEVICE_TYPE_FITTING; List<DeviceDto> devices = new ArrayList<>(); for (RDevice d : deviceList) { //检查权限 DeviceDto deviceDto = new DeviceDto(); deviceDto.setDevice_type(deviceType); devices.add(deviceDto); String deviceModel = d.getDevice_model(); String deviceId = null; RDevice deviceChick = rDeviceDao.queryIdleMateralDevice(deviceModel,depotId); if(deviceChick == null){ rDeviceModelDao.lockModel(deviceModel); deviceChick = rDeviceDao.queryIdleMateralDevice(deviceModel,depotId); if(deviceChick != null){ deviceId = deviceChick.getDevice_id(); } }else{ deviceId = deviceChick.getDevice_id(); } //新增器材数据 RDevice newDevice = new RDevice(deviceType, StatusConstants.ACTIVE,StatusConstants.IDLE); String newDeviceId = gDeviceId(); newDevice.setDevice_id(newDeviceId); newDevice.setDevice_model(deviceModel); newDevice.setDepot_id(depotId); newDevice.setOwnership(SystemConstants.OWNERSHIP_GD); newDevice.setOwnership_depot(depotId); newDevice.setTran_status(StatusConstants.UNCONFIRM); newDevice.setIs_new_stb(SystemConstants.BOOLEAN_TRUE); newDevice.setTotal_num(d.getTotal_num()); rDeviceDao.save(newDevice); RDeviceDoneDeviceid device = new RDeviceDoneDeviceid(); device.setDevice_done_code(doneCode); device.setDevice_id(newDeviceId); deviceDoneList.add(device); RDeviceDoneDetail detail = new RDeviceDoneDetail(); detail.setDevice_done_code(doneCode); detail.setDevice_type(deviceType); detail.setDevice_model(deviceModel); detail.setCount(d.getTotal_num()); deviceDetailList.add(detail); //变更原有的设备数量 RDevice _r = map.get(deviceId); Integer oldValue = _r.getTotal_num(); Integer newValue = _r.getTotal_num()-d.getTotal_num(); //总数异动记录 rDeviceChangeDao.saveMateralTransChange(doneCode,BusiCodeConstants.DEVICE_TRANSFER,deviceId,"total_num",oldValue ,newValue,transfer.getOptr_id(),transfer.getDepot_source(),optr.getCounty_id(), optr.getArea_id(),null); rDeviceDao.removeMateralDevice(deviceId, d.getTotal_num()); checkDeviceNum(deviceId); } checkDeviceOperRight(optr,devices); rDeviceTransferDao.save(transfer); rDeviceDoneDeviceidDao.save(deviceDoneList.toArray(new RDeviceDoneDeviceid[deviceDoneList.size()])); rDeviceDoneDetailDao.save(deviceDetailList.toArray(new RDeviceDoneDetail[deviceDetailList.size()])); } public void checkDeviceNum(String deviceId) throws Exception{ RDevice nextRdevice = rDeviceDao.findByKey(deviceId); if(nextRdevice == null){ throw new ComponentException(ErrorCode.DeviceNotExists); } if(nextRdevice.getTotal_num()<0){ throw new ComponentException(ErrorCode.DeviceTotalNumIsNull); } } /** * 查询可以用来转发的设备. * @return * @throws Exception */ public Map<String, Map> queryTransInfoByDoneCode(Integer doneCode) throws Exception{ return rDeviceTransferDao.queryTransInfoByDoneCode(doneCode); } public void saveReTransDevices(SOptr optr, RDeviceTransfer transfer,Integer doneCode) throws Exception{ List<DeviceDto> devs = rDeviceTransferDao.queryReTransDevices(doneCode); saveTransfer(optr, transfer, devs); } /** * 确认调拨 * @param optrId * @param transferNo * @param confirmInfo * @throws Exception */ public void checkTransfer(SOptr optr, int deviceDoneCode,String status, String confirmInfo) throws Exception { RDeviceTransfer transfer = rDeviceTransferDao.findByKey(deviceDoneCode); if(null == transfer) throw new ComponentException("调拨单号不存在!"); transfer.setConfirm_optr_id(optr.getOptr_id()); transfer.setStatus(status); transfer.setConfirm_date(DateHelper.now()); transfer.setConfirm_info(confirmInfo); rDeviceTransferDao.update(transfer); List<RDevice> rList = rDeviceDao.queryDeviceByDoneCode(deviceDoneCode); Boolean isMateral = true; for(RDevice r : rList){ //如果是器材调拨,所有的都只能是器材,判断1次就可以了 if(!r.getDevice_type().equals(SystemConstants.DEVICE_TYPE_FITTING) ){ isMateral = false; break; } } Integer doneCode = gDoneCode(); if (status.equals(StatusConstants.INVALID)){ if(isMateral){ for(RDevice r : rList){ //原器材 RDevice device = rDeviceDao.queryIdleMateralDevice(r.getDevice_model(), r.getDepot_id()); Integer oldValue = device.getTotal_num(); Integer newValue = oldValue + r.getTotal_num(); //总数异动记录 rDeviceChangeDao.saveMateralTransChange(doneCode,BusiCodeConstants.DEVICE_CANCEL_CONFIRM,device.getDevice_id(),"total_num",oldValue ,newValue,transfer.getConfirm_optr_id(),transfer.getDepot_source(),optr.getCounty_id(), optr.getArea_id(),null); //减去调拨数量 rDeviceDao.removeMateralDevice(r.getDevice_id(), r.getTotal_num()); checkDeviceNum(r.getDevice_id()); //原器材总数+取消调拨的数量 rDeviceDao.addMateralDevice(device.getDevice_id(),r.getTotal_num()); } }else{ rDeviceDao.updateTranIdel(deviceDoneCode); //调拨取消记录异动 rDeviceChangeDao.saveTransCancelChange(doneCode, BusiCodeConstants.DEVICE_CANCEL_CONFIRM,deviceDoneCode, optr.getCounty_id(), optr.getArea_id()); } }else if(status.equals(StatusConstants.CONFIRM)){ if(isMateral){ for(RDevice r : rList){ String deviceId = r.getDevice_id(); String deviceModel = r.getDevice_model(); //查询 是否已经存在该型号 RDevice deviceChick = rDeviceDao.queryIdleMateralDevice(deviceModel,transfer.getDepot_order()); boolean key = false; if(deviceChick == null){ rDeviceModelDao.lockModel(deviceModel); deviceChick = rDeviceDao.queryIdleMateralDevice(deviceModel,transfer.getDepot_order()); if(deviceChick == null){ //调拨成功 ,改成目标仓库,改状态 rDeviceDao.updateMateralTransferDepot(deviceId, transfer.getDepot_order()); }else{ key = true; } }else{ key = true; } //已经存在了状态为正常的该型号设备,就加总数 if(key){ //原器材总数+调拨的数量 rDeviceDao.addMateralDevice(deviceChick.getDevice_id(),r.getTotal_num()); //删除这条调拨的数据 rDeviceDao.removeDeviceToHis(deviceId); } } rDeviceChangeDao.saveMateralTransArrirmChange(doneCode, BusiCodeConstants.DEVICE_CONFIRM, deviceDoneCode,optr.getCounty_id(), optr.getArea_id()); }else{ rDeviceDao.updateTranIdelDepot(deviceDoneCode, transfer.getDepot_order()); //调拨确认记录异动 rDeviceChangeDao.saveTransArrirmChange(doneCode, BusiCodeConstants.DEVICE_CONFIRM, deviceDoneCode,optr.getCounty_id(), optr.getArea_id()); } } } /** * 查询当前仓库的差异 * @param optrId * @return * @throws Exception * @throws ComponentException */ public Pager<DeviceDto> queryDeviceDiffence(String deviceCode, SOptr optr, String depotId, Integer start, Integer limit) throws Exception { if(StringHelper.isEmpty(depotId)) depotId = findDepot(optr); return rDeviceDao.queryDiffence(deviceCode,depotId,start,limit); } /** * 根据设备编号查询差异确认信息 * * @param deviceCode * @return * @throws Exception * @throws ComponentException * @throws BeansException */ public DeviceDto queryDeviceDiffecnceInfo(SOptr optr, String deviceCode,String depotId) throws Exception, BeansException, ComponentException { RDevice device = queryDiffDevice(optr, deviceCode,depotId); if (!SystemConstants.DEVICE_DIFFENCN_TYPE_NODIFF.equals(device.getDiffence_type())) throw new ComponentException("该设备有差异或差异待确认"); DeviceDto dto = new DeviceDto(); BeanUtils.copyProperties(device, dto); return dto; } /** * 添加差异 * @param remark * @param devices * @throws Exception */ public void addDeviceDiffence(SOptr optr ,String deviceIds, String remark) throws Exception { String [] deviceId = deviceIds.split(","); Integer doneCode = gDoneCode(); rDeviceEditDao.saveDeviceEdit(doneCode,optr.getOptr_id(),deviceIds,remark); List<RDeviceDoneDeviceid> deviceList = new ArrayList<RDeviceDoneDeviceid>(); for (String d : deviceId) { RDeviceDoneDeviceid device = new RDeviceDoneDeviceid(); device.setDevice_done_code(doneCode); device.setDevice_id(d); deviceList.add(device); } rDeviceDoneDeviceidDao.save(deviceList .toArray(new RDeviceDoneDeviceid[deviceList.size()])); rDeviceDoneDetailDao.updateByDoneDeviceid(doneCode); rDeviceDifeenceDao.saveDiffence(doneCode,optr,deviceIds,remark); rDeviceDao.updateDiffenceType(deviceId, SystemConstants.DEVICE_DIFFENCN_TYPE_DIFF); } /** * 文件添加差异 * @param devices * @throws Exception */ public void addFileDeviceDiffence(List<DeviceDto> devices,SOptr optr,String depotId,String remark) throws Exception { String deviceIds=""; devices = removeRepeatDeviceCodes(devices); if(null!=devices && devices.size()>0){ for(DeviceDto dd : devices){ if(StringHelper.isNotEmpty(dd.getDevice_code())){ RDevice device = queryDiffDevice(optr, dd.getDevice_code(),depotId); if (!SystemConstants.DEVICE_DIFFENCN_TYPE_NODIFF.equals(device.getDiffence_type())){ throw new ComponentException("设备【"+dd.getDevice_code()+"】有差异或差异待确认"); } deviceIds+=device.getDevice_id()+","; } } Integer doneCode = gDoneCode(); deviceIds = deviceIds.substring(0,deviceIds.lastIndexOf(",")); rDeviceEditDao.saveDeviceEdit(doneCode,optr.getOptr_id(),deviceIds,remark); List<RDeviceDoneDeviceid> deviceList = new ArrayList<RDeviceDoneDeviceid>(); for (String d : deviceIds.split(",")) { RDeviceDoneDeviceid device = new RDeviceDoneDeviceid(); device.setDevice_done_code(doneCode); device.setDevice_id(d); deviceList.add(device); } rDeviceDoneDeviceidDao.save(deviceList .toArray(new RDeviceDoneDeviceid[deviceList.size()])); rDeviceDoneDetailDao.updateByDoneDeviceid(doneCode); rDeviceDifeenceDao.saveDiffence(doneCode,optr,deviceIds,remark); rDeviceDao.updateDiffenceType(deviceIds.split(","), SystemConstants.DEVICE_DIFFENCN_TYPE_DIFF); } } /** * 取消差异 * @param devices * @throws Exception */ public void cancelDeviceDiffence(String[] deviceIds) throws Exception { rDeviceDao.updateDiffenceType(deviceIds, SystemConstants.DEVICE_DIFFENCN_TYPE_NODIFF); //删除差异记录表记录 rDeviceDifeenceDao.removeDiffence(deviceIds); } /** * 确认差异 * @param devices * @throws Exception */ public void checkDeviceDiffence(String[] deviceIds) throws Exception { rDeviceDao.updateDiffenceType(deviceIds, SystemConstants.DEVICE_DIFFENCN_TYPE_DIFF); } /** * 查询领用清单 * @param optrId * @return * @throws Exception * @throws ComponentException */ public Pager<DeviceProcureDto> queryDeviceProcure(SOptr optr, String query, Integer start, Integer limit) throws Exception { String depotId = findDepot(optr); return rDeviceProcureDao.queryBydepot(depotId,query,start,limit); } public List<DeviceProcureDto> queryProcureDeviceDetail( Integer deviceDoneCode, String deviceType) throws Exception { return rDeviceProcureDao.queryProcureDeviceDetail(deviceDoneCode, deviceType); } public void saveCancelProcure(Integer deviceDoneCode,String deviceId,SOptr optr) throws Exception { DeviceProcureDto procure = rDeviceProcureDao.queryProcure(deviceDoneCode); TDeviceBuyMode buy = tDeviceBuyModeDao.findByKey(procure.getProcure_type()); if(StringHelper.isNotEmpty(deviceId)){ //单个设备取消领用 RDevice device = rDeviceDao.findByDeviceId(deviceId); if (device == null) throw new ComponentException("设备不存在"); if (device.getDepot_status().equals(StatusConstants.IDLE)) throw new ComponentException("设备库存状态已经是空闲"); String depotId = findDepot(optr); if(!depotId.equals(device.getDepot_id())){ throw new ComponentException("设备在" + device.getDepot_id_text() + ",不在当前仓库"); } //取消领用记录异动 rDeviceChangeDao.saveProcureChange(deviceDoneCode, BusiCodeConstants.DEVICE_PROCURE,deviceId,buy.getChange_ownship(),StatusConstants.IDLE,optr.getCounty_id(), optr.getArea_id()); rDeviceDao.updateDepotStatus(deviceDoneCode,deviceId,BusiCodeConstants.CANCEL_PROCURE_DEVICE,buy.getChange_ownship(), StatusConstants.IDLE,optr); //删除设备领用明细 rDeviceDoneDeviceidDao.removeByDeviceDoneCodeAndId(deviceDoneCode, deviceId); RDeviceDoneDetail deviceDetail = rDeviceDoneDetailDao .findByDoneCode(deviceDoneCode, device.getDevice_model()); if(deviceDetail.getCount().intValue() == 1){ //数量为1,则删除该记录 rDeviceDoneDetailDao.removeByDeviceDoneCode(deviceDoneCode); rDeviceProcureDao.removeByDeviceDoneCode(deviceDoneCode); }else{ //领用数量减1 rDeviceDoneDetailDao.updateCountByDoneCode(deviceDoneCode, deviceDetail.getCount().intValue()-1); } }else{ //整个领用单取消 // List<RDeviceDoneDeviceid> list = rDeviceDoneDeviceidDao.queryByDeviceDoneCode(deviceDoneCode); // for(RDeviceDoneDeviceid rid : list){ //// RDevice d = new RDevice(); //// d.setDevice_id(rid.getDevice_id()); //// d.setDepot_status(StatusConstants.IDLE); //// rDeviceDao.update(d); // // } //取消领用记录异动 rDeviceChangeDao.saveProcureChange(deviceDoneCode, BusiCodeConstants.DEVICE_PROCURE,null,buy.getChange_ownship(),StatusConstants.IDLE,optr.getCounty_id(), optr.getArea_id()); rDeviceDao.updateDepotStatus(deviceDoneCode,null, BusiCodeConstants.CANCEL_PROCURE_DEVICE,buy.getChange_ownship(),StatusConstants.IDLE,optr); rDeviceDoneDetailDao.removeByDeviceDoneCode(deviceDoneCode); rDeviceDoneDeviceidDao.removeByDeviceDoneCode(deviceDoneCode); rDeviceProcureDao.removeByDeviceDoneCode(deviceDoneCode); } } /** * 保存领用设备 * @param optrId * @param procure * @param devices * @throws Exception * @throws ComponentException */ public void saveDeviceProcure(SOptr optr,RDeviceProcure procure,List<DeviceDto> devices) throws Exception{ checkDeviceOperRight(optr,devices); String depotId = findDepot(optr); procure.setDepot_id(depotId); Integer doneCode = gDoneCode(); procure.setDevice_done_code(doneCode); procure.setOptr_id(optr.getOptr_id()); procure.setCreate_time(DateHelper.now()); //验证设备是否重复 checkDeviceIsNull(CollectionHelper.converValueToArray(devices, "device_code"),"设备号"); //验证卡是否重复 checkDeviceIsNull(CollectionHelper.converValueToArray(devices, "pair_device_code"),"智能卡号"); //验证猫是否重复 checkDeviceIsNull(CollectionHelper.converValueToArray(devices, "modem_mac"),"modem_mac"); List<RDeviceDoneDeviceid> deviceList = new ArrayList<RDeviceDoneDeviceid>(); for (DeviceDto d : devices) { RDeviceDoneDeviceid device = new RDeviceDoneDeviceid(); device.setDevice_done_code(doneCode); device.setDevice_id(d.getDevice_id()); deviceList.add(device); } rDeviceProcureDao.save(procure); rDeviceDoneDeviceidDao.save(deviceList.toArray(new RDeviceDoneDeviceid[deviceList.size()])); rDeviceDoneDetailDao.updateByDoneDeviceid(doneCode); TDeviceBuyMode buy = tDeviceBuyModeDao.findByKey(procure.getProcure_type()); //领用记录异动 rDeviceChangeDao.saveProcureChange(doneCode, BusiCodeConstants.DEVICE_PROCURE,null,buy.getChange_ownship(),StatusConstants.USE,optr.getCounty_id(), optr.getArea_id()); rDeviceDao.updateDepotStatus(doneCode,null,BusiCodeConstants.DEVICE_PROCURE,buy.getChange_ownship(),StatusConstants.USE,optr); } /** * 查询退库清单 * @param optrId * @return * @throws Exception * @throws ComponentException */ public Pager<RDeviceOutput> queryDeviceOutput(SOptr optr, String query, Integer start, Integer limit) throws Exception { String depotId = findDepot(optr); return rDeviceOutputDao.queryByDepot(depotId,query,start,limit); } /** * 查询退库设备信息 * @param optrId * @param deviceCode * @return * @throws Exception * @throws BeansException * @throws ComponentException */ public DeviceDto queryDeviceOutputInfo(SOptr optr, String deviceCode) throws Exception, BeansException, ComponentException { RDevice device = queryDevice(optr, deviceCode); if (!StatusConstants.IDLE.equals(device.getDepot_status())) { throw new ComponentException("设备正在使用 ,不能被退库"); } if (!SystemConstants.OWNERSHIP_GD.equals(device.getOwnership())) { throw new ComponentException("设备产权不是广电 ,不能被退库"); } List<DeviceDto> dList = rDeviceDao.queryCardModemByDeviceCodes(deviceCode.split(",")); if(dList.size()>0){ throw new ComponentException("设备:["+dList.get(0).getPair_device_code()+"]存在配对机顶盒号["+dList.get(0).getDevice_code()+"],使用该盒号退库!"); } DeviceDto dto = new DeviceDto(); BeanUtils.copyProperties(device, dto); return dto; } /** * 退库(文件) * @param optrId * @param procure * @param devices * @throws Exception */ public void saveDeviceOutputFile(SOptr optr, RDeviceOutput output, List<DeviceDto> devices,String deviceType) throws Exception { devices = removeRepeatDeviceCodes(devices); checkDeviceOperRight(optr,devices); String depotId = findDepot(optr); String[] deviceCodes = CollectionHelper.converValueToArray(devices, "device_code"); List<DeviceDto> deviceList = rDeviceDao.queryByDeviceCodescount(deviceCodes,deviceType); Map<String, DeviceDto> map = CollectionHelper.converToMapSingle( deviceList, "device_code"); for (DeviceDto d : devices) { if(StringHelper.isNotEmpty(d.getDevice_code())){ DeviceDto e = map.get(d.getDevice_code()); checkDevice(depotId, e,d.getDevice_code(),false); } } saveDeviceOutput(optr, output, deviceList); } /** * 退库 * @param optrId * @param procure * @param devices * @throws Exception * @throws ComponentException */ public void saveDeviceOutput(SOptr optr,RDeviceOutput output,List<DeviceDto> devices) throws Exception{ for (DeviceDto d : devices) { RDevice device = rDeviceDao.findByKey(d.getDevice_id()); if(!StatusConstants.IDLE.equals(device.getTran_status())){ throw new ComponentException("设备正在调拨中,不允许退库"); } } String[] deviceCodes = CollectionHelper.converValueToArray(devices, "device_code"); List<DeviceDto> dList = rDeviceDao.queryCardModemByDeviceCodes(deviceCodes); if(dList.size()>0){ throw new ComponentException("设备:["+dList.get(0).getPair_device_code()+"]存在配对机顶盒号["+dList.get(0).getDevice_code()+"],使用该盒号退库!"); } //验证设备是否重复 checkDeviceIsNull(deviceCodes,"设备号"); checkDeviceOperRight(optr,devices); String depotId = findDepot(optr); output.setDepot_id(depotId); Integer doneCode = gDoneCode(); output.setDevice_done_code(doneCode); output.setOptr_id(optr.getOptr_id()); output.setCreate_time(DateHelper.now()); List<RDeviceDoneDeviceid> deviceList = new ArrayList<RDeviceDoneDeviceid>(); for (DeviceDto d : devices) { RDeviceDoneDeviceid device = new RDeviceDoneDeviceid(); device.setDevice_done_code(doneCode); device.setDevice_id(d.getDevice_id()); deviceList.add(device); } rDeviceOutputDao.save(output); rDeviceDoneDeviceidDao.save(deviceList .toArray(new RDeviceDoneDeviceid[deviceList.size()])); rDeviceDoneDetailDao.updateByDoneDeviceid(doneCode); //退库记录异动 rDeviceChangeDao.saveOutChange(doneCode, BusiCodeConstants.DEVICE_OUT,optr.getCounty_id(), optr.getArea_id()); rDeviceDao.removeToHis(doneCode); } /** * 器材退库 * @param optr * @param output * @param deviceList * @throws Exception */ public void saveMateralOutput(SOptr optr, RDeviceOutput output, List<RDevice> deviceList) throws Exception{ if(deviceList.size()== 0){ throw new ComponentException(ErrorCode.ParamIsNull); } String[] deviceIds = CollectionHelper.converValueToArray(deviceList, "device_id"); if(deviceList.size() != deviceIds.length){ throw new ComponentException(ErrorCode.DeviceRepeat); } List<RDevice> rList = rDeviceDao.queryDeviceByIds(deviceIds); for (RDevice d : rList) { if(!StatusConstants.IDLE.equals(d.getTran_status())){ throw new ComponentException("设备正在调拨中,不允许退库"); } } String depotId = findDepot(optr); output.setDepot_id(depotId); Integer doneCode = gDoneCode(); output.setDevice_done_code(doneCode); output.setOptr_id(optr.getOptr_id()); output.setCreate_time(DateHelper.now()); Map<String, RDevice> map = CollectionHelper.converToMapSingle(rList, "device_id"); List<RDeviceDoneDeviceid> deviceDoneList = new ArrayList<RDeviceDoneDeviceid>(); List<RDeviceDoneDetail> deviceDetailList = new ArrayList<RDeviceDoneDetail>(); List<DeviceDto> devices = new ArrayList<>(); for (RDevice d : deviceList) { //检查权限 DeviceDto deviceDto = new DeviceDto(); deviceDto.setDevice_type(d.getDevice_type()); devices.add(deviceDto); RDeviceDoneDeviceid device = new RDeviceDoneDeviceid(); device.setDevice_done_code(doneCode); device.setDevice_id(d.getDevice_id()); deviceDoneList.add(device); RDeviceDoneDetail detail = new RDeviceDoneDetail(); detail.setDevice_done_code(doneCode); detail.setDevice_type(d.getDevice_type()); detail.setDevice_model(d.getDevice_model()); detail.setCount(d.getTotal_num()); deviceDetailList.add(detail); //变更原有的设备数量 RDevice _r = map.get(d.getDevice_id()); Integer oldValue = _r.getTotal_num(); Integer newValue = _r.getTotal_num()-d.getTotal_num(); //总数异动记录 rDeviceChangeDao.saveMateralTransChange(doneCode,BusiCodeConstants.DEVICE_OUT,device.getDevice_id(),"total_num",oldValue ,newValue,output.getOptr_id(),output.getDepot_id(),optr.getCounty_id(), optr.getArea_id(),null); rDeviceDao.removeMateralDevice(d.getDevice_id(), d.getTotal_num()); checkDeviceNum(d.getDevice_id()); } checkDeviceOperRight(optr,devices); rDeviceOutputDao.save(output); rDeviceDoneDeviceidDao.save(deviceDoneList.toArray(new RDeviceDoneDeviceid[deviceDoneList.size()])); rDeviceDoneDetailDao.save(deviceDetailList.toArray(new RDeviceDoneDetail[deviceDetailList.size()])); //删除设备 // rDeviceDao.removeDeviceToHis(doneCode); } /** * 批量修改设备状态 ,必须在当前库(文件) * @param optrId * @param deviceStatus * @param deviceCodes 设备号 * @throws Exception */ public String changeDeviceStatusFile(SOptr optr,String deviceStatus,String isNewStb, List<DeviceDto> devices,String remark,String deviceType) throws Exception { String msg = ""; String depotId = findDepot(optr); devices = removeRepeatDeviceCodes(devices); String[] deviceCodes = CollectionHelper.converValueToArray(devices, "device_code"); List<DeviceDto> deviceList = rDeviceDao.queryByDeviceCodescount(deviceCodes,deviceType); Map<String, DeviceDto> map = CollectionHelper.converToMapSingle( deviceList, "device_code"); List<String> deviceIdList = new ArrayList<String>(); List<String> ignored = new ArrayList<String>(); for (String d : deviceCodes) { DeviceDto e = map.get(d); checkDevice(depotId, e,d,true); if(!SystemConstants.INVOICE_STATUS_IDLE.equals(e.getDepot_status()) || !depotId.equals(e.getDepot_id()) ){ ignored.add(d); }else{ deviceIdList.add(e.getDevice_id()); } } changeDeviceStatus(optr, deviceStatus, isNewStb, deviceIdList.toArray(new String[deviceIdList.size()]),remark); msg = "共执行 " + devices.size() + " 条记录,成功 " + (devices.size() - ignored.size() ) + " 条"; if(ignored.size()>0){ msg = msg + ",因部分设备不在当前仓库或者状态不是空闲,忽略 " +ignored.size() + " 条!"; } return msg; } /** * 批量修改设备状态 ,必须在当前库 * @param optrId * @param deviceStatus * @param deviceIds * @throws Exception * @throws ComponentException */ public void changeDeviceStatus(SOptr optr,String deviceStatus,String isNewStb,String[] deviceIds,String remark) throws Exception { String depotId = findDepot(optr); Integer doneCode = gDoneCode(); RDeviceEdit deviceEdit = new RDeviceEdit(); deviceEdit.setDevice_done_code(doneCode); deviceEdit.setDepot_id(depotId); deviceEdit.setCreate_time(DateHelper.now()); deviceEdit.setEdit_type("DEVICE_STATUS_R_DEVICE"); deviceEdit.setOld_value(""); deviceEdit.setNew_value(deviceStatus); deviceEdit.setOptr_id(optr.getOptr_id()); deviceEdit.setRemark(remark); RDeviceDoneDeviceid doneDetailId = null; List<RDeviceDoneDeviceid> deviceIdList = new ArrayList<RDeviceDoneDeviceid>(); for(String deviceId : deviceIds){ doneDetailId = new RDeviceDoneDeviceid(); doneDetailId.setDevice_done_code(doneCode); doneDetailId.setDevice_id(deviceId); deviceIdList.add(doneDetailId); } rDeviceEditDao.save(deviceEdit); rDeviceDoneDeviceidDao.save(deviceIdList.toArray(new RDeviceDoneDeviceid[deviceIdList.size()])); rDeviceDoneDetailDao.updateByDoneDeviceid(doneCode); rDeviceDao.updateDeviceStatus(depotId,deviceIds, deviceStatus,isNewStb); } protected String canCaSend(SOptr optr,String dataRightType) throws Exception,ComponentException { SDataRightType dataRight = sDataRightTypeDao.findByKey(dataRightType); if (dataRight == null || SystemConstants.BOOLEAN_TRUE.equals(dataRight.getNull_is_all())) return SystemConstants.DEFAULT_DATA_RIGHT; //取操作员原来信息,参数optr有可能是切换后的 SOptr sOptr = sOptrDao.findByKey(optr.getOptr_id()); List<SRole> roleList = sRoleDao.queryByOptrId(sOptr.getOptr_id(),dataRightType,sOptr.getCounty_id()); for (SRole role : roleList) { if (StringHelper.isNotEmpty(role.getData_right_level())) return role.getData_right_level(); else if (StringHelper.isNotEmpty(role.getRule_str())) { return role.getRule_str().replaceAll("\"", "'"); } } return SystemConstants.DEFAULT_DATA_RIGHT; } public DeviceDto queryDeviceById(String cardId) throws Exception{ String dataRight = canCaSend(WebOptr.getOptr(), DataRight.CHANGE_COUNTY.toString()); DeviceDto device = rDeviceDao.queryDeviceByCard(cardId); if (device == null) { throw new ComponentException("设备【"+cardId+"】不存在"); } if(dataRight.equals(SystemConstants.DEFAULT_DATA_RIGHT)){ if(!device.getDepot_id().equals(WebOptr.getOptr().getDept_id())){ throw new ComponentException("设备【"+cardId+"】不在当前仓库!"); } }else{ List<SCounty> countys = sCountyDao.querySwitchCounty(dataRight); String countyIds = ""; for(SCounty county : countys){ String countyId = county.getCounty_id(); if(SystemConstants.COUNTY_ALL.equals(countyId)){ countyIds = SystemConstants.COUNTY_ALL; break; }else{ countyIds = StringHelper.append(countyIds,countyId,","); } } List<SDeptDto> depts = sDeptDao.queryAllYYT(countyIds.split(",")); List<String> list = CollectionHelper.converValueToList(depts, "dept_id"); if(!list.contains(device.getCounty_id())){ throw new ComponentException("设备【"+cardId+"】不在切换部门下的仓库中!"); } } RStb stb = rStbDao.findPairStbByCardDeviceId(device.getDevice_id()); if(stb != null){ device.setPair_device_code(stb.getStb_id()); }else{ List<CUser> user = cUserDao.queryUserByCardId(cardId); if(user.size()>0){ device.setPair_device_code(user.get(0).getStb_id()); } } return device; } public DeviceDto queryDeviceByStbId(String deviceCode,SOptr optr) throws Exception{ DeviceDto device = rDeviceDao.queryByDeviceCode(deviceCode); checkDevice(optr.getDept_id(), device,deviceCode,false); return device; } /** * 根据设备类型,设备编号查询配对的设备 * @param deviceCode * @param deviceType * @param optr * @return * @throws Exception */ public DeviceDto getStbCardById(String deviceCode,String deviceType,SOptr optr) throws Exception{ DeviceDto device = rDeviceDao.getStbCardById(deviceCode,deviceType); checkDevice(optr.getDept_id(), device,deviceCode,false); return device; } public DeviceDto queryStbById(String deviceCode) throws Exception{ DeviceDto device = rDeviceDao.queryByDeviceCode(deviceCode); return device; } /** * 根据ca查询类型 * @param Type * @return * @throws Exception */ public List<TBusiCmdSupplier> querySendTypeByType(String type,String countyId) throws Exception { List<TBusiCmdSupplier> list = tBusiCmdSupplierDao.querySendTypeByType(type,countyId); return list; } private RDevice queryDiffDevice(SOptr optr,String deviceCode,String depotId) throws Exception{ if(StringHelper.isEmpty(depotId)) depotId = findDepot(optr); RDevice device = rDeviceDao.queryByDeviceCode(deviceCode); checkDevice(depotId, device,deviceCode,false); return device; } public List<SDept> queryDeptByOptr(SOptr optr) throws Exception{ List<SDept> list = sDeptDao.queryAllDept(); for (int i = list.size() - 1; i >= 0; i--){ if(list.get(i).getDept_id().equals(optr.getDept_id())){ list.remove(i); } } return list; } public List<SDept> queryAllDept() throws Exception{ List<SDept> list = sDeptDao.queryAllDept(); return list; } public Map<String , Object> queryDeviceStbModem() throws Exception { List<RDeviceModel> list = rDeviceDao.queryDeviceStbModem(); Map<String, List<RDeviceModel>> deviceMap = CollectionHelper.converToMap(list, "device_type"); Map<String , Object> map = new HashMap<String, Object>(); map.put("STB", deviceMap.get("STB")); //机顶盒型号 map.put("MODEM", deviceMap.get("MODEM")); //modem型号 return map; } public String[] getColumnName(String deviceType, String deviceModel) throws Exception{ if(SystemConstants.DEVICE_TYPE_MODEM.equals(deviceType)){ return new String[]{"box_no","device_code","pair_device_code"}; }else if(SystemConstants.DEVICE_TYPE_STB.equals(deviceType)){ RStbModel model = rStbModelDao.findByKey(deviceModel); if(model == null){ throw new ComponentException(deviceModel+"设备型号不存在"); } if(SystemConstants.DTV_SERV_TYPE_SINGLE.equals(model.getInteractive_type()) ||SystemConstants.DTV_SERV_TYPE_DOUBLE.equals(model.getInteractive_type())){ return new String[]{"box_no","device_code","pair_device_code"}; }else{ throw new ComponentException("暂时不支持"+deviceModel+"设备型号的入库"); } }else{ throw new ComponentException("暂时不支持"+deviceType+"设备类型的入库"); } } public List<DeviceDto> queryDevicesByFiles(File files, String type, String[] colName, String deviceType, String deviceModel) throws Exception{ if(colName == null){ colName = getColumnName(deviceType,deviceModel); } if(StringHelper.isEmpty(type)){ type = "TXT"; } List<DeviceDto> devices = new ArrayList<DeviceDto>(); if("TXT".equals(type)){ //txt txtToBean中去掉第一行 devices = FileHelper.txtToBean(files, colName, DeviceDto.class); }else if("XLS".equals(type)){ devices = FileHelper.fileToBean(files, colName, DeviceDto.class); } if(devices.size()==0){ throw new ComponentException("找不到设备,请检查文件"); } return devices; } public Pager<DeviceDetailInputDto> queryInputDeviceDetail(int deviceDoneCode, Integer start, Integer limit) throws Exception{ return rDeviceDao.queryInputDeviceDetail(deviceDoneCode,start, limit); } /** * @param deviceTransferDao * the rDeviceTransferDao to set */ public void setRDeviceTransferDao(RDeviceTransferDao deviceTransferDao) { rDeviceTransferDao = deviceTransferDao; } /** * @param depotDefineDao * the rDepotDefineDao to set */ public void setRDepotDefineDao(RDepotDefineDao depotDefineDao) { rDepotDefineDao = depotDefineDao; } /** * @param deviceSupplierDao * the rDeviceSupplierDao to set */ public void setRDeviceSupplierDao(RDeviceSupplierDao deviceSupplierDao) { rDeviceSupplierDao = deviceSupplierDao; } /** * @param deviceInputDao * the rDeviceInputDao to set */ public void setRDeviceInputDao(RDeviceInputDao deviceInputDao) { rDeviceInputDao = deviceInputDao; } /** * @param deviceDoneDetailDao * the rDeviceDoneDetailDao to set */ public void setRDeviceDoneDetailDao(RDeviceDoneDetailDao deviceDoneDetailDao) { rDeviceDoneDetailDao = deviceDoneDetailDao; } /** * @param deviceOrderDao * the rDeviceOrderDao to set */ public void setRDeviceOrderDao(RDeviceOrderDao deviceOrderDao) { rDeviceOrderDao = deviceOrderDao; } /** * @param deviceDoneDeviceidDao * the rDeviceDoneDeviceidDao to set */ public void setRDeviceDoneDeviceidDao( RDeviceDoneDeviceidDao deviceDoneDeviceidDao) { rDeviceDoneDeviceidDao = deviceDoneDeviceidDao; } public void setRDeviceHisDao(RDeviceHisDao deviceHisDao) { rDeviceHisDao = deviceHisDao; } /** * @param stbDao * the rStbDao to set */ public void setRStbDao(RStbDao stbDao) { rStbDao = stbDao; } /** * @param cardDao * the rCardDao to set */ public void setRCardDao(RCardDao cardDao) { rCardDao = cardDao; } /** * @param modemDao * the rModemDao to set */ public void setRModemDao(RModemDao modemDao) { rModemDao = modemDao; } /** * @param deviceOrderDetailDao * the rDeviceOrderDetailDao to set */ public void setRDeviceOrderDetailDao( RDeviceOrderDetailDao deviceOrderDetailDao) { rDeviceOrderDetailDao = deviceOrderDetailDao; } /** * @param deviceProcureDao the rDeviceProcureDao to set */ public void setRDeviceProcureDao(RDeviceProcureDao deviceProcureDao) { rDeviceProcureDao = deviceProcureDao; } /** * @param deviceOutputDao the rDeviceOutputDao to set */ public void setRDeviceOutputDao(RDeviceOutputDao deviceOutputDao) { rDeviceOutputDao = deviceOutputDao; } public void setRDeviceEditDao(RDeviceEditDao deviceEditDao) { rDeviceEditDao = deviceEditDao; } public void setRDeviceReclaimDao(RDeviceReclaimDao deviceReclaimDao) { rDeviceReclaimDao = deviceReclaimDao; } public void setRDeviceChangeDao(RDeviceChangeDao deviceChangeDao) { rDeviceChangeDao = deviceChangeDao; } public void setCustService(ICustServiceExternal custService) { this.custService = custService; } public void setTBusiCmdSupplierDao(TBusiCmdSupplierDao busiCmdSupplierDao) { tBusiCmdSupplierDao = busiCmdSupplierDao; } public void setCUserDao(CUserDao userDao) { cUserDao = userDao; } public void setCDoneCodeDetailDao(CDoneCodeDetailDao doneCodeDetailDao) { cDoneCodeDetailDao = doneCodeDetailDao; } public void setRDeviceUseRecordsDao(RDeviceUseRecordsDao deviceUseRecordsDao) { rDeviceUseRecordsDao = deviceUseRecordsDao; } public void setJBusiCmdDao(JBusiCmdDao jBusiCmdDao) { this.jBusiCmdDao = jBusiCmdDao; } public void setSDeptDao(SDeptDao deptDao) { sDeptDao = deptDao; } public void setTDeviceBuyModeDao(TDeviceBuyModeDao deviceBuyModeDao) { tDeviceBuyModeDao = deviceBuyModeDao; } public void setSCountyDao(SCountyDao countyDao) { sCountyDao = countyDao; } public void setRDeviceModelDao(RDeviceModelDao deviceModelDao) { this.rDeviceModelDao = deviceModelDao; } public void setRDeviceTypeDao(RDeviceTypeDao deviceTypeDao) { this.rDeviceTypeDao = deviceTypeDao; } }