package com.opentravelsoft.providers.hibernate; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import com.opentravelsoft.util.LabelValueBean; import org.hibernate.LockMode; import org.springframework.orm.hibernate3.HibernateTemplate; import org.springframework.stereotype.Repository; import com.opentravelsoft.EbizException; import com.opentravelsoft.entity.Booking; import com.opentravelsoft.entity.Customer; import com.opentravelsoft.entity.Employee; import com.opentravelsoft.entity.Lists; import com.opentravelsoft.entity.Plan; import com.opentravelsoft.entity.TblUserPayOL; import com.opentravelsoft.entity.Tourist; import com.opentravelsoft.entity.finance.Income; import com.opentravelsoft.entity.product.Remind; import com.opentravelsoft.entity.product.Warrant; import com.opentravelsoft.providers.IncomeDao; import com.opentravelsoft.util.RowDataUtil; import com.opentravelsoft.util.StringUtil; /** * 收款账单 * * @author zhangst */ @Repository("IncomeDao") public class IncomeDaoHibernate extends GenericDaoHibernate<Income, Integer> implements IncomeDao { public IncomeDaoHibernate() { super(Income.class); } @SuppressWarnings("unchecked") public List<Booking> getIncomeBookings(int customerId) { StringBuilder sb = new StringBuilder(); sb.append("from Booking "); sb.append("where customer.customerId=? and dbamt<>cramt "); sb.append("and cfmKey='1' and delkey='N' "); sb.append("order by reserveDate "); Object[] param = { customerId }; return getHibernateTemplate().find(sb.toString(), param); } /* * (non-Javadoc) * * @see com.opentravelsoft.providers.IncomeDao#saveIncome(com.opentravelsoft * .ebiz.entity.finance.Income) */ public int saveIncome(Income gathering) { // 更新订单收款 Booking book = getHibernateTemplate().get(Booking.class, gathering.getBookingNo()); // 保存交款内容 gathering.setCustomer(book.getCustomer()); getHibernateTemplate().save(gathering); if (book != null) { book.setCramt(book.getPayCosts().add(book.getPayBack())); getHibernateTemplate().update(book); } return gathering.getIncomeId(); } @SuppressWarnings("unchecked") public List<Booking> searchIncome(String provinceCd, String cityCd, Integer customerId, Date stDate, Date endDate) { StringBuilder sb = new StringBuilder(); List<Object> params = new ArrayList<Object>(); sb.append("from Booking "); sb.append("where dbamt<>cramt "); if (StringUtil.hasLength(provinceCd)) { sb.append("and customer.provinceCd = ? "); params.add(provinceCd); } if (StringUtil.hasLength(cityCd)) { sb.append("and customer.city.citycd = ? "); params.add(cityCd); } if (customerId != 0) { sb.append("and customer.customerId = ? "); params.add(customerId); } if (stDate != null) { sb.append("and plan.outDate >= ? "); params.add(stDate); } if (endDate != null) { sb.append("and plan.outDate <= ? "); params.add(endDate); } sb.append("order by plan.outDate, plan.planNo"); 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); } } return getHibernateTemplate().find(sb.toString(), param); } @SuppressWarnings("unchecked") public List<Income> getGatheringList(Integer customerId, Date paymentDateStart, Date paymentDateEnd, double payGatherStart, double payGatherEnd) { HibernateTemplate template = getHibernateTemplate(); List<Object> params = new ArrayList<Object>(); StringBuilder sql = new StringBuilder(); sql.append("from Income where customer.customerId=? "); params.add(customerId); if (null != paymentDateStart) { sql.append("and incomeDate>=? "); params.add(paymentDateStart); } if (null != paymentDateEnd) { sql.append("and incomeDate<=? "); params.add(paymentDateEnd); } if (payGatherStart != 0 || payGatherEnd != 0) { if (payGatherStart <= payGatherEnd && payGatherStart != 0) { // payGatherStart<=payGatherEnd时,搜索在payGatherStart与payGatherEnd之间的项 sql.append("and amount>=? "); params.add(payGatherStart); sql.append("and amount<=? "); params.add(payGatherEnd); } else if (payGatherStart > payGatherEnd) { // payGatherStart>payGatherEnd时,搜索大于payGatherStart的项 sql.append("and amount>=? "); params.add(payGatherStart); } else if (payGatherStart == 0 && payGatherEnd > 0) { // payGatherStart为零时,搜索等于payGatherEnd的项 sql.append("and amount=? "); params.add(payGatherEnd); } else if (payGatherStart > 0 && payGatherEnd == 0) { // payGatherEnd为零时,搜索等于payGatherStart的项 sql.append("and amount=? "); params.add(payGatherStart); } } sql.append("order by incomeDate "); 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<Income> tblIncomeList = template.find(sql.toString(), param); for (Income obj : tblIncomeList) { obj.setUnOffSetMon(obj.getAmount().subtract(obj.getOffSetAmount())); if (obj.getNote().equals("")) obj.setNote(obj.getIncomeDate().toString()); } return tblIncomeList; } @SuppressWarnings("unchecked") public List<Income> findIncome(Integer teamId, String customerId, Date startDate, Date endDate, double startMon, double endMon) { StringBuilder sb = new StringBuilder(); List<Object> params = new ArrayList<Object>(); sb.append("from Income "); sb.append("where 1=1 "); // if (StringUtil.hasLength(teamId)) // { // sb.append("and a.teamId = ? "); // params.add(teamId); // } if (StringUtil.hasLength(customerId)) { sb.append("and customer.customerId=" + customerId + " "); } // 收款日期 if (startDate != null) { sb.append("and incomeDate >= ? "); params.add(startDate); } // 收款日期 if (endDate != null) { sb.append("and incomeDate <= ? "); params.add(endDate); } // 收款金额 if (startMon > 0) { sb.append("and amount >= ? "); params.add(startMon); } // 收款金额 if (endMon > 0) { sb.append("and amount <= ? "); params.add(endMon); } sb.append("order by incomeDate"); 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<Income> incomeList = getHibernateTemplate().find(sb.toString(), param); return incomeList; } public int cancelIncome(int incomeId) { Income tblIncome = getHibernateTemplate().get(Income.class, incomeId); if (null == tblIncome) { return -1; } Booking tfj006 = (Booking) getHibernateTemplate().get(Booking.class, tblIncome.getBookingNo(), LockMode.PESSIMISTIC_WRITE); tfj006.setCramt(tfj006.getCramt().subtract(tblIncome.getAmount())); getHibernateTemplate().update(tfj006); tblIncome.setDel("Y"); getHibernateTemplate().update(tblIncome); return 0; } @SuppressWarnings("unchecked") public Income getGathering(int incomeId) { HibernateTemplate template = getHibernateTemplate(); StringBuilder sql = new StringBuilder(); sql.append("select a.incomeId,a.customer.customerId,b.name,a.payMode,"); sql.append("a.note,a.incomeDate,a.amount,a.offSetAmount,"); sql.append("c.dbamt,c.cramt,c.pax,cb.plan.tourNo, "); sql.append("c.plan.line.lineNo,c.plan.line.lineName,c.plan.outDate"); sql.append("from Income a,"); sql.append("Booking c "); sql.append("where a.bookingNo=c.bookingNo and a.incomeId=? "); List<Object[]> list = template.find(sql.toString(), incomeId); if (!list.isEmpty()) { Income gathering = new Income(); Object[] objG = list.get(0); gathering.setIncomeId(RowDataUtil.getInt(objG[0])); gathering.getCustomer().setCustomerId(RowDataUtil.getInt(objG[1])); gathering.getCustomer().setName(RowDataUtil.getString(objG[2])); gathering.setPayMode(RowDataUtil.getString(objG[3])); gathering.setNote(RowDataUtil.getString(objG[4])); gathering.setIncomeDate(RowDataUtil.getDate(objG[5])); gathering.setAmount(RowDataUtil.getBigDecimal(objG[6])); gathering.setOffSetAmount(RowDataUtil.getBigDecimal(objG[7])); gathering.setUnOffSetMon(gathering.getAmount().subtract( gathering.getOffSetAmount())); // book.setFinalExpense(RowDataUtil.getDouble(obj[0])); // book.setPayCosts(RowDataUtil.getDouble(obj[1])); // book.setUnPay(book.getFinalExpense() - book.getPayCosts()); // book.setPayBack(RowDataUtil.getDouble(obj[2])); // book.setPax(RowDataUtil.getInt(obj[3])); // // // book.getPlan().setTourNo(RowDataUtil.getString(obj[4])); // book.getPlan().getLine().setLineNo(RowDataUtil.getString(obj[5])); // book.getPlan().getLine().setLineName(RowDataUtil.getString(obj[6])); // book.getPlan().setOutDate(RowDataUtil.getDate(obj[7])); // // gathering.setBookList(bookList); // gathering.setFinalExpense(finalExpense); // gathering.setPayCosts(payCosts); // gathering.setUnPay(finalExpense - payCosts); // gathering.setPayBack(payBack); // gathering.setPax(pax); return gathering; } return null; } /* * (non-Javadoc) * * @see com.opentravelsoft.providers.IncomeDao#updateIncome(com.opentravelsoft * .ebiz.entity.finance.Income) */ public int updateIncome(Income gather) { Income tblIncome = getHibernateTemplate().get(Income.class, gather.getIncomeId()); if (tblIncome == null) { return -1; } // 更新订单 Booking tfj006 = (Booking) getHibernateTemplate().get(Booking.class, gather.getBookingNo(), LockMode.PESSIMISTIC_WRITE); tfj006.setCramt(tfj006.getCramt().subtract(gather.getAmount()) .add(tfj006.getPayBack())); gather.setAmount(tfj006.getPayBack()); getHibernateTemplate().update(tfj006); tblIncome.setPayMode(gather.getPayMode()); tblIncome.setIncomeDate(gather.getIncomeDate()); tblIncome.setAmount(gather.getAmount()); tblIncome.setOffSetAmount(gather.getOffSetAmount()); tblIncome.setNote(gather.getNote()); tblIncome.setReceiver(gather.getReceiver()); tblIncome.setUpdatedBy(gather.getUpdateBy()); getHibernateTemplate().update(tblIncome); return 0; } @SuppressWarnings("unchecked") public List<Booking> getUnpayList(int incomeId) { StringBuilder sb = new StringBuilder(); sb.append("select a.plan.tourNo,a.plan.outDate,a.pax,"); sb.append("a.salesman.userId,a.dbamt,a.cramt,a.plan.line.lineName,"); sb.append("a.nameNo,a.customer.name,c.amount "); sb.append("from Booking a "); sb.append("Income c "); sb.append("where c.bookingNo=a.nameNo and c.incomeId=? "); sb.append("and a.cfmKey='1' and a.delkey='N' "); sb.append("order by a.reserveDate "); Object[] param = { incomeId }; List<Booking> books = new ArrayList<Booking>(); List<Object[]> list = getHibernateTemplate().find(sb.toString(), param); Booking book = null; if (list != null && list.size() > 0) { for (Object[] obj : list) { book = new Booking(); book.getPlan().setTourNo(RowDataUtil.getString(obj[0])); book.getPlan().setOutDate(RowDataUtil.getDate(obj[1])); book.setPax(RowDataUtil.getInt(obj[2])); book.setSalesman(new Employee(RowDataUtil.getInt(obj[3]))); book.setDbamt(RowDataUtil.getBigDecimal(obj[4])); book.setPayCosts(RowDataUtil.getBigDecimal(obj[5])); book.setUnPay(RowDataUtil.getBigDecimal(obj[4]).subtract( RowDataUtil.getBigDecimal(obj[5]))); book.getPlan().getLine().setLineName(RowDataUtil.getString(obj[6])); book.setBookingNo(RowDataUtil.getString(obj[7])); book.getCustomer().setName(RowDataUtil.getString(obj[8])); book.setPayBack(RowDataUtil.getBigDecimal(obj[9])); books.add(book); } } return books; } // ------------------------------------------------------------------------- @SuppressWarnings("unchecked") public List<Remind> getIncomeInBand(int daynum) { Date sysdate = getSysdate(); Calendar cal = Calendar.getInstance(); cal.setTime(sysdate); cal.add(Calendar.DAY_OF_MONTH, -daynum); // 国内线路 现结客户 %月结客户不作处理 StringBuilder sb = new StringBuilder(); sb.append("from " + Booking.class.getName()); sb.append(" where dbamt<>cramt "); sb.append("and customer.payment='N' and plan.outDate <= ? "); // sb.append("and id.outDate >= '2008-07-01' "); sb.append("order by plan.outDate "); Object[] params = { cal.getTime() }; List<Remind> books = new ArrayList<Remind>(); List<Booking> list = getHibernateTemplate().find(sb.toString(), params); for (Booking alert : list) { Remind book = new Remind(); book.setBookingNo(alert.getBookingNo()); book.setTourNo(alert.getPlan().getTourNo()); book.setOutDate(alert.getPlan().getOutDate()); book.setRouteName(alert.getPlan().getLine().getLineName()); book.setExpense(RowDataUtil.getDouble(alert.getDbamt()) - RowDataUtil.getDouble(alert.getCramt())); } return books; } @SuppressWarnings("unchecked") public List<Customer> getCusByTour(String TourNo) { StringBuilder sb = new StringBuilder(); sb.append("SELECT customer.customerId,customer.name "); sb.append("FROM Booking "); sb.append("WHERE plan.tourNo = ?"); Object[] param = { TourNo }; List<Customer> list = new ArrayList<Customer>(); Customer agent = null; List<Object[]> cusList = getHibernateTemplate().find(sb.toString(), param); for (Object[] obj : cusList) { agent = new Customer(); agent.setCustomerId(RowDataUtil.getInt(obj[0])); agent.setName(RowDataUtil.getString(obj[1])); list.add(agent); } return list; } @SuppressWarnings("unchecked") public int warrantSubmit(int customerId, String tourNo, Warrant warrant) { StringBuilder sb = new StringBuilder(); sb.append("FROM Booking "); sb.append("WHERE customer.customerId=? and plan.tourNo = ? "); Object[] param = { customerId, tourNo }; List<Booking> tfj006List = getHibernateTemplate() .find(sb.toString(), param); if (tfj006List != null && tfj006List.size() > 0) { for (Booking tfj006 : tfj006List) { tfj006.setWarrantFlag("Y"); tfj006.setWarrantBy(warrant.getWarrantBy()); tfj006.setWarrantMoney(warrant.getWarratMoney()); tfj006.setWarrantDate(warrant.getWarrantDate()); tfj006.setLastPayDate(warrant.getLastPayDate()); getHibernateTemplate().update(tfj006); } } return 0; } @SuppressWarnings("unchecked") public List<Income> getPayments(String bookingNo) { List<Income> result = new ArrayList<Income>(); StringBuilder sb = new StringBuilder(); sb.append("select a.bookingNo,c.text,a.amount,a.useType,a.incomeDate,a.note "); sb.append("from Income a, Lists c "); sb.append("where a.payMode=c.value "); sb.append("and a.bookingNo=? and c.listName='PaymentMethod' "); Object[] params = { bookingNo }; List<Object[]> list = getHibernateTemplate().find(sb.toString(), params); for (Object[] obj : list) { Income pay = new Income(); // 付款单NO pay.setBookingNo(RowDataUtil.getString(obj[0])); // 付款方式 pay.setPayMode(RowDataUtil.getString(obj[1])); // 付款金额 pay.setAmount(RowDataUtil.getBigDecimal(obj[2])); // 付款类别(0:定金 1:预付款...) pay.setUseType(RowDataUtil.getString(obj[3])); // 操作时间 pay.setIncomeDate(RowDataUtil.getDate(obj[4])); // 备注 pay.setNote(RowDataUtil.getString(obj[5])); result.add(pay); } return result; } @SuppressWarnings("unchecked") public List<LabelValueBean> getPaymentTypes() { List<LabelValueBean> result = new ArrayList<LabelValueBean>(); StringBuilder sb = new StringBuilder(); sb.append("from Lists where listName='PaymentMethod' "); sb.append("order by value"); List<Lists> list = getHibernateTemplate().find(sb.toString()); for (Lists obj : list) { result.add(new LabelValueBean(RowDataUtil.getString(obj.getValue()), RowDataUtil.getString(obj.getText()))); } return result; } @SuppressWarnings("unchecked") public int netPay(String orderId, String paymentMode, BigDecimal amount, String moneyType, String paymentNo, String invNo) throws EbizException { HibernateTemplate template = getHibernateTemplate(); // --------------------------------------------------------------------- // 更新 报名单索引表(TFJ006) 预订人数 确认人数 已交款 确认状态 Booking tfj006 = (Booking) template.load(Booking.class, orderId, LockMode.PESSIMISTIC_WRITE); if (null == tfj006) throw new EbizException("报名单索引表(TFJ006)记录错误."); // --------------------------------------------------------------------- // Plan plan = (Plan) template.load(Plan.class, tfj006.getPlan().getPlanNo(), LockMode.PESSIMISTIC_WRITE); if (null == plan) throw new EbizException("线路计划表(TBL_PLAN)记录错误."); // --------------------------------------------------------------------- // 写TFJ007中的付款金额 StringBuilder sql = new StringBuilder(); Object[] params = { orderId }; sql.append("from Tourist where booking.nameNo=? "); List<Tourist> list = template.find(sql.toString(), params); int pax = list.size(); if (tfj006.getCfmKey().equals("2") && plan.getPax3() - pax > 0) { // 已定人数 plan.setPax2(RowDataUtil.getShort(plan.getPax2()) + pax); // 可订人数 plan.setPax3(RowDataUtil.getShort(plan.getPax3()) - pax); // 更新计划 template.update(plan); // 预订人数 tfj006.setPax(pax); // 确认人数 tfj006.setConfirmPax(pax); // 团队确认状态 1-团确 2-团候 tfj006.setCfmKey("1"); } else throw new EbizException("名额不足(TBL_PLAN)记录错误."); // --------------------------------------------------------------------- // 已交款 tfj006.setCramt(tfj006.getCramt().subtract(amount)); // 客户收款登记 tfj006.setCramt(tfj006.getCramt().subtract(amount)); // 最后修改人 tfj006.setOpuser(0); template.update(tfj006); return 0; } /** 加入付款信息 */ public int insertPayer(TblUserPayOL payer) { getHibernateTemplate().save(payer); return -1; } }