/**
* RDeviceTransferDao.java 2010/09/06
*/
package com.ycsoft.business.dao.resource.device;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Component;
import com.ycsoft.beans.device.RDeviceTransfer;
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.depot.RDeviceTransferDto;
import com.ycsoft.sysmanager.dto.resource.DeviceDto;
/**
* RDeviceTransferDao -> R_DEVICE_TRANSFER table's operator
*/
@Component
public class RDeviceTransferDao extends BaseEntityDao<RDeviceTransfer> {
/**
*
*/
private static final long serialVersionUID = -8299100235500473992L;
/**
* default empty constructor
*/
public RDeviceTransferDao() {
}
/**
* 查询设备调拨信息
* @param deviceId
* @return
* @throws JDBCException
*/
public List<RDeviceTransfer> queryByDeviceId(String deviceId) throws JDBCException {
String sql = "select t.* from r_device_transfer t,r_device_done_deviceid di"
+" where di.device_done_code=t.device_done_code and di.device_id=?";
return this.createQuery(sql, deviceId).list();
}
public void editDeviceTransferHistory(Integer deviceDoneCode, String isHistory) throws JDBCException {
String sql = "update r_device_transfer set is_history=? where device_done_code=?";
this.executeUpdate(sql, isHistory, deviceDoneCode);
}
public void editTransferNo(Integer deviceDoneCode,String transferNo, String remark) throws Exception {
String sql = "update r_device_transfer set transfer_no=?,remark=? where device_done_code=?";
executeUpdate(sql, transferNo,remark, deviceDoneCode);
}
/**
* 查询入库的记录
*
* @param depotId
* @param status
* @return
* @throws JDBCException
*/
public List<RDeviceTransfer> queryInput(String depotId, String status,
boolean isToday) throws JDBCException {
String sql = "SELECT * FROM r_device_transfer t WHERE t.depot_order =? AND t.status=?";
if (isToday)
sql += " and t.create_time BETWEEN to_date(to_char(SYSDATE,'yyyymmdd')||' 00:00:00','yyyymmdd hh24:mi:ss') and to_date(to_char(SYSDATE,'yyyymmdd')||'23:59:59','yyyymmdd hh24:mi:ss')";
return createQuery(sql, depotId, status).list();
}
/**
* 查询出库的记录
*
* @param depotId
* @param status
* @param isToday
* @return
* @throws JDBCException
*/
public List<RDeviceTransfer> queryOutput(String depotId, String status,
boolean isToday) throws JDBCException {
String sql = "SELECT * FROM r_device_transfer t WHERE t.depot_source =? AND t.status=?";
if (isToday)
sql += " and t.create_time BETWEEN to_date(to_char(SYSDATE,'yyyymmdd')||' 00:00:00','yyyymmdd hh24:mi:ss') and to_date(to_char(SYSDATE,'yyyymmdd')||'23:59:59','yyyymmdd hh24:mi:ss')";
return createQuery(sql, depotId, status).list();
}
/**
* 查询仓库的流转记录
*
* @param depotId
* @throws JDBCException
*/
public Pager<RDeviceTransferDto> queryByDepot(String depotId, String query,
String startDate, String endDate, Integer start, Integer limit, String isHistory,String deviceModel)
throws JDBCException {
String cond = "";
if(StringHelper.isNotEmpty(query)){
cond = " and t.transfer_no like '%"+query+"%'";
}
if(StringHelper.isNotEmpty(startDate)){
cond += " and to_char(t.create_time,'yyyy-mm-dd') between '"+startDate+"' and '"+endDate+"'";
}
if(StringHelper.isNotEmpty(isHistory)){
if(!isHistory.equals("All")){
cond += " and t.is_history='"+isHistory+"'";
}
}else{
cond += " and t.is_history='F'";//默认查询正在执行的订单
}
if(StringHelper.isNotEmpty(deviceModel)){
cond += " and d.device_model='"+deviceModel+"' ";
}
String sql = "select * from ("+
" SELECT 'TRANIN' TRAN_TYPE,t.*,d.device_type,d.device_model,d.count" +
" FROM r_device_transfer t,r_device_done_detail d" +
" WHERE t.device_done_code=d.device_done_code(+) and t.depot_order=? "+
cond +
" union all" +
" SELECT 'TRANOUT' TRAN_TYPE,t.*,d.device_type,d.device_model,d.count" +
" FROM r_device_transfer t,r_device_done_detail d" +
" WHERE t.device_done_code=d.device_done_code(+) and t.depot_source=? "+
cond +
" ) order by create_time desc";
return createQuery(RDeviceTransferDto.class, sql, depotId, depotId)
.setStart(start).setLimit(limit).page();
}
public RDeviceTransfer queryByTransferNo(String transferNo) throws JDBCException {
RDeviceTransfer t = new RDeviceTransfer();
t.setTransfer_no(transferNo);
List<RDeviceTransfer> l = findByEntity(t);
return l.size()>0?l.get(0):null;
}
public List<RDeviceTransferDto> queryAllTransferDeviceDtail(
int deviceDoneCode, String deviceType, String deviceModel)
throws JDBCException {
String sql = returnSql(deviceType);
return createQuery(RDeviceTransferDto.class, sql, deviceDoneCode, deviceModel).list();
}
private String returnSql(String deviceType){
String sql = "";
if(deviceType.equals(SystemConstants.DEVICE_TYPE_STB)){
sql = StringHelper.append(
"select t.*,' ' tran_type,b.stb_id device_code,b.device_model,'STB' device_type",
" from r_device_done_deviceid di,r_device_transfer t,r_stb b"
);
}else if(deviceType.equals(SystemConstants.DEVICE_TYPE_CARD)){
sql = StringHelper.append(
"select t.*,' ' tran_type,b.card_id device_code,b.device_model,'CARD' device_type",
" from r_device_done_deviceid di,r_device_transfer t,r_card b"
);
}else if(deviceType.equals(SystemConstants.DEVICE_TYPE_MODEM)){
sql = StringHelper.append(
"select t.*,' ' tran_type,b.modem_mac device_code,b.device_model,'MODEM' device_type",
" from r_device_done_deviceid di,r_device_transfer t,r_modem b"
);
}
sql =StringHelper.append(
sql,
" where di.device_done_code=t.device_done_code",
" and di.device_id=b.device_id",
" and di.device_done_code=? and b.device_model=?",
" order by device_code"
);
return sql;
}
/**
* 转发之前查询信息,以前调拨了各个类型的设备多多少,现在可以转发的各个类型多少.
* @param doneCode
* @return
* @throws Exception
*/
public Map<String, Map> queryTransInfoByDoneCode(Integer doneCode) throws Exception{
Map<String, Map> map = new HashMap<String, Map>();
Map<String, String> old = new HashMap<String, String>();
Map<String, String> now = new HashMap<String, String>();
String oldCount = "select res.device_type,count(1) device_code from "+getTransInfoSql()+
" group by res.device_type ";
List<DeviceDto> list = createQuery(DeviceDto.class, oldCount, doneCode, doneCode, doneCode).list();
for(DeviceDto m:list){
old.put(m.getDevice_type(),m.getDevice_code());
}
String newCount = "select res.device_type,count(1) device_code from "+getTransInfoSql()+
" where res.tran_status = 'IDLE' and res.freezed = 'F' " +
" and res.depot_status = 'IDLE' " + " and res.device_status = 'ACTIVE' " +
" group by res.device_type ";
list.clear();
list = createQuery(DeviceDto.class, newCount, doneCode, doneCode, doneCode).list();
for(DeviceDto m:list){
now.put(m.getDevice_type(),m.getDevice_code());
}
map.put("old", old);
map.put("now", now);
return map;
}
private String getTransInfoSql(){
return " (" +
" select s.stb_id device_code,s.pair_card_id,s.pair_modem_id,t.* from r_device t ,r_stb s " +
" where s.device_id = t.device_id " +
" and t.device_id in ( select rd.device_id from r_device_done_deviceid rd where rd.device_done_code = ? ) " +
" union all " +
" select s.card_id device_code,'' pair_card_id,'' pair_modem_id,t.* from r_device t ,r_card s " +
" where s.device_id = t.device_id " +
" and t.device_id in ( select rd.device_id from r_device_done_deviceid rd where rd.device_done_code = ? ) " +
" union all " +
" select s.modem_mac device_code,'' pair_card_id,'' pair_modem_id,t.* from r_device t ,r_modem s " +
" where s.device_id = t.device_id " +
" and t.device_id in ( select rd.device_id from r_device_done_deviceid rd where rd.device_done_code = ? ) " +
" ) res " ;
}
public List<DeviceDto> queryReTransDevices(Integer device_done_code) throws Exception{
String sql = "select res.* from "+getTransInfoSql()+
" where res.tran_status = 'IDLE' and res.freezed = 'F' " +
" and res.depot_status = 'IDLE' " + " and res.device_status = 'ACTIVE' ";
return createQuery(DeviceDto.class,sql, device_done_code, device_done_code, device_done_code).list();
}
}