供应商初始化操作

This commit is contained in:
yuxueliang0813 2025-05-09 13:00:39 +08:00
parent a15ab9e97e
commit 29cc466912
1 changed files with 232 additions and 0 deletions

View File

@ -0,0 +1,232 @@
package shjh.jhzj7.fi.fi.plugin.operate;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
import com.sap.db.jdbc.packet.ErrorLevel;
import kd.bos.context.RequestContext;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.entity.operate.result.OperateErrorInfo;
import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
import kd.bos.entity.plugin.args.AfterOperationArgs;
import kd.bos.id.ID;
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import kd.sdk.plugin.Plugin;
import shjh.jhzj7.fi.fi.utils.EsbUtils;
import shjh.jhzj7.fi.fi.utils.JhzjUtils;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
//供应商初始化操作
public class SupplierInitOperation extends AbstractOperationServicePlugIn implements Plugin {
private static final String entityName = "bd_supplier";//系统库 表名 T_BD_Supplier
private static final String supTypeName = "bd_suppliergroup";//系统库 表名 t_bd_suppliergroup
private static final String bebankName = "bd_bebank";//系统库 行名行号 表名 t_bd_bebank
private static final String gdName = "bd_suppliergroupdetail";//系统库 供应商分组 表名 t_bd_suppliergroupdetail
private static final Log log = LogFactory.getLog(SupplierInitOperation.class);
@Override
public void afterExecuteOperationTransaction(AfterOperationArgs e) {
super.afterExecuteOperationTransaction(e);
String eok = e.getOperationKey();
if("supplierinit".equals(eok)){
DynamicObject[] dos = e.getDataEntities();
DynamicObject pzinfo = BusinessDataServiceHelper.loadSingle(dos[0].getPkValue(), dos[0].getDataEntityType().getName());
JSONObject json_obj;
try{
//解析入参如果格式不正确日志记录并反馈esb
json_obj = JSONObject.parseObject(pzinfo.getString("shjh_inputs_tag"));
}catch (JSONException e1) {
String jsonResult = String.format("供应商接口入参异常:%s", e1.getMessage());
log.error(jsonResult);
addErrorInfo(pzinfo,"接口入参异常"+jsonResult);
return;
}
JSONArray itemsJson = new JSONArray();//返回值明细集合
JSONObject itemInfo;//返回值明细对象
JSONArray detailsJson = json_obj.getJSONArray("items");
if(detailsJson == null){
addErrorInfo(pzinfo,"未识别到items参数");
return ;
}
JSONArray banksJson = json_obj.getJSONArray("banks");//供应商银行
JSONArray companysJson = json_obj.getJSONArray("companys");//供应商所属公司
String supnumber;
String supname;
String taxno;
String type;
String bankcode;
DynamicObject currentSup;
DynamicObject suptype;
JSONObject json_body;
DynamicObjectCollection doc_bank;
DynamicObject bankinfo;
DynamicObject bebankinfo;
JSONObject json_bank;
Long currentSupId;
DynamicObject suppliergroupdetail;
Map<String, Long> cusids = new HashMap<>();//供应商编号和ID对应关系
for (int i = 0; i < detailsJson.size(); i++) {
json_body = detailsJson.getJSONObject(i);
supnumber = json_body.getString("code");
supname = json_body.getString("name");
taxno = json_body.getString("taxno");
type = json_body.getString("type");
if(EsbUtils.isEmpty(supnumber) || EsbUtils.isEmpty(supname) || EsbUtils.isEmpty(taxno) || EsbUtils.isEmpty(type)){
log.error(String.format("供应商接口入参为空异常:%s", json_body.toJSONString()));
itemInfo = new JSONObject();
itemInfo.put("code",supnumber);
itemInfo.put("error","入参值为空");
itemsJson.add(itemInfo);
continue;
}
suptype = BusinessDataServiceHelper.loadSingleFromCache(supTypeName,"id,number",new QFilter[]{new QFilter("number","=",type)});
if(suptype == null){
log.error(String.format("供应商分类未匹配:%s", json_body.toJSONString()));
itemInfo = new JSONObject();
itemInfo.put("code",supnumber);
itemInfo.put("error","供应商分类未匹配");
itemsJson.add(itemInfo);
continue;
}
currentSup = BusinessDataServiceHelper.loadSingle(entityName,new QFilter[]{new QFilter("number","=",supnumber)});
if(currentSup == null){
//根据编号找不到供应商则新增
currentSup = BusinessDataServiceHelper.newDynamicObject(entityName);
currentSup.set("number",supnumber);
currentSup.set("status","C");//数据状态
currentSup.set("creator", RequestContext.get().getCurrUserId());//创建人
currentSup.set("approverid", RequestContext.get().getCurrUserId());//审核人
currentSup.set("approvedate", new Date());//审核时间
currentSup.set("enable",1);//默认可用
currentSup.set("type","1");//伙伴类型 默认法人企业
currentSup.set("bizfunction",",1,2,3,4,");//业务职能 默认全选
currentSup.set("createorg", JhzjUtils.GROUPID);//创建组织 默认为集团
currentSup.set("org", JhzjUtils.GROUPID);//管理组织 默认为集团
currentSup.set("source","SELF");//来源 默认自建
currentSup.set("ctrlstrategy","1");//控制策略 默认逐级分配
currentSup.set("group",suptype.getLong("id"));//供应商分组
currentSup.set("bitindex",6);//位图
currentSup.set("supplier_status",EsbUtils.SUPPLIERSTATUS);//供应商状态 默认合格
//设置id和masterid 不然不能进行分配动作
currentSupId = ID.genLongId();
currentSup.set("id", currentSupId);
currentSup.set("masterid",currentSupId);
//处理分类
suppliergroupdetail = BusinessDataServiceHelper.newDynamicObject(gdName);
suppliergroupdetail.set("createorg",JhzjUtils.GROUPID);//创建组织
suppliergroupdetail.set("standard",EsbUtils.SUPPLIERSTAND);//供应商分类标准
suppliergroupdetail.set("group",suptype.getLong("id"));//具体分类
suppliergroupdetail.set("supplier",currentSupId);//供应商
SaveServiceHelper.save(new DynamicObject[]{suppliergroupdetail});
}
currentSup.set("name",supname);//供应商名称
currentSup.set("tx_register_no",taxno);//税务登记号
currentSup.set("societycreditcode",taxno);//统一社会信用代码
currentSup.set("linkman",json_body.getString("contacts"));//联系人
currentSup.set("bizpartner_phone",json_body.getString("telnum"));//联系电话
//处理银行信息-分表
if(banksJson != null){
doc_bank = currentSup.getDynamicObjectCollection("entry_bank");
for (int j = 0; j < banksJson.size(); j++) {
json_bank = banksJson.getJSONObject(j);
if(!supnumber.equals(json_bank.getString("code"))){
continue;
}
bankcode = json_bank.getString("bankcode");
if(EsbUtils.isEmpty(bankcode)){
//联行号为空不处理
continue;
}
bebankinfo = BusinessDataServiceHelper.loadSingleFromCache(bebankName,"id,number",new QFilter[]{new QFilter("number","=",bankcode)});
if(bebankinfo == null){
//联行号在金蝶中无对应记录不处理
continue;
}
//供应商银行账户对象从现有集合中查找查找不到则新增
bankinfo = getBankInfo(doc_bank,json_bank.getString("banknumber"));
if(bankinfo == null && "E".equals(json_bank.getString("bankstatus"))){
//如果本次入参银行账户未在系统生成且sap是删除的我方不接收
continue;
}
if(bankinfo == null){
bankinfo = doc_bank.addNew();
}
bankinfo.set("bankaccount",json_bank.getString("banknumber"));//银行账号
bankinfo.set("accountname",json_bank.getString("acctname"));//账户名称
bankinfo.set("bank",bebankinfo.getLong("id"));//开户银行-行名行号 根据入参查找
bankinfo.set("currency",JhzjUtils.CNY);//币别 默认人民币
bankinfo.set("shjh_banktype",json_bank.getString("banktype"));//合作银行类型
bankinfo.set("shjh_bankstatus",json_bank.getString("bankstatus"));//账户状态
}
if(!doc_bank.isEmpty()){
//首行账户作为默认
doc_bank.get(0).set("isdefault_bank",true);
}
}
//处理 sap公司信息 结算方式 统驭科目
handleSAPCompany(companysJson,currentSup.getDynamicObjectCollection("shjh_entry_sap"),supnumber);
//保存供应商
SaveServiceHelper.save(new DynamicObject[]{currentSup});
cusids.put(supnumber,currentSup.getLong("id"));
}
//处理供应商分配
EsbUtils.handleAssign(companysJson, cusids, entityName);
//处理供应商取消分配
EsbUtils.handleUnAssign(companysJson, cusids, entityName);
if(itemsJson.isEmpty()){
this.operationResult.addSuccessPkId(pzinfo.getPkValue());
}else{
addErrorInfo(pzinfo,"接口处理异常"+itemsJson.toJSONString());
}
}
}
private void addErrorInfo(DynamicObject bill, String errorMsg) {
OperateErrorInfo operateErrorInfo = new OperateErrorInfo();
operateErrorInfo.setMessage(errorMsg);
operateErrorInfo.setErrorLevel(ErrorLevel.Error.name());
operateErrorInfo.setPkValue(bill.getPkValue());
this.operationResult.addErrorInfo(operateErrorInfo);
}
private void handleSAPCompany(JSONArray companysJson,DynamicObjectCollection doc_sap,String supnumber){
if(companysJson == null){
return;
}
doc_sap.clear();
JSONObject json_body;
DynamicObject fiveinfo;
for (int i = 0; i < companysJson.size(); i++) {
json_body = companysJson.getJSONObject(i);
if(supnumber.equals(json_body.getString("code"))){
fiveinfo = doc_sap.addNew();
fiveinfo.set("shjh_settlementmethod",json_body.getString("settlementmethod"));//结算方式编号
fiveinfo.set("shjh_accountnumber",json_body.getString("accountnumber"));//统驭科目编号
fiveinfo.set("shjh_companynum",json_body.getString("companynum"));//公司编号
fiveinfo.set("shjh_status",EsbUtils.getStatusForBoolean(json_body.getString("companystatus")));//使用状态
}
}
}
private DynamicObject getBankInfo(DynamicObjectCollection doc_bank, String banknumber){
//从当前供应商的银行账户集合中获取对应的账户的对象
for (DynamicObject bankinfo : doc_bank) {
if(banknumber.equals(bankinfo.getString("bankaccount"))){
return bankinfo;
}
}
return null;
}
}