接口面对多个第三方系统,分布式锁-Controller层

星瀚API2.0完整模型展示三层架构,客户批量新增OR修改

Controller层(batch_save(保存),batch_change(批量更改),query(批量查询))

package com.gjt.main.ext.cloud.bamp.webapi.controller;

import com.alibaba.fastjson.JSON;
import com.gjt.main.ext.cloud.bamp.webapi.handler.CustomerHandler;
import com.gjt.main.ext.cloud.bamp.webapi.model.request.ChangeRequestCustomerModel;
import com.gjt.main.ext.cloud.bamp.webapi.model.request.QueryRequestCustomerModel;
import com.gjt.main.ext.cloud.bamp.webapi.model.request.SaveRequestCustomerEntryBankModel;
import com.gjt.main.ext.cloud.bamp.webapi.model.request.SaveRequestCustomerModel;
import com.gjt.main.ext.cloud.bamp.webapi.model.response.ChangeResponseCustomerModel;
import com.gjt.main.ext.cloud.bamp.webapi.model.response.QueryResponseCustomerModel;
import com.gjt.main.ext.cloud.bamp.webapi.model.response.SaveResponseCustomerModel;
import com.gjt.main.ext.common.constants.SourceTypeConstant;
import com.gjt.main.ext.common.utils.OpenAPILogUtil;
import dm.jdbc.util.StringUtil;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dlock.DLock;
import kd.bos.dlock.DLockInfo;
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
import kd.bos.openapi.common.constant.ApiErrorCode;
import kd.bos.openapi.common.custom.annotation.*;
import kd.bos.openapi.common.result.CustomApiResult;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.validation.annotation.Validated;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.lang.reflect.Field;
//import java.util.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 自定义API-客户
 * @author jinchunxiang
 */
@ApiController(value = "bd_customer", desc = "客户")
@ApiMapping(value = "bd_customer")
public class CustomerController implements Serializable {

    private final static Log logger = LogFactory.getLog(CustomerController.class);

    private static final String CUSTOMER = "bd_customer";


    /**
     *
     * @param customerModel
     * @param companyOrgDynamicObject
     * @param groupDynamicObject
     * @param userDynamicObject
     * @param countryDynamicObject
     * @param currencyDynamicObject
     * @param
     * @return
     * @throws Exception
     */
    private SaveResponseCustomerModel.DataEntity validateModel(SaveRequestCustomerModel customerModel, DynamicObject companyOrgDynamicObject, DynamicObject groupDynamicObject, DynamicObject userDynamicObject, DynamicObject countryDynamicObject, DynamicObject admindivisionDynamicObject, DynamicObject currencyDynamicObject,Map<String, DynamicObject> bankNumberMap,Map<String, DynamicObject> currencyMap) throws Exception {
        SaveResponseCustomerModel.DataEntity result = null;
        long valibegin = System.currentTimeMillis();
        // 验证来源类型
        boolean validSourceType = false;
        for (Field field : SourceTypeConstant.class.getFields()) {
            if (StringUtils.equals(field.get(null).toString(), customerModel.getSourcetype())) {
                validSourceType = true;
                break;
            }
        }
        if (!validSourceType) {
            result = CustomerHandler.buildSaveDataEntity(false, null,null, customerModel.getSourcetype(),customerModel.getSourcenumber() , "来源类型编码不合法!");
        }
        long valiend = System.currentTimeMillis();
        if(logger.isInfoEnabled()){
            logger.info("验证来源耗时==>"+(valiend - valibegin) + "ms");
        }

        long typeBegin = System.currentTimeMillis();
        //校验伙伴类型是否为空
        if(StringUtil.isEmpty(customerModel.getType())){
            result = CustomerHandler.buildSaveDataEntity(false, null,null, customerModel.getSourcetype(),customerModel.getSourcenumber() , "伙伴类型类型不能为空!");
        }

        //校验伙伴类型为个人的时候
        if(null == result && StringUtils.equals("4",customerModel.getType())){
            if(null == result && null ==customerModel.getBizpartnerPhone()){
                result = CustomerHandler.buildSaveDataEntity(false, null,null, customerModel.getSourcetype(),customerModel.getSourcenumber() , "伙伴类型类型为个人,则联系电话为必录!");
            }
            if(null !=customerModel.getSocietycreditcode() && !customerModel.getSocietycreditcode().isEmpty()){//社会信用代码不等于空时判断统一社会信用代码和手机号是否一致不一致则返回
                if(!StringUtils.equals(customerModel.getSocietycreditcode(),customerModel.getBizpartnerPhone())){
                    result = CustomerHandler.buildSaveDataEntity(false, null,null, customerModel.getSourcetype(),customerModel.getSourcenumber() , "伙伴类型类型为个人,则传入的统一社会信用代码需和联系电话保持一致!");
                }
            }
        }
        long typeEnd = System.currentTimeMillis();
        if(logger.isInfoEnabled()){
            logger.info("验证伙伴类型耗时==>"+(typeEnd - typeBegin) + "ms");
        }
        // 验证内部业务编码
//        if (null == result && null == companyOrgDynamicObject) {
//            result = CustomerHandler.buildSaveDataEntity(false, null,null, customerModel.getSourcetype(),customerModel.getSourcenumber(),  "内部业务编码不合法!");
//        }

//        // 验证创建组织编码
//        if (null == result && null == createOrgDynamicObjet) {
//            result = CustomerHandler.buildSaveDataEntity(false, null,null, customerModel.getSourcetype(),customerModel.getSourcenumber() , "创建组织编码不合法!");
//        }
//        // 验证管理组织编码
//        if (null == result && null == adminOrgObject) {
//                result = CustomerHandler.buildSaveDataEntity(false, null,null, customerModel.getSourcetype(),customerModel.getSourcenumber(), "管理adminorg编码不合法!");
//        }
//        // 验证管理组织编码
//        if (null == result && null == orgDynamicObject) {
//            result = CustomerHandler.buildSaveDataEntity(false, null,null, customerModel.getSourcetype(),customerModel.getSourcenumber(),  "管理org编码不合法!");
//        }
//
//        // 验证业务组织编码
//        if (null == result && null == useOrgDynamicObjet) {
//            result = CustomerHandler.buildSaveDataEntity(false, null,null, customerModel.getSourcetype(),customerModel.getSourcenumber(),  "业务组织编码不合法!");
//        }

        long groupBegin = System.currentTimeMillis();

        // 验证客户分类编码
        if (null == result && null == groupDynamicObject) {
            result = CustomerHandler.buildSaveDataEntity(false, null,null, customerModel.getSourcetype(),customerModel.getSourcenumber(),  "客户分类编码不合法!");
        }
        long groupend = System.currentTimeMillis();
        if(logger.isInfoEnabled()){
            logger.info("验证客户分类耗时==>"+(groupend - groupBegin) + "ms");
        }

        long userbegin = System.currentTimeMillis();
        // 验证人员编码
        if (null == result && null == userDynamicObject) {
            result = CustomerHandler.buildSaveDataEntity(false, null,null, customerModel.getSourcetype(),customerModel.getSourcenumber(),  "人员编码不合法!");
        }
        long userEed = System.currentTimeMillis();
        if(logger.isInfoEnabled()){
            logger.info("验证人员编码耗时==>"+(userEed - userbegin) + "ms");
        }

//        // 客户分类标准
//        if (null == result && null == standardDynamicObject) {
//            result = CustomerHandler.buildSaveDataEntity(false, null,null, customerModel.getSourcetype(),customerModel.getSourcenumber(),  "客户分类表标准编码不合法!");
//        }
        long counbegin = System.currentTimeMillis();
        //国家地区
        if(StringUtils.isNotBlank(customerModel.getCountry())){
            if (null == result && null == countryDynamicObject) {
                result = CustomerHandler.buildSaveDataEntity(false, null,null, customerModel.getSourcetype(),customerModel.getSourcenumber(),  "国家地区编码不合法!");
            }
        }
        long counend = System.currentTimeMillis();
        if(logger.isInfoEnabled()){
            logger.info("验证国家地区耗时==>"+(counend - counbegin) + "ms");
        }

        long curbegin = System.currentTimeMillis();
        //币别
        if(StringUtils.isNotBlank(customerModel.getCuregcapital())) {
            if (null == result && null == currencyDynamicObject) {
                result = CustomerHandler.buildSaveDataEntity(false, null, null, customerModel.getSourcetype(), customerModel.getSourcenumber(), "币别编码不合法!");
            }
        }
        long curend = System.currentTimeMillis();
        if(logger.isInfoEnabled()){
            logger.info("验证币别耗时==>"+(curend - curbegin) + "ms");
        }
        long adminbegin = System.currentTimeMillis();
        //行政区划
        if(StringUtils.isNotBlank(customerModel.getAdmindivision())) {
            if (null == result && null == admindivisionDynamicObject) {
                result = CustomerHandler.buildSaveDataEntity(false, null, null, customerModel.getSourcetype(), customerModel.getSourcenumber(), "行政区划不合法!");
            }
        }
        long adminend = System.currentTimeMillis();
        if(logger.isInfoEnabled()){
            logger.info("验证行政区域耗时==>"+(adminend - adminbegin) + "ms");
        }
        // 统一社会信用代码必录
//        if (null == result && null == customerModel.getSocietycreditcode()) {
//            result = CustomerHandler.buildSaveDataEntity(false, null,null, customerModel.getSourcetype(),customerModel.getSourcenumber(), "统一社会信用代码不能为空!");
//        }

        long  entrybegin = System.currentTimeMillis();
        if(customerModel.getEntryBank().size()>0 && customerModel.getEntryBank() !=null){//当银行传入了值的时候添加强制性校验
            List<SaveRequestCustomerEntryBankModel> entryBankList =  customerModel.getEntryBank();
            for(SaveRequestCustomerEntryBankModel entryBankModel :entryBankList){
                if(null == result && StringUtils.isEmpty(entryBankModel.getBank())){//开户银行
                    result = CustomerHandler.buildSaveDataEntity(false, null, null, customerModel.getSourcetype(), customerModel.getSourcenumber(), "开户银行不能为空!");
                }else{
                    if(null == result && null== bankNumberMap.get(entryBankModel.getBank())){
                        result = CustomerHandler.buildSaveDataEntity(false, null, null, customerModel.getSourcetype(), customerModel.getSourcenumber(), "开户银行编码不正确!");

                    }
                }
                if(null == result && StringUtils.isEmpty(entryBankModel.getCurrency())){//币别
                    result = CustomerHandler.buildSaveDataEntity(false, null, null, customerModel.getSourcetype(), customerModel.getSourcenumber(), "银行币别不能为空!");
                }else{
                    if(null == result && null== currencyMap.get(entryBankModel.getCurrency())){
                        result = CustomerHandler.buildSaveDataEntity(false, null, null, customerModel.getSourcetype(), customerModel.getSourcenumber(), "银行币别不正确!");

                    }
                }
                if(null == result && StringUtils.isEmpty(entryBankModel.getBankaccount())){//银行账号
                    result = CustomerHandler.buildSaveDataEntity(false, null, null, customerModel.getSourcetype(), customerModel.getSourcenumber(), "银行账号不能为空!");
                }
                if(null == result && StringUtils.isEmpty(entryBankModel.getAccountname())){
                    result = CustomerHandler.buildSaveDataEntity(false, null, null, customerModel.getSourcetype(), customerModel.getSourcenumber(), "账户名称不能为空!");
                }
            }
        }
        long entryEnd = System.currentTimeMillis();
        if(logger.isInfoEnabled()){
            logger.info("验证银行耗时==>"+(entryEnd - entrybegin) + "ms");
        }

        return result;
    }

    /**
     * 验证更改模型
     *
     * @param changeRequestCustomerModel
     * @param
     * @return
     * @throws Exception
     */
    private ChangeResponseCustomerModel.DataEntity validateChangeModel(ChangeRequestCustomerModel changeRequestCustomerModel) throws Exception {
        ChangeResponseCustomerModel.DataEntity result = null;

        // 验证来源类型
        boolean validSourceType = false;
        for (Field field : SourceTypeConstant.class.getFields()) {
            if (StringUtils.equalsIgnoreCase(field.get(null).toString(), changeRequestCustomerModel.getSourceType())) {
                validSourceType = true;
                break;
            }
        }
        if (!validSourceType) {
            result = CustomerHandler.buildChangeDataEntity(false, null,null, changeRequestCustomerModel.getSourceType(),changeRequestCustomerModel.getSourceNumber(), "来源类型不合法!");
        }

//        // 验证客户编码
//        if (null == result && null == customerDynamicObject) {
//            result = CustomerHandler.buildChangeMessage(false, "来源编码【" + changeRequestCustomerModel.getSourceNumber() + "】数据不存在!");
//        }

        return result;
    }

    /**
     * 批量保存
     *
     * @param customerModelList
     * @return
     */
    @Validated
    @ApiPostMapping(value = "/batch_save", desc = "批量保存")
    public CustomApiResult<@ApiResponseBody("返回结果") SaveResponseCustomerModel> batchSave(@Valid @NotNull @ApiParam(value = "customerModelList") List<SaveRequestCustomerModel> customerModelList) {
        // 请求时间
        Date reqDate = new Date();
        // 返回结果列表
        SaveResponseCustomerModel messages = new SaveResponseCustomerModel();

        try {
            if (!customerModelList.isEmpty()) {
                if(logger.isInfoEnabled()){
                    logger.info(this.getClass().getName()+"入参:"+ JSON.toJSONString(customerModelList));
                }
                if(logger.isInfoEnabled()){
                    logger.info("入参条数:"+customerModelList.size());
                }

                // 分布式锁列表
                List<String> lockKeyList = new ArrayList<String>();
                try {

                    Map<String, Map<String, DynamicObject>> baseDateResult = CustomerHandler.getBaseDateResult(customerModelList);
                    Map<String, DynamicObject> societycreditcodeMapResult = baseDateResult.get("societycreditcode");
                    Map<String, DynamicObject> idMapResult  = baseDateResult.get("id");
                    Map<String,DynamicObject> orgMapRes = baseDateResult.get("org");
                    Map<String,DynamicObject> userMapRes = baseDateResult.get("user");
                    Map<String,DynamicObject> groupMapRes = baseDateResult.get("group");
                    Map<String,DynamicObject> standardMapRes = baseDateResult.get("standard");
                    Map<String,DynamicObject> countryMapRes = baseDateResult.get("country");
                    Map<String,DynamicObject> currencyMapRes = baseDateResult.get("currency");
//                    Map<String,DynamicObject> bizpartnerMapRes = baseDateResult.get("bizpartner");
                    Map<String,DynamicObject> admindivisionMapRes = baseDateResult.get("admindivision");
                    Map<String,DynamicObject> rootOrgObjMapRes = baseDateResult.get("rootOrgObj");
                    //获取批量银行
                    Map<String, DynamicObject> bankNumberMap= CustomerHandler.getBankNumberMap();
                    //获取批量币别
                    Map<String, DynamicObject> currencyMap = CustomerHandler.getCurrencyMap();
                    // 批量新增列表
                    List<DynamicObject> batchAddList = new ArrayList<DynamicObject>();

                    // 批量更新列表
                    List<DynamicObject> batchUpdateList = new ArrayList<DynamicObject>();

                    List<SaveRequestCustomerEntryBankModel> addCusBankList = new ArrayList<SaveRequestCustomerEntryBankModel>();

                    for (SaveRequestCustomerModel customerModel : customerModelList) {
                        // 分布式锁
                        String lockKey = "bamp-er-basedata-customer/" + customerModel.getSocietycreditcode()+customerModel.getSourcetype();
                        DLockInfo lockInfo = DLock.getLockInfo(lockKey);
                        if (null != lockInfo) {
                            messages.getDataEntities().add(CustomerHandler.buildSaveDataEntity(false, null, customerModel.getSocietycreditcode(),customerModel.getSourcetype(),customerModel.getSourcenumber() , "来源统一社会信用代码相同报文数据正在处理中,请稍后重试!"));
                        } else {
                            // 加锁
                            DLock lock = DLock.create(lockKey, lockKey);
                            lock.lock();
                            lockKeyList.add(lockKey);

                            // 获取对象
//                            DynamicObject createOrgDynamicObjet= orgMapRes.get(customerModel.getCreateorg());
//                            DynamicObject adminOrgObject = orgMapRes.get(customerModel.getAdminorg());
//                            DynamicObject orgDynamicObject =orgMapRes.get(customerModel.getOrg());
//                            DynamicObject useOrgDynamicObjet = orgMapRes.get(customerModel.getUseorg());
                            DynamicObject companyOrgDynamicObject= orgMapRes.get(customerModel.getInternalCompany());
                            DynamicObject userDynamicObject = userMapRes.get(customerModel.getCreator());
                            DynamicObject groupDynamicObject = groupMapRes.get(customerModel.getGroup());
                            DynamicObject standardDynamicObject= standardMapRes.get("JBFLBZ");
                            DynamicObject countryDynamicObject = countryMapRes.get(customerModel.getCountry());
                            DynamicObject currencyDynamicObject= currencyMapRes.get(customerModel.getCuregcapital());
                            DynamicObject admindivisionDynamicObject = admindivisionMapRes.get(customerModel.getAdmindivision());
//                            DynamicObject bizpartnerDynamicObject= bizpartnerMapRes.get("BP-0604");
                            DynamicObject rootOrgObj= rootOrgObjMapRes.get("rootOrgObj");
                            long vabegin = System.currentTimeMillis();
                            // 验证模型
                            SaveResponseCustomerModel.DataEntity validateMessage = this.validateModel(customerModel, companyOrgDynamicObject, groupDynamicObject,userDynamicObject, countryDynamicObject,admindivisionDynamicObject, currencyDynamicObject,bankNumberMap,currencyMap);
                            long vaend = System.currentTimeMillis();
                            if(logger.isInfoEnabled()){
                                logger.info("验证模型耗时==>"+(vaend - vabegin) + "ms");
                            }
                            if (null != validateMessage) {
                                messages.getDataEntities().add(validateMessage);
                            } else {
                                long vaaddbegin = System.currentTimeMillis();
                                //根据 统一社会信用代码判重 判断更新还是新增
                                DynamicObject queryCusObject = societycreditcodeMapResult.get(customerModel.getSocietycreditcode());
                                if(queryCusObject ==null) {//该系统信用代码还未新增,add
                                    // 构建客户对象
                                    queryCusObject = BusinessDataServiceHelper.newDynamicObject(CUSTOMER);
                                    CustomerHandler.buildCusDynamicObject(queryCusObject,customerModel,companyOrgDynamicObject, groupDynamicObject,standardDynamicObject,userDynamicObject,countryDynamicObject,admindivisionDynamicObject,currencyDynamicObject,rootOrgObj,true);
                                    batchAddList.add(queryCusObject);
                                    long vaaddend = System.currentTimeMillis();
                                    if(logger.isInfoEnabled()){
                                        logger.info("构建新增对象耗时==>"+(vaaddend - vaaddbegin) + "ms");
                                    }
                                } else {//更新
                                    long vaupdatebegin = System.currentTimeMillis();
                                    //对比客户中的异构标识和编码,只有来源系统才能修改
                                    if (StringUtils.equals(queryCusObject.getString("ki40_sourcetype"), customerModel.getSourcetype())) {
                                        CustomerHandler.buildCusDynamicObject(queryCusObject, customerModel,companyOrgDynamicObject, groupDynamicObject,standardDynamicObject,userDynamicObject, countryDynamicObject,admindivisionDynamicObject,currencyDynamicObject,rootOrgObj,false);
                                        batchUpdateList.add(queryCusObject);
                                    }else{
                                        //拿到需要追加的银行对象Map
                                        Map<String,List<SaveRequestCustomerEntryBankModel>> resultBankMap = CustomerHandler.isAddBankEntity(customerModel.getEntryBank(),queryCusObject.getDynamicObjectCollection("entry_bank"));
                                        if(!resultBankMap.isEmpty()){//有追加银行的值则进行更新
                                            addCusBankList = resultBankMap.get("bankaccount");
                                            //构建追加银行参数
                                            CustomerHandler.buildCusDynamicObjectByEntity(queryCusObject, addCusBankList);
                                            batchUpdateList.add(queryCusObject);
                                        }else{
                                            //来源系统不匹配且也没有需要增加的银行信息则返回
                                            SaveResponseCustomerModel.DataEntity returnMessage = CustomerHandler.buildSaveDataEntity(false, null,null, customerModel.getSourcetype(),customerModel.getSourcenumber() , "来源系统类型不匹配的情况且也没有需要追加的银行信息");
                                            messages.getDataEntities().add(returnMessage);
                                        }
                                    }
                                    long vaupdateend = System.currentTimeMillis();
                                    if(logger.isInfoEnabled()){
                                        logger.info("构建更新对象耗时==>"+(vaupdateend - vaupdatebegin) + "ms");
                                    }
                                }
                            }
                        }

                    }
                    if(!batchAddList.isEmpty()) {
                        long vaaddlist = System.currentTimeMillis();
                        // 批量新增
                        messages.getDataEntities().addAll(CustomerHandler.saveCustomerDynamicObject(batchAddList, true,idMapResult));
                        long vaaddlistend = System.currentTimeMillis();
                        if(logger.isInfoEnabled()){
                            logger.info("批量新增耗时"+(vaaddlistend - vaaddlist) + "ms");
                        }
                    }
                    if(!batchUpdateList.isEmpty()) {
                        long vaupdatelist = System.currentTimeMillis();
                        // 批量更新
                        messages.getDataEntities().addAll(CustomerHandler.saveCustomerDynamicObject(batchUpdateList, false,idMapResult));
                        long vaupdatelistend = System.currentTimeMillis();
                        if(logger.isInfoEnabled()){
                            logger.info("批量更新耗时"+(vaupdatelistend - vaupdatelist));
                        }
                    }
                    if(batchUpdateList.isEmpty() && batchAddList.isEmpty()){
                        if(logger.isInfoEnabled()){
                            logger.info("没有需要新增和更新的数据需要处理"+new Date());
                        }
                    }
                } catch (Exception e) {
                    throw e;
                } finally {
                    if(logger.isInfoEnabled()){
                        logger.info("进入finally"+new Date());
                    }
                    // 解锁
                    DLock.forceUnlock(lockKeyList.toArray(new String[lockKeyList.size()]));

                }
            }
            return CustomApiResult.success(messages);

        } catch (Exception e) {
            if(logger.isErrorEnabled()) {
                logger.error(e.toString(), e);
            }
            return CustomApiResult.fail(ApiErrorCode.ERROR.getStatusCode(), e.toString());
        }finally{
            if(logger.isInfoEnabled()){
                logger.info("进入日志finally"+new Date());
            }
            //响应时间
            Date resDate = new Date();
            //记录日志
            OpenAPILogUtil.record(reqDate,customerModelList,customerModelList,resDate,messages,messages.getDataEntities());
        }
    }


    /**
     * 客商批量更改
     *
     * @param changeCustomerModels
     * @return
     */
    @Validated
    @ApiPostMapping(value = "/batch_change", desc = "客商批量更改")
    public CustomApiResult<@ApiResponseBody("返回结果") ChangeResponseCustomerModel> batchChange(@Valid @NotNull @ApiParam(value = "数据列表") List<ChangeRequestCustomerModel> changeCustomerModels) {
        // 请求时间
        Date reqDate = new Date();
        // 返回结果列表
        ChangeResponseCustomerModel messages = new ChangeResponseCustomerModel();
        try {
            if(logger.isInfoEnabled()) {
                logger.info(this.getClass().getName() + "入参:" + JSON.toJSONString(changeCustomerModels));
            }

            if (!changeCustomerModels.isEmpty()) {

                // 分布式锁列表
                List<String> lockKeyList = new ArrayList<String>();
                try {
                    //批量获取根据统一社会信用代码get客户对象Object
                    Map<String, Map<String, DynamicObject>> baseDateResult = CustomerHandler.getSocieCodeResult(changeCustomerModels);
                    Map<String, DynamicObject> societycreditcodeMapResult = baseDateResult.get("societycreditcode");
                    // 批量启用列表
                    List<DynamicObject> batchEnableList = new ArrayList<DynamicObject>();

                    // 批量更新列表
                    List<DynamicObject> batchDisableList = new ArrayList<DynamicObject>();


                    boolean initSourceNumberMap = false;
//                    Map<String, DynamicObject> customerNumberMap = new HashMap<String, DynamicObject>();
                    for (ChangeRequestCustomerModel changeCustomerModel : changeCustomerModels) {

                        // 分布式锁
                        String lockKey = "bamp-er-basedata-customer/" + changeCustomerModel.getSocietycreditcode();
                        DLockInfo lockInfo = DLock.getLockInfo(lockKey);
                        if (null != lockInfo) {
                            messages.getDataEntities().add(CustomerHandler.buildChangeDataEntity(false, null, changeCustomerModel.getSocietycreditcode(),changeCustomerModel.getSourceType(),changeCustomerModel.getSourceNumber() , "来源统一社会信用代码相同报文数据正在处理中,请稍后重试!"));
                        } else {
                            // 加锁
                            DLock lock = DLock.create(lockKey, lockKey);
                            lock.lock();
                            lockKeyList.add(lockKey);

//                            Set<String> societycreditcodeSet = new HashSet<String>();
//                            //统一社会信用代码
//                            String societycreditcode =  changeCustomerModel.getSocietycreditcode();
//
//                                if(StringUtil.isNotEmpty(societycreditcode)){
//                                    societycreditcodeSet.add(societycreditcode);
//                                }
//                                customerNumberMap.putAll(CustomerHandler.getCustomerFromCode(CUSTOMER,societycreditcodeSet));


                            // 获取客户对象
                            DynamicObject customerDynamicObject = societycreditcodeMapResult.get(changeCustomerModel.getSocietycreditcode());

                            // 验证模型
                            ChangeResponseCustomerModel.DataEntity validateMessage = this.validateChangeModel(changeCustomerModel);
                            if (null != validateMessage) {
                                messages.getDataEntities().add(validateMessage);
                            } else {
                                    // 启用或禁用
                                    if (changeCustomerModel.getEnable()) {
                                        batchEnableList.add(customerDynamicObject);
                                    } else {
                                        batchDisableList.add(customerDynamicObject);
                                    }
                            }

                        }
                    }

                    // 批量启用
                    messages.getDataEntities().addAll(CustomerHandler.changeCustomerDynamicObject(batchEnableList, true));

                    // 批量禁用
                    messages.getDataEntities().addAll(CustomerHandler.changeCustomerDynamicObject(batchDisableList, false));

                } catch (Exception e) {
                    throw e;
                } finally {

                    // 解锁
                    DLock.forceUnlock(lockKeyList.toArray(new String[lockKeyList.size()]));

                }

            }
            return CustomApiResult.success(messages);

        } catch (Exception e) {
            if(logger.isErrorEnabled()) {
                logger.error(e.toString(), e);
            }
            return CustomApiResult.fail(ApiErrorCode.ERROR.getStatusCode(), e.toString());
        }finally{
            //响应时间
            Date resDate = new Date();
            //记录日志
            OpenAPILogUtil.record(reqDate,changeCustomerModels,changeCustomerModels,resDate,messages,messages.getDataEntities());
        }
    }


    /**
     * 客户查询
     *
     * @param
     * @return
     */
    @Validated
    @ApiPostMapping(value = "/query", desc = "客户批量查询")
    public CustomApiResult<@ApiResponseBody("返回结果") QueryResponseCustomerModel> query(@Valid @NotNull @ApiParam(value = "数据条件") QueryRequestCustomerModel queryRequestCustomerModel) {
        // 请求时间
        Date reqDate = new Date();
        // 返回结果
        QueryResponseCustomerModel result = new QueryResponseCustomerModel();
        try {

            result.setCurrentPage(queryRequestCustomerModel.getPageIndex()); // 当前页

            // 获取客户查询条件
            QFilter[] qFilters = CustomerHandler.getCustomerQfilters(queryRequestCustomerModel);
            //如果接口没传pageSize的值,则默认1000,如果不为空也就是传了,则为实际的pageSize
            // 当前分页大小
            Integer pageSize = queryRequestCustomerModel.getPageSize();
            if(null == queryRequestCustomerModel.getPageSize()){
                pageSize = CustomerHandler.CUSTOMER_SELECT_PAGE_SIZE;
            }

            // 获取客户总记录数
            int count = CustomerHandler.getCustomerCount(qFilters);
            if (0 < count) {
                result.setCount(count); // 总记录数
                if (0 == count % pageSize) {
                    result.setTotalPage(count / pageSize); // 总页数
                } else {
                    result.setTotalPage(count / pageSize + 1); // 总页数
                }
                result.setPageSize(pageSize);//分页数据量
            }

            // 获取客商分页列表
            DynamicObject[] customerDynamicObjects = CustomerHandler.getCustomerDynamicObjects(qFilters, queryRequestCustomerModel.getPageIndex(),pageSize);
            if (null != customerDynamicObjects) {
                // 构建返回数据列表
                for (int i = 0; i < customerDynamicObjects.length; i++) {

                    // 构建客户数据实体
                    result.getDataEntities().add(CustomerHandler.buildCustomerDataEntity(customerDynamicObjects[i]));

                }

            }

            return CustomApiResult.success(result);

        } catch (Exception e) {
            if(logger.isErrorEnabled()) {
                logger.error(e.toString(), e);
            }
            return CustomApiResult.fail(ApiErrorCode.ERROR.getStatusCode(), e.toString());
        }finally{
            //响应时间
            Date resDate = new Date();
            //记录日志
            OpenAPILogUtil.record(reqDate,queryRequestCustomerModel,null,resDate,result,result.getDataEntities());
        }
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值