package com.opentravelsoft.providers.hibernate;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.hibernate.LockMode;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.stereotype.Repository;
import com.opentravelsoft.entity.Booking;
import com.opentravelsoft.entity.Express;
import com.opentravelsoft.entity.ExpressList;
import com.opentravelsoft.entity.product.TourLog;
import com.opentravelsoft.providers.ExpressDao;
import com.opentravelsoft.util.RowDataUtil;
import com.opentravelsoft.util.StringUtil;
@Repository("ExpressDao")
public class ExpressDaoHibernate extends GenericDaoHibernate<Express, String>
implements ExpressDao {
public ExpressDaoHibernate() {
super(Express.class);
}
@SuppressWarnings("unchecked")
public List<Booking> findBooking(String user) {
StringBuilder sql = new StringBuilder();
sql.append("select distinct ");
sql.append("a.nameNo,a.reserveDate,a.plan.outDate,a.pax,a.dbamt,");
sql.append("a.cramt,a.dbamt - a.cramt,a.cfmKey,a.delkey,");
sql.append("a.plan.line.lineNo,a.plan.line.lineName,a.readKey, ");
sql.append("t.start,t.end,a.plan.tourNo ");
sql.append("from Booking a,");
sql.append("org.jbpm.taskmgmt.exe.TaskInstance t ");
sql.append("where a.lineNo = b.lineNo ");
sql.append("and a.nameNo = t.bookId ");
// sql.append("and t.state!='" + Task.STATE_COMPLETED + "' ");
sql.append("and t.actorId = ?");
sql.append("and t.name = 'toExpress' ");
Object[] params = { user };
List<Object[]> list = getHibernateTemplate().find(sql.toString(), params);
List<Booking> ret = new ArrayList<Booking>();
for (Object[] obj : list) {
Booking book = new Booking();
// 订单号
book.setBookingNo(RowDataUtil.getString(obj[0]));
// 预订时间
book.setReserveDate(RowDataUtil.getDate(obj[1]));
// 出团时间
book.getPlan().setOutDate(RowDataUtil.getDate(obj[2]));
// 预订人数
book.setPax(RowDataUtil.getInt(obj[3]));
// 应收款
book.setDbamt(RowDataUtil.getBigDecimal(obj[4]));
// 已收款
book.setPayCosts(RowDataUtil.getBigDecimal(obj[5]));
// 未收款
book.setUnPay(RowDataUtil.getBigDecimal(obj[6]));
// 审核否
book.setCfmKey(RowDataUtil.getString(obj[7]));
// 取消状态
book.setDelkey(RowDataUtil.getString(obj[8]));
// 线路编号
book.getPlan().getLine().setLineNo(RowDataUtil.getString(obj[9]));
// 线路名称
book.getPlan().getLine().setLineName(RowDataUtil.getString(obj[10]));
// 是否标记为已读
book.setReadKey(RowDataUtil.getString(obj[11]));
// 开始时间
book.setStart(RowDataUtil.getDate(obj[12]));
// 结束时间
book.setEnd(RowDataUtil.getDate(obj[13]));
// 团号
book.getPlan().setTourNo(RowDataUtil.getString(obj[14]));
ret.add(book);
}
return ret;
}
@SuppressWarnings("unchecked")
public Express getExpress(String expressId) {
StringBuilder sb = new StringBuilder();
sb.append("from Express where expressId=?");
Object[] params = { expressId };
List<Express> list = getHibernateTemplate().find(sb.toString(), params);
return list.get(0);
}
@SuppressWarnings("unchecked")
public List<ExpressList> getExpressInfoList(String expressId) {
StringBuilder sb = new StringBuilder();
sb.append("from Expresslist where expressId=? ");
Object[] params = { expressId };
List<ExpressList> list = getHibernateTemplate().find(sb.toString(), params);
return list;
}
@SuppressWarnings("unchecked")
public List<Express> getExpressTaskList(String taskName) {
StringBuilder sb = new StringBuilder();
sb.append("select b ");
sb.append("from Express b,");
sb.append("org.jbpm.pvm.internal.task.TaskImpl t ");
sb.append("where b.workflowId=t.executionId ");
// sb.append("and t.name=? and t.state!='" + Task.STATE_COMPLETED + "' ");
sb.append("order by b.expressDate ");
Object[] params = { taskName };
List<Express> list = getHibernateTemplate().find(sb.toString(), params);
return list;
}
@SuppressWarnings("unchecked")
public List<Express> findExpressDetail(String expressId, String contactor,
String expressType, String expressModlue, String payType,
String payModlue, String expressState, String teamNo, String line,
Date expressStart, Date expressEnd) {
StringBuilder sb = new StringBuilder();
sb.append("select a.address,a.contactor,a.customer,a.expressDate,");
sb.append("a.expressId,a.expressLastdate,a.expressModlue,");
sb.append("a.expressState,a.expressType,a.line,a.memo,a.orderId,");
sb.append("a.pay,a.payModlue,a.payType,a.teamNo,a.tel,a.zip,");
sb.append("b.lineName ");
sb.append("from Express a,Line b ");
sb.append("where a.line=b.lineNo ");
List<Object> params = new ArrayList<Object>();
if (StringUtil.hasLength(expressId)) {
sb.append(" and a.expressId=? ");
params.add(expressId);
}
if (StringUtil.hasLength(contactor)) {
sb.append(" and a.contactor like ? ");
params.add("%" + contactor + "%");
}
if (StringUtil.hasLength(expressType)) {
sb.append(" and a.expressType=? ");
params.add(expressType);
}
if (StringUtil.hasLength(expressModlue)) {
sb.append(" and a.expressModlue=? ");
params.add(expressModlue);
}
if (StringUtil.hasLength(payType)) {
sb.append(" and a.payType = ? ");
params.add(payType);
}
if (StringUtil.hasLength(payModlue)) {
sb.append(" and a.payModlue = ? ");
params.add(payModlue);
}
if (StringUtil.hasLength(expressState)) {
sb.append(" and a.expressState = ? ");
params.add(expressState);
}
if (StringUtil.hasLength(teamNo)) {
sb.append(" and a.teamNo like ? ");
params.add("%" + teamNo + "%");
}
if (StringUtil.hasLength(line)) {
sb.append(" and b.lineName like ? ");
params.add("%" + line + "%");
}
if (null != expressStart) {
sb.append(" and a.expressDate >= ? ");
params.add(expressStart);
}
if (null != expressEnd) {
sb.append(" and a.expressDate <= ? ");
params.add(expressEnd);
}
Object[] param = null;
if (params.size() > 0) {
param = new Object[params.size()];
for (int i = 0; i < params.size(); i++) {
param[i] = params.get(i);
}
}
List<Object[]> list = getHibernateTemplate().find(sb.toString(), param);
List<Express> ret = new ArrayList<Express>();
for (Object[] obj : list) {
Express expressInfo = new Express();
expressInfo.setAddress(RowDataUtil.getString(obj[0]));
expressInfo.setContactor(RowDataUtil.getString(obj[1]));
expressInfo.setCustomer(RowDataUtil.getString(obj[2]));
expressInfo.setExpressDate(RowDataUtil.getDate(obj[3]));
expressInfo.setExpressId(RowDataUtil.getString(obj[4]));
expressInfo.setExpressLastdate(RowDataUtil.getDate(obj[5]));
expressInfo.setExpressModlue(RowDataUtil.getString(obj[6]));
expressInfo.setExpressState(RowDataUtil.getString(obj[7]));
expressInfo.setExpressType(RowDataUtil.getString(obj[8]));
expressInfo.setLine(RowDataUtil.getString(obj[9]));
expressInfo.setMemo(RowDataUtil.getString(obj[10]));
expressInfo.setOrderId(RowDataUtil.getString(obj[11]));
expressInfo.setPay(RowDataUtil.getBigDecimal(obj[12]));
expressInfo.setPayModlue(RowDataUtil.getString(obj[13]));
expressInfo.setPayType(RowDataUtil.getString(obj[14]));
expressInfo.setTeamNo(RowDataUtil.getString(obj[15]));
expressInfo.setTel(RowDataUtil.getString(obj[16]));
expressInfo.setZip(RowDataUtil.getString(obj[17]));
expressInfo.setLineName(RowDataUtil.getString(obj[18]));
ret.add(expressInfo);
}
return ret;
}
@SuppressWarnings("unchecked")
public List<Express> getExpressList(String reserveNo) {
StringBuilder sb = new StringBuilder();
sb.append("from Express where orderId=? ");
Object[] params = { reserveNo };
List<Express> list = getHibernateTemplate().find(sb.toString(), params);
return list;
}
public int assignExpress(Express express, List<ExpressList> expressInfo,
String note) {
HibernateTemplate template = getHibernateTemplate();
Express tblCrmExpress = (Express) template.get(Express.class,
express.getExpressId(), LockMode.PESSIMISTIC_WRITE);
ArrayList<Express> all = new ArrayList<Express>();
try {
all.add(tblCrmExpress.clone());
} catch (CloneNotSupportedException ex) {
ex.printStackTrace();
}
tblCrmExpress.setAddress(express.getAddress());
tblCrmExpress.setContactor(express.getContactor());
// tblCrmExpress.setCustomer(express.getCustomer());
tblCrmExpress.setExpressDate(express.getExpressDate());
tblCrmExpress.setExpressLastdate(express.getExpressLastdate());
tblCrmExpress.setExpressModlue(express.getExpressModlue());
tblCrmExpress.setExpressType(express.getExpressType());
tblCrmExpress.setMemo(express.getMemo());
tblCrmExpress.setPay(express.getPay());
tblCrmExpress.setPayModlue(express.getPayModlue());
tblCrmExpress.setPayType(express.getPayType());
tblCrmExpress.setTeamNo(express.getTeamNo());
tblCrmExpress.setTel(express.getTel());
tblCrmExpress.setZip(express.getZip());
tblCrmExpress.setUpdatedBy(express.getUpdatedBy());
template.update(tblCrmExpress);
all.add(tblCrmExpress);
for (ExpressList item : expressInfo) {
ExpressList tblCrmExpresslist = (ExpressList) template.get(
ExpressList.class, item.getItemId(), LockMode.PESSIMISTIC_WRITE);
tblCrmExpresslist.setItemNum(item.getItemNum());
tblCrmExpresslist.setExpressType(item.getExpressType());
tblCrmExpresslist.setNote(item.getNote());
tblCrmExpresslist.setUnit(item.getUnit());
template.update(tblCrmExpresslist);
}
return 0;
}
public int delExpress(String expressId, String note) {
HibernateTemplate template = getHibernateTemplate();
Express express = (Express) template.get(Express.class, expressId,
LockMode.PESSIMISTIC_WRITE);
ArrayList<Express> all = new ArrayList<Express>();
all.add(express);
all.add(null);
ExpressList expresslist = (ExpressList) template.get(ExpressList.class,
expressId, LockMode.PESSIMISTIC_WRITE);
if (null == express || null == expresslist) {
return -1;
}
template.delete(express);
template.delete(expresslist);
return 0;
}
@SuppressWarnings("unused")
private String getExpressInfo(ArrayList<Express> array) {
String info = "";
try {
if (array != null) {
if (array.size() > 1) {
Express old_express = array.get(0);
Express new_express = array.get(1);
if (old_express != null && new_express != null) {
if (!old_express.equals(new_express)) {
info = old_express.getInfo();
}
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
return info;
}
@SuppressWarnings("unchecked")
public List<TourLog> getExpressLog(String expressId) {
StringBuilder sb = new StringBuilder();
sb.append("select a.modifiedUser,b.userName,a.modifiedDate,");
sb.append("a.expressId,a.routeNo,a.tourNo,a.note,a.info ");
sb.append("from TblExpressLog a, Employee b ");
sb.append("where a.modifiedUser =b.userCd and a.expressId = ? ");
sb.append("order by a.modifiedDate desc ");
Object[] params = { expressId };
List<Object[]> list = getHibernateTemplate().find(sb.toString(), params);
List<TourLog> res = null;
if (list != null) {
res = new ArrayList<TourLog>();
for (Object[] obj : list) {
TourLog expressLog = new TourLog();
expressLog.setModifiedUser(RowDataUtil.getString(obj[0]));
expressLog.setModifiedUserName(RowDataUtil.getString(obj[1]));
expressLog.setModifiedDate(RowDataUtil.getDate(obj[2]));
expressLog.setExpressId(RowDataUtil.getString(obj[3]));
expressLog.setRouteNo(RowDataUtil.getString(obj[4]));
expressLog.setTourNo(RowDataUtil.getString(obj[5]));
expressLog.setNote(RowDataUtil.getString(obj[6]));
res.add(expressLog);
}
}
return res;
}
}