|
|
@@ -15,6 +15,7 @@ import com.malk.service.aliwork.YDClient;
|
|
|
import com.malk.utils.UtilDateTime;
|
|
|
import com.malk.utils.UtilMap;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.logging.log4j.util.Strings;
|
|
|
import org.bouncycastle.jce.provider.BouncyCastleProvider;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.scheduling.annotation.Async;
|
|
|
@@ -115,8 +116,8 @@ public class LianAnGyServiceImpl implements LianAnGyPayService {
|
|
|
paymentRec.put("PrivateAmount",privateAmount);
|
|
|
paymentRec.put("ReceiveAccountNo",receiveAccountNo);
|
|
|
paymentRec.put("ReceiveAccountName",receiveAccountName);
|
|
|
- paymentRec.put("PayUse",payUse);
|
|
|
- paymentRec.put("Purpose",payUse);
|
|
|
+ paymentRec.put("PayUse","付款");//摘要长度上限20
|
|
|
+ paymentRec.put("Purpose","付款");
|
|
|
|
|
|
paymentRecList.add(paymentRec);
|
|
|
}
|
|
|
@@ -168,7 +169,9 @@ public class LianAnGyServiceImpl implements LianAnGyPayService {
|
|
|
|
|
|
String payAmount = UtilMap.getDouble(formData, "numberField_mjqt1xrt").toString();
|
|
|
|
|
|
- String payUse = UtilMap.getString(formData, "textareaField_mjsl53kh");//摘要
|
|
|
+ String fymx = UtilMap.getString(formData, "textareaField_mjsl53kh");//费用明细
|
|
|
+
|
|
|
+ String purpose = UtilMap.getString(formData, "selectField_mjzgprmw");//付款类型 用途
|
|
|
|
|
|
int retryNum = UtilMap.getInt(formData, "numberField_mkf5q51o");//重试次数
|
|
|
|
|
|
@@ -185,8 +188,9 @@ public class LianAnGyServiceImpl implements LianAnGyPayService {
|
|
|
item.put("PayCurrencyType","CNY");//币种(为空,默认: CNY 有付款账号时,不能为 空)
|
|
|
item.put("PayCurrencyName","人民币");//币种名称(为空,默认:人民币, 有付款账号时,不能为空)
|
|
|
item.put("WhetherUrgent",whetherUrgentValue);//是否加急 1.是 2.否
|
|
|
- item.put("PayUse",payUse);
|
|
|
- item.put("Purpose",payUse);
|
|
|
+ item.put("Remark",fymx);//附言
|
|
|
+ item.put("PayUse",purpose);//摘要长度上限20
|
|
|
+ item.put("Purpose",purpose);
|
|
|
|
|
|
Map paymentRec = new HashMap();
|
|
|
paymentRec.put("ReceiveAccountNo",skfyhzh);
|
|
|
@@ -244,12 +248,26 @@ public class LianAnGyServiceImpl implements LianAnGyPayService {
|
|
|
String relPaymentDate2 = UtilMap.getString(map, "RelPaymentDate");
|
|
|
String failReasons2 = UtilMap.getString(resultInfo, "FailReasons");
|
|
|
|
|
|
- //更新付款明细
|
|
|
- ydClient.operateData(YDParam.builder()
|
|
|
+ //查询付款明细
|
|
|
+ List<Map> data = (List<Map>) ydClient.queryData(YDParam.builder()
|
|
|
.searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mjs6mcfn, textField_mk128ce5", billsPayOrderNo, billsPayOrderNo2)))
|
|
|
- .formUuid("FORM-2D646B4D1C1F4628A0DEA1072656901143Y9")
|
|
|
- .formDataJson(JSONObject.toJSONString(UtilMap.map("selectField_mjs6mcgg, dateField_mkdm7y7c, textareaField_mjs6mcgf",PayStatusName2,DateUtil.parse(relPaymentDate2, "yyyy-MM-dd").getTime(),failReasons2)))
|
|
|
- .build(), YDConf.FORM_OPERATION.upsert);
|
|
|
+ .formUuid("FORM-2D646B4D1C1F4628A0DEA1072656901143Y9").build(), YDConf.FORM_QUERY.retrieve_list).getData();
|
|
|
+
|
|
|
+ //付款明细逐条更新 防止集成自动化并发
|
|
|
+ for (Map datum : data) {
|
|
|
+ String detailFormInstId = UtilMap.getString(datum, "formInstanceId");
|
|
|
+
|
|
|
+ ydClient.operateData(YDParam.builder()
|
|
|
+ .formInstanceId(detailFormInstId)
|
|
|
+ .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("selectField_mjs6mcgg, dateField_mkdm7y7c, textareaField_mjs6mcgf",PayStatusName2, Strings.isNotBlank(relPaymentDate2) ? DateUtil.parse(relPaymentDate2, "yyyy-MM-dd").getTime() : null,failReasons2)))
|
|
|
+ .build(), YDConf.FORM_OPERATION.update);
|
|
|
+
|
|
|
+ try {
|
|
|
+ Thread.sleep(3000);
|
|
|
+ } catch (InterruptedException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}else {
|
|
|
//无付款明细
|
|
|
@@ -267,9 +285,7 @@ public class LianAnGyServiceImpl implements LianAnGyPayService {
|
|
|
.formDataJson(JSONObject.toJSONString(UtilMap.map("selectField_mjs6mcgg, dateField_mkdm7y7c, textareaField_mjs6mcgf",payStatusName,DateUtil.parse(relPaymentDate, "yyyy-MM-dd").getTime(),failReasons)))
|
|
|
.build(), YDConf.FORM_OPERATION.upsert);
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
-
|
|
|
}else {
|
|
|
//付款单生成失败
|
|
|
String failReasons = UtilMap.getString(resultInfo, "FailReasons");
|
|
|
@@ -332,7 +348,7 @@ public class LianAnGyServiceImpl implements LianAnGyPayService {
|
|
|
String note = UtilMap.getString(formData, "textareaField_mkdsowjj");//备注
|
|
|
item.put("Remark",note);//备注
|
|
|
String payUse = UtilMap.getString(formData, "textareaField_mjmc84h9");//费用明细
|
|
|
- item.put("PayUse",payUse);
|
|
|
+ item.put("PayUse","工资");//摘要长度上限20
|
|
|
item.put("Purpose","工资");
|
|
|
|
|
|
List<Map> batchPrivateRecList = new ArrayList<>();
|
|
|
@@ -369,6 +385,84 @@ public class LianAnGyServiceImpl implements LianAnGyPayService {
|
|
|
return McR.success();
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public McR reimburse(Map map) {
|
|
|
+ String formInstId = UtilMap.getString(map, "formInstId");
|
|
|
+
|
|
|
+ Map item = new HashMap();
|
|
|
+
|
|
|
+ Map formData = ydClient.queryData(YDParam.builder()
|
|
|
+ .formInstanceId(formInstId)
|
|
|
+ .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
|
|
|
+
|
|
|
+ String fkgs = UtilMap.getString(formData, "textField_mjzgymw0");//付款公司
|
|
|
+ String fkfyhzh = UtilMap.getString(formData, "textField_mjzgymw1");//付款方银行账号
|
|
|
+
|
|
|
+ int retryNUM = UtilMap.getInt(formData, "numberField_mkp4wc2r");//重试次数
|
|
|
+
|
|
|
+ if (retryNUM > 0){
|
|
|
+ item.put("BillsPayOrderNo",formInstId + "_" + retryNUM);//外部系统单据编号
|
|
|
+ }else {
|
|
|
+ item.put("BillsPayOrderNo",formInstId);//外部系统单据编号
|
|
|
+ }
|
|
|
+
|
|
|
+ //时间戳转化为yyyy-MM-dd
|
|
|
+ long fkrq = UtilMap.getLong(formData, "dateField_mkdsowjd");
|
|
|
+ String fkrqStr = DateUtil.format(new Date(fkrq), "yyyy-MM-dd");
|
|
|
+ item.put("PaymentDate",fkrqStr);//付款日期(期望支付日期)
|
|
|
+ item.put("BusinessTypeCode",GYPAY_API_TYPE_NO);//业务类型编号
|
|
|
+ item.put("BusinessTypeName",GYPAY_API_TYPE_NAME);//业务类型名称
|
|
|
+ item.put("PayOrgName",fkgs);//付款单位名称
|
|
|
+ item.put("PayAccountNo",fkfyhzh);//付款方银行账号
|
|
|
+ String payChannel = UtilMap.getString(formData, "selectField_mjm87v3v");
|
|
|
+ String payChannelValue = "";
|
|
|
+ //支付方式 1.直联支付 2.线下支付 3.全额支付 4.差额支付
|
|
|
+ switch (payChannel){
|
|
|
+ case "直联支付":payChannelValue = "1";break;
|
|
|
+ case "线下支付":payChannelValue = "2";break;
|
|
|
+ default:break;
|
|
|
+ }
|
|
|
+ item.put("PayChannel",payChannelValue);
|
|
|
+ item.put("SumPayAmount",UtilMap.getDouble(formData, "numberField_mkdsowjo").toString());//合计付款金额
|
|
|
+ item.put("PayCurrencyType","CNY");//币种(为空,默认: CNY 有付款账号时,不能为 空)
|
|
|
+
|
|
|
+ item.put("PayCurrencyName","人民币");//币种名称(为空,默认:人民币, 有付款账号时,不能为空)
|
|
|
+ String whetherUrgent = UtilMap.getString(formData, "radioField_mkdsowje");
|
|
|
+ item.put("WhetherUrgent","是".equals(whetherUrgent) ? 1 : 2);//是否加急 1.是 2.否
|
|
|
+ String note = UtilMap.getString(formData, "textareaField_mkdsowjj");//备注
|
|
|
+ item.put("Note",note);//备注
|
|
|
+
|
|
|
+ List<Map> paymentRecList = new ArrayList<>();
|
|
|
+
|
|
|
+ List<Map> details = UtilMap.getList(formData, "tableField_mjm9e1zc");
|
|
|
+ for (Map detail : details) {
|
|
|
+ String billsPayOrderNo = UtilMap.getString(detail,"textField_mk1278lu");//收款方单据编号
|
|
|
+ String privateAmount = UtilMap.getDouble(detail,"numberField_mjm9e1zl").toString();//付款金额
|
|
|
+ String receiveAccountNo = UtilMap.getString(detail,"textField_mjm9e1zf");//收款方银行账号
|
|
|
+ String receiveAccountName = UtilMap.getString(detail,"textField_mjm9e1zg");//收款方账户名称
|
|
|
+ String payUse = UtilMap.getString(detail,"textareaField_mjsl53kh");//费用明细
|
|
|
+
|
|
|
+ Map paymentRec = new HashMap();
|
|
|
+ paymentRec.put("BillsPayOrderNo",billsPayOrderNo);
|
|
|
+ paymentRec.put("PrivateAmount",privateAmount);
|
|
|
+ paymentRec.put("ReceiveAccountNo",receiveAccountNo);
|
|
|
+ paymentRec.put("ReceiveAccountName",receiveAccountName);
|
|
|
+ paymentRec.put("PayUse","报销");//摘要长度上限20
|
|
|
+ paymentRec.put("Purpose","报销");
|
|
|
+
|
|
|
+ paymentRecList.add(paymentRec);
|
|
|
+ }
|
|
|
+
|
|
|
+ item.put("PaymentRecList",paymentRecList);
|
|
|
+
|
|
|
+ Map<String,Object> data = UtilMap.map("ParamSet", Arrays.asList(item));
|
|
|
+
|
|
|
+ Map result = gyPost("T0022", data);
|
|
|
+
|
|
|
+
|
|
|
+ return McR.success();
|
|
|
+ }
|
|
|
+
|
|
|
private Map gyPost(String MesgNo,Map<String,Object> data){
|
|
|
log.info("data:{}",data);
|
|
|
|