接收BIP数据生成收款单调整

This commit is contained in:
mzr 2025-03-04 18:05:47 +08:00
parent a46c3275c1
commit 839021a256
2 changed files with 1406 additions and 0 deletions

View File

@ -0,0 +1,261 @@
package nc.bs.arap.busireg;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;
import com.yonyou.cloud.utils.StringUtils;
import nc.bs.businessevent.BdUpdateEvent;
import nc.bs.businessevent.BusinessEvent;
import nc.bs.businessevent.IBusinessEvent;
import nc.bs.businessevent.IBusinessListener;
import nc.bs.dao.BaseDAO;
import nc.bs.trade.business.HYSuperDMO;
import nc.bs.uapbd.util.IgnoreSslUtil;
import nc.jdbc.framework.processor.ColumnProcessor;
import nc.jdbc.framework.processor.MapProcessor;
import nc.vo.arap.basebill.BaseAggVO;
import nc.vo.arap.utils.ArrayUtil;
import nc.vo.pub.AggregatedValueObject;
import nc.vo.pub.BusinessException;
import nc.vo.pub.CircularlyAccessibleValueObject;
import nc.vo.pub.lang.UFDouble;
import nc.vo.so.m30.entity.SaleOrderHVO;
import nccloud.bs.arap.sagas.util.SagasUtils;
import nccloud.commons.lang.ArrayUtils;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import javax.net.ssl.HttpsURLConnection;
import java.io.*;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
public class BusiregForSyncSaleorderAndToBIP implements IBusinessListener{
@Override
public void doAction(IBusinessEvent event) throws BusinessException {
// TODO Auto-generated method stub
BaseAggVO[] bills = getBills(event);
if (ArrayUtils.isEmpty(bills) || SagasUtils.isCompensateStage()) {
return;
}
// 更新 销售订单
try {
BaseDAO dao = new BaseDAO();
for(BaseAggVO aggvo : bills) {
CircularlyAccessibleValueObject headvo = aggvo.getParentVO();
// 本次收款金额
Object money = headvo.getAttributeValue("money");
// 收款单主键
Object pk_busibill = headvo.getAttributeValue("pk_gatherbill");
// 销售订单主键
Object csaleorderid = headvo.getAttributeValue("def3");
// 根据销售订单主键查询比较字段
String sql = "select vdef17, vdef15, vdef14, vdef11, vdef9 from so_saleorder where csaleorderid = '" + csaleorderid + "' and dr = 0 ";
HashMap hm = (HashMap)dao.executeQuery(sql, new MapProcessor());
Object vdef17 = hm.get("vdef17");
Object vdef15 = hm.get("vdef15");
Object vdef14 = hm.get("vdef14");
Object vdef11 = hm.get("vdef11");
Object vdef9 = hm.get("vdef9");
// 合同号
Object ctpk = aggvo.getChildrenVO()[0].getAttributeValue("def6");
// 查询合同号下
String sql1 = " select sum(ar_gatheritem.money_cr) sk_effect_money " +
" from ar_gatheritem " +
" left join ar_gatherbill on ar_gatherbill.pk_gatherbill = ar_gatheritem.pk_gatherbill " +
" where ar_gatherbill.dr = 0 and ar_gatheritem.dr = 0 and ar_gatherbill.EFFECTSTATUS = 10 " +
" and ar_gatheritem.def6 = '" + ctpk + "'";
Object obj = dao.executeQuery(sql1, new ColumnProcessor());
// 收款单累计金额
UFDouble sk_effect_money = UFDouble.ZERO_DBL;
if(obj != null) {
sk_effect_money = new UFDouble(obj.toString());
}
// 表头合同金额
UFDouble ctmoney = UFDouble.ZERO_DBL;
if(vdef17 != null) {
ctmoney = new UFDouble(vdef17.toString());
}
// 预收比例
UFDouble preratio = UFDouble.ZERO_DBL;
if(vdef15 != null) {
preratio = new UFDouble(vdef15.toString());
}
// 收款大于预收
if (sk_effect_money.compareTo(UFDouble.ZERO_DBL) > 0 && sk_effect_money.sub(ctmoney.multiply(preratio)).compareTo(UFDouble.ZERO_DBL) >= 0) {
String updateSQL = "update so_saleorder set vdef11 = (select pk_defdoc from bd_defdoc where code = 'fhk01') where csaleorderid = '" + csaleorderid + "'";
dao.executeUpdate(updateSQL);
} else if (sk_effect_money.compareTo(UFDouble.ZERO_DBL) > 0 && sk_effect_money.sub(ctmoney.multiply(preratio)).compareTo(UFDouble.ZERO_DBL) < 0) {
String updateSQL = "update so_saleorder set vdef11 = (select pk_defdoc from bd_defdoc where code = 'fhk02') where csaleorderid = '" + csaleorderid + "'";
dao.executeUpdate(updateSQL);
}
JSONObject HTXSDD = new JSONObject();
HTXSDD.put("id", vdef9);
HYSuperDMO dmo= new HYSuperDMO();
SaleOrderHVO[] hvo = (SaleOrderHVO[])dmo.queryByWhereClause(SaleOrderHVO.class, "csaleorderid='"+csaleorderid+"'");
// 实际预收款 npreceivemny
UFDouble npreceivemny = hvo[0].getNpreceivemny();
JSONObject p = new JSONObject();
HTXSDD.put("actPreRecvAmt", npreceivemny.getDouble());
// 实际收款金额 nreceivedmny
UFDouble nreceivedmny = hvo[0].getNreceivedmny();
HTXSDD.put("actRecvAmt", nreceivedmny.getDouble());
// 是否收到预收款
Object vdef14Code = dao.executeQuery("select code from bd_defdoc where pk_defdoc = '" + vdef14 + "'", new ColumnProcessor());
HTXSDD.put("isPreRecv", vdef14Code);
// 是否收到发货款
Object vdef11Code = dao.executeQuery("select code from bd_defdoc where pk_defdoc = '" + vdef11 + "'", new ColumnProcessor());
HTXSDD.put("isShipRecdAmt", vdef11Code);
p.put("HTXSDD", HTXSDD);
System.out.println(p.toJSONString());
// 获取旗舰版的token
Map<String, String> params = new HashMap<>();
String appKey = "a3c57e0d871240e9b9bf56b35001a324";
String appSecret = "a959f7786db8dbb9a2c0493b5855a46bea68ad75";
String tokenUrl="https://www.tkkfbip.com/iuap-api-auth/open-auth/selfAppAuth/getAccessToken";
String toBipUrl="https://www.tkkfbip.com/iuap-api-gateway/oxp4h3x6/current_yonbip_default_sys/KKAPI/contractSaleOrder/update?access_token=";
// 除签名外的其他参数
params.put("appKey", appKey);
String timestamp = String.valueOf(System.currentTimeMillis());
params.put("timestamp", timestamp);
// 计算签名
Map<String, String> treeMap;
if (params instanceof TreeMap) {
treeMap = params;
} else {
treeMap = new TreeMap<>(params);
}
StringBuilder stringBuilder = new StringBuilder();
for (Map.Entry<String, String> entry : treeMap.entrySet()) {
stringBuilder.append(entry.getKey()).append(entry.getValue());
}
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(appSecret.getBytes(StandardCharsets.UTF_8), "HmacSHA256"));
byte[] signData = mac.doFinal(stringBuilder.toString().getBytes(StandardCharsets.UTF_8));
String base64String = Base64.getEncoder().encodeToString(signData);
String signature = URLEncoder.encode(base64String, "UTF-8");
params.put("signature", signature);
String responseString = doGet(tokenUrl, params);
Gson gson = new Gson();
Map result = gson.fromJson(responseString, Map.class);
if (StringUtils.equals("00000", result.get("code").toString())) {
Map<String, Object> tokenInfo = (Map<String, Object>) result.get("data");
String access_token = (String) tokenInfo.get("access_token");
doPost(toBipUrl+ access_token, p);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
private BaseAggVO[] getBills(IBusinessEvent event) {
Object value = null;
if (event instanceof BusinessEvent) {
value = ((BusinessEvent)event).getObject();
} else if (event instanceof BdUpdateEvent) {
value = ((BdUpdateEvent)event).getNewObject();
}
BaseAggVO[] bills = null;
if (null != value) {
if (value.getClass().isArray()) {
Object[] objs = (Object[])value;
bills = (objs instanceof BaseAggVO[]) ? (BaseAggVO[])objs : (BaseAggVO[])ArrayUtil.convertSupers2Subs((AggregatedValueObject[])objs, BaseAggVO.class);
} else {
bills = new BaseAggVO[1];
bills[0] = (BaseAggVO)value;
}
}
return bills;
}
private String doGet(String requestUrl, Map<String, String> paramMap) throws IOException {
StringBuilder param = new StringBuilder("?");
if (paramMap != null) {
for (Map.Entry<String, String> entry : paramMap.entrySet()) {
param.append(entry.getKey());
param.append("=");
param.append(entry.getValue());
param.append("&");
}
param.deleteCharAt(param.length() - 1);
}
String url = requestUrl + param;
URL u = new URL(url);
try {
if("https".equalsIgnoreCase(u.getProtocol())){//判定网址是否信任不信任则调用忽略信任工具类SslUtil
IgnoreSslUtil.ignoreSsl();
}
HttpsURLConnection connection = (HttpsURLConnection)u.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
connection.connect();
StringBuilder response =new StringBuilder();
int responsecode = connection.getResponseCode();
if(responsecode == HttpsURLConnection.HTTP_OK) {
InputStream inputstream =connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputstream));
String line;
while((line =reader.readLine()) != null) {
response.append(line);
}
reader.close();
}
connection.disconnect();
return response.toString();
} catch(Exception e) {
e.printStackTrace();
}
return null;
}
private String doPost(String requestUrl, JSONObject json) throws IOException {
URL u = new URL(requestUrl);
try {
if("https".equalsIgnoreCase(u.getProtocol())){//判定网址是否信任不信任则调用忽略信任工具类SslUtil
IgnoreSslUtil.ignoreSsl();
}
HttpsURLConnection connection = (HttpsURLConnection)u.openConnection();
// 设置请求方法
connection.setRequestMethod("POST");
// 设置请求属性
connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
// 发送POST请求必须设置如下两行
connection.setDoOutput(true);
connection.setDoInput(true);
byte[] outputInBytes = json.toJSONString().getBytes(StandardCharsets.UTF_8);
// 写入数据到请求体
OutputStream os = connection.getOutputStream();
os.write(outputInBytes);
// 获取响应码
int responseCode = connection.getResponseCode();
System.out.println("Response Code: " + responseCode);
// 读取响应
String response = "";
try(BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
br.readLine();
System.out.println("Response: " + response);
}
// 关闭连接
connection.disconnect();
return response;
} catch(Exception e) {
e.printStackTrace();
}
return null;
}
}