package cn.com.lzt.contractpayment.service.impl; import cn.com.lzt.contract.entity.ContractEntity; import cn.com.lzt.contractinvoice.entity.ContractInvoiceEntity; import cn.com.lzt.contractp.entity.ContractPEntity; import cn.com.lzt.contractpayment.entity.ContractPaymentEntity; import cn.com.lzt.contractpayment.service.ContractPaymentServiceI; import org.jeecgframework.core.common.exception.BusinessException; import org.jeecgframework.core.common.service.impl.CommonServiceImpl; import org.jeecgframework.core.util.MyBeanUtils; import org.jeecgframework.core.util.StringUtil; import org.jeecgframework.core.util.oConvertUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.UUID; @Service("contractPaymentService") @Transactional public class ContractPaymentServiceImpl extends CommonServiceImpl implements ContractPaymentServiceI { public void delete(T entity) { super.delete(entity); //执行删除操作配置的sql增强 this.doDelSql((ContractPaymentEntity)entity); } public void addMain(ContractPaymentEntity contractPayment, List contractInvoiceList){ //保存主信息 this.save(contractPayment); /**保存-发票明细*/ for(ContractInvoiceEntity contractInvoice:contractInvoiceList){ //外键设置 contractInvoice.setPaymentid(contractPayment.getId()); contractInvoice.setContractid(contractPayment.getContractid()); this.save(contractInvoice); } //回写合同中累计开票金额 switch (contractPayment.getBilltype()) { case "service": ContractEntity contract = getEntity(ContractEntity.class, contractPayment.getContractid()); double invoiceAmount = contract.getTotalinvoice(); for(ContractInvoiceEntity invoice :contractInvoiceList) { invoiceAmount+=invoice.getInvoiceamount(); } contract.setTotalinvoice(invoiceAmount); saveOrUpdate(contract); break; case "purchase": ContractPEntity contractp = getEntity(ContractPEntity.class, contractPayment.getContractid()); double invoiceAmountp = contractp.getTotalinvoice(); for(ContractInvoiceEntity invoice :contractInvoiceList) { invoiceAmountp+=invoice.getInvoiceamount(); } contractp.setTotalinvoice(invoiceAmountp); saveOrUpdate(contractp); break; default: break; } //回写完毕 //执行新增操作配置的sql增强 this.doAddSql(contractPayment); // this.updateContractTotalInvoice(contractPayment.getContractid(), contractPayment.getInvoiceamount()); } public void updateMain(ContractPaymentEntity contractPayment, List contractInvoiceList) { //保存主表信息 double changedInvoice = 0; if(StringUtil.isNotEmpty(contractPayment.getId())){ try { ContractPaymentEntity temp = findUniqueByProperty(ContractPaymentEntity.class, "id", contractPayment.getId()); changedInvoice = contractPayment.getInvoiceamount()-temp.getInvoiceamount(); MyBeanUtils.copyBeanNotNull2Bean(contractPayment, temp); this.saveOrUpdate(temp); } catch (Exception e) { e.printStackTrace(); } }else{ this.saveOrUpdate(contractPayment); changedInvoice = contractPayment.getInvoiceamount(); } //更新合同累计开票金额 updateContractTotalInvoice(contractPayment.getContractid(), changedInvoice,contractPayment.getBilltype()); //=================================================================================== //获取参数 Object id0 = contractPayment.getId(); //=================================================================================== //1.查询出数据库的明细数据-发票明细 String hql0 = "from ContractInvoiceEntity where 1 = 1 AND pAYMENTID =? "; List contractInvoiceOldList = this.findHql(hql0,id0); //变化的开票金额 double changedInvoiceAmount = 0; //2.筛选更新明细数据-发票明细 if(contractInvoiceList!=null&&contractInvoiceList.size()>0){ for(ContractInvoiceEntity oldE:contractInvoiceOldList){ boolean isUpdate = false; for(ContractInvoiceEntity sendE:contractInvoiceList){ //需要更新的明细数据-发票明细 if(oldE.getId().equals(sendE.getId())){ try { changedInvoiceAmount += sendE.getInvoiceamount() - oldE.getInvoiceamount(); MyBeanUtils.copyBeanNotNull2Bean(sendE,oldE); this.saveOrUpdate(oldE); } catch (Exception e) { e.printStackTrace(); throw new BusinessException(e.getMessage()); } isUpdate= true; break; } } if(!isUpdate){ changedInvoiceAmount += 0-oldE.getInvoiceamount(); //如果数据库存在的明细,前台没有传递过来则是删除-发票明细 super.delete(oldE); } } //3.持久化新增的数据-发票明细 for(ContractInvoiceEntity contractInvoice:contractInvoiceList){ if(oConvertUtils.isEmpty(contractInvoice.getId())){ //外键设置 contractInvoice.setPaymentid(contractPayment.getId()); changedInvoiceAmount += contractInvoice.getInvoiceamount(); this.save(contractInvoice); } } } //回写合同中累计开票金额 ContractEntity contract = getEntity(ContractEntity.class, contractPayment.getContractid()); contract.setTotalinvoice(contract.getTotalinvoice() + changedInvoiceAmount); saveOrUpdate(contract); //回写完毕 //执行更新操作配置的sql增强 this.doUpdateSql(contractPayment); } public void delMain(ContractPaymentEntity contractPayment) { //删除主表信息 this.delete(contractPayment); //=================================================================================== //获取参数 Object id0 = contractPayment.getId(); //=================================================================================== //删除-发票明细 String hql0 = "from ContractInvoiceEntity where 1 = 1 AND pAYMENTID =? "; List contractInvoiceOldList = this.findHql(hql0,id0); //回写合同中累计开票金额 switch (contractPayment.getBilltype()) { case "service": ContractEntity contract = getEntity(ContractEntity.class, contractPayment.getContractid()); double invoiceAmount = contract.getTotalinvoice(); for(ContractInvoiceEntity invoice :contractInvoiceOldList) { invoiceAmount-=invoice.getInvoiceamount(); } contract.setTotalinvoice(invoiceAmount); saveOrUpdate(contract); break; case "purchase": ContractPEntity contractp = getEntity(ContractPEntity.class, contractPayment.getContractid()); double invoiceAmountp = contractp.getTotalinvoice(); for(ContractInvoiceEntity invoice :contractInvoiceOldList) { invoiceAmountp-=invoice.getInvoiceamount(); } contractp.setTotalinvoice(invoiceAmountp); saveOrUpdate(contractp); break; default: break; } this.deleteAllEntitie(contractInvoiceOldList); } /** * 默认按钮-sql增强-新增操作 * @param id * @return */ public boolean doAddSql(ContractPaymentEntity t){ return true; } /** * 默认按钮-sql增强-更新操作 * @param id * @return */ public boolean doUpdateSql(ContractPaymentEntity t){ return true; } /** * 默认按钮-sql增强-删除操作 * @param id * @return */ public boolean doDelSql(ContractPaymentEntity t){ return true; } /** * 替换sql中的变量 * @param sql * @return */ public String replaceVal(String sql,ContractPaymentEntity t){ sql = sql.replace("#{id}",String.valueOf(t.getId())); sql = sql.replace("#{code}",String.valueOf(t.getCode())); sql = sql.replace("#{create_name}",String.valueOf(t.getCreateName())); sql = sql.replace("#{create_by}",String.valueOf(t.getCreateBy())); sql = sql.replace("#{create_date}",String.valueOf(t.getCreateDate())); sql = sql.replace("#{update_name}",String.valueOf(t.getUpdateName())); sql = sql.replace("#{update_by}",String.valueOf(t.getUpdateBy())); sql = sql.replace("#{update_date}",String.valueOf(t.getUpdateDate())); sql = sql.replace("#{bpm_status}",String.valueOf(t.getBpmStatus())); sql = sql.replace("#{contractid}",String.valueOf(t.getContractid())); sql = sql.replace("#{applypayamount}",String.valueOf(t.getApplypayamount())); sql = sql.replace("#{totalamount}",String.valueOf(t.getTotalamount())); sql = sql.replace("#{invoiceno}",String.valueOf(t.getInvoiceno())); sql = sql.replace("#{invoiceamount}",String.valueOf(t.getInvoiceamount())); sql = sql.replace("#{invoicedate}",String.valueOf(t.getInvoicedate())); sql = sql.replace("#{paytype}",String.valueOf(t.getPaytype())); sql = sql.replace("#{auditdate}",String.valueOf(t.getAuditdate())); sql = sql.replace("#{partnerid}",String.valueOf(t.getPartnerid())); sql = sql.replace("#{projectid}",String.valueOf(t.getProjectid())); sql = sql.replace("#{applyerid}",String.valueOf(t.getApplyerid())); sql = sql.replace("#{remark}",String.valueOf(t.getRemark())); sql = sql.replace("#{supplierevaluate}",String.valueOf(t.getSupplierevaluate())); sql = sql.replace("#{supplierscore}",String.valueOf(t.getSupplierscore())); sql = sql.replace("#{UUID}",UUID.randomUUID().toString()); return sql; } private void updateContractTotalInvoice(String cid,Double invoiceamount,String billtype) { String updateSql = "update t_b_contract c set c.totalinvoice = c.totalinvoice+? where c.id =? "; if(oConvertUtils.isNotEmpty(cid)) { switch (billtype) { case "service": break; case "purchase": updateSql = "update t_b_contract_p c set c.totalinvoice = c.totalinvoice+? where c.id =? "; break; default: break; } executeSql(updateSql,invoiceamount,cid); } } }