package com.ycsoft.sysmanager.component.resource; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.ycsoft.beans.config.TConfigTemplate; import com.ycsoft.beans.depot.RDepotDefine; import com.ycsoft.beans.invoice.RInvoice; import com.ycsoft.beans.invoice.RInvoiceDetail; import com.ycsoft.beans.invoice.RInvoiceInput; import com.ycsoft.beans.invoice.RInvoiceOptr; import com.ycsoft.beans.invoice.RInvoiceTransfer; import com.ycsoft.beans.system.SDept; import com.ycsoft.beans.system.SOptr; import com.ycsoft.business.dao.config.TConfigTemplateDao; import com.ycsoft.business.dao.resource.device.RDepotDefineDao; import com.ycsoft.business.dao.resource.invoice.RInvoiceDao; import com.ycsoft.business.dao.resource.invoice.RInvoiceDetailDao; import com.ycsoft.business.dao.resource.invoice.RInvoiceInputDao; import com.ycsoft.business.dao.resource.invoice.RInvoiceOptrDao; import com.ycsoft.business.dao.resource.invoice.RInvoiceTransferDao; import com.ycsoft.business.dao.system.SDeptDao; import com.ycsoft.business.dto.config.TemplateConfigDto; import com.ycsoft.commons.abstracts.BaseComponent; import com.ycsoft.commons.constants.DataRight; import com.ycsoft.commons.constants.DataRightLevel; import com.ycsoft.commons.constants.InvoiceOptrType; import com.ycsoft.commons.constants.SequenceConstants; 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.DateHelper; import com.ycsoft.commons.helper.StringHelper; import com.ycsoft.daos.core.JDBCException; import com.ycsoft.daos.core.Pager; import com.ycsoft.sysmanager.dto.resource.invoice.InvoiceDepotDto; import com.ycsoft.sysmanager.dto.resource.invoice.InvoiceDetailDto; import com.ycsoft.sysmanager.dto.resource.invoice.InvoiceDto; import com.ycsoft.sysmanager.dto.system.RDepotDto; /** * @author danjp * */ @Component public class InvoiceComponent extends BaseComponent { private RInvoiceDao rInvoiceDao; private RInvoiceInputDao rInvoiceInputDao; private RInvoiceDetailDao rInvoiceDetailDao; private RInvoiceTransferDao rInvoiceTransferDao; private RInvoiceOptrDao rInvoiceOptrDao; private RDepotDefineDao rDepotDefineDao; @Autowired private TConfigTemplateDao tConfigTemplateDao; @Autowired private SDeptDao sDeptDao; /** * 查找操作员管理的仓库 * @param optrId * @return * @throws JDBCException * @throws ComponentException */ private String findDepot(SOptr optr) throws Exception, ComponentException { /*String dataRight = queryDataRightCon(optr, DataRight.INVOICE_MNG.toString()); if (DataRightLevel.DEPT.toString().equals(dataRight)) { return optr.getDept_id(); } else { return optr.getCounty_id(); }*/ // 因为有切换仓库功能,所以只取操作员当前操作的仓库 return optr.getDept_id(); } private String findQueryDepot(SOptr optr) throws Exception, ComponentException { String dataRight = queryDataRightCon(optr, DataRight.INVOICE_MNG.toString()); if (DataRightLevel.DEPT.toString().equals(dataRight)) { return optr.getDept_id(); } else if (DataRightLevel.COUNTY.toString().equals(dataRight)){ return " SELECT depot_id "+ " FROM vew_invoice_depot s "+ " start with depot_pid = '"+optr.getCounty_id()+"' "+ " connect by prior s.depot_id = s.depot_pid "+ " union all "+ " SELECT depot_id FROM vew_invoice_depot where depot_id = '"+optr.getCounty_id()+"'"; } else { return null; } } /** * 查找可以调拨的仓库 * @param optrId * @return * @throws Exception */ public List<RDepotDefine> queryTransDepot(SOptr optr) throws Exception { String depotId = findDepot(optr); return rDepotDefineDao.queryInvoiceTransDepot(depotId); } /** * 查找可以调拨的仓库(定额发票) * @param optrId * @return * @throws Exception */ public List<SDept> queryQuotaInvoiceTransDepot(SOptr optr) throws Exception { String depotId = findDepot(optr); return rDepotDefineDao.queryDeptForTransById(depotId); } /** * 根据发票号查询发票 * @param invoiceId * @return * @throws JDBCException */ public List<RInvoice> queryInvoiceByCountyId(String invoiceId,String countyId) throws JDBCException { if(countyId.equals(SystemConstants.COUNTY_ALL)){ return rInvoiceDao.getInvoiceByInvoiceId(invoiceId); }else{ return rInvoiceDao.queryInvoiceByCountyId(invoiceId,countyId); } } /** * 检查当前发票号码段是否存在 * @param startInvoiceId * @param endInvoiceId * @return * @throws Exception */ public boolean checkInvoic(String startInvoiceId,String endInvoiceId,SOptr optr) throws Exception { String depotId = findDepot(optr); return rInvoiceDao.checkInvoic(startInvoiceId, endInvoiceId,depotId); } /** * 返回补零字符串 * @param zero 补零位数 * @return */ private String transferZero(long num,String zero){ DecimalFormat df = new DecimalFormat(zero); return df.format(num); } private static final String INVOICE_ID_ZERO = "00000000";//发票号码8位 private static final String INVOICE_BOOK_ID_ZERO = "0000000000";//发票本号10位 private static final int INVOICE_ID_LEN = 8;//发票号码8位 private static final int INVOICE_BOOK_ID_LEN = 10;//发票本号10位 /** * 发票录入 * @param invoiceDto * @param optrId * @param countyId * @throws JDBCException */ public void saveInvoiceInput(InvoiceDto invoiceDto,SOptr optr) throws Exception{ Integer doneCode = gDoneCode(); String invoiceCode = invoiceDto.getInvoice_code(); String invoiceType = invoiceDto.getInvoice_type();//发票类型 String startInvoiceId = invoiceDto.getStart_invoice_id();//开始发票号 String endInvoiceId = invoiceDto.getEnd_invoice_id();//结束发票号 int invoice_amount = invoiceDto.getInvoice_amount();//定额发票面额 //发票号 int lenthnum = startInvoiceId.length(); int intStartInvoiceId = Integer.parseInt(startInvoiceId); int intEndInvoiceId = Integer.parseInt(endInvoiceId); //发票本号 String depotId = findDepot(optr); RInvoiceInput invoiceInput = new RInvoiceInput(); invoiceInput.setCreate_time(DateHelper.now()); invoiceInput.setDone_code(doneCode); invoiceInput.setInvoice_count(intEndInvoiceId - intStartInvoiceId+1); invoiceInput.setInvoice_type(invoiceType); invoiceInput.setOptr_id(optr.getOptr_id()); invoiceInput.setDepot_id(depotId); if (invoiceInput.getInvoice_count()>10000){ throw new ComponentException("发票入库每次只能入库10000张!"); } List<RInvoice> invoiceList = new ArrayList<RInvoice>(); String invoiceId = ""; RInvoice invoice = null; for(int i=intStartInvoiceId;i<=intEndInvoiceId;i++){ invoiceId = StringHelper.leftWithZero(i + "", lenthnum); boolean flag = rInvoiceDao.isExistsInvoice(invoiceId, invoiceCode); if(flag){ throw new ComponentException("发票已存在,发票号: " + invoiceId + ", 代码: " + invoiceCode); } invoice = new RInvoice(); invoice.setInvoice_id(invoiceId); invoice.setDepot_id(depotId); invoice.setInvoice_code(invoiceCode); invoice.setInvoice_book_id(invoiceCode); invoice.setInvoice_type(invoiceType); invoice.setStatus(SystemConstants.INVOICE_STATUS_IDLE); invoice.setFinance_status(SystemConstants.INVOICE_STATUS_IDLE); invoice.setInvoice_amount(invoice_amount); invoiceList.add(invoice); } rInvoiceDao.save(invoiceList.toArray(new RInvoice[invoiceList.size()])); rInvoiceInputDao.save(invoiceInput); saveDetails(doneCode, invoiceList); } /** * 根据以下条件几个或者多个查询r_invoice. * @param startBookId 开始本号 * @param endBookId 结束本号 * @param startInvoiceId 开始发票号 * @param endInvoiceId 结束发票号 * @param isLoss 是否丢失 * @param optr 当前操作员 * @param invoiceCode 发票代码 * @param optrId 领票人 * @return * @throws Exception */ public List<RInvoice> queryInvoice(String startBookId,String endBookId, String startInvoiceId,String endInvoiceId,String isLoss,SOptr optr,String invoiceCode) throws Exception { String depotId = findDepot(optr); List<RInvoice> list = rInvoiceDao.queryInvoice(startBookId, endBookId, startInvoiceId, endInvoiceId, depotId, isLoss,invoiceCode); return list==null?new ArrayList<RInvoice>():list; } public List<RInvoice> queryInvoiceExceptQuota(String startBookId,String endBookId, String startInvoiceId,String endInvoiceId,SOptr optr,String invoiceCode) throws Exception { String depotId = findDepot(optr); List<RInvoice> list = rInvoiceDao.queryInvoiceExceptQuota(startBookId, endBookId, startInvoiceId, endInvoiceId, depotId,invoiceCode); return list==null?new ArrayList<RInvoice>():list; } public List<RInvoice> queryQuotaInvoice(String startBookId,String endBookId, String startInvoiceId,String endInvoiceId,String isLoss,SOptr optr,String invoiceCode) throws Exception { String depotId = findDepot(optr); List<RInvoice> list = rInvoiceDao.queryQuotaInvoice(startBookId, endBookId, startInvoiceId, endInvoiceId, depotId,isLoss,invoiceCode); return list==null?new ArrayList<RInvoice>():list; } /** * 查找可以操作的发票 * @param optrType 操作类型 1调拨 2结账 3取消结账 4核销 5取消核销 * @param optrId * @param startBookId * @param endBookId * @param startInvoiceId * @param endInvoiceId * @return * @throws Exception */ public List<RInvoice> queryInvoiceForOptr(String optrType,SOptr optr,String startBookId,String endBookId, String startInvoiceId,String endInvoiceId,String invoiceCode,String optrId) throws Exception{ List<RInvoice> list = null; //发票调拨(不含定额票) if(optrType.equals(InvoiceOptrType.TRANS.toString())){ //查询 除定额发票外的其他发票 list = queryInvoiceExceptQuota(startBookId, endBookId, startInvoiceId, endInvoiceId, optr,invoiceCode); } else if(optrType.equals(InvoiceOptrType.QUOTA_TRANS.toString()) || optrType.equals(InvoiceOptrType.QUOTA_LOSS.toString()) || optrType.equals(InvoiceOptrType.QUOTA_ADJUST.toString()) ){ //定额票下发、挂失、调账 //查询 定额发票 list = queryQuotaInvoice(startBookId, endBookId, startInvoiceId, endInvoiceId,SystemConstants.BOOLEAN_FALSE, optr,invoiceCode); } else if(optrType.equals(InvoiceOptrType.QUOTA_CANCEL_LOSS.toString())){ //定额票取消挂失 //查询 定额发票 list = queryQuotaInvoice(startBookId, endBookId, startInvoiceId, endInvoiceId,SystemConstants.BOOLEAN_TRUE, optr,invoiceCode); } else{ list = queryInvoice(startBookId, endBookId, startInvoiceId, endInvoiceId, SystemConstants.BOOLEAN_FALSE, optr,invoiceCode); } for (int i=list.size()-1 ;i>=0;i--){ RInvoice invoice = list.get(i); if (optrType.equals(InvoiceOptrType.TRANS.toString()) || optrType.equals(InvoiceOptrType.RECEIVE.toString()) || optrType.equals(InvoiceOptrType.CANCEL_RECEIVE.toString()) || optrType.equals(InvoiceOptrType.EDITSTATUS.toString()) || optrType.equals(InvoiceOptrType.REFUND.toString()) || optrType.equals(InvoiceOptrType.QUOTA_TRANS.toString()) || optrType.equals(InvoiceOptrType.QUOTA_LOSS.toString()) || optrType.equals(InvoiceOptrType.QUOTA_CANCEL_LOSS.toString()) ) { // 发票状态只能为空闲 //定额票 只有空闲状态才能挂失 if (!invoice.getStatus().equals(StatusConstants.IDLE)){ list.remove(i); continue; } // 未领用的才能领用 if(optrType.equals(InvoiceOptrType.RECEIVE.toString()) && StringHelper.isNotEmpty(invoice.getOptr_id())){ list.remove(i); } if(optrType.equals(InvoiceOptrType.CANCEL_RECEIVE.toString()) && (StringHelper.isEmpty(optrId) || !optrId.equals(invoice.getOptr_id() ) ) ) { //传入的操作员(领用人)为空或者发票的领用人不是传入的领用人 list.remove(i); } } else if(optrType.equals(InvoiceOptrType.CHECK.toString())) {//发票状态不为空闲并且财务状态为空闲 结账 if (StatusConstants.IDLE.equals(invoice.getStatus()) || !StatusConstants.IDLE.equals(invoice.getFinance_status())){ list.remove(i); } } else if(optrType.equals(InvoiceOptrType.CLOSE.toString())) {//财务状态为核销 if (!StatusConstants.CHECKED.equals(invoice.getFinance_status())){ list.remove(i); } } else if(optrType.equals(InvoiceOptrType.CANCELCHECK.toString())) {//财务状态为取消结账 if (!StatusConstants.CHECKED.equals(invoice.getFinance_status())){ list.remove(i); } } else if(optrType.equals(InvoiceOptrType.CANCELCLOSE.toString())) {//财务状态为核销 取消核销 if (!StatusConstants.CLOSE.equals(invoice.getFinance_status())){ list.remove(i); } } else if(optrType.equals(InvoiceOptrType.QUOTA_ADJUST.toString())) { //定额发票调账 调实际金额, 状态为使用,未结账 if (!StatusConstants.USE.equals(invoice.getStatus()) || !StatusConstants.IDLE.equals(invoice.getFinance_status())){ list.remove(i); } } } return list; } /** * 查找可以修改状态的发票 * @param optrType * @param optrId * @param startInvoiceBook * @param endInvoiceBook * @param startInvoiceId * @param endInvoiceId * @param status * @return * @throws Exception */ public List<RInvoice> queryInvoiceForEdit(String optrType, SOptr optr, String startInvoiceBook, String endInvoiceBook, String startInvoiceId, String endInvoiceId, String status, String invoiceType,String invoiceCode) throws Exception{ String depotId = findDepot(optr); List<String> statusList = new ArrayList<String>(); if(invoiceType.equals(SystemConstants.DOC_TYPE_QUOTA)){ //定额发票 if (status.equals(StatusConstants.IDLE)){ //定额发票,只能从使用状态改为空闲,不能从失效状态改为空闲 statusList.add(StatusConstants.USE); } else if(status.equals(StatusConstants.INVALID)){ statusList.add(StatusConstants.IDLE); statusList.add(StatusConstants.USE); } else if(status.equals(StatusConstants.USE)){ statusList.add(StatusConstants.IDLE); statusList.add(StatusConstants.INVALID); } } else { if (status.equals(StatusConstants.IDLE)){ statusList.add(StatusConstants.INVALID); } else if(status.equals(StatusConstants.INVALID)){ statusList.add(StatusConstants.IDLE); } } return this.rInvoiceDao.queryInvoice(invoiceCode,invoiceType, startInvoiceBook, endInvoiceBook, startInvoiceId, endInvoiceId, depotId, statusList .toArray(new String[statusList.size()])); } /** * 根据发票id查询发票详细信息 * @param invoiceId * @return * @throws Exception */ public InvoiceDto queryInvoiceByInvoiceId(String invoiceId,String invoiceBookId,String invoiceCode) throws Exception { boolean flag = rInvoiceDao.isExistsInvoice(invoiceId, invoiceCode); if(!flag){ throw new ComponentException(ErrorCode.InvoiceNotExists); } InvoiceDto dto = rInvoiceDao.queryInvoiceByInvoiceId(invoiceId,invoiceCode); List<InvoiceDepotDto> depot = rInvoiceDao.queryDepot(invoiceId,invoiceCode); if(depot.size()>0) dto.setInvoiceDepotList(depot); List<InvoiceDetailDto> detail = rInvoiceDao.queryDetail(invoiceId,invoiceBookId,invoiceCode); if(detail.size()>0) dto.setInvoiceDetailList(detail); return dto; } /** * 根据发票id查询发票详细信息 * @param invoiceId * @return * @throws Exception */ public InvoiceDto queryInvoiceDetailByInvoiceId(String invoiceId,String invoiceCode) throws Exception { InvoiceDto invoice = rInvoiceDao.queryInvoiceById(invoiceId,invoiceCode); List<InvoiceDetailDto> detail = rInvoiceDao.queryDetail(invoiceId,invoice.getInvoice_book_id(),invoice.getInvoice_code()); invoice.setInvoiceDetailList(detail); return invoice; } /** * 多条件查询发票及客户信息 * @param invoiceDto * @return * @throws Exception */ public Pager<RInvoice> queryMulitInvoice(InvoiceDto invoiceDto,SOptr optr,Integer start,Integer limit) throws Exception { /**if (StringHelper.isEmpty(invoiceDto.getDepot_id())){ String depotId= this.findQueryDepot(optr); if (StringHelper.isNotEmpty(depotId)) invoiceDto.setDepot_id(depotId); }**/ return rInvoiceDao.queryMulitInvoice(invoiceDto, start, limit); } /** * 查询当前仓库及以下子仓库 * @param depotId * @return * @throws JDBCException */ public List<SDept> queryChildInvoiceDepot(SOptr optr) throws Exception{ String dataRight = this.queryDataRightCon(optr, DataRight.INVOICE_MNG.toString()); if (dataRight.equals(DataRightLevel.AREA.toString()) || optr.getCounty_id().equals(SystemConstants.COUNTY_ALL)) { return sDeptDao.queryAllDept(); } String depotId = findDepot(optr); return sDeptDao.queryChildDept(depotId); } /** * 保存发票调拨 * @param transDepotId * @param optrId * @param invoiceList */ public void saveTrans(String transDepotId,String optrId,String transType,SOptr optr,List<RInvoice> invoiceList) throws Exception{ //保存调拨信息 Integer doneCode = gDoneCode();//流水号 String depotId = findDepot(optr);//原仓库 RInvoiceTransfer transfer = new RInvoiceTransfer(); transfer.setDone_code(doneCode); transfer.setOptr_type(transType); if(transType.equals(InvoiceOptrType.RECEIVE.toString())){ transfer.setOrder_depot_id(optrId);//如果是领用,目标库用optr代替 }else{ transfer.setOrder_depot_id(transDepotId); } if(transType.equals(InvoiceOptrType.CANCEL_RECEIVE.toString())){//如果是取消领用,来源设置为操作员 transfer.setSource_depot_id(optrId); }else{ transfer.setSource_depot_id(depotId); } transfer.setCreate_time(DateHelper.now()); transfer.setOptr_id(optr.getOptr_id()); transfer.setInvoice_count(invoiceList.size()); rInvoiceTransferDao.save(transfer); //保存明细信息 saveDetails(doneCode, invoiceList); //修改发票对应的仓库 //定额发票下发,选择营业员,修改发票营业员 //不是领用的话,置空optr_id if(!InvoiceOptrType.RECEIVE.toString().equals(transType)){ optrId = null; } rInvoiceDao.saveTrans(doneCode, transDepotId, optrId); if(InvoiceOptrType.RECEIVE.toString().equals(transType)){ rInvoiceDao.updateInvoiceOpenOptrId(doneCode, optrId); }else if(InvoiceOptrType.CANCEL_RECEIVE.toString().equals(transType)){ rInvoiceDao.updateInvoiceOpenOptrId(doneCode, null); } } //保存发票结账 public void saveCheck(SOptr optr,List<RInvoice> invoiceList) throws Exception{ Integer doneCode = gDoneCode();//流水号 // String depotId = findDepot(optr);//原仓库 // String depotPid= rDepotDefineDao.queryParentDepot(depotId);//结账后归属仓库 //结账后归属仓库 根据模板配置 TConfigTemplate ct = tConfigTemplateDao.queryConfigByConfigName( TemplateConfigDto.Config.INVOICE_DEPT_CHECKOUT.toString(), optr.getCounty_id()); //当前值 if(ct == null){ throw new ComponentException(ErrorCode.InvoiceTemplateDeptIsNull); } String depotPid = ct.getConfig_value(); //保存结账记录 saveInvoiceOptr(doneCode, optr, invoiceList.size(),InvoiceOptrType.CHECK.toString()); saveDetails(doneCode, invoiceList); // if(depotPid.equals(SystemConstants.COUNTY_ALL)){ // depotPid = depotId; // } //修改发票信息 rInvoiceDao.saveCheck(doneCode, depotPid); } //保存取消发票结账 public void saveCancelCheck(SOptr optr,List<RInvoice> invoiceList) throws Exception{ Integer doneCode = gDoneCode();//流水号 //保存结账记录 saveInvoiceOptr(doneCode, optr, invoiceList.size(),InvoiceOptrType.CANCELCHECK.toString()); saveDetails(doneCode, invoiceList); //修改发票信息 rInvoiceDao.saveCancelCheck(doneCode); } //保存发票核销 public void saveClose(SOptr optr,List<RInvoice> invoiceList) throws Exception{ Integer doneCode = gDoneCode();//流水号 //保存结账记录 saveInvoiceOptr(doneCode, optr, invoiceList.size(),InvoiceOptrType.CLOSE.toString()); saveDetails(doneCode, invoiceList); //修改发票信息 rInvoiceDao.saveClose(doneCode); } //保存发票核销 public void saveCancelClose(SOptr optr,List<RInvoice> invoiceList) throws Exception{ Integer doneCode = gDoneCode();//流水号 //保存记录 saveInvoiceOptr(doneCode, optr, invoiceList.size(),InvoiceOptrType.CANCELCLOSE.toString()); saveDetails(doneCode, invoiceList); //修改发票信息 rInvoiceDao.saveCancelClose(doneCode); } //修改发票状态 public void saveEditStatus(SOptr optr, List<RInvoice> invoiceList, String status, String invoiceType) throws Exception { Integer doneCode = gDoneCode();//流水号 //保存记录 saveInvoiceOptr(doneCode, optr, invoiceList.size(),InvoiceOptrType.EDITSTATUS.toString()); saveDetails(doneCode, invoiceList); //修改发票信息 rInvoiceDao.saveEditStatus(doneCode,status,invoiceType); } //退库 public void saveRefund(SOptr optr,List<RInvoice> invoiceList,String status) throws Exception{ Integer doneCode = gDoneCode();//流水号 //保存记录 saveInvoiceOptr(doneCode, optr, invoiceList.size(),InvoiceOptrType.REFUND.toString()); saveDetails(doneCode, invoiceList); for(RInvoice invoice : invoiceList){ rInvoiceDao.removeInvoice(doneCode, invoice.getInvoice_id(), invoice.getInvoice_code()); } } /** * 定额发票挂失 * @param optr * @param invoiceList * @param invoiceOptrType * @param isLoss * @throws Exception */ public void saveQutaLoss(SOptr optr, List<RInvoice> invoiceList, String invoiceOptrType, String isLoss) throws Exception { Integer doneCode = gDoneCode(); //保存记录 saveInvoiceOptr(doneCode, optr, invoiceList.size(),invoiceOptrType); saveDetails(doneCode, invoiceList); rInvoiceDao.saveQutoInvoiceLoss(doneCode, isLoss); } /** * 定额发票调账 * @param optr * @param invoiceList * @param invoiceOptrType * @param amount * @throws Exception */ public void saveQutaAdjust(SOptr optr, List<RInvoice> invoiceList,Integer amount) throws Exception { Integer doneCode = gDoneCode(); //保存记录 saveInvoiceOptr(doneCode, optr, invoiceList.size(),InvoiceOptrType.QUOTA_ADJUST.toString()); saveDetails(doneCode, invoiceList); rInvoiceDao.saveQutoInvoiceAdjust(doneCode, amount); } /** * 保存发票财务操作信息 * @param optrId * @param invoiceCount * @throws Exception */ private void saveInvoiceOptr(int doneCode,SOptr optr,int invoiceCount,String optrType) throws Exception{ RInvoiceOptr invoiceOptr = new RInvoiceOptr(); invoiceOptr.setDone_code(doneCode); invoiceOptr.setOptr_type(optrType); invoiceOptr.setInvoice_count(invoiceCount); invoiceOptr.setOptr_id(optr.getOptr_id()); invoiceOptr.setDept_id(optr.getDept_id()); invoiceOptr.setCounty_id(optr.getCounty_id()); invoiceOptr.setCreate_time(DateHelper.now()); rInvoiceOptrDao.save(invoiceOptr); } private void saveDetails(int doneCode, List<RInvoice> invoiceList) throws Exception{ List<RInvoiceDetail> invoiceDetailList = new ArrayList<RInvoiceDetail>(); for (RInvoice invoice :invoiceList){ RInvoiceDetail invoiceDetail = new RInvoiceDetail(); invoiceDetail.setDone_code(doneCode); invoiceDetail.setInvoice_code(invoice.getInvoice_code()); invoiceDetail.setInvoice_id(invoice.getInvoice_id()); invoiceDetailList.add(invoiceDetail); } rInvoiceDetailDao.save(invoiceDetailList.toArray(new RInvoiceDetail[invoiceDetailList.size()])); } public List<SOptr> getByDeptId(String deptId) throws Exception { return sOptrDao.findByDeptId(deptId); } private Integer gDoneCode() throws JDBCException { return rInvoiceInputDao.findSequence(SequenceConstants.SEQ_DONE_CODE).intValue(); } public void setRInvoiceDao(RInvoiceDao invoiceDao) { rInvoiceDao = invoiceDao; } public void setRInvoiceInputDao(RInvoiceInputDao invoiceInputDao) { rInvoiceInputDao = invoiceInputDao; } public void setRInvoiceDetailDao(RInvoiceDetailDao invoiceDetailDao) { rInvoiceDetailDao = invoiceDetailDao; } public void setRInvoiceTransferDao(RInvoiceTransferDao invoiceTransferDao) { rInvoiceTransferDao = invoiceTransferDao; } public void setRInvoiceOptrDao(RInvoiceOptrDao invoiceOptrDao) { rInvoiceOptrDao = invoiceOptrDao; } public void setRDepotDefineDao(RDepotDefineDao depotDefineDao) { rDepotDefineDao = depotDefineDao; } }