shjh/main/java/shjh/jhzj7/fi/fi/webapi/CustomerControler.java

267 lines
14 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package shjh.jhzj7.fi.fi.webapi;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
import com.drew.lang.annotations.NotNull;
import kd.bos.api.client.ApiResult;
import kd.bos.context.RequestContext;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.id.ID;
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
import kd.bos.openapi.common.custom.annotation.ApiController;
import kd.bos.openapi.common.custom.annotation.ApiPostMapping;
import kd.bos.openapi.common.custom.annotation.ApiRequestBody;
import kd.bos.openapi.common.result.CustomApiResult;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import shjh.jhzj7.fi.fi.utils.EsbUtils;
import shjh.jhzj7.fi.fi.utils.JhzjUtils;
import shjh.jhzj7.fi.fi.webapi.model.CustomerModel;
import javax.validation.Valid;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@ApiController(value = "CustomerControler",desc = "客户接口,自定义插件")
public class CustomerControler {
private static final String entityName = "bd_customer";//系统库 表名 T_BD_Customer
private static final String cusTypeName = "bd_customergroup";//系统库 表名 t_bd_customergroup
private static final String gdName = "bd_customergroupdetail";//系统库 客户分组 表名 t_bd_customergroupdetail
private static final String bebankName = "bd_bebank";//系统库 行名行号 表名 t_bd_bebank
private static final Log log = LogFactory.getLog(CustomerControler.class);
private static final String apimenthod = "/customer_sync";
/**
* @param bizParam 入参json格式数据
* @return 自定义返回值
*/
@ApiPostMapping(value = apimenthod, desc = "客户接口")
public CustomApiResult<ApiResult> customer_sync (@NotNull @Valid @ApiRequestBody(value="入参json格式") CustomerModel bizParam) {
JSONObject json_obj;
try{
//解析入参如果格式不正确日志记录并反馈esb
json_obj = (JSONObject) JSON.toJSON(bizParam);
}catch (JSONException e) {
String jsonResult = String.format("客户接口入参异常:%s", e.getMessage());
log.error(jsonResult);
EsbUtils.saveLog(apimenthod,"ESB",null,jsonResult,false,"API");
return CustomApiResult.fail("400","接口入参异常");
}
JSONArray itemsJson = new JSONArray();//返回值明细集合
JSONObject itemInfo;//返回值明细对象
JSONArray detailsJson = json_obj.getJSONArray("items");//客户基本信息
if(detailsJson == null){
return CustomApiResult.fail("400","未识别到items参数");
}
JSONArray banksJson = json_obj.getJSONArray("banks");//客户银行
JSONArray companysJson = json_obj.getJSONArray("companys");//客户所属公司
JSONArray customerfivesJson = json_obj.getJSONArray("customerfives");//客户组5
String cusnumber;
String cusname;
String taxno;
String type;
// String bankcode;
DynamicObject currentCus;
DynamicObject custype;
JSONObject json_body;
Long currentSupId;
DynamicObject custgroupdetail;
Map<String, Long> cusids = new HashMap<>();//客户编号和ID对应关系
for (int i = 0; i < detailsJson.size(); i++) {
json_body = detailsJson.getJSONObject(i);
cusnumber = json_body.getString("code");
cusname = json_body.getString("name");
taxno = json_body.getString("taxno");
type = json_body.getString("type");
if(EsbUtils.isEmpty(cusnumber) || EsbUtils.isEmpty(cusname) || EsbUtils.isEmpty(type)){
log.error(String.format("客户接口入参为空异常:%s", json_body.toJSONString()));
itemInfo = new JSONObject();
itemInfo.put("code",cusnumber);
itemInfo.put("error","code name type入参值为空");
itemsJson.add(itemInfo);
continue;
}
currentCus = BusinessDataServiceHelper.loadSingle(entityName,new QFilter[]{new QFilter("number","=",cusnumber)});
if(currentCus == null){
//判断客户分类
custype = BusinessDataServiceHelper.loadSingleFromCache(cusTypeName,"id,number",new QFilter[]{new QFilter("number","=",type)});
if(custype == null){
log.error(String.format("客户分类未匹配:%s", json_body.toJSONString()));
itemInfo = new JSONObject();
itemInfo.put("code",cusnumber);
itemInfo.put("error","客户分类未匹配");
itemsJson.add(itemInfo);
continue;
}
//根据编号找不到客户,则新增
currentCus = BusinessDataServiceHelper.newDynamicObject(entityName);
currentCus.set("number",cusnumber);
currentCus.set("status","C");//数据状态
currentCus.set("creator", RequestContext.get().getCurrUserId());//创建人
currentCus.set("approverid", RequestContext.get().getCurrUserId());//审核人
currentCus.set("approvedate", new Date());//审核时间
currentCus.set("enable",1);//默认可用
currentCus.set("type","1");//伙伴类型 默认法人企业
currentCus.set("bizfunction",",1,2,3,4,");//业务职能 默认全选
currentCus.set("createorg", JhzjUtils.GROUPID);//创建组织 默认为集团
currentCus.set("org", JhzjUtils.GROUPID);//管理组织 默认为集团
currentCus.set("ctrlstrategy","1");//控制策略 默认逐级分配1 自由分配2
currentCus.set("group",custype.getLong("id"));//客户分组
currentCus.set("bitindex",1);//位图
currentCus.set("customerstatus",EsbUtils.CUSTOMERSTATUS);//客户状态
currentCus.set("name",cusname);//客户名称
currentCus.set("tx_register_no",taxno);//税务登记号
currentCus.set("societycreditcode",taxno);//统一社会信用代码
currentCus.set("linkman",json_body.getString("contacts"));//联系人
currentCus.set("bizpartner_phone",json_body.getString("telnum"));//联系电话
//设置id和masterid 不然不能进行分配动作
currentSupId = ID.genLongId();
currentCus.set("id", currentSupId);
currentCus.set("masterid",currentSupId);
//处理银行-新增-员工类客户不需要处理
if(!"M400".equals(type)){
handleBank(banksJson,currentCus.getDynamicObjectCollection("entry_bank"),cusnumber);
}else{
//如果是个人,则伙伴类型字段为个人
currentCus.set("type","4");//伙伴类型
}
//处理 客户组5
handleFive(customerfivesJson,currentCus.getDynamicObjectCollection("shjh_entry_five"),cusnumber);
SaveServiceHelper.save(new DynamicObject[]{currentCus});
//处理分类
custgroupdetail = BusinessDataServiceHelper.newDynamicObject(gdName);
custgroupdetail.set("createorg",JhzjUtils.GROUPID);//创建组织
custgroupdetail.set("standard",EsbUtils.CUSTOMERSTAND);//客户分类标准
custgroupdetail.set("group",custype.getLong("id"));//具体分类
custgroupdetail.set("customer",currentSupId);//客户
SaveServiceHelper.save(new DynamicObject[]{custgroupdetail});
}else{
//修改客户 名称 税务登记号 联系人 联系电话 银行信息 客户组5
currentSupId = currentCus.getLong("id");
currentCus.set("name",cusname);//客户名称
currentCus.set("tx_register_no",taxno);//税务登记号
currentCus.set("societycreditcode",taxno);//统一社会信用代码
currentCus.set("linkman",json_body.getString("contacts"));//联系人
currentCus.set("bizpartner_phone",json_body.getString("telnum"));//联系电话
//处理 客户组5
handleFive(customerfivesJson,currentCus.getDynamicObjectCollection("shjh_entry_five"),cusnumber);
//处理银行-新增-员工类客户不需要处理
if(!"M400".equals(type)){
handleBank(banksJson,currentCus.getDynamicObjectCollection("entry_bank"),cusnumber);
}
SaveServiceHelper.save(new DynamicObject[]{currentCus});
}
cusids.put(cusnumber,currentSupId);
}
//处理客户分配
EsbUtils.handleAssign(companysJson, cusids, entityName);
//处理客户取消分配
EsbUtils.handleUnAssign(companysJson, cusids, entityName);
if(itemsJson.isEmpty()){
EsbUtils.saveLog(apimenthod,"ESB",json_obj.toString(),null,true,"API");
return CustomApiResult.success(null);
}else{
EsbUtils.saveLog(apimenthod,"ESB",json_obj.toString(),itemsJson.toJSONString(),false,"API");
return CustomApiResult.fail("400","接口处理异常"+itemsJson.toJSONString());
}
}
private void handleFive(JSONArray customerfivesJson,DynamicObjectCollection doc_five,String cusnumber){
if(customerfivesJson == null){
return;
}
// doc_five.clear();
JSONObject json_body;
DynamicObject fiveinfo;
String channelnum;
String companynum;
String fivecode;
for (int i = 0; i < customerfivesJson.size(); i++) {
json_body = customerfivesJson.getJSONObject(i);
if(cusnumber.equals(json_body.getString("code"))){
channelnum = json_body.getString("channelnum");
companynum = json_body.getString("salecompanynum");
fivecode = json_body.getString("customerfivecode");
if(EsbUtils.isEmpty(channelnum) || EsbUtils.isEmpty(companynum) || EsbUtils.isEmpty(fivecode)){
//任意一个为空,则不处理
log.error(String.format("客户组5入参值为空%s", json_body.toJSONString()));
continue;
}
fiveinfo = getFiveInfo(doc_five,channelnum,companynum,fivecode);
if(fiveinfo == null){
fiveinfo = doc_five.addNew();
}
fiveinfo.set("shjh_channelnum",channelnum);//渠道编号
fiveinfo.set("shjh_channelname",json_body.getString("channelname"));//渠道名称
fiveinfo.set("shjh_salecompanynum",companynum);//公司编号
fiveinfo.set("shjh_entryfive_number",fivecode);//编号
fiveinfo.set("shjh_entryfive_name",json_body.getString("customerfivename"));//名称
fiveinfo.set("shjh_status",EsbUtils.getStatusForBoolean(json_body.getString("customerfivestatus")));//状态
}
}
}
private DynamicObject getFiveInfo(DynamicObjectCollection doc_five, String channelnum, String companynum, String fivecode){
//从当前客户的渠道编号 公司编号 客户组5编号查找对应对象
for (DynamicObject fiveinfo : doc_five) {
if(channelnum.equals(fiveinfo.getString("shjh_channelnum")) &&
companynum.equals(fiveinfo.getString("shjh_salecompanynum")) &&
fivecode.equals(fiveinfo.getString("shjh_entryfive_number"))){
return fiveinfo;
}
}
return null;
}
private void handleBank(JSONArray banksJson,DynamicObjectCollection doc_bank,String cusnumber){
if(banksJson == null){
return;
}
JSONObject json_body;
DynamicObject bankinfo;
DynamicObject bebankinfo;
for (int i = 0; i < banksJson.size(); i++) {
json_body = banksJson.getJSONObject(i);
if(cusnumber.equals(json_body.getString("code"))){
bankinfo = getBankInfo(doc_bank,json_body.getString("banknumber"));
if(bankinfo == null){
bankinfo = doc_bank.addNew();
}
bankinfo.set("bankaccount",json_body.getString("banknumber"));//银行账号
bankinfo.set("accountname",json_body.getString("acctname"));//账户名称
//根据详细分机银行 查找对应的行名行号
bebankinfo = BusinessDataServiceHelper.loadSingleFromCache(bebankName,"id,name",new QFilter[]{new QFilter("name","=",json_body.getString("bankname"))});
if(bebankinfo != null){
bankinfo.set("bank",bebankinfo.getLong("id"));//开户银行-行名行号 根据入参查找
}
bankinfo.set("currency", JhzjUtils.CNY);//币别 默认人民币
}
}
if(!doc_bank.isEmpty()){
doc_bank.get(0).set("isdefault_bank",true);
}
}
private DynamicObject getBankInfo(DynamicObjectCollection doc_bank, String banknumber){
//从当前客户的银行账户集合中获取对应的账户的对象
for (DynamicObject bankinfo : doc_bank) {
if(banknumber.equals(bankinfo.getString("bankaccount"))){
return bankinfo;
}
}
return null;
}
}