From f1864f6d2d85b49fc901b22e9f6759a5d0fb360b Mon Sep 17 00:00:00 2001 From: jiangping <jp@doumee.com> Date: 星期二, 26 十一月 2024 09:33:03 +0800 Subject: [PATCH] 开发更新 --- server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java | 1035 +++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 970 insertions(+), 65 deletions(-) diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java index 40bd2b7..e8e6bbc 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java @@ -1,32 +1,38 @@ package com.doumee.service.business.impl; +import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.LoginUserInfo; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Constants; +import com.doumee.core.utils.DateCompare; +import com.doumee.core.utils.DateUtil; import com.doumee.core.utils.Utils; -import com.doumee.dao.business.YwContractMapper; -import com.doumee.dao.business.YwCustomerMapper; -import com.doumee.dao.business.YwProjectMapper; -import com.doumee.dao.business.YwRoomMapper; +import com.doumee.dao.business.*; import com.doumee.dao.business.dao.CompanyMapper; -import com.doumee.dao.business.model.Company; -import com.doumee.dao.business.model.YwContract; +import com.doumee.dao.business.model.*; +import com.doumee.dao.system.MultifileMapper; import com.doumee.dao.system.SystemUserMapper; +import com.doumee.dao.system.model.Multifile; +import com.doumee.dao.system.model.SystemUser; import com.doumee.service.business.YwContractService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import org.apache.commons.lang3.StringUtils; +import org.checkerframework.checker.units.qual.C; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; -import java.util.Date; -import java.util.List; +import java.math.BigDecimal; +import java.time.temporal.ChronoUnit; +import java.util.*; /** * 杩愮淮鍚堝悓淇℃伅琛⊿ervice瀹炵幇 @@ -39,6 +45,14 @@ @Autowired private YwContractMapper ywContractMapper; @Autowired + private YwContractDetailMapper ywContractDetailMapper; + @Autowired + private YwContractBillMapper ywContractBillMapper; + @Autowired + private MultifileMapper multifileMapper; + @Autowired + private YwWorkorderLogMapper ywWorkorderLogMapper; + @Autowired private CompanyMapper companyMapper; @Autowired private YwProjectMapper projectMapper; @@ -48,32 +62,816 @@ private SystemUserMapper systemUserMapper; @Autowired private YwCustomerMapper customerMapper; + @Autowired + private MemberMapper memberMapper; + @Autowired + private SystemDictDataBiz systemDictDataBiz; @Override @Transactional(rollbackFor = {BusinessException.class,Exception.class}) public Integer create(YwContract model) { isParamValidCreated(model); - model.setCreator(model.getLoginUserInfo().getId()); model.setIsdeleted(Constants.ZERO); model.setCreateDate(new Date()); model.setStatus(Constants.ZERO); model.setEditDate(model.getCreateDate()); model.setEditor(model.getCreator()); - + model.setStatus(Constants.ZERO);//寰呮墽琛� + model.setRemark(getRemarlByParam(model)); ywContractMapper.insert(model); - + dealDetailListBiz(model);//澶勭悊鏉℃淇℃伅 + dealMultifileBiz(model);//澶勭悊闄勪欢淇℃伅 + dealLogBiz(model,Constants.YwLogType.CONTRACT_CREATE,null,null);//璁板綍鏂板缓鏃ュ織 return model.getId(); } - private void isParamValidCreated(YwContract model) { - if(model.getCompanyId()==null){ - throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝璇烽�夋嫨姝g‘鐨勫叕鍙镐俊鎭�"); + private String getRemarlByParam(YwContract model) { + + String str = ""; + YwContractDetail zl = model.getZlDetailList()!=null&&model.getZlDetailList().size()>0?model.getZlDetailList().get(0):null; + YwContractDetail yw = model.getWyDetailList()!=null&&model.getWyDetailList().size()>0?model.getWyDetailList().get(0):null; + //璧风鏃�2024/06/01锛岀璧佹暟涓�500銕°�傞鏈熺璧佷笁鏈堜竴浠橈紝绉熼噾鍗曚环35鍏�/銕÷锋湀銆傞鏈熺墿涓氫笁鏈堜竴浠橈紝鐗╀笟鍗曚环4.3鍏�/銕÷锋湀 + String str0 = "鍚堝悓鎽樿锛氳捣绉熸棩{param1}锛岀璧佹暟涓簕param2}銕°�傞鏈熺璧亄param3}锛岀閲戝崟浠穥param4}鍏儃param5}銆傞鏈熺墿涓歿param6}锛岀墿涓氬崟浠穥param7}{param8}"; + String str1 = "鍚堝悓鎽樿锛氳捣绉熸棩{param1}锛岀璧佹暟涓簕param2}銕°�傞鏈熺璧亄param3}锛岀閲戝崟浠穥param4}鍏儃param5}銆�"; + String str2 = "鍚堝悓鎽樿锛氳捣绉熸棩{param1}锛岄鏈熺墿涓歿param6}锛岀墿涓氬崟浠穥param7}鍏儃param8}"; + if(Constants.equalsInteger(model.getType(),Constants.ZERO)){ + str= str0; } - Company ywProject = companyMapper.selectById(model.getCompanyId()); - if(ywProject ==null || Constants.equalsInteger(ywProject.getIsdeleted(),Constants.ONE) - || !Constants.equalsInteger(ywProject.getType(),Constants.TWO)){ + if(Constants.equalsInteger(model.getType(),Constants.ONE)){ + str= str1; + } + if(Constants.equalsInteger(model.getType(),Constants.TWO)){ + str= str2; + } + str = str.replace("{param1}",DateUtil.getDateLongSlash(model.getStartDate())) + .replace("{param2}",model.getTotalArea().intValue()+"") + .replace("{param3}",getPayTypeByNum(model.getZlPayType())) + .replace("{param4}",zl!=null&&zl.getPrice()!=null?(zl.getPrice().intValue()+""):"0") + .replace("{param5}",getPayTypeByNum(model.getWyPayType())) + .replace("{param6}",getUnitTypeByNum(zl)) + .replace("{param7}",zl!=null&&yw.getPrice()!=null?(zl.getPrice().intValue()+""):"0") + .replace("{param8}",getUnitTypeByNum(yw)); + return str; + } + private String getbackRentRemarkByParam(YwContract model) { + BigDecimal fee = Constants.formatBigdecimal(model.getBtFee()); + String str = "閫�绉熸憳瑕侊細鍓╀綑鏈粨娓呰处鍗晎param1}浠斤紝鍏抽棴璐﹀崟{param2}浠姐�愰��绉熸棩{param3}锛岄��绉熻垂鐢ㄥ悎璁¢渶{param4}{param5}鍏冦�傘��"; + str = str.replace("{param1}",model.getBtWaitBill()+"") + .replace("{param2}",DateUtil.getDateLongSlash(model.getBtDate())) + .replace("{param3}",fee.compareTo(new BigDecimal(0)) >=0?"鏀�":"浠�") + .replace("{param4}",(fee.compareTo(new BigDecimal(0)) >=0? + Constants.formatBigdecimal(model.getBtFee()).intValue() + :(Constants.formatBigdecimal(model.getBtFee()).intValue() * -1))+"" ); + return str; + } + + private CharSequence getUnitTypeByNum(YwContractDetail zl) { + if(zl==null){ + return ""; + } + // 浠樻鍛ㄦ湡绫诲瀷 0=鍏冩瘡骞崇背澶╋紱1=鍏冩瘡骞崇背鏈堬紱2=鍏冩瘡骞崇背骞达紱3=鍏冩瘡澶╋紱4=鍏冩瘡鏈堬紱5=鍏冩瘡骞达紱6=鍏冩瘡鍦猴紱 + int zlPayType = Constants.formatIntegerNum(zl.getCircleType()); + if(zlPayType == 1){ + return "鍏�/銕÷锋湀"; + }else if(zlPayType == 2){ + return "鍏�/銕÷峰ぉ"; + }else if(zlPayType == 3){ + return "鍏�/澶�"; + }else if(zlPayType == 4){ + return "鍏�/鏈�"; + }else if(zlPayType == 5){ + return "鍏�/骞�"; + }else if(zlPayType == 6){ + return "鍏�/鍦�"; + } + return "鍏�/銕÷峰ぉ"; + } + + private CharSequence getPayTypeByNum(Integer zlPayType) { + //绉熻祦鏀粯鏂瑰紡 0=涓�娆℃�т粯娆撅紱1=姣忎笁涓湀涓�浠橈紱2=鍏釜鏈堜竴浠橈紱3=涓�骞翠竴浠� + if(zlPayType == 1){ + return "3涓湀涓�浠�"; + }else if(zlPayType == 2){ + return "6涓湀涓�浠�"; + }else if(zlPayType == 3){ + return "1骞翠竴浠�"; + } + return "涓�娆℃�т粯娆�"; + } + + + /** + * 閫�绉熸彁浜� + * @param param + * @return + */ + @Override + @Transactional(rollbackFor = {BusinessException.class,Exception.class}) + public Integer backRent(YwContract param){ + isParamValidBackRent(param); + param.setEditDate(new Date()); + param.setEditor(param.getLoginUserInfo().getId()); + //澶勭悊 + dealBackRentBillBiz(param); + YwContract update = new YwContract(); + update.setEditDate(new Date()); + update.setEditor(param.getLoginUserInfo().getId()); + update.setBtActDate(update.getEditDate()); + update.setBtActUserId(update.getEditor()); + update.setStatus(Constants.THREE); + update.setBtInfo(param.getBtInfo()); + update.setBtDate(param.getBtDate()); + update.setBtType(param.getBtType()); + update.setBtUserId(param.getBtUserId()); + update.setBtFee(param.getBtFee()); + update.setBtRemark(getbackRentRemarkByParam(param)); + ywContractMapper.updateById(update); + dealLogBiz(param,Constants.YwLogType.CONTRACT_BACK,null,null); + return param.getId(); + } + + private void dealBackRentBillBiz(YwContract param) { + //鏌ヨ鍚堝悓鍏ㄩ儴璐﹀崟淇℃伅 + List<YwContractBill> closeBills = new ArrayList<>();//甯﹀叧闂� + List<YwContractBill> newBills = new ArrayList<>();//鏂扮殑璐﹀崟 + List<YwContractBill> noBills = new ArrayList<>();//涓嶉渶瑕佺粨绠楃殑璐﹀崟 + List<YwContractBill> yjBills = new ArrayList<>();//鎶奸噾璐﹀崟 + List<YwContractBill> canBills = new ArrayList<>();//鍙��绉熶慨鏀规暟鎹� + List<YwContractBill> allBills = ywContractBillMapper.selectList(new QueryWrapper<YwContractBill>(). + select("*," + + "( select ifnull(sum(yw.ACT_RECEIVABLE_FEE),0) from yw_contract_revenue yw where yw.bill_id = yw_contract_bill.id and yw.status = 0 and yw.isdeleted = 0 ) as actReceivableFee " ) + .lambda(). + eq(YwContractBill::getIsdeleted,Constants.ZERO) + .eq(YwContractBill::getContractId,param.getId())); + if(allBills!=null && allBills.size()>0){ + for(YwContractBill bill: allBills){ + //浠樻鐘舵�侊細0=寰呮敹娆撅紱1=宸茬粨娓咃紱2=閮ㄥ垎缁撴竻锛�3=寰呬粯娆撅紱4=寰呴��娆撅紱5=宸插叧闂� + // 濡傛灉鏄娂閲戞垨鑰呬繚璇侀噾锛屼笉鏀寔閫�娆撅紝淇濇寔鍘熸潵鐨勭姸鎬侊紝 0=绉熻祦璐癸紱1=鐗╀笟璐癸紱2=绉熻祦鎶奸噾锛�3=鐗╀笟鎶奸噾锛�4=姘寸數璐癸紱5=鏉傞」璐癸紱6=鍏朵粬;7=淇濊瘉閲� + if(Constants.equalsInteger(Constants.THREE,bill.getCostType()) + || Constants.equalsInteger(Constants.FOUR,bill.getCostType()) + ||Constants.equalsInteger(Constants.SEVEN,bill.getCostType())){ + //鎶奸噾鍜屼繚璇侀噾 + yjBills.add(bill); + continue; + } + if(Constants.equalsInteger(bill.getPayStatus(),Constants.ZERO) + ||Constants.equalsInteger(bill.getPayStatus(),Constants.THREE)){ + if(bill.getStartDate().getTime()>param.getEditDate().getTime()){ + //濡傛灉杩樻病寮�濮嬶紝璐﹀崟鐩存帴鍏抽棴 + closeBills.add(bill); + noBills.add(bill); + }else{ + canBills.add(bill); + } + }else if(Constants.equalsInteger(bill.getPayStatus(),Constants.ONE) ){ + if(bill.getEndDate().getTime()<param.getEditDate().getTime()){ + //濡傛灉宸茬粨娓咃紝璐﹀崟鐩存帴鍏抽棴 + noBills.add(bill); + }else{ + canBills.add(bill); + } + }else if(Constants.equalsInteger(bill.getPayStatus(),Constants.TWO) ){ + canBills.add(bill); + } + } + } + if(closeBills.size()>0){ + //鐩存帴鍏抽棴鍏抽棴璐﹀崟 + for(YwContractBill b : closeBills){ + b.setStatus(Constants.ONE); + b.setEditDate(param.getEditDate()); + b.setEditor(param.getEditor()); + //鍏抽棴璁㈠崟 + ywContractBillMapper.updateById(b); + } + } + int yjNoBills =0; + if(yjBills.size()>0){ + // 濡傛灉鏄娂閲戞垨鑰呬繚璇侀噾锛屼笉鏀寔閫�娆撅紝淇濇寔鍘熸潵鐨勭姸鎬侊紝 0=绉熻祦璐癸紱1=鐗╀笟璐癸紱2=绉熻祦鎶奸噾锛�3=鐗╀笟鎶奸噾锛�4=姘寸數璐癸紱5=鏉傞」璐癸紱6=鍏朵粬;7=淇濊瘉閲� + for(YwContractBill bill : yjBills){ + if(!Constants.equalsInteger(bill.getPayStatus(),Constants.ONE) ){ + //濡傛灉鏄湭缁撴竻鎶奸噾 + yjNoBills ++; + } + } + } + BigDecimal totalBackFee = new BigDecimal(0); + if(canBills.size()>0){ + //鐩存帴鍏抽棴鍏抽棴璐﹀崟 + for(YwContractBill b : canBills){ + BigDecimal fee = new BigDecimal(0); + YwContractBill editBill = getEditBillFromListByParam(b,param.getCanBackRentBills()); + if(editBill != null){ + //浠樻鐘舵�侊細0=寰呮敹娆撅紱1=宸茬粨娓咃紱2=閮ㄥ垎缁撴竻锛�3=寰呬粯娆撅紱4=寰呴��娆撅紱5=宸插叧闂� + //濡傛灉璐﹀崟淇℃伅鍋氫簡缂栬緫锛岄噾棰濊绠� 瀹炴敹閲戦 鍜� 淇敼鍚庡簲鏀堕噾棰濅綔瀵规瘮锛屽垽鏂槸鍚﹀簲璇ラ��娆� + fee = Constants.formatBigdecimal(b.getActReceivableFee()).subtract(editBill.getReceivableFee()); + if(fee.compareTo(new BigDecimal(0))== 0){ + //濡傛灉璐圭敤姝eソ锛屽垯淇敼璐﹀崟淇℃伅涓哄凡缁撴竻 + b.setStatus(Constants.ONE); + }else if(fee.compareTo(new BigDecimal(0))> 0){ + //濡傛灉闇�瑕佽繘琛岄��娆撅紝鏇存柊璐﹀崟淇℃伅涓哄緟閫�娆� + b.setStatus(Constants.FOUR); + }else if(fee.compareTo(new BigDecimal(0)) < 0){ + //濡傛灉璐﹀崟杩樻湁娆惧緟鏀讹紝鍒欎繚鎸佺姸鎬佷笉鍙� + } + } + b.setEditDate(param.getEditDate()); + b.setEditor(param.getEditor()); + b.setBtActDate(param.getBtActDate()); + b.setBtDate(param.getBtDate()); + b.setBtFee(fee); + b.setBtInfo(param.getBtInfo()); + b.setBtUserId(param.getBtUserId()); + b.setBtSignDate(param.getBtSignDate()); + b.setBtType(param.getBtType()); + //鍏抽棴璁㈠崟 + ywContractBillMapper.updateById(b); + totalBackFee = totalBackFee.add(fee);//绱閫�娆鹃噾棰� + } + } + if(param.getAddBillList()!=null && param.getAddBillList().size()>0){ + for(YwContractBill addBill : param.getAddBillList()){ + addBill.setIsdeleted(Constants.ZERO); + addBill.setContractId(param.getId()); + addBill.setType(Constants.ONE); + addBill.setStatus(Constants.ZERO); + if(Constants.equalsInteger(addBill.getBillType(),Constants.ZERO)){ + //濡傛灉鏄敹娆� + totalBackFee = totalBackFee.add(Constants.formatBigdecimal(addBill.getActReceivableFee())); + addBill.setPayStatus(Constants.ZERO); + addBill.setBtFee(Constants.formatBigdecimal(addBill.getActReceivableFee())); + }else{ + //濡傛灉鏄粯娆� + addBill.setPayStatus(Constants.THREE); + addBill.setBtFee(Constants.formatBigdecimal(addBill.getActReceivableFee()).multiply(new BigDecimal(-1))); + } + totalBackFee = totalBackFee.add(Constants.formatBigdecimal(addBill.getBtFee())); + addBill.setEditDate(param.getEditDate()); + addBill.setEditor(param.getEditor()); + addBill.setBtActDate(param.getBtActDate()); + addBill.setBtDate(param.getBtDate()); + addBill.setBtInfo(param.getBtInfo()); + addBill.setBtUserId(param.getBtUserId()); + addBill.setBtSignDate(param.getBtSignDate()); + addBill.setBtType(param.getBtType()); + newBills.add(addBill); + } + ywContractBillMapper.insert(param.getAddBillList());//鎵归噺鎻掑叆鏁版嵁 + } + param.setBtWaitBill(canBills.size() + newBills.size()+yjNoBills);//鏈竻绠楃殑璐﹀崟鏁伴噺 + param.setBtCLoseBill(closeBills.size()); + param.setBtFee(totalBackFee); + } + + private YwContractBill getEditBillFromListByParam(YwContractBill b, List<YwContractBill> canBackRentBills) { + for(YwContractBill d : canBackRentBills){ + if(Constants.equalsInteger(b.getId(),d.getId())){ + return d; + } + } + return null; + } + + private void isParamValidBackRent(YwContract param) { + if(param.getId()==null + || param.getBtType() == null + || param.getBtDate() == null + || param.getBtUserId() == null + || param.getBtSignDate() == null + ||StringUtils.isBlank( param.getBtInfo())){ + throw new BusinessException(ResponseStatus.BAD_REQUEST); + } + YwContract model = ywContractMapper.selectById(param.getId()); + if(model==null || Constants.equalsInteger(model.getIsdeleted(),Constants.ONE)){ + throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝鍚堝悓淇℃伅涓嶅瓨鍦紝璇疯繑鍥炲垪琛ㄥ埛鏂伴噸璇曪紒"); + } + + SystemUser user = systemUserMapper.selectById(param.getUserId()); + if(user ==null || (user.getDeleted()!=null&& user.getDeleted() )){ + throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝缁忓姙浜轰俊鎭笉瀛樺湪锛�"); + } + if(param.getAddBillList()!=null && param.getAddBillList().size()>0){ + for(YwContractBill bill: param.getAddBillList()){ + if(bill.getCostType() == null + ||bill.getFeeType() == null + ||bill.getReceivableFee() == null + ||bill.getReceivableFee().compareTo(new BigDecimal(0)) < 1 + ||bill.getCompanyId() == null + ||bill.getPlanPayDate() == null + ||bill.getBillType() == null + ||(Constants.equalsInteger(bill.getBillType(),Constants.ZERO) + &&Constants.equalsInteger(bill.getFeeType(),Constants.ZERO) + && (bill.getStartDate() ==null || bill.getEndDate() ==null) )){ + throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇锋寜瑕佹眰濉啓鑷缓璐﹀崟淇℃伅锛�"); + } + } + } + } + + private void dealDetailListBiz(YwContract model) { + List<YwContractDetail> details = new ArrayList<>(); + int num = 0; + if(Constants.equalsInteger(model.getType(),Constants.ZERO ) + || Constants.equalsInteger(model.getType(),Constants.ONE)){ + for(YwContractDetail d :model.getZlDetailList()){ + d.setCreateDate(model.getEditDate()); + d.setCreator(model.getEditor()); + d.setIsdeleted(Constants.ZERO); + d.setContractId(model.getId()); + d.setType(Constants.ZERO); + d.setSortnum(num++); + d.setStatus(Constants.ZERO); + details.add(d); + } + } + num = 0; + if(Constants.equalsInteger(model.getType(),Constants.ZERO ) + || Constants.equalsInteger(model.getType(),Constants.TWO)){ + for(YwContractDetail d :model.getWyDetailList()){ + d.setCreateDate(model.getEditDate()); + d.setCreator(model.getEditor()); + d.setIsdeleted(Constants.ZERO); + d.setType(Constants.ONE); + d.setContractId(model.getId()); + d.setSortnum(num++); + d.setStatus(Constants.ZERO); + details.add(d); + } + } + ywContractDetailMapper.insert(details);//鎵归噺鎻掑叆鏉℃淇℃伅淇℃伅 + //澶勭悊璐﹀崟淇℃伅 + dealBillListBiz(model,details); + } + + /** + * 鏀粯鏂瑰紡 0=涓�娆℃�т粯娆撅紱1=姣忎笁涓湀涓�浠橈紱2=鍏釜鏈堜竴浠橈紱3=涓�骞翠竴浠� + * @param model + * @param details + */ + private void dealBillListBiz(YwContract model, List<YwContractDetail> details) { + List<YwContractBill> billList = new ArrayList<>(); + if(Constants.equalsInteger(model.getType(),Constants.ZERO ) + || Constants.equalsInteger(model.getType(),Constants.ONE)){ + //濡傛灉鏈夌璧佹潯娆� + if(Constants.formatBigdecimal(model.getZlDeposit()).compareTo(new BigDecimal(0))>0){ + //濡傛灉鏈夌璧佹娂閲� + billList.add(initDepoistBill(Constants.THREE,model)); + } + if(Constants.equalsInteger(model.getZlPayType(), Constants.ZERO)){ + //濡傛灉鏄竴娆℃�т粯娓� + billList.addAll(getBillsByParamOnce(model,details,model.getZlFreeStartDate(),model.getZlFreeEndDate())); + }else if(Constants.equalsInteger(model.getZlPayType(), Constants.ONE)){ + //濡傛灉姣忎笁涓湀涓�浠� + billList.addAll(getBillsByParam3Months(model,details,model.getZlFreeStartDate(),model.getZlFreeEndDate())); + }else if(Constants.equalsInteger(model.getZlPayType(), Constants.TWO)){ + //濡傛灉鍏釜鏈堜竴浠� + billList.addAll(getBillsByParam6Months(model,details,model.getZlFreeStartDate(),model.getZlFreeEndDate())); + }else if(Constants.equalsInteger(model.getZlPayType(), Constants.THREE)){ + //濡傛灉涓�骞翠竴浠� + billList.addAll(getBillsByParam1Year(model,details,model.getZlFreeStartDate(),model.getZlFreeEndDate())); + } + } + if(Constants.equalsInteger(model.getType(),Constants.ZERO ) + || Constants.equalsInteger(model.getType(),Constants.TWO)){ + //濡傛灉鐗╀笟鏉℃ + if(Constants.formatBigdecimal(model.getWyDeposit()).compareTo(new BigDecimal(0))>0){ + //濡傛灉鏈夌璧佹娂閲� + billList.add(initDepoistBill(Constants.FOUR,model)); + } + if(Constants.equalsInteger(model.getWyPayType(), Constants.ZERO)){ + //濡傛灉鏄竴娆℃�т粯娓� + billList.addAll(getBillsByParamOnce(model,details,model.getWyFreeStartDate(),model.getWyFreeEndDate())); + }else if(Constants.equalsInteger(model.getWyPayType(), Constants.ONE)){ + //濡傛灉姣忎笁涓湀涓�浠� + billList.addAll(getBillsByParam3Months(model,details,model.getWyFreeStartDate(),model.getWyFreeEndDate())); + }else if(Constants.equalsInteger(model.getWyPayType(), Constants.TWO)){ + //濡傛灉鍏釜鏈堜竴浠� + billList.addAll(getBillsByParam6Months(model,details,model.getWyFreeStartDate(),model.getWyFreeEndDate())); + }else if(Constants.equalsInteger(model.getWyPayType(), Constants.THREE)){ + //濡傛灉涓�骞翠竴浠� + billList.addAll(getBillsByParam1Year(model,details,model.getWyFreeStartDate(),model.getWyFreeEndDate())); + } + } + for(int i=0;i<billList.size();i++){ + billList.get(i).setSortnum(i+1); + } + ywContractBillMapper.insert(billList); + + } + + private YwContractBill initDepoistBill(int type, YwContract model) { + YwContractBill bill = new YwContractBill(); + bill.setCreateDate(model.getEditDate()); + bill.setCreator(model.getEditor()); + bill.setEditDate(model.getEditDate()); + bill.setEditor(model.getEditor()); + bill.setIsdeleted(Constants.ZERO); + bill.setContractId(model.getId()); + bill.setStatus(Constants.ZERO); + bill.setStartDate(model.getStartDate()); + bill.setEndDate(model.getEndDate()); + bill.setType(Constants.ZERO); + bill.setCostType(type); + bill.setTotleFee(type==Constants.THREE?model.getZlDeposit():model.getWyDeposit());//鎶奸噾璐圭敤 + bill.setSortnum(0); + return bill; + } + + /** + * 濡傛灉3涓湀涓�浠� + * 浠樻鍛ㄦ湡绫诲瀷 0=鍏冩瘡骞崇背澶╋紱1=鍏冩瘡骞崇背鏈堬紱2=鍏冩瘡骞崇背骞达紱3=鍏冩瘡澶╋紱4=鍏冩瘡鏈堬紱5=鍏冩瘡骞达紱6=鍏冩瘡鍦猴紱" + * @param model + * @param details + * @return + */ + private Collection<? extends YwContractBill> getBillsByParam6Months(YwContract model, List<YwContractDetail> details, Date freeStart, Date freeEnd) { + List<YwContractBill> list = new ArrayList<>(); + for(YwContractDetail d : details){ + List<Date> dateList = getCircleDatesBy6Month(d.getStartDate(),d.getEndDate()); + if(dateList.size() ==0){ + continue; + } + dealCircleDateBillBiz(dateList,model,d,freeStart,freeEnd,list); + } + return list; + } + /** + * 濡傛灉3涓湀涓�浠� + * 浠樻鍛ㄦ湡绫诲瀷 0=鍏冩瘡骞崇背澶╋紱1=鍏冩瘡骞崇背鏈堬紱2=鍏冩瘡骞崇背骞达紱3=鍏冩瘡澶╋紱4=鍏冩瘡鏈堬紱5=鍏冩瘡骞达紱6=鍏冩瘡鍦猴紱" + * @param model + * @param details + * @return + */ + private Collection<? extends YwContractBill> getBillsByParam3Months(YwContract model, List<YwContractDetail> details, Date freeStart, Date freeEnd) { + List<YwContractBill> list = new ArrayList<>(); + for(YwContractDetail d : details){ + List<Date> dateList = getCircleDatesBy3Month(d.getStartDate(),d.getEndDate()); + if(dateList.size() ==0){ + continue; + } + dealCircleDateBillBiz(dateList,model,d,freeStart,freeEnd,list); + } + return list; + } + + private List<Date> getCircleDatesBy6Month(Date startDate, Date endDate) { + DateCompare dateCompare = DateCompare.monthYearCompare(startDate, endDate ); + int months = dateCompare.getMonth(); + int monthSix = months / 6;//6涓湀缁村害鏁伴噺 + int restMonth = months % 6;//鍓╀綑鐨勬暣鏈� + int monthDays = dateCompare.getMonthDays();//涓嶆弧涓�涓湀鐨勫ぉ鏁� + Date date = new Date(); + List<Date> list = new ArrayList<>(); + for (int i = 0; i < monthSix; i++) { + list.add(DateUtil.addMonthToDate(date,i*6)); + } + if(restMonth>0 || monthDays>0){ + list.add(DateUtil.addDaysToDate(date,monthSix)); + } + return list; + } + private List<Date> getCircleDatesBy3Month(Date startDate, Date endDate) { + DateCompare dateCompare = DateCompare.monthYearCompare(startDate, endDate ); + int months = dateCompare.getMonth(); + int monthThree = months / 3;//3涓湀缁村害鏁伴噺 + int restMonth = months % 3;//鍓╀綑鐨勬暣鏈� + int monthDays = dateCompare.getMonthDays();//涓嶆弧涓�涓湀鐨勫ぉ鏁� + Date date = new Date(); + List<Date> list = new ArrayList<>(); + for (int i = 0; i < monthThree; i++) { + list.add(DateUtil.addMonthToDate(date,i*3)); + } + if(restMonth>0 || monthDays>0){ + list.add(DateUtil.addDaysToDate(date,monthThree)); + } + return list; + } + + /** + * 濡傛灉涓�骞翠竴浠� + * 浠樻鍛ㄦ湡绫诲瀷 0=鍏冩瘡骞崇背澶╋紱1=鍏冩瘡骞崇背鏈堬紱2=鍏冩瘡骞崇背骞达紱3=鍏冩瘡澶╋紱4=鍏冩瘡鏈堬紱5=鍏冩瘡骞达紱6=鍏冩瘡鍦猴紱" + * @param model + * @param details + * @return + */ + private List<YwContractBill> getBillsByParam1Year(YwContract model, List<YwContractDetail> details,Date freeStart,Date freeEnd) { + List<YwContractBill> list = new ArrayList<>(); + for(YwContractDetail d : details){ + List<Date> dateList = getCircleDatesByYear(d.getStartDate(),d.getEndDate()); + if(dateList.size() ==0){ + continue; + } + dealCircleDateBillBiz(dateList,model,d,freeStart,freeEnd,list); + } + return list; + } + + private void dealCircleDateBillBiz( List<Date> dateList ,YwContract model, YwContractDetail d, Date freeStart, Date freeEnd, List<YwContractBill> list ) { + for(Date start : dateList){ + Date end = DateUtil.addDaysToDate(DateUtil.addYearToDate(start,1),-1);//缁撴潫鏃ユ湡涓轰笅涓�涓懆鏈熺殑鍓嶄竴澶� + if(end.getTime()> d.getEndDate().getTime() ){ + end = d.getEndDate(); + } + YwContractBill bill = initCreateBillModel(model,d ); + bill.setStartDate(start);//璐﹀崟寮�濮� + bill.setEndDate(end);//璐﹀崟缁撴潫 + bill.setPlanPayDate(DateUtil.addDaysToDate(d.getStartDate(),Constants.formatIntegerNum(d.getAdvanceDays()) * -1)); + BigDecimal totalFee =getTotalFeeByStartEnd(model,d,freeStart,freeEnd); + bill.setTotleFee(totalFee); + + list.add(bill); + } + } + + + + private BigDecimal getTotalFeeByStartEnd(YwContract model, YwContractDetail d,Date freeStart,Date freeEnd) { + BigDecimal totalFee = new BigDecimal(0); + DateCompare dateCompare = DateCompare.dayCompare(d.getStartDate(),d.getEndDate(),freeStart,freeEnd); + if(Constants.equalsInteger(d.getCircleType(),Constants.ZERO)){ + //0=鍏冩瘡骞崇背澶� + int days = dateCompare.getDay(); + BigDecimal areas = getAreasNumBYRooms(model.getRoomList()); + totalFee = new BigDecimal(days).multiply(areas).multiply(Constants.formatBigdecimal(d.getPrice()));//鎬讳环鏍� + }else if(Constants.equalsInteger(d.getCircleType(),Constants.ONE)){ + //1=鍏冩瘡骞崇背鏈� + BigDecimal areas = getAreasNumBYRooms(model.getRoomList()); + BigDecimal month =dateCompare.getMonthFloat(); + totalFee = month.multiply(areas).multiply(Constants.formatBigdecimal(d.getPrice()));//鎬讳环鏍� + }else if(Constants.equalsInteger(d.getCircleType(),Constants.TWO)){ + //2=鍏冩瘡骞崇背骞� + BigDecimal areas = getAreasNumBYRooms(model.getRoomList()); + BigDecimal year = dateCompare.getYearFloat(); + totalFee = year.multiply(areas).multiply(Constants.formatBigdecimal(d.getPrice()));//鎬讳环鏍� + }else if(Constants.equalsInteger(d.getCircleType(),Constants.THREE)){ + //3=鍏冩瘡澶� + int days = dateCompare.getDay(); + totalFee = new BigDecimal(days).multiply(Constants.formatBigdecimal(d.getPrice()));//鎬讳环鏍� + }else if(Constants.equalsInteger(d.getCircleType(),Constants.FOUR)){ + //4=鍏冩瘡鏈� + BigDecimal month = dateCompare.getMonthFloat(); + totalFee = month.multiply(Constants.formatBigdecimal(d.getPrice()));//鎬讳环鏍� + }else if(Constants.equalsInteger(d.getCircleType(),Constants.FIVE)){ + //5=鍏冩瘡骞� + BigDecimal year = dateCompare.getYearFloat(); + totalFee = year.multiply(Constants.formatBigdecimal(d.getPrice()));//鎬讳环鏍� + }else if(Constants.equalsInteger(d.getCircleType(),Constants.SIX)){ + //6=鍏冩瘡鍦� + totalFee =Constants.formatBigdecimal(d.getPrice()); + } + if(Constants.equalsInteger(model.getRoundedUp(),Constants.ONE)){ + //濡傛灉寮哄埗鍙栨暣 + totalFee = Constants.formatBigdecimal0Float(totalFee); + }else{ + //鍥涜垗浜斿叆涓や綅灏忔暟 + totalFee = Constants.formatBigdecimal2Float(totalFee); + } + return totalFee; + } + + private List<Date> getCircleDatesByYear(Date startDate, Date endDate ) { + DateCompare dateCompare = DateCompare.monthYearCompare(startDate, endDate ); + int years = dateCompare.getYear(); + int yeardays = dateCompare.getYearDays(); + Date date = new Date(); + List<Date> list = new ArrayList<>(); + for (int i = 0; i < years; i++) { + list.add(DateUtil.addYearToDate(date,i)); + } + if(yeardays>0){ + list.add(DateUtil.addYearToDate(date,years)); + } + return list; + } + + /** + * 涓�娆℃�т粯娆捐处鍗� + * 浠樻鍛ㄦ湡绫诲瀷 0=鍏冩瘡骞崇背澶╋紱1=鍏冩瘡骞崇背鏈堬紱2=鍏冩瘡骞崇背骞达紱3=鍏冩瘡澶╋紱4=鍏冩瘡鏈堬紱5=鍏冩瘡骞达紱6=鍏冩瘡鍦猴紱" + * @param model + * @param details + * @return + */ + private List<YwContractBill> getBillsByParamOnce(YwContract model, List<YwContractDetail> details,Date freeStart,Date freeEnd) { + List<YwContractBill> list = new ArrayList<>(); + for(YwContractDetail d : details){ + YwContractBill bill = initCreateBillModel(model,d); + bill.setStartDate(d.getStartDate());//璐﹀崟寮�濮� + bill.setEndDate(d.getEndDate());//璐﹀崟缁撴潫 + bill.setPlanPayDate(DateUtil.addDaysToDate(d.getStartDate(),Constants.formatIntegerNum(d.getAdvanceDays()) * -1)); + bill.setTotleFee(getTotalFeeByStartEnd(model,d,freeStart,freeEnd)); + list.add(bill); + } + return list; + + } + + private YwContractBill initCreateBillModel(YwContract model,YwContractDetail d) { + YwContractBill bill = new YwContractBill(); + bill.setCreateDate(model.getEditDate()); + bill.setCreator(model.getEditor()); + bill.setEditDate(model.getEditDate()); + bill.setEditor(model.getEditor()); + bill.setIsdeleted(Constants.ZERO); + bill.setContractId(model.getId()); + bill.setStatus(Constants.ZERO); + bill.setDetailId(d.getId()); + bill.setCostType(d.getType()); + bill.setType(Constants.ZERO); + return bill; + } + + + private BigDecimal getAreasNumBYRooms(List<YwRoom> roomList) { + BigDecimal data= new BigDecimal(0); + for(YwRoom r :roomList){ + data = data.add(Constants.formatBigdecimal(r.getArea())); + } + return data; + } + + private void initFiles(YwContract model) { + List<Multifile> multifiles = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda() + .eq(Multifile::getObjId, model.getId() ) + .in(Multifile::getObjType, Arrays.asList(new Integer[]{Constants.MultiFile.YW_CONTRACT_FILE.getKey()})) + .eq(Multifile::getIsdeleted,Constants.ZERO)); + if(multifiles!=null){ + String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode() + +systemDictDataBiz.queryByCode(Constants.FTP,Constants.YW_CONTRACT_FILE).getCode(); + for(Multifile f : multifiles){ + if(StringUtils.isBlank(f.getFileurl())){ + continue; + } + f.setFileurlFull(path+f.getFileurl()); + //鐜板満鎯呭喌 + if(model.getFileList() == null){ + model.setFileList(new ArrayList<>()); + } + model.getFileList().add(f); + + } + } + } + + + private void dealMultifileBiz(YwContract model) { + List<Multifile> fileList = new ArrayList<>(); + if(model.getFileList()!=null && model.getFileList().size()>0){ + for (int i = 0; i < model.getFileList().size(); i++) { + Multifile multifile = model.getFileList().get(i); + if(StringUtils.isBlank(multifile.getFileurl())){ + continue; + } + multifile.setCreateDate(model.getEditDate()); + multifile.setCreator(model.getEditor()); + multifile.setIsdeleted(Constants.ZERO); + multifile.setObjId(model.getId()); + multifile.setCreator(model.getCreator()); + multifile.setObjType(Constants.MultiFile.YW_CONTRACT_FILE.getKey()); + multifile.setSortnum(i+1); + fileList.add(multifile); + } + } + if(fileList.size()>0){ + multifileMapper.insert(fileList); + } + + } + + private void isParamValidCreated(YwContract model) { + if(model.getType()==null || model.getType()>2 || model.getType()<0 + ||model.getUserId() == null + ||model.getStartDate() == null + ||model.getEndDate() == null + ||model.getSignDate() == null + ||model.getProjectId() == null + ||model.getCompanyId() == null + ||model.getRoundedUp() == null + ||model.getRenterId() == null + ||model.getMemberId() == null + ||model.getRoomIds() == null + ||model.getRoomIds().size() == 0 + ){ + throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇锋寜椤甸潰瑕佹眰濉啓鍚堝悓淇℃伅"); + } + if(model.getEndDate().getTime()<= model.getStartDate().getTime()){ + + throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝鍚堝悓鏈夋晥鏈熺粨鏉熸椂闂翠笉寰楁棭浜庡紑濮嬫椂闂达紒"); + } + + if(Constants.equalsInteger(model.getType(),Constants.ZERO ) + || Constants.equalsInteger(model.getType(),Constants.ONE)){ + if( model.getZlDeposit() == null + ||model.getZlPayType() == null + || model.getZlPayType()>3 + || model.getZlPayType()<0 + ||model.getZlDetailList()==null + ||model.getZlDetailList().size() ==0){ + throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇锋寜椤甸潰瑕佹眰濉啓绉熻祦鏉℃淇℃伅"); + } + if(!(model.getZlFreeEndDate()==null && model.getZlFreeStartDate()==null) && ( + (model.getZlFreeEndDate()!=null && model.getZlFreeStartDate()==null) + ||(model.getZlFreeEndDate()==null && model.getZlFreeStartDate()!=null) + ||model.getZlFreeEndDate().getTime()<= model.getZlFreeStartDate().getTime()) + ){ + throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇烽�夋嫨姝g‘鐨勭璧佹潯娆惧厤绉熸湡淇℃伅锛�"); + } + for(YwContractDetail d :model.getZlDetailList()){ + if( d.getStartDate() == null + ||d.getEndDate() == null + ||d.getPrice() == null + ||d.getCircleType() == null + || d.getCircleType()>6 + || d.getCircleType()<0 + ){ + throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇锋寜椤甸潰瑕佹眰濉啓绉熻祦鏉℃淇℃伅!"); + } + if(d.getEndDate().getTime()<= d.getStartDate().getTime()){ + + throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绉熻祦鏉℃鏈夋晥鏈熺粨鏉熸椂闂翠笉寰楁棭浜庡紑濮嬫椂闂达紒"); + } + if(!Constants.equalsInteger(model.getWyPayType(),Constants.ZERO) && + Constants.equalsInteger(d.getCircleType(),Constants.SIX)){ + throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绉熻祦鏉℃鍙湁閫夋嫨涓�娆℃�т粯娆炬椂锛屾墠鑳介�夋嫨璇ユ寜姣忓満鏀惰垂锛�"); + } + } + } + if(Constants.equalsInteger(model.getType(),Constants.ZERO ) + || Constants.equalsInteger(model.getType(),Constants.TWO)){ + if( model.getWyDeposit() == null + ||model.getWyPayType() == null + || model.getWyPayType()>3 + || model.getWyPayType()<0 + ||model.getWyDetailList()==null + ||model.getWyDetailList().size() ==0 + ){ + throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇锋寜椤甸潰瑕佹眰濉啓鐗╀笟鏉℃淇℃伅"); + } + if(!(model.getWyFreeEndDate()==null && model.getWyFreeStartDate()==null) && ( + (model.getWyFreeEndDate()!=null && model.getWyFreeStartDate()==null) + ||(model.getWyFreeEndDate()==null && model.getWyFreeStartDate()!=null) + ||model.getWyFreeEndDate().getTime()<= model.getWyFreeStartDate().getTime())){ + throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇烽�夋嫨姝g‘鐨勭墿涓氭潯娆惧厤绉熸湡淇℃伅锛�"); + } + for(YwContractDetail d :model.getWyDetailList()){ + if( d.getStartDate() == null + ||d.getEditDate() == null + ||d.getPrice() == null + ||d.getCircleType() == null + || d.getCircleType()>6 + || d.getCircleType()<0 + ){ + throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇锋寜椤甸潰瑕佹眰濉啓鐗╀笟鏉℃淇℃伅!"); + } + if(d.getEndDate().getTime()<= d.getStartDate().getTime()){ + throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝鐗╀笟鏉℃鏈夋晥鏈熺粨鏉熸椂闂翠笉寰楁棭浜庡紑濮嬫椂闂达紒"); + } + if(!Constants.equalsInteger(model.getWyPayType(),Constants.ZERO) && + Constants.equalsInteger(d.getCircleType(),Constants.SIX)){ + throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝鐗╀笟鏉℃鍙湁閫夋嫨涓�娆℃�т粯娆炬椂锛屾墠鑳介�夋嫨璇ユ寜姣忓満鏀惰垂锛�"); + } + } + } + + YwProject project = projectMapper.selectById(model.getCompanyId()); + if(project ==null || Constants.equalsInteger(project.getIsdeleted(),Constants.ONE)){ + throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝璇烽�夋嫨姝g‘鐨勯」鐩俊鎭紒"); + } + List<YwRoom> rooms = roomMapper.selectList(new QueryWrapper<YwRoom>().lambda() + .eq(YwRoom::getIsdeleted,Constants.ZERO) + .in(YwRoom::getId,model.getRoomIds()) + .eq(YwRoom::getProjectId,model.getProjectId()) ); + if(rooms ==null || rooms.size()==0){ + throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇烽�夋嫨瀵瑰簲椤圭洰涓嬫纭殑鎴挎簮淇℃伅"); + } + if(rooms.size() != rooms.size()){ + throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝瀛樺湪鏃犳晥鐨勬埧婧愪俊鎭紒"); + } + model.setTotalArea(new BigDecimal(0)); + for(YwRoom r : rooms){ + model.setTotalArea(model.getTotalArea().add(Constants.formatBigdecimal(r.getArea()))); + } + YwCustomer customer = customerMapper.selectById(model.getRenterId()); + if(customer ==null || Constants.equalsInteger(customer.getIsdeleted(),Constants.ONE)){ + throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝閫夋嫨绉熷淇℃伅涓嶅瓨鍦紝璇疯繑鍥炲埛鏂伴噸璇曪紒"); + } + Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda() + .eq(Member::getIsdeleted,Constants.ZERO) + .eq(Member::getType,Constants.THREE) + .eq(Member::getCustomerId,model.getRenterId()) + .eq(Member::getId,model.getMemberId()) + .last("limit 1")); + if(member ==null ){ + throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝閫夋嫨绉熷鑱旂郴浜轰俊鎭笉瀛樺湪锛岃杩斿洖鍒锋柊閲嶈瘯锛�"); + } + Company company = companyMapper.selectById(model.getCompanyId()); + if(company ==null || Constants.equalsInteger(company.getIsdeleted(),Constants.ONE) + || !Constants.equalsInteger(company.getType(),Constants.TWO)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝璇烽�夋嫨姝g‘鐨勫叕鍙镐俊鎭紒"); + } + SystemUser user = systemUserMapper.selectById(model.getUserId()); + if(user ==null || (user.getDeleted()!=null && user.getDeleted()) ){ + throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝缁忓姙浜轰俊鎭笉瀛樺湪锛岃灏濊瘯鍒锋柊椤甸潰閲嶈瘯锛�"); } } @@ -111,10 +909,113 @@ this.updateById(ywContract); } } - + private void dealLogBiz(YwContract model,Constants.YwLogType type,String param1,String param2) { + YwWorkorderLog log = new YwWorkorderLog(); + log.setCreateDate(model.getEditDate()); + log.setCreator(model.getCreator()); + log.setJobId(model.getId()); + log.setIsdeleted(Constants.ZERO); + log.setObjId(model.getId()+""); + log.setObjType(type.getKey()); + log.setParam1(param1); + log.setParam2(param2); + log.setTitle(type.getNoteinfo()); + ywWorkorderLogMapper.insert(log); + } @Override public YwContract findById(Integer id) { - return ywContractMapper.selectById(id); + MPJLambdaWrapper<YwContract> queryWrapper = new MPJLambdaWrapper<>(); + queryWrapper.selectAll(YwContract.class ) + .selectAs(Company::getName,YwContract::getCompanyName ) + .selectAs(SystemUser::getRealname,YwContract::getUserName ) + .selectAs(YwCustomer::getName,YwContract::getRenterName ) + .selectAs(YwProject::getName,YwContract::getProjectName ) + .select("t4.realname",YwContract::getCreatorName ) + .leftJoin(Company.class,Company::getId,YwContract::getCompanyId) + .leftJoin(SystemUser.class,SystemUser::getId,YwContract::getUserId) + .leftJoin(SystemUser.class,SystemUser::getId,YwContract::getCreator) + .leftJoin(YwProject.class,YwProject::getId,YwContract::getProjectId) + .leftJoin(YwCustomer.class,YwCustomer::getId,YwContract::getRenterId); + YwContract model = ywContractMapper.selectJoinOne(YwContract.class,queryWrapper); + if(model != null){ + //鍚堝悓闄勪欢 + initFiles(model); + //鏌ヨ鎴挎簮淇℃伅鏁版嵁 + MPJLambdaWrapper<YwRoom> rw = new MPJLambdaWrapper<>(); + rw.selectAll(YwRoom.class ) + .selectAs(YwProject::getName,YwRoom::getProjectName) + .selectAs(YwFloor::getName,YwRoom::getFloorName) + .selectAs(YwBuilding::getName,YwRoom::getBuildingName) + .leftJoin(YwProject.class,YwProject::getId,YwRoom::getProjectId) + .leftJoin(YwBuilding.class,YwBuilding::getId,YwRoom::getBuildingId) + .leftJoin(YwFloor.class,YwFloor::getId,YwRoom::getFloor) + .eq(YwRoom::getIsdeleted,Constants.ZERO) + .exists("(select a.id from yw_contract_room a where a.isdeleted=1 and a.room_id=t.id and a.contract_id="+model.getId()+")"); + model.setRoomList(roomMapper.selectJoinList(YwRoom.class,rw)); + + //鏌ヨ绉熻硟鏉℃淇℃伅 + MPJLambdaWrapper<YwContractDetail> dw = new MPJLambdaWrapper<>(); + dw.selectAll(YwContractDetail.class ) + .eq(YwContractDetail::getIsdeleted,Constants.ZERO) + .eq(YwContractDetail::getContractId,model.getId()) + .in(YwContractDetail::getType,Constants.ZERO,Constants.TWO) + .orderByAsc(YwContractDetail::getSortnum); + model.setZlDetailList(ywContractDetailMapper.selectJoinList(YwContractDetail.class,dw)); + //鏌ヨ鐗╂キ鏉℃淇℃伅 + dw = new MPJLambdaWrapper<>(); + dw.selectAll(YwContractDetail.class ) + .eq(YwContractDetail::getIsdeleted,Constants.ZERO) + .eq(YwContractDetail::getContractId,model.getId()) + .in(YwContractDetail::getType,Constants.ONE,Constants.THREE) + .orderByAsc(YwContractDetail::getSortnum); + model.setWyDetailList(ywContractDetailMapper.selectJoinList(YwContractDetail.class,dw)); + + //鏌ヨ鎿嶄綔鏃ュ織璁板綍 + YwWorkorderLog log = new YwWorkorderLog(); + log.setJobId(model.getId()); + log.setIsdeleted(Constants.ZERO); + model.setLogList(ywWorkorderLogMapper.selectList(new QueryWrapper<YwWorkorderLog>(log) + .lambda() + .in(YwWorkorderLog::getObjType,Constants.YwLogType.CONTRACT_BACK.getKey() + ,Constants.YwLogType.CONTRACT_CREATE.getKey() + ,Constants.YwLogType.CONTRACT_UPDATE.getKey()) + .orderByAsc(YwWorkorderLog::getCreateDate))); + + //鏌ヨ璐﹀崟闆嗗悎 + model.setBillList(ywContractBillMapper.selectJoinList(YwContractBill.class,new MPJLambdaWrapper<YwContractBill>() + .selectAll(YwContractBill.class ) + .eq( YwContractBill::getContractId,model.getId()) + .eq(YwContractBill::getIsdeleted,Constants.ZERO) + .orderByAsc(YwContractBill::getSortnum,YwContractBill::getCreateDate))); + model.setCanBackRentBills(new ArrayList<>()); + long nowStart = Utils.Date.getStart(new Date()).getTime(); + long nowEnd = Utils.Date.getEnd(new Date()).getTime(); + if(model.getBillList()!=null && model.getBillList().size()>0){ + for(YwContractBill bill: model.getBillList()){ + //浠樻鐘舵�侊細0=寰呮敹娆撅紱1=宸茬粨娓咃紱2=閮ㄥ垎缁撴竻锛�3=寰呬粯娆撅紱4=寰呴��娆撅紱5=宸插叧闂� + if(Constants.equalsInteger(bill.getPayStatus(),Constants.ZERO) + ||Constants.equalsInteger(bill.getPayStatus(),Constants.THREE)){ + if(bill.getStartDate().getTime()>nowEnd){ + //濡傛灉杩樻病寮�濮嬶紝璐﹀崟鐩存帴鍏抽棴 + continue; + } + model.getCanBackRentBills().add(bill); + + }else if(Constants.equalsInteger(bill.getPayStatus(),Constants.ONE) ){ + if(bill.getEndDate().getTime()<nowStart){ + //濡傛灉宸茬粨娓咃紝璐﹀崟鐩存帴鍏抽棴 + continue; + } + model.getCanBackRentBills().add(bill); + }else if(Constants.equalsInteger(bill.getPayStatus(),Constants.TWO) ){ + model.getCanBackRentBills().add(bill); + } + } + } + + } + + return model; } @Override @@ -132,112 +1033,116 @@ @Override public PageData<YwContract> findPage(PageWrap<YwContract> pageWrap) { IPage<YwContract> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); - QueryWrapper<YwContract> queryWrapper = new QueryWrapper<>(); + MPJLambdaWrapper<YwContract> queryWrapper = new MPJLambdaWrapper<>(); + queryWrapper.selectAll(YwContract.class ) + .selectAs(Company::getName,YwContract::getCompanyName ) + .select("(select sum(r.area) from yw_contract_room cr left join yw_room r on r.id = cr.room_id where r.isdeleted=0 and cr.contract_id =t.id)",YwContract::getTotalArea ) + .leftJoin(Company.class,Company::getId,YwContract::getCompanyId); Utils.MP.blankToNull(pageWrap.getModel()); if (pageWrap.getModel().getId() != null) { - queryWrapper.lambda().eq(YwContract::getId, pageWrap.getModel().getId()); + queryWrapper.eq(YwContract::getId, pageWrap.getModel().getId()); } if (pageWrap.getModel().getCreator() != null) { - queryWrapper.lambda().eq(YwContract::getCreator, pageWrap.getModel().getCreator()); + queryWrapper.eq(YwContract::getCreator, pageWrap.getModel().getCreator()); } if (pageWrap.getModel().getCreateDate() != null) { - queryWrapper.lambda().ge(YwContract::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate())); - queryWrapper.lambda().le(YwContract::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate())); + queryWrapper.ge(YwContract::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate())); + queryWrapper.le(YwContract::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate())); } if (pageWrap.getModel().getEditor() != null) { - queryWrapper.lambda().eq(YwContract::getEditor, pageWrap.getModel().getEditor()); + queryWrapper.eq(YwContract::getEditor, pageWrap.getModel().getEditor()); } if (pageWrap.getModel().getEditDate() != null) { - queryWrapper.lambda().ge(YwContract::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate())); - queryWrapper.lambda().le(YwContract::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate())); + queryWrapper.ge(YwContract::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate())); + queryWrapper.le(YwContract::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate())); } if (pageWrap.getModel().getIsdeleted() != null) { - queryWrapper.lambda().eq(YwContract::getIsdeleted, pageWrap.getModel().getIsdeleted()); + queryWrapper.eq(YwContract::getIsdeleted, pageWrap.getModel().getIsdeleted()); } if (pageWrap.getModel().getRemark() != null) { - queryWrapper.lambda().eq(YwContract::getRemark, pageWrap.getModel().getRemark()); + queryWrapper.eq(YwContract::getRemark, pageWrap.getModel().getRemark()); } if (pageWrap.getModel().getStatus() != null) { - queryWrapper.lambda().eq(YwContract::getStatus, pageWrap.getModel().getStatus()); + queryWrapper.eq(YwContract::getStatus, pageWrap.getModel().getStatus()); } if (pageWrap.getModel().getType() != null) { - queryWrapper.lambda().eq(YwContract::getType, pageWrap.getModel().getType()); + queryWrapper.eq(YwContract::getType, pageWrap.getModel().getType()); } if (pageWrap.getModel().getCode() != null) { - queryWrapper.lambda().eq(YwContract::getCode, pageWrap.getModel().getCode()); + queryWrapper.eq(YwContract::getCode, pageWrap.getModel().getCode()); } if (pageWrap.getModel().getUserId() != null) { - queryWrapper.lambda().eq(YwContract::getUserId, pageWrap.getModel().getUserId()); + queryWrapper.eq(YwContract::getUserId, pageWrap.getModel().getUserId()); } if (pageWrap.getModel().getSignDate() != null) { - queryWrapper.lambda().ge(YwContract::getSignDate, Utils.Date.getStart(pageWrap.getModel().getSignDate())); - queryWrapper.lambda().le(YwContract::getSignDate, Utils.Date.getEnd(pageWrap.getModel().getSignDate())); + queryWrapper.ge(YwContract::getSignDate, Utils.Date.getStart(pageWrap.getModel().getSignDate())); + queryWrapper.le(YwContract::getSignDate, Utils.Date.getEnd(pageWrap.getModel().getSignDate())); } if (pageWrap.getModel().getStartDate() != null) { - queryWrapper.lambda().ge(YwContract::getStartDate, Utils.Date.getStart(pageWrap.getModel().getStartDate())); - queryWrapper.lambda().le(YwContract::getStartDate, Utils.Date.getEnd(pageWrap.getModel().getStartDate())); + queryWrapper.ge(YwContract::getStartDate, Utils.Date.getStart(pageWrap.getModel().getStartDate())); + queryWrapper.le(YwContract::getStartDate, Utils.Date.getEnd(pageWrap.getModel().getStartDate())); } if (pageWrap.getModel().getEndDate() != null) { - queryWrapper.lambda().ge(YwContract::getEndDate, Utils.Date.getStart(pageWrap.getModel().getEndDate())); - queryWrapper.lambda().le(YwContract::getEndDate, Utils.Date.getEnd(pageWrap.getModel().getEndDate())); + queryWrapper.ge(YwContract::getEndDate, Utils.Date.getStart(pageWrap.getModel().getEndDate())); + queryWrapper.le(YwContract::getEndDate, Utils.Date.getEnd(pageWrap.getModel().getEndDate())); } if (pageWrap.getModel().getProjectId() != null) { - queryWrapper.lambda().eq(YwContract::getProjectId, pageWrap.getModel().getProjectId()); + queryWrapper.eq(YwContract::getProjectId, pageWrap.getModel().getProjectId()); } if (pageWrap.getModel().getRoundedUp() != null) { - queryWrapper.lambda().eq(YwContract::getRoundedUp, pageWrap.getModel().getRoundedUp()); + queryWrapper.eq(YwContract::getRoundedUp, pageWrap.getModel().getRoundedUp()); } if (pageWrap.getModel().getCompanyId() != null) { - queryWrapper.lambda().eq(YwContract::getCompanyId, pageWrap.getModel().getCompanyId()); + queryWrapper.eq(YwContract::getCompanyId, pageWrap.getModel().getCompanyId()); } + if (pageWrap.getModel().getRenterId() != null) { - queryWrapper.lambda().eq(YwContract::getRenterId, pageWrap.getModel().getRenterId()); + queryWrapper.eq(YwContract::getRenterId, pageWrap.getModel().getRenterId()); } if (pageWrap.getModel().getMemberId() != null) { - queryWrapper.lambda().eq(YwContract::getMemberId, pageWrap.getModel().getMemberId()); + queryWrapper.eq(YwContract::getMemberId, pageWrap.getModel().getMemberId()); } if (pageWrap.getModel().getZlDeposit() != null) { - queryWrapper.lambda().eq(YwContract::getZlDeposit, pageWrap.getModel().getZlDeposit()); + queryWrapper.eq(YwContract::getZlDeposit, pageWrap.getModel().getZlDeposit()); } if (pageWrap.getModel().getZlPayType() != null) { - queryWrapper.lambda().eq(YwContract::getZlPayType, pageWrap.getModel().getZlPayType()); + queryWrapper.eq(YwContract::getZlPayType, pageWrap.getModel().getZlPayType()); } if (pageWrap.getModel().getZlFreeStartDate() != null) { - queryWrapper.lambda().ge(YwContract::getZlFreeStartDate, Utils.Date.getStart(pageWrap.getModel().getZlFreeStartDate())); - queryWrapper.lambda().le(YwContract::getZlFreeStartDate, Utils.Date.getEnd(pageWrap.getModel().getZlFreeStartDate())); + queryWrapper.ge(YwContract::getZlFreeStartDate, Utils.Date.getStart(pageWrap.getModel().getZlFreeStartDate())); + queryWrapper.le(YwContract::getZlFreeStartDate, Utils.Date.getEnd(pageWrap.getModel().getZlFreeStartDate())); } if (pageWrap.getModel().getZlFreeEndDate() != null) { - queryWrapper.lambda().ge(YwContract::getZlFreeEndDate, Utils.Date.getStart(pageWrap.getModel().getZlFreeEndDate())); - queryWrapper.lambda().le(YwContract::getZlFreeEndDate, Utils.Date.getEnd(pageWrap.getModel().getZlFreeEndDate())); + queryWrapper.ge(YwContract::getZlFreeEndDate, Utils.Date.getStart(pageWrap.getModel().getZlFreeEndDate())); + queryWrapper.le(YwContract::getZlFreeEndDate, Utils.Date.getEnd(pageWrap.getModel().getZlFreeEndDate())); } if (pageWrap.getModel().getWyDeposit() != null) { - queryWrapper.lambda().eq(YwContract::getWyDeposit, pageWrap.getModel().getWyDeposit()); + queryWrapper.eq(YwContract::getWyDeposit, pageWrap.getModel().getWyDeposit()); } if (pageWrap.getModel().getWyPayType() != null) { - queryWrapper.lambda().eq(YwContract::getWyPayType, pageWrap.getModel().getWyPayType()); + queryWrapper.eq(YwContract::getWyPayType, pageWrap.getModel().getWyPayType()); } if (pageWrap.getModel().getWyFreeStartDate() != null) { - queryWrapper.lambda().ge(YwContract::getWyFreeStartDate, Utils.Date.getStart(pageWrap.getModel().getWyFreeStartDate())); - queryWrapper.lambda().le(YwContract::getWyFreeStartDate, Utils.Date.getEnd(pageWrap.getModel().getWyFreeStartDate())); + queryWrapper.ge(YwContract::getWyFreeStartDate, Utils.Date.getStart(pageWrap.getModel().getWyFreeStartDate())); + queryWrapper.le(YwContract::getWyFreeStartDate, Utils.Date.getEnd(pageWrap.getModel().getWyFreeStartDate())); } if (pageWrap.getModel().getWyFreeEndDate() != null) { - queryWrapper.lambda().ge(YwContract::getWyFreeEndDate, Utils.Date.getStart(pageWrap.getModel().getWyFreeEndDate())); - queryWrapper.lambda().le(YwContract::getWyFreeEndDate, Utils.Date.getEnd(pageWrap.getModel().getWyFreeEndDate())); + queryWrapper.ge(YwContract::getWyFreeEndDate, Utils.Date.getStart(pageWrap.getModel().getWyFreeEndDate())); + queryWrapper.le(YwContract::getWyFreeEndDate, Utils.Date.getEnd(pageWrap.getModel().getWyFreeEndDate())); } if (pageWrap.getModel().getZlTotalFee() != null) { - queryWrapper.lambda().eq(YwContract::getZlTotalFee, pageWrap.getModel().getZlTotalFee()); + queryWrapper.eq(YwContract::getZlTotalFee, pageWrap.getModel().getZlTotalFee()); } if (pageWrap.getModel().getWyTotalFee() != null) { - queryWrapper.lambda().eq(YwContract::getWyTotalFee, pageWrap.getModel().getWyTotalFee()); + queryWrapper.eq(YwContract::getWyTotalFee, pageWrap.getModel().getWyTotalFee()); } - for(PageWrap.SortData sortData: pageWrap.getSorts()) { - if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { - queryWrapper.orderByDesc(sortData.getProperty()); - } else { - queryWrapper.orderByAsc(sortData.getProperty()); - } + if (pageWrap.getModel().getCompanyName() != null) { + queryWrapper.like(Company::getName, pageWrap.getModel().getCompanyName()); } - return PageData.from(ywContractMapper.selectPage(page, queryWrapper)); + queryWrapper.ge(Objects.nonNull(pageWrap.getModel().getQueryStartTime()), YwContract::getStartDate, pageWrap.getModel().getQueryStartTime()) + .le(Objects.nonNull(pageWrap.getModel().getQueryEndTime()), YwContract::getEndDate, pageWrap.getModel().getQueryEndTime()); + queryWrapper.orderByDesc(YwContract::getCreateDate ); + return PageData.from(ywContractMapper.selectJoinPage(page, YwContract.class,queryWrapper)); } @Override -- Gitblit v1.9.3