/** * RDeviceDao.java 2010/05/07 */ package com.ycsoft.business.dao.resource.device; import java.io.Serializable; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.stereotype.Component; import com.ycsoft.beans.core.cust.CCust; import com.ycsoft.beans.core.cust.CCustDevice; import com.ycsoft.beans.device.RDevice; import com.ycsoft.beans.device.RDeviceModel; import com.ycsoft.beans.device.RStb; import com.ycsoft.beans.system.SOptr; import com.ycsoft.business.dto.device.DeviceSmallDto; import com.ycsoft.commons.constants.StatusConstants; import com.ycsoft.commons.constants.SystemConstants; import com.ycsoft.commons.helper.StringHelper; import com.ycsoft.daos.abstracts.BaseEntityDao; import com.ycsoft.daos.core.JDBCException; import com.ycsoft.daos.core.Pager; import com.ycsoft.sysmanager.dto.resource.DeviceDetailInputDto; import com.ycsoft.sysmanager.dto.resource.DeviceDto; /** * RDeviceDao -> R_DEVICE table's operator */ @Component public class RDeviceDao extends BaseEntityDao<RDevice> { /** * */ private static final long serialVersionUID = -7588840323995923091L; /** * default empty constructor */ public RDeviceDao() {} public void updateDeviceLoss(String deviceId,String isLossed) throws Exception { String sql = "update r_device set is_loss=? where device_id=?"; this.executeUpdate(sql, isLossed,deviceId); //虚拟设备 sql = "UPDATE r_device SET is_loss=? WHERE device_id in ( " + " select t.pair_card_id from r_stb t " + " where t.pair_card_id is not null and t.device_id=?" + " union all " + " select t.pair_modem_id from r_stb t " + " where t.pair_modem_id is not null and t.device_id=?)"; executeUpdate(sql, isLossed, deviceId, deviceId); } public Pager<DeviceDto> queryIdleDevice(String deviceCode, String depotId, Integer start, Integer limit) throws Exception { String sql="",stbCond="",cardCond="",modemCond=""; if(StringHelper.isNotEmpty(deviceCode)){ stbCond = " and s.stb_id='"+deviceCode+"'"; cardCond = " and c.card_id='"+deviceCode+"'"; modemCond = " and m.modem_mac='"+deviceCode+"'"; } sql = "select d.*,s.stb_id device_code,c.card_id pair_device_code,c.device_model pair_device_model," + "m.modem_mac pair_device_modem_code,m.device_model pair_device_modem_model" + " from r_stb s,r_device d,r_card c,r_modem m"+ " where d.device_id = s.device_id" + " and s.pair_card_id=c.device_id(+) and s.pair_modem_id=m.device_id(+)"+ " and d.depot_status=? and d.depot_id=? and d.is_loss=?"+ stbCond+ " union "+ "select d.*,c.card_id device_code,'','','','' from r_card c,r_device d" + " where d.device_id = c.device_id and d.is_virtual='F'"+ " and d.depot_status=? and d.depot_id=? and d.is_loss=?"+cardCond+ " union "+ "select d.*,m.modem_mac device_code,'','','','' from r_modem m,r_device d" + " where d.device_id = m.device_id and d.is_virtual='F'"+ " and d.depot_status=? and d.depot_id=? and d.is_loss=?"+modemCond; return this.createQuery(DeviceDto.class, sql, StatusConstants.IDLE, depotId, SystemConstants.BOOLEAN_TRUE, StatusConstants.IDLE, depotId, SystemConstants.BOOLEAN_TRUE, StatusConstants.IDLE, depotId, SystemConstants.BOOLEAN_TRUE) .setStart(start).setLimit(limit).page(); } public CCust queryCustByDeviceId(String deviceId) throws JDBCException { String sql = "select c.cust_id from c_cust c,c_cust_device cd where c.cust_id=cd.cust_id and cd.device_id=?" + " union select c.cust_id from c_cust_his c,c_cust_device_his cd where c.cust_id=cd.cust_id and cd.device_id=?"; return this.createQuery(CCust.class, sql, deviceId, deviceId).first(); } public CCustDevice findCustDeviceByDeviceId(String deviceId) throws JDBCException { String sql = "select * from c_cust_device_his where device_id=?"; return this.createQuery(CCustDevice.class, sql, deviceId).first(); } /** * 根据设备编号查询设备的公共信息 * @param deviceCode * @return */ public RDevice findByDeviceCode(String deviceCode) throws JDBCException { String sql ="select d.* from r_stb s,r_device d where d.device_id = s.device_id and s.stb_id=:deviceCode " + " union select d.* from r_card c,r_device d where d.device_id = c.device_id and c.card_id=:deviceCode" + " union select d.* from r_modem m,r_device d where d.device_id = m.device_id and m.modem_mac=:deviceCode"; Map<String, Serializable> paramers = new HashMap<String, Serializable>(); paramers.put("deviceCode", deviceCode); return createNameQuery(sql, paramers).first(); } /** * 根据设备id查询设备的公共信息 * @param deviceId * @return */ public RDevice findByDeviceId(String deviceId) throws JDBCException { String sql = "select * from r_device where device_id=?"; return createQuery(sql, deviceId).first(); } /** * 查找客户下 购买方式的设备 * @param custId * @param buyMode * @return */ public List<RDevice> queryDeviceByBuyModel(String custId, String buyMode) throws JDBCException { String sql = "select * from r_device r where r.device_id in (select device_id from c_cust_device d where d.cust_id=? and d.buy_mode=?)"; return createQuery(sql, custId, buyMode).list(); } /** * 更新设备流转为转出 * * @param doneCode 调拨流水 * @throws JDBCException */ public void updateTranOut(Integer doneCode) throws JDBCException { String sql = "UPDATE r_device SET tran_status=? WHERE device_id IN " + " (SELECT device_id FROM r_device_done_deviceid t WHERE t.device_done_code=?)"; executeUpdate(sql, StatusConstants.UNCONFIRM, doneCode); //虚拟设备 sql = "UPDATE r_device SET tran_status=? WHERE device_id in ( " + " select t.pair_card_id " + " from r_device_done_deviceid di,r_stb t " + " where di.device_id=t.device_id and t.pair_card_id is not null " + " and di.device_done_code=? " + " union all " + " select t.pair_modem_id " + " from r_device_done_deviceid di,r_stb t " + " where di.device_id=t.device_id and t.pair_modem_id is not null " + " and di.device_done_code=?)"; executeUpdate(sql, StatusConstants.UNCONFIRM,doneCode, doneCode); } /** * 更新设备流转为空闲,并改变库位 * * @param doneCode 调拨流水 * @param depotOrder 目标仓库 * @throws JDBCException */ public void updateTranIdelDepot(Integer doneCode, String depotOrder) throws JDBCException { String sql = "UPDATE r_device SET tran_status=?,depot_id=? WHERE device_id IN " + " (SELECT device_id FROM r_device_done_deviceid t WHERE t.device_done_code=?)"; executeUpdate(sql, StatusConstants.IDLE, depotOrder, doneCode); //虚拟设备 sql = "UPDATE r_device SET tran_status=?,depot_id=? WHERE device_id in ( " + " select t.pair_card_id " + " from r_device_done_deviceid di,r_stb t " + " where di.device_id=t.device_id and t.pair_card_id is not null " + " and di.device_done_code=? " + " union all " + " select t.pair_modem_id " + " from r_device_done_deviceid di,r_stb t " + " where di.device_id=t.device_id and t.pair_modem_id is not null " + " and di.device_done_code=?)"; executeUpdate(sql, StatusConstants.IDLE, depotOrder, doneCode, doneCode); } public void updateTranIdel(Integer doneCode)throws JDBCException { String sql = "UPDATE r_device SET tran_status=? WHERE device_id IN " + " (SELECT device_id FROM r_device_done_deviceid t WHERE t.device_done_code=?)"; executeUpdate(sql, StatusConstants.IDLE, doneCode); //虚拟设备 sql = "UPDATE r_device SET tran_status=? WHERE device_id in ( " + " select t.pair_card_id " + " from r_device_done_deviceid di,r_stb t " + " where di.device_id=t.device_id and t.pair_card_id is not null " + " and di.device_done_code=? " + " union all " + " select t.pair_modem_id " + " from r_device_done_deviceid di,r_stb t " + " where di.device_id=t.device_id and t.pair_modem_id is not null " + " and di.device_done_code=?)"; executeUpdate(sql, StatusConstants.IDLE,doneCode, doneCode); } /** * 查询设备信息 * @param deviceCode * @return * @throws JDBCException */ public DeviceDto queryByDeviceCode(String deviceCode) throws JDBCException { String sql = "SELECT d.*,s.device_model,s.stb_id device_code," + "case when r.card_id is null then s.mac else r.card_id end pair_device_code,r.device_model pair_device_model," + " s.MAC pair_device_modem_code,'','' modem_mac,s.pair_card_id,s.pair_modem_id" + " FROM R_STB S, R_CARD r,r_device d " + " WHERE s.device_id=d.device_id AND s.pair_card_id= r.DEVICE_ID(+)" + " AND S.STB_ID = :deviceCode" + " UNION SELECT d.*,c.device_model,c.card_id device_code,'','','','','','',''" + " FROM R_CARD C,r_device d" + " WHERE c.device_id=d.device_id AND C.CARD_ID = :deviceCode " + " UNION SELECT d.*,m.device_model,m.modem_mac device_code,'','','','',m.modem_mac,'',''" + " FROM R_MODEM M,r_device d WHERE m.device_id=d.device_id AND M.Modem_mac = :deviceCode"; Map<String, Serializable> paramers = new HashMap<String, Serializable>(); paramers.put("deviceCode", deviceCode); return createNameQuery(DeviceDto.class,sql, paramers).first(); } public DeviceDto getStbCardById(String deviceCode,String deviceType) throws JDBCException { String str = ""; if(deviceType.equals("STB")){ str +=" T.STB_ID = ? "; }else if(deviceType.equals("CARD")){ str +=" T1.CARD_ID = ? "; }else{ } String sql = "select t.STB_ID device_code,T1.CARD_ID pair_device_code,t1.device_id pair_card_id,r.* from R_STB T,R_CARD T1,r_device r " + " WHERE T.PAIR_CARD_ID = T1.DEVICE_ID(+) and r.device_id = t.device_id and " + str ; return createQuery(DeviceDto.class,sql, deviceCode).first(); } public List<DeviceDto> queryByBatchNum(String batchNum,String depotId) throws JDBCException { String sql = "SELECT d.*,s.device_model,s.stb_id device_code," + " case when r.card_id is null then s.mac else r.card_id end pair_device_code,r.device_model pair_device_model," + " m.MODEM_MAC pair_device_modem_code,m.DEVICE_MODEL pair_device_modem_model,'' modem_mac,s.pair_card_id,s.pair_modem_id" + " FROM R_STB S, R_CARD r,r_device d,r_modem m" + " WHERE s.device_id=d.device_id AND s.pair_card_id= r.DEVICE_ID(+)" + " AND s.pair_modem_id=m.device_id(+) AND d.Batch_Num = :batchNum AND d.depot_id=:depotId AND d.tran_status='IDLE'" + " UNION SELECT d.*,c.device_model,c.card_id device_code,'','','','','','',''" + " FROM R_CARD C,r_device d" + " WHERE c.device_id=d.device_id and d.is_virtual='F' AND d.Batch_Num = :batchNum AND d.depot_id=:depotId AND d.tran_status='IDLE'" + " UNION SELECT d.*,m.device_model,m.modem_mac device_code,'','','','',m.modem_mac,'',''" + " FROM R_MODEM M,r_device d WHERE m.device_id=d.device_id AND d.Batch_Num = :batchNum AND d.depot_id=:depotId AND d.tran_status='IDLE'"; Map<String, Serializable> paramers = new HashMap<String, Serializable>(); paramers.put("batchNum", batchNum); paramers.put("depotId", depotId); return createNameQuery(DeviceDto.class,sql, paramers).list(); } public DeviceDto queryDeviceByCard(String deviceCode) throws JDBCException { String sql = StringHelper.append( "select rd.*,r.card_id device_code,rm.ca_type,s.county_id,s.area_id " + " from r_card r,r_card_model rm,r_device rd ,s_dept s " + " where s.dept_id=rd.depot_id and r.card_id = ? and r.device_model=rm.device_model and rd.device_id=r.device_id"); return createQuery(DeviceDto.class,sql, deviceCode).first(); } public DeviceDto queryDeviceByStb(String deviceCode) throws JDBCException { String sql = StringHelper.append("select r.* from r_stb r where r.stb_id = ? "); return createQuery(DeviceDto.class,sql, deviceCode).first(); } /** * 根据设备类型查询型号 * @param deviceType * @param modemType * @return * @throws Exception */ public List<RDeviceModel> queryDeviceModelByType(String deviceType, String modemType) throws Exception { String sql = "select * from vew_device_model where device_type=?"; if(StringHelper.isNotEmpty(modemType)){ sql = StringHelper.append(sql," and modem_type='",modemType,"'"); } return this.createQuery(RDeviceModel.class, sql ,deviceType).list(); } /** * 根据设备编号查询设备及客户信息 * @param deviceCode * @return * @throws Exception */ public DeviceDto queryDeviceInfoByCode(String deviceCode) throws Exception { String sql = "select a.*,case when (r.device_id is null) then c.cust_no end cust_no," + " case when (r.device_id is null) then c.cust_id end cust_id," + "case when (r.device_id is null) then c.cust_name end cust_name,dp.county_id from ("+ "SELECT d.*,s.stb_id device_code,"+ "case when r.card_id is null then s.mac else r.card_id end pair_device_code,r.device_model pair_device_model,'' pair_device_modem_code,'' pair_device_modem_model," + " '' modem_mac,'' modem_type"+ " FROM R_STB S, R_CARD r,r_device d"+ " WHERE s.device_id=d.device_id AND s.pair_card_id= r.DEVICE_ID(+)" + " AND S.STB_ID=:deviceCode"+ " UNION SELECT d.*,c.card_id device_code,'','','','','',''"+ " FROM R_CARD C,r_device d"+ " WHERE c.device_id=d.device_id AND C.CARD_ID=:deviceCode"+ " UNION SELECT d.*,m.modem_mac device_code,'','','','',m.modem_mac,m.modem_type"+ " FROM R_MODEM M,r_device d WHERE m.device_id=d.device_id AND M.Modem_mac=:deviceCode"+ " ) a,c_cust c,c_cust_device cd,s_dept dp,r_device_reclaim r" + " where r.device_id(+) = cd.device_id and r.status(+)='UNCONFIRM' and cd.device_id(+)=a.device_id and c.cust_id(+)=cd.cust_id and dp.dept_id=a.depot_id" + " and dp.status='ACTIVE'"; Map<String,String> map = new HashMap<String,String>(); map.put("deviceCode",deviceCode); return createNameQuery(DeviceDto.class, sql,map).first(); } private String getSql(String deviceModel,String depotId,String status, String mode,String depotStatus, String backup, String batch_num){ String sql = ""; if(StringHelper.isNotEmpty(mode)){ if(mode.equals(SystemConstants.DEVICE_TYPE_STB)){ sql += "select r.*,t.stb_id device_code,"+ " case when d.card_id is null then t.mac else d.card_id end pair_device_code,d.device_model pair_device_model,t.mac modem_mac"+ " from r_device r,r_stb t,r_card d"+ " where r.device_id=t.device_id and t.pair_card_id=d.device_id(+) "+ " and r.depot_id=?"; }else if(mode.equals(SystemConstants.DEVICE_TYPE_CARD)){ sql += " select r.*,t.card_id device_code,"+ "'' pair_device_code,'' pair_device_model,'' modem_mac"+ " from r_device r,r_card t"+ " where r.device_id=t.device_id " + " and not exists (select s.device_id from r_stb s where s.pair_card_id = t.device_id )"+ " and r.depot_id=?"; }else if(mode.equals(SystemConstants.DEVICE_TYPE_MODEM)){ sql += " select r.*,t.modem_mac device_code,"+ "'' pair_device_code,'' pair_device_model,t.modem_mac"+ " from r_device r,r_modem t"+ " where r.device_id=t.device_id"+ // " and not exists (select s.device_id from r_stb s where s.pair_modem_id = t.device_id ) "+ " and r.depot_id=?"; }else if(mode.equals(SystemConstants.DEVICE_TYPE_FITTING)){ sql += " select r.*, '' device_code,"+ "'' pair_device_code,'' pair_device_model,'' modem_mac"+ " from r_device r "+ " where r.device_type = '"+SystemConstants.DEVICE_TYPE_FITTING+"' "+ " and r.depot_id=?"; }else{ sql += "select r.*,t.stb_id device_code,"+ " t.mac modem_mac"+ " from r_device r,r_stb t"+ " where r.device_id=t.device_id and t.mac is not null "+ " and r.depot_id=?"; } } if(StringHelper.isNotEmpty(deviceModel)){ sql = StringHelper.append(sql," and t.device_model in (",sqlGenerator.in(deviceModel.split(",")),")"); } if(StringHelper.isNotEmpty(status)){ sql = StringHelper.append(sql," and r.device_status='",status,"'"); } if(StringHelper.isNotEmpty(depotStatus)){ sql = StringHelper.append(sql," and r.depot_status='",depotStatus,"'"); } if(StringHelper.isNotEmpty(backup)){ sql = StringHelper.append(sql, " and r.backup='", backup, "'"); } if(StringHelper.isNotEmpty(batch_num)){ sql = StringHelper.append(sql, " and r.batch_num='", batch_num, "'"); } return sql; } /** * 多条件查询 * @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 { String sql = getSql(deviceModel, depotId, status, mode, depotStatus, backup, batch_num); //如果是猫 if(SystemConstants.DEVICE_TYPE_MODEM.equals(mode)){ //猫类型不为空,猫型号为空时 if(StringHelper.isNotEmpty(modemType) && StringHelper.isEmpty(deviceModel)){ sql = StringHelper.append(sql," and t.modem_type='",modemType,"'"); } } if(StringHelper.isNotEmpty(start_input_time) || StringHelper.isNotEmpty(end_input_time)){ sql = StringHelper.append(sql, " and r.device_id in ( select tdd.device_id from r_device_done_deviceid tdd,r_device_input rdi " + " where tdd.device_done_code = rdi.device_done_code "); if (StringHelper.isNotEmpty(start_input_time)) { sql = StringHelper.append(sql, " and rdi.create_time>=to_date('", start_input_time, " 00:00:00','yyyy-mm-dd hh24:mi:ss')"); } if (StringHelper.isNotEmpty(end_input_time)) { sql = StringHelper.append(sql, " and rdi.create_time<=to_date('", end_input_time, " 23:59:59','yyyy-mm-dd hh24:mi:ss')"); } sql = StringHelper.append(sql,")"); } sql =StringHelper.append("select a.*,cc.cust_no cust_id,cc.cust_name,cc.str9 from ( ", sql," ) a,c_cust_device cd,c_cust cc ", " where cd.device_id(+)=a.device_id and cc.cust_id(+)=cd.cust_id order by a.device_type"); return this.createQuery(DeviceDto.class, sql,depotId).setStart(start).setLimit(limit).page(); } public List<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) throws Exception { String sql = getSql(deviceModel, depotId, status, mode, depotStatus, backup, batch_num); //如果是猫 if(SystemConstants.DEVICE_TYPE_MODEM.equals(mode)){ //猫类型不为空,猫型号为空时 if(StringHelper.isNotEmpty(modemType) && StringHelper.isEmpty(deviceModel)){ sql = StringHelper.append(sql," and t.modem_type='",modemType,"'"); } } if(StringHelper.isNotEmpty(start_input_time) || StringHelper.isNotEmpty(end_input_time)){ sql = StringHelper.append(sql, " and r.device_id in ( select tdd.device_id from r_device_done_deviceid tdd,r_device_input rdi " + " where tdd.device_done_code = rdi.device_done_code "); if (StringHelper.isNotEmpty(start_input_time)) { sql = StringHelper.append(sql, " and rdi.create_time>=to_date('", start_input_time, " 00:00:00','yyyy-mm-dd hh24:mi:ss')"); } if (StringHelper.isNotEmpty(end_input_time)) { sql = StringHelper.append(sql, " and rdi.create_time<=to_date('", end_input_time, " 23:59:59','yyyy-mm-dd hh24:mi:ss')"); } sql = StringHelper.append(sql,")"); } sql =StringHelper.append("select a.*,cc.cust_no cust_id,cc.cust_name from ( ", sql," ) a,c_cust_device cd,c_cust cc ", " where cd.device_id(+)=a.device_id and cc.cust_id(+)=cd.cust_id order by a.device_type"); return this.createQuery(DeviceDto.class, sql,depotId).list(); } public List<DeviceDto> queryIDLEDeviceByMultiCriteria(String deviceModel,String depotId,String status, String mode,String depotStatus,String backup) throws Exception { String sql = getSql(deviceModel, depotId, status, mode, depotStatus,backup, ""); sql += " order by device_type"; return this.createQuery(DeviceDto.class, sql,depotId).list(); } public List<DeviceDto> queryDeviceByBatch(String depotId, String batchNum)throws JDBCException{ final String sql = "SELECT t.* FROM r_device t WHERE t.batch_num = ? AND t.depot_id = ?"; return this.createQuery(DeviceDto.class, sql, batchNum, depotId).list(); } /** * 查询设备信息 * @param deviceCodes 设备号 * @return * @throws JDBCException */ public List<DeviceDto> queryByDeviceCodes(String[] deviceCodes) throws JDBCException { String codes = getSqlGenerator().in(deviceCodes); String sql = StringHelper .append( "SELECT d.*,s.device_model,s.stb_id device_code,", "r.card_id pair_device_code,r.device_model pair_device_model,'' modem_mac", " FROM R_STB S, R_CARD r,r_device d", " WHERE s.device_id=d.device_id AND s.pair_card_id= r.DEVICE_ID(+) AND S.STB_ID in ("+codes+")", " UNION SELECT d.*,c.device_model,c.card_id device_code,'','',''", " FROM R_CARD C,r_device d", " WHERE c.device_id=d.device_id AND C.CARD_ID in ("+codes+")", " UNION SELECT d.*,m.device_model,m.modem_mac device_code,'','',m.modem_mac", " FROM R_MODEM M,r_device d WHERE m.device_id=d.device_id AND M.Modem_mac in ("+codes+")"); return createQuery(DeviceDto.class, sql).list(); } public List<DeviceDto> queryByDeviceCodescount(String[] deviceCodes, String deviceType) throws JDBCException { String type = ""; String sql = ""; if (deviceType.equals(SystemConstants.DEVICE_TYPE_STB)) { type = "S.STB_ID"; } if (deviceType.equals(SystemConstants.DEVICE_TYPE_CARD)) { type = "C.CARD_ID"; } if (deviceType.equals(SystemConstants.DEVICE_TYPE_MODEM)) { type = "M.Modem_mac"; } if (type.equals("S.STB_ID")) { sql = StringHelper .append( "SELECT d.*,s.device_model,s.stb_id device_code,", "case when r.card_id is null then s.mac else r.card_id end pair_device_code,r.device_model pair_device_model,'' modem_mac", " FROM R_STB S, R_CARD r,r_device d", " WHERE s.device_id=d.device_id AND s.pair_card_id= r.DEVICE_ID(+) and("+getSqlGenerator().setWhereInArray("S.STB_ID",deviceCodes)+") "); } if (type.equals("C.CARD_ID")) { sql = " SELECT d.*,c.device_model,c.card_id device_code,'','','' FROM R_CARD C,r_device d WHERE c.device_id=d.device_id and("+getSqlGenerator().setWhereInArray("C.CARD_ID",deviceCodes)+") "; } if (type.equals("M.Modem_mac")) { sql = " SELECT d.*,m.device_model,m.modem_mac device_code,'','',m.modem_mac FROM R_MODEM M,r_device d WHERE m.device_id=d.device_id and("+getSqlGenerator().setWhereInArray("M.Modem_mac",deviceCodes)+") "; } return createQuery(DeviceDto.class, sql).list(); } /** * 部分modem只录入了r_modem没有录入到r_device,查询的时候查不到,但是在录入设备的时候会报主键冲突错误.这个方法的目的是这些数据在录入之前也给找出来. * @param deviceCodes * @param deviceType * @return * @throws Exception */ public List<DeviceDto> queryByDeviceCodescountIncludeWrongData( String[] deviceCodes, String deviceType) throws Exception{ String type = ""; String sql = ""; if (deviceType.equals(SystemConstants.DEVICE_TYPE_STB)) { type = "S.STB_ID"; } if (deviceType.equals(SystemConstants.DEVICE_TYPE_CARD)) { type = "C.CARD_ID"; } if (deviceType.equals(SystemConstants.DEVICE_TYPE_MODEM)) { type = "M.Modem_mac"; } if (type.equals("S.STB_ID")) { sql = StringHelper .append( "SELECT d.*,s.device_model,s.stb_id device_code,", "r.card_id pair_device_code,r.device_model pair_device_model,'' modem_mac", " FROM R_STB S, R_CARD r,r_device d", " WHERE s.device_id=d.device_id(+) AND s.pair_card_id= r.DEVICE_ID(+) and("+getSqlGenerator().setWhereInArray("S.STB_ID",deviceCodes)+") "); } if (type.equals("C.CARD_ID")) { sql = " SELECT d.*,c.device_model,c.card_id device_code,'','','' FROM R_CARD C,r_device d WHERE c.device_id=d.device_id(+) and("+getSqlGenerator().setWhereInArray("C.CARD_ID",deviceCodes)+") "; } if (type.equals("M.Modem_mac")) { sql = " SELECT d.*,m.device_model,m.modem_mac device_code,'','',m.modem_mac FROM R_MODEM M,r_device d WHERE m.device_id=d.device_id(+) and("+getSqlGenerator().setWhereInArray("M.Modem_mac",deviceCodes)+") "; } return createQuery(DeviceDto.class, sql).list(); } /** * 查询仓库下差异的设备,未确认和确认 * @param depotId * @return * @throws JDBCException */ public Pager<DeviceDto> queryDiffence(String deviceCode,String depotId,Integer start,Integer limit) throws JDBCException { String stbSql = "",cardSql = "",modemSql = ""; if(StringHelper.isNotEmpty(deviceCode)){ stbSql = " and stb_id='"+deviceCode+"'"; cardSql = " and card_id='"+deviceCode+"'"; modemSql = " and modem_mac='"+deviceCode+"'"; } String depotSql = "",diffDepotSql = ""; if(!depotId.equals(SystemConstants.COUNTY_ALL)){ depotSql =" AND d.depot_id='"+depotId+"'"; diffDepotSql =" AND rdd.depot_id(+)='"+depotId+"'"; } String sql = "SELECT d.*,s.stb_id device_code," + "r.card_id pair_device_code,r.device_model pair_device_model," + " s.mac pair_device_modem_code,'' pair_device_modem_model,'' modem_mac " + " FROM R_STB S, R_CARD r ,r_device d" + " WHERE s.pair_card_id= r.DEVICE_ID(+) " + " AND s.device_id=d.device_id AND d.diffence_type in (:uncheck,:diff) " + depotSql + stbSql + " UNION SELECT d.*,c.card_id device_code,'','','','','' " + " FROM R_CARD C,r_device d" + " WHERE d.device_id=c.device_id and d.is_virtual='F' AND d.diffence_type in (:uncheck,:diff)" + depotSql + cardSql + " UNION SELECT d.*,m.modem_mac device_code,'','','','',m.modem_mac " + " FROM R_MODEM m,r_device d " + " WHERE d.device_id=m.device_id and d.is_virtual='F' AND d.diffence_type in (:uncheck,:diff)" + depotSql + modemSql; Map<String, Serializable> paramers = new HashMap<String, Serializable>(); paramers.put("uncheck", SystemConstants.DEVICE_DIFFENCN_TYPE_UNCHECK); paramers.put("diff", SystemConstants.DEVICE_DIFFENCN_TYPE_DIFF); sql = "select d.*, max(rdd.create_time) create_time ,rdd.remark from ( " + sql + " ) d, R_DEVICE_DIFEENCE rdd" +" where d.device_id = rdd.device_id(+)" + diffDepotSql +" group by d.device_id,d.device_type," +" d.device_model,d.device_status,d.depot_status,d.tran_status,d.used,d.backup,d.freezed," +" d.diffence_type,d.depot_id,d.ownership,d.ownership_depot,d.warranty_date,d.is_virtual," +" d.is_local,d.is_loss,d.is_new_stb,device_code,pair_device_code,pair_device_model," +" pair_device_modem_code,pair_device_modem_model,modem_mac,batch_num,total_num,box_no, rdd.remark order by create_time desc"; return createNameQuery(DeviceDto.class, sql, paramers).setStart(start).setLimit(limit).page(); } /** * 更新差异状态 * @param deviceIds * @param diffenceType * @throws JDBCException */ public void updateDiffenceType(String[] deviceIds, String diffenceType) throws JDBCException { String sql = "UPDATE r_device SET diffence_type='" + diffenceType + "' WHERE device_id=?"; executeBatch(sql, deviceIds); //虚拟设备 sql = "UPDATE r_device SET diffence_type=? WHERE device_id in ( " + " select t.pair_card_id " + " from r_stb t " + " where t.pair_card_id is not null and t.device_id in ("+sqlGenerator.in(deviceIds)+")" + " union all " + " select t.pair_modem_id " + " from r_stb t " + " where t.pair_modem_id is not null and t.device_id in ("+sqlGenerator.in(deviceIds)+"))"; executeUpdate(sql, diffenceType); } /** * 更新仓库状态为使用 * @param doneCode * @throws JDBCException */ public void updateDepotStatus(Integer doneCode,String deviceId,String busiCode,String buyMode,String depotStatus,SOptr optr) throws JDBCException { String str = ""; if(StringHelper.isNotEmpty(deviceId)){ str = " and t.device_id ='"+deviceId+"' "; } String sql = "UPDATE r_device SET depot_status=?, ownership = ( case when ? = 'T' and ownership= 'GD' then 'CUST' " + " WHEN ? = 'T' and ownership= 'CUST' THEN 'GD' ELSE ownership end " + " ) WHERE device_id IN (" + " SELECT device_id FROM r_device_done_deviceid t WHERE t.device_done_code=? "+str+")"; executeUpdate(sql, depotStatus,buyMode, buyMode,doneCode); //虚拟设备 sql = "UPDATE r_device SET depot_status=?,ownership = ( case when ? = 'T' and ownership= 'GD' then 'CUST' " + " WHEN ? = 'T' and ownership= 'CUST' THEN 'GD' ELSE ownership end " + " ) WHERE device_id in ( " + " select t.pair_card_id " + " from r_device_done_deviceid di,r_stb t " + " where di.device_id=t.device_id and t.pair_card_id is not null " + " and di.device_done_code=? "+str+"" + " union all " + " select t.pair_modem_id " + " from r_device_done_deviceid di,r_stb t " + " where di.device_id=t.device_id and t.pair_modem_id is not null " + " and di.device_done_code=? "+str+")"; executeUpdate(sql, depotStatus,buyMode,buyMode, doneCode, doneCode); } /** * 将设备移到r_device_his表 * @param doneCode * @throws JDBCException */ public void removeToHis(Integer doneCode) throws JDBCException { String sql = "insert into r_device_his"+ " (device_id, device_type, device_status, depot_status, used, backup, freezed, diffence_type, depot_id, ownership, warranty_date, is_virtual, is_local, "+ " stb_id, pair_card_id, card_id, modem_id, modem_mac, is_new_stb, device_model, pair_modem_id, batch_num,total_num,box_no)"+ " select r.device_id, r.device_type, r.device_status, r.depot_status, r.used, r.backup, r.freezed, r.diffence_type, r.depot_id, r.ownership, r.warranty_date, r.is_virtual, r.is_local,"+ " rs.stb_id,rs.pair_card_id,rc.card_id,rm.modem_id,rm.modem_mac,r.is_new_stb,r.device_model,rs.pair_modem_id,r.batch_num,r.total_num,r.box_no"+ " from r_device_output o,r_device_done_deviceid d,r_device r,r_stb rs,r_card rc,r_modem rm"+ " where o.device_done_code=d.device_done_code "+ " and r.device_id=d.device_id and rs.device_id=r.device_id"+ " and rc.device_id(+)=rs.pair_card_id and rm.device_id(+)=rs.pair_modem_id"+ " and o.device_done_code=?"+ " union all"+ " select r.device_id, r.device_type, r.device_status, r.depot_status, r.used, r.backup, r.freezed, r.diffence_type, r.depot_id, r.ownership, r.warranty_date, r.is_virtual, r.is_local,"+ " null stb_id,null pair_card_id,rc.card_id,null modem_id,null modem_mac,r.is_new_stb,r.device_model,null pair_modem_id,r.batch_num,r.total_num,r.box_no"+ " from r_device_output o,r_device_done_deviceid d,r_device r,r_stb rs,r_card rc"+ " where o.device_done_code=d.device_done_code "+ " and rs.device_id=d.device_id and rs.pair_card_id=r.device_id"+ " and rs.pair_card_id=rc.device_id"+ " and o.device_done_code=? "+ " union all"+ " select r.device_id, r.device_type, r.device_status, r.depot_status, r.used, r.backup, r.freezed, r.diffence_type, r.depot_id, r.ownership, r.warranty_date, r.is_virtual, r.is_local,"+ " null stb_id,null pair_card_id, null card_id,rm.modem_id,rm.modem_mac,r.is_new_stb,r.device_model,null pair_modem_id,r.batch_num,r.total_num,r.box_no"+ " from r_device_output o,r_device_done_deviceid d,r_device r,r_stb rs,r_modem rm"+ " where o.device_done_code=d.device_done_code "+ " and d.device_id=rs.device_id "+ " and rs.pair_modem_id=r.device_id and rs.pair_modem_id=rm.device_id"+ " and o.device_done_code=?"+ " union all"+ " select r.device_id, r.device_type, r.device_status, r.depot_status, r.used, r.backup, r.freezed, r.diffence_type, r.depot_id, r.ownership, r.warranty_date, r.is_virtual, r.is_local,"+ " null stb_id,null pair_card_id,rc.card_id,null modem_id,null modem_mac,r.is_new_stb,r.device_model,null pair_modem_id,r.batch_num,r.total_num,r.box_no"+ " from r_device_output o,r_device_done_deviceid d,r_device r,r_card rc"+ " where o.device_done_code=d.device_done_code "+ " and r.device_id=d.device_id and d.device_id=rc.device_id"+ " and o.device_done_code=?"+ " union all"+ " select r.device_id, r.device_type, r.device_status, r.depot_status, r.used, r.backup, r.freezed, r.diffence_type, r.depot_id, r.ownership, r.warranty_date, r.is_virtual, r.is_local,"+ " null stb_id,null pair_card_id, null card_id,rm.modem_id,rm.modem_mac,r.is_new_stb,r.device_model,null pair_modem_id,r.batch_num,r.total_num,r.box_no"+ " from r_device_output o,r_device_done_deviceid d,r_device r,r_modem rm"+ " where o.device_done_code=d.device_done_code "+ " and d.device_id=r.device_id"+ " and d.device_id=rm.device_id"+ " and o.device_done_code=? "; executeUpdate(sql, doneCode, doneCode, doneCode,doneCode,doneCode); sql = "select * from r_device r where r.device_id IN ( SELECT device_id FROM r_device_done_deviceid t WHERE t.device_done_code=?)"; List<RDevice> deviceList = createQuery(sql, doneCode).list(); for(RDevice device : deviceList){ String deviceId = device.getDevice_id(); if(SystemConstants.DEVICE_TYPE_CARD.equals(device.getDevice_type())){ sql = "delete r_card where device_id=?"; executeUpdate(sql, deviceId); }else if(SystemConstants.DEVICE_TYPE_STB.equals(device.getDevice_type())){ RStb stb = createQuery(RStb.class,"select * from r_stb where device_id=?", device.getDevice_id()).first(); if(StringHelper.isNotEmpty(stb.getPair_card_id())){ sql = "delete r_card where device_id = (select device_id from r_device where device_id=? )"; executeUpdate(sql, stb.getPair_card_id()); sql = "delete r_device where device_id=? "; executeUpdate(sql, stb.getPair_card_id()); } if(StringHelper.isNotEmpty(stb.getPair_modem_id())){ sql = "delete r_modem where device_id = (select device_id from r_device where device_id=? )"; executeUpdate(sql, stb.getPair_modem_id()); sql = "delete r_device where device_id=? "; executeUpdate(sql, stb.getPair_modem_id()); } sql = "delete r_stb where device_id=?"; executeUpdate(sql, deviceId); }else if(SystemConstants.DEVICE_TYPE_MODEM.equals(device.getDevice_type())){ sql = "delete r_modem where device_id=?"; executeUpdate(sql, deviceId); } sql = "delete r_device where device_id=?"; executeUpdate(sql, deviceId); } } /** * 仓库状态空闲的设备修改设备状态 * @param depotId * @param deviceIds * @param deviceStatus * @param isNewStb * @throws JDBCException */ public void updateDeviceStatus(String depotId, String[] deviceIds, String deviceStatus, String isNewStb) throws JDBCException { String sql = "UPDATE r_device SET device_status=? ,is_new_stb = ? " + " WHERE depot_id=? AND depot_status=? and ("+getSqlGenerator().setWhereInArray("device_id",deviceIds)+") "; executeUpdate(sql, deviceStatus,isNewStb, depotId, StatusConstants.IDLE); //虚拟设备 sql = "UPDATE r_device SET device_status=?,is_new_stb = ? WHERE device_id in ( " + " select t.pair_card_id " + " from r_stb t " + " where t.pair_card_id is not null and ("+getSqlGenerator().setWhereInArray("device_id", deviceIds)+")" + " union all " + " select t.pair_modem_id " + " from r_stb t " + " where t.pair_modem_id is not null and ("+getSqlGenerator().setWhereInArray("device_id", deviceIds)+"))"; executeUpdate(sql, deviceStatus,isNewStb); } public boolean isExistsDeviceByDepotId(String depotId) throws JDBCException { String sql = "select count(1) from r_device where depot_id=?"; return this.count(sql, depotId)>0; } /** * 根据卡号查机顶盒号 * @param cardId * @return * @throws JDBCException */ public DeviceDto queryDeviceByCardId(String cardId) throws JDBCException { String sql = "select rs.stb_id device_code from r_stb rs ,r_card rc " + " where rs.pair_card_id = rc.device_id and rc.card_id = ? "; return createQuery(DeviceDto.class, sql,cardId).first(); } public List<DeviceDto> queryCardModemByDeviceCodes(String[] deviceCodes) throws JDBCException { String sql = StringHelper .append( "select s.stb_id device_code,c.card_id pair_device_code from r_stb s,r_card c where s.pair_card_id = c.device_id and s.stb_id <> c.card_id " + " and ("+getSqlGenerator().setWhereInArray("c.card_id", deviceCodes)+")" + " union select s.stb_id device_code,m.modem_mac pair_device_code from r_stb s,r_modem m " + " where s.pair_modem_id = m.device_id and ("+getSqlGenerator().setWhereInArray("m.modem_mac", deviceCodes)+")"); return createQuery(DeviceDto.class, sql).list(); } public DeviceDto queryByDeviceId(String deviceId) throws JDBCException { String sql = "select t.device_id,t.pair_card_id,t.pair_modem_id from r_stb t where t.pair_card_id = ? or t.pair_modem_id = ? " + " union select r.device_id ,r.pair_card_id pair_device_code,r.pair_modem_id pair_device_modem_code " + " from r_stb r where r.device_id =? "; return createQuery(DeviceDto.class,sql, deviceId,deviceId,deviceId).first(); } public void updateIsNewStb(String[] deviceIds,String isNewStb) throws JDBCException { String sql = "UPDATE r_device SET is_new_stb =?" + " WHERE IS_NEW_STB<>? and " + getSqlGenerator().setWhereInArray("device_id",deviceIds); executeUpdate(sql, isNewStb,isNewStb); } public boolean isDeviceProcure(String deviceId) throws Exception { String sql ="select count(1) from r_device_procure t,r_device_done_deviceid r " + "where t.device_done_code=r.device_done_code and t.procure_type='YTJGM' and r.device_id =? "; return count(sql, deviceId) > 0; } public Pager<DeviceDto> queryTransferDeviceDetail( int deviceDoneCode,String deviceType,Integer start, Integer limit) throws JDBCException { String sql = ""; if(deviceType.equals(SystemConstants.DEVICE_TYPE_FITTING)){ sql = "SELECT r.*,'' device_code FROM r_device r,r_device_done_deviceid di" + " where r.device_id=di.device_id and di.device_done_code=? order by r.device_id"; }else{ if (deviceType.equals(SystemConstants.DEVICE_TYPE_STB)) { sql += "SELECT r.*,b.stb_id device_code FROM r_device r ,r_stb b,r_device_done_deviceid di "; } else if (deviceType.equals(SystemConstants.DEVICE_TYPE_CARD)) { sql += "SELECT r.*,b.card_id device_code FROM r_device r ,r_card b,r_device_done_deviceid di "; } else if (deviceType.equals(SystemConstants.DEVICE_TYPE_MODEM)) { sql += "SELECT r.*,b.modem_id device_code FROM r_device r ,r_modem b,r_device_done_deviceid di "; } sql += " where di.device_id = b.device_id and b.device_id=r.device_id and di.device_done_code=? order by device_code"; } return createQuery(DeviceDto.class,sql, deviceDoneCode) .setStart(start).setLimit(limit).page(); } public RDevice queryIdleMateralDevice(String deviceModel,String depotId) throws Exception { String sql = "select * from r_device where depot_id=? and device_type=? and device_model=? and device_status=? " + "and depot_status=? and tran_status=?"; return createQuery(RDevice.class, sql,depotId,SystemConstants.DEVICE_TYPE_FITTING,deviceModel, StatusConstants.ACTIVE,StatusConstants.IDLE,StatusConstants.IDLE).first(); } public List<RDevice> queryMateralDeviceByDepotId(String depotId) throws Exception { String sql = "select * from r_device where depot_id=? and device_type =? and device_status=? " + "and depot_status=? and tran_status=? order by device_model"; return createQuery(RDevice.class, sql,depotId,SystemConstants.DEVICE_TYPE_FITTING ,StatusConstants.ACTIVE,StatusConstants.IDLE,StatusConstants.IDLE).list(); } public List<RDevice> queryDeviceByIds(String[] deviceIds) throws Exception { String sql = "select * from r_device where("+getSqlGenerator().setWhereInArray("device_id", deviceIds)+") "; return createQuery(RDevice.class, sql).list(); } public List<RDevice> queryDeviceByDoneCode(Integer doneCode)throws JDBCException { String sql = "select * from r_device WHERE device_id IN " + " (SELECT device_id FROM r_device_done_deviceid t WHERE t.device_done_code=?)"; return createQuery(RDevice.class, sql,doneCode).list(); } public void removeDeviceToHis(String deviceId) throws JDBCException { String sql = "insert into r_device_his"+ " (device_id, device_type, device_status, depot_status, used, backup, freezed, diffence_type, depot_id, ownership, warranty_date, is_virtual, is_local, "+ " is_new_stb, device_model, batch_num,total_num,box_no)"+ " select r.device_id, r.device_type, r.device_status, r.depot_status, r.used, r.backup, r.freezed, r.diffence_type, r.depot_id, r.ownership, r.warranty_date, r.is_virtual, r.is_local,"+ " r.is_new_stb,r.device_model,r.batch_num,r.total_num,r.box_no"+ " from r_device r"+ " where r.device_id=? "; executeUpdate(sql, deviceId); sql = "delete r_device where device_id=?"; executeUpdate(sql, deviceId); } public void updateMateralTransferDepot(String deviceId, String depotOrder) throws JDBCException { String sql = "UPDATE r_device SET tran_status=?,depot_id=? WHERE device_id =? "; executeUpdate(sql, StatusConstants.IDLE,depotOrder, deviceId); } public void removeMateralDevice(String device_id, Integer total_num) throws JDBCException{ String sql = "UPDATE r_device SET total_num= total_num-? WHERE device_id=?"; executeUpdate(sql,total_num, device_id); } public void addMateralDevice(String device_id, Integer total_num) throws JDBCException{ String sql = "UPDATE r_device SET total_num= total_num + ? WHERE device_id=?"; executeUpdate(sql,total_num, device_id); } public List<DeviceSmallDto> getDeviceCodeByDeviceId(String[] deviceIds) throws JDBCException{ String sql = "select T.CARD_ID device_code,t.device_id from r_card T WHERE " + getSqlGenerator().setWhereInArray("t.device_id",deviceIds) + "UNION select t.stb_id device_code,t.device_id from r_Stb T WHERE " + getSqlGenerator().setWhereInArray("t.device_id",deviceIds) + "UNION select t.modem_mac device_code,t.device_id from r_modem T WHERE " + getSqlGenerator().setWhereInArray("t.device_id",deviceIds); return createQuery(DeviceSmallDto.class, sql).list(); } public com.ycsoft.business.dto.device.DeviceDto queryDeviceInfoByCodeAndModel(String deviceCode) throws JDBCException{ String sql = "select T.CARD_ID device_code,t.device_model,r.* from r_card T,r_device r WHERE r.device_id=t.device_id and t.card_id = ? " + "UNION select t.stb_id device_code,t.device_model,r.* from r_Stb T,r_device r WHERE r.device_id=t.device_id and t.stb_id = ? " + "UNION select t.modem_mac device_code,t.device_model,r.* from r_modem T,r_device r WHERE r.device_id=t.device_id and t.modem_mac = ? "; return createQuery(com.ycsoft.business.dto.device.DeviceDto.class, sql,deviceCode,deviceCode,deviceCode).first(); } public List<RDeviceModel> queryDeviceStbModem() throws Exception { String sql = "select 'MODEM' device_type,t.device_model,t.model_name,'' interactive_type from r_modem_model t " + "union select 'STB' device_type,t.device_model," + " case when t.interactive_type=? then '(DTT)'||''||t.model_name||'('||t.device_model||')'" + " else '(OTT)'||''||t.model_name||'('||t.device_model||')' end model_name, t.interactive_type " + " from r_stb_model t order by model_name "; return this.createQuery(RDeviceModel.class, sql,SystemConstants.DTV_SERV_TYPE_SINGLE ).list(); } public List<RDevice> queryDeviceInfoByDoneCode(Integer deviceDoneCode) throws Exception { String sql = "select * from (" + " select sm.model_name,ds.supplier_name,d.batch_num, d.box_no,sum(d.total_num) total_num" + " from r_device_done_deviceid di, r_device d, r_stb_model sm, r_device_supplier ds" + " where di.device_id=d.device_id and d.device_model=sm.device_model and sm.supplier_id=ds.supplier_id(+)" + " and di.device_done_code=?" + " group by sm.model_name,ds.supplier_name,d.batch_num, d.box_no" + " union all" + " select sm.model_name,ds.supplier_name,d.batch_num, d.box_no,sum(d.total_num) total_num" + " from r_device_done_deviceid di, r_device d, r_modem_model sm, r_device_supplier ds" + " where di.device_id=d.device_id and d.device_model=sm.device_model and sm.supplier_id=ds.supplier_id(+)" + " and di.device_done_code=?" + " group by sm.model_name,ds.supplier_name,d.batch_num, d.box_no" + " union all" + " select sm.model_name,ds.supplier_name,d.batch_num, d.box_no,sum(d.total_num) total_num" + " from r_device_done_deviceid di, r_device d, r_device_model sm, r_device_supplier ds" + " where di.device_id=d.device_id and d.device_model=sm.device_model and sm.supplier_id=ds.supplier_id(+)" + " and di.device_done_code=?" + " group by sm.model_name,ds.supplier_name,d.batch_num, d.box_no" + " ) order by box_no desc"; return this.createQuery(sql, deviceDoneCode, deviceDoneCode, deviceDoneCode).list(); } public Pager<DeviceDetailInputDto> queryInputDeviceDetail(int deviceDoneCode, Integer start, Integer limit) throws Exception { String sql = "select r.box_no,t.stb_id device_code,t.device_model,case when t2.card_id is null then t.mac else t2.card_id end pair_device_code " + "from r_stb t, r_device_done_deviceid t1,r_card t2,r_device r " + "where t.device_id = t1.device_id and t.device_id = r.device_id " + "and t.pair_card_id = t2.device_id(+) and t1.device_done_code = ? " + "union select r.box_no,t.modem_id device_code,t.device_model,t.modem_mac pair_device_code " + "from r_modem t, r_device_done_deviceid t1,r_device r " + "where t.device_id = t1.device_id and t.device_id = r.device_id and t1.device_done_code = ? "; return this.createQuery(DeviceDetailInputDto.class, sql,deviceDoneCode,deviceDoneCode ).setStart(start).setLimit(limit).page(); } }