jialh
1 天以前 dd6687b118561100e1677e88a9c2f5842a54c531
service-job/src/main/java/com/java110/job/importData/adapt/ImportContractQueueDataAdapt.java
@@ -1,54 +1,74 @@
package com.java110.job.importData.adapt;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.java110.core.annotation.Java110Transactional;
import com.alibaba.fastjson.TypeReference;
import com.java110.core.factory.GenerateCodeFactory;
import com.java110.dto.contract.ContractDto;
import com.java110.dto.contract.ContractPartyaDto;
import com.java110.dto.contract.ContractTypeDto;
import com.java110.dto.community.CommunityDto;
import com.java110.dto.contract.*;
import com.java110.dto.dict.DictDto;
import com.java110.dto.importData.*;
import com.java110.dto.log.AssetImportLogDetailDto;
import com.java110.intf.store.IContractAttrInnerServiceSMO;
import com.java110.dto.oweFeeCallable.OweFeeCallableDto;
import com.java110.dto.owner.OwnerDto;
import com.java110.fee.dao.IApplyRoomDiscountServiceDao;
import com.java110.intf.community.ICommunityInnerServiceSMO;
import com.java110.intf.community.IImportOwnerRoomInnerServiceSMO;
import com.java110.intf.dev.IDictV1InnerServiceSMO;
import com.java110.intf.fee.IOweFeeCallableV1InnerServiceSMO;
import com.java110.intf.store.IContractInnerServiceSMO;
import com.java110.intf.store.IContractPartyaInnerServiceSMO;
import com.java110.intf.store.IContractTypeInnerServiceSMO;
import com.java110.intf.user.IOwnerInnerServiceSMO;
import com.java110.intf.user.IOwnerV1InnerServiceSMO;
import com.java110.job.importData.DefaultImportData;
import com.java110.job.importData.IImportDataAdapt;
import com.java110.po.contract.ContractAttrPo;
import com.java110.po.community.CommunityPo;
import com.java110.po.contract.ContractPo;
import com.java110.utils.util.*;
import com.java110.po.oweFeeCallable.OweFeeCallablePo;
import com.java110.po.owner.OwnerPo;
import com.java110.po.room.ApplyRoomDiscountPo;
import com.java110.po.room.LitigationInfoPo;
import com.java110.po.room.PayeeReceiveInfoPo;
import com.java110.utils.util.BeanConvertUtil;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * 房屋缴费信息导入 适配器
 * 房产信息导入 适配器
 * 前端请求 时 必须传入
 * param.append('importAdapt', "importRoomOwner");
 *   param.append('importAdapt', "importRoomOwner");
 */
@Service("importContractQueueData")
@Service("importContractV2QueueData")
public class ImportContractQueueDataAdapt extends DefaultImportData implements IImportDataAdapt {
    @Autowired
    protected SqlSessionTemplate sqlSessionTemplate;
    @Autowired
    private IContractInnerServiceSMO contractInnerServiceSMOImpl;
    @Autowired
    private IContractPartyaInnerServiceSMO contractPartyaInnerServiceSMOImpl;
    @Autowired
    private IContractTypeInnerServiceSMO contractTypeInnerServiceSMOImpl;
    @Autowired
    private IContractAttrInnerServiceSMO contractAttrInnerServiceSMOImpl;
    private ICommunityInnerServiceSMO communityInnerServiceSMOImpl;
    @Override
    public void importData(List<AssetImportLogDetailDto> assetImportLogDetailDtos) {
        importDatas(assetImportLogDetailDtos);
    }
        for (AssetImportLogDetailDto assetImportLogDetailDto : assetImportLogDetailDtos) {
    private void importDatas(List<AssetImportLogDetailDto> infos) {
        String state = "";
        String msg = "";
        for (AssetImportLogDetailDto assetImportLogDetailDto : infos) {
            try {
                importDatas(assetImportLogDetailDto);
                doImportData(assetImportLogDetailDto);
                updateImportLogDetailState(assetImportLogDetailDto.getDetailId());
            } catch (Exception e) {
                e.printStackTrace();
@@ -58,145 +78,69 @@
    }
    private void importDatas(AssetImportLogDetailDto assetImportLogDetailDto) {
        List<ContractPo> contractPoList = new ArrayList<>();
    /**
     * 导入数据
     *
     * @param assetImportLogDetailDto
     */
    private void doImportData(AssetImportLogDetailDto assetImportLogDetailDto) {
        JSONObject data = JSONObject.parseObject(assetImportLogDetailDto.getContent());
        ContractPo contractPo = BeanConvertUtil.covertBean(data, ContractPo.class);
        try {
            ContractPartyaDto contractPartyaDto = new ContractPartyaDto();
            contractPartyaDto.setPartyA(contractPo.getaPartyaId());
            contractPartyaDto.setCommunityId(contractPo.getCommunityId());
            contractPartyaDto.setTypeId("1");
            List<ContractPartyaDto> contractPartyaDtos = contractPartyaInnerServiceSMOImpl.queryContractPartyas(contractPartyaDto);
            if (contractPartyaDtos.size() == 1){
                contractPo.setaPartyaId(contractPartyaDtos.get(0).getPartyaId());
                contractPo.setPartyA(contractPartyaDtos.get(0).getPartyA());
            } else {
                throw new IllegalArgumentException("存在多个名为"+contractPo.getaPartyaId()+"的甲方");
        AdContractInfoDto adContractInfo = data.getObject("adContractInfo", AdContractInfoDto.class);
        ContractAmountDetailDto contractAmountDetail = data.getObject("contractAmountDetail", ContractAmountDetailDto.class);
        ContractManagementShareDto contractManagementShare = data.getObject("contractManagementShare", ContractManagementShareDto.class);
        ContractPaymentStatusDto contractPaymentStatus = data.getObject("contractPaymentStatus", ContractPaymentStatusDto.class);
        List<ContractCollectionDetailDto> contractCollectionDetail =     data.getObject("contractCollectionDetailDtos",         new TypeReference<List<ContractCollectionDetailDto>>() {});        data.remove("adContractInfo");
        data.remove("contractAmountDetail");
        data.remove("contractManagementShare");
        data.remove("contractPaymentStatus");
        ContractDto contractDto = BeanConvertUtil.covertBean(data, ContractDto.class);
//        ContractPo contractPo = BeanConvertUtil.covertBean(data, ContractPo.class);
        contractDto.setContractAmountDetail(contractAmountDetail);
        contractDto.setContractManagementShare(contractManagementShare);
        contractDto.setAdContractInfo(adContractInfo);
        contractDto.setContractPaymentStatus(contractPaymentStatus);
        contractDto.setContractCollectionDetailDtos(contractCollectionDetail);
        contractDto.setStartTime(Vtil.defaultValueToDate(contractDto.getStartTime(), "start", null));
        contractDto.setEndTime(Vtil.defaultValueToDate(contractDto.getEndTime(), "end", null));
//        int i = contractInnerServiceSMOImpl.queryContractsCount(contractDto);
//
//        if (i > 0) {
//            throw new IllegalArgumentException("重复的合同");
//        }
        if (Vtil.defaultValue(contractDto.getCommunityName()) != null) {
            CommunityDto community = new CommunityDto();
            community.setName(contractDto.getCommunityName());
            List<CommunityDto> communityDtos = communityInnerServiceSMOImpl.queryCommunitys(community);
            if (communityDtos == null || communityDtos.size() == 0) {
//            throw new IllegalArgumentException("未查询到" + community.getName() + "小区");
            }
        } catch (IllegalArgumentException e){
            throw new IllegalArgumentException("存在多个名为"+contractPo.getaPartyaId()+"的甲方");
        } catch (Exception e){
            throw new IllegalArgumentException("甲方主体不存在");
        }
        try {
            ContractPartyaDto contractPartyaDto = new ContractPartyaDto();
            contractPartyaDto.setPartyA(contractPo.getbPartyaId());
            contractPartyaDto.setCommunityId(contractPo.getCommunityId());
            contractPartyaDto.setTypeId("2");
            List<ContractPartyaDto> contractPartyaDtos = contractPartyaInnerServiceSMOImpl.queryContractPartyas(contractPartyaDto);
            if (contractPartyaDtos.size() == 1){
                contractPo.setbPartyaId(contractPartyaDtos.get(0).getPartyaId());
                contractPo.setPartyB(contractPartyaDtos.get(0).getPartyA());
            } else {
                throw new IllegalArgumentException("不存在或存在多个名为"+contractPo.getbPartyaId()+"的乙方");
            else {
                contractDto.setCommunityId(communityDtos.get(0).getCommunityId());
            }
        } catch (IllegalArgumentException e){
            throw new IllegalArgumentException("不存在或存在多个名为"+contractPo.getbPartyaId()+"的乙方");
        } catch (Exception e){
            throw new IllegalArgumentException("乙方主体不存在");
        }
        try {
            ContractPartyaDto contractPartyaDto = new ContractPartyaDto();
            contractPartyaDto.setPartyA(contractPo.getcPartyaId());
            contractPartyaDto.setCommunityId(contractPo.getCommunityId());
            contractPartyaDto.setTypeId("3");
            List<ContractPartyaDto> contractPartyaDtos = contractPartyaInnerServiceSMOImpl.queryContractPartyas(contractPartyaDto);
            if (contractPartyaDtos.size() == 1){
                contractPo.setcPartyaId(contractPartyaDtos.get(0).getPartyaId());
                contractPo.setPartyC(contractPartyaDtos.get(0).getPartyA());
            } else {
                throw new IllegalArgumentException("不存在或存在多个名为"+contractPo.getcPartyaId()+"的第三方");
        contractInnerServiceSMOImpl.saveContract(contractDto);
        sqlSessionTemplate.insert("adContractInfoDaoImpl.saveAdContractInfo", BeanConvertUtil.beanCovertMap(contractDto.getAdContractInfo()));
        sqlSessionTemplate.insert("contractAmountDetailDaoImpl.saveContractAmountDetail", BeanConvertUtil.beanCovertMap(contractDto.getContractAmountDetail()));
        sqlSessionTemplate.insert("contractManagementShareDaoImpl.saveContractManagementShare", BeanConvertUtil.beanCovertMap(contractDto.getContractManagementShare()));
        sqlSessionTemplate.insert("contractPaymentStatusDaoImpl.saveContractPaymentStatus", BeanConvertUtil.beanCovertMap(contractDto.getContractPaymentStatus()));
        if (contractDto.getContractCollectionDetailDtos() != null) {
            for (ContractCollectionDetailDto ccd : contractDto.getContractCollectionDetailDtos()){
                sqlSessionTemplate.insert("contractCollectionDetailDaoImpl.saveContractCollectionDetail", BeanConvertUtil.beanCovertMap(ccd));
            }
        } catch (NullPointerException e){
            e.printStackTrace();
        } catch (IllegalArgumentException e){
            throw new IllegalArgumentException("不存在或存在多个名为"+contractPo.getcPartyaId()+"的第三方");
        } catch (Exception e){
            throw new IllegalArgumentException("第三方主体不存在");
        }
        try {
            ContractTypeDto contractTypeDto = new ContractTypeDto();
            contractTypeDto.setCommunityId(contractPo.getCommunityId());
            contractTypeDto.setTypeName(contractPo.getContractType());
            List<ContractTypeDto> contractTypeDtos = contractTypeInnerServiceSMOImpl.queryContractTypes(contractTypeDto);
            if (contractTypeDtos.size() == 1){
                contractPo.setContractType(contractTypeDtos.get(0).getContractTypeId());
            } else {
                throw new IllegalArgumentException("不存在或存在多个名为"+contractPo.getContractType()+"的合同类型");
            }
        } catch (IllegalArgumentException e){
            throw new IllegalArgumentException("不存在或存在多个名为"+contractPo.getContractType()+"的合同类型");
        } catch (Exception e){
            throw new IllegalArgumentException("合同类型不存在");
        }
        try {
            save(contractPo);
        }catch (Exception e){
            throw new IllegalArgumentException(e);
        }
    }
    @Java110Transactional
    public String save(ContractPo contractPo) {
        //查询 合同是否需要审核
        ContractTypeDto contractTypeDto = new ContractTypeDto();
        contractTypeDto.setContractTypeId(contractPo.getContractType());
        contractTypeDto.setStoreId(contractPo.getStoreId());
        contractTypeDto.setCommunityId(contractPo.getCommunityId());
        List<ContractTypeDto> contractTypeDtos = contractTypeInnerServiceSMOImpl.queryContractTypes(contractTypeDto);
        Assert.listOnlyOne(contractTypeDtos, "查询合同类型失败");
        String audit = contractTypeDtos.get(0).getAudit();
        if (ContractTypeDto.NO_AUDIT.equals(audit)) {
            contractPo.setState("22");
        } else {
            contractPo.setState("11");
        }
        //校验合同编号是否重复
        ContractDto contractDto = new ContractDto();
        contractDto.setStoreId(contractPo.getStoreId());
        contractDto.setContractCode(contractPo.getContractCode());
        contractDto.setCommunityId(contractPo.getCommunityId());
        List<ContractDto> contractDtos = contractInnerServiceSMOImpl.queryContracts(contractDto);
        if (contractDtos != null && contractDtos.size() > 0) {
            throw new IllegalArgumentException("合同" + "[" + contractPo.getContractCode() + "]已存在");
        }
        contractPo.setContractId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_contractId));
        contractPo.setContractParentId("");
        int flag = contractInnerServiceSMOImpl.saveContract(contractPo);
        if (flag < 0) {
            throw new IllegalArgumentException("保存失败");
        }
        return  "保存成功";
    private String defaultValueToDate(Object o) {
        return o == null ? null : o.toString();
    }
    private void saveContractAttr(JSONObject jsonObject, ContractPo contractPo) {
    public String defaultValue(Object o) {
        return o == null ? "" : o.toString();
    }
        ContractAttrPo contractAttrPo = new ContractAttrPo();
        contractAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId));
        contractAttrPo.setContractId(contractPo.getContractId());
        contractAttrPo.setSpecCd(jsonObject.getString("specCd"));
        contractAttrPo.setValue(jsonObject.getString("value"));
        contractAttrPo.setStoreId(contractPo.getStoreId());
        int count = contractAttrInnerServiceSMOImpl.saveContractAttr(contractAttrPo);
        if (count < 1) {
            throw new IllegalArgumentException("保存属性失败");
        }
    public BigDecimal defaultNum(Object o) {
        return o == null ? new BigDecimal(0) : new BigDecimal(o.toString());
    }
}