1.采购订单供应商带出现返货返总金额及可用金额(调用返利系统的余额查询接口)

2.采购申请单上海,北京,广州三地供应商带出现返货返总金额及可用金额(调用返利系统的余额查询接口)
3.采购建议报表下推采购申请单,携带最高采购限价并进行校验
This commit is contained in:
龚豆豆 2025-09-10 18:16:39 +08:00
parent a392dbd8cc
commit 813db84485
4 changed files with 209 additions and 42 deletions

View File

@ -1,20 +1,40 @@
package tqq9.lc123.cloud.app.plugin.form.pm;
import com.google.gson.Gson;
import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.utils.StringUtils;
import kd.bos.entity.datamodel.IDataModel;
import kd.bos.entity.datamodel.events.ChangeData;
import kd.bos.entity.datamodel.events.PropertyChangedArgs;
import kd.bos.form.IFormView;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.sdk.plugin.Plugin;
import org.springframework.http.ResponseEntity;
import tqq9.lc123.cloud.app.api.utils.Constants;
import tqq9.lc123.cloud.app.api.utils.HttpClient;
import tqq9.lc123.cloud.app.plugin.utils.EntryFieldRefresher;
import java.math.BigDecimal;
import java.net.ConnectException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
/**
* 单据界面插件
*/
public class PurApplyBillPlugin extends AbstractBillPlugIn implements Plugin {
private static String URL;
static {
DynamicObject url = BusinessDataServiceHelper.loadSingle("tqq9_thirdconfig", "name",
new QFilter[]{new QFilter("number", QCP.equals, "FLXT_Balance_Url")});
URL = url != null ? url.getString("name") : null;
}
private final static String ENTRYENTITY = "billentry";
private final static String SH_ORGNUMBER = "SHLC";
private final static String BJ_ORGNUMBER = "BJLC";
@ -32,11 +52,41 @@ public class PurApplyBillPlugin extends AbstractBillPlugIn implements Plugin {
//--------------上海------------------
//集采供应商
if (StringUtils.equals("tqq9_sup_sh", name)) {
DynamicObject tqq9_sup_bj = (DynamicObject) model.getValue("tqq9_sup_sh");
DynamicObject tqq9_sup_sh = (DynamicObject) model.getValue("tqq9_sup_sh");//供应商
DynamicObject org = BusinessDataServiceHelper.loadSingle("bos_org", new QFilter[]{new QFilter("number", QCP.equals, SH_ORGNUMBER)});
EntryFieldRefresher entryFieldRefresher = new EntryFieldRefresher();
entryFieldRefresher.updateDynamicObjectByOrg(SH_ORGNUMBER, "supplier", tqq9_sup_bj, model);
String tqq9_mulcombofield1 = tqq9_sup_bj.getString("tqq9_mulcombofield1");
entryFieldRefresher.updateDynamicObjectByOrg(SH_ORGNUMBER, "supplier", tqq9_sup_sh, model);
String tqq9_mulcombofield1 = tqq9_sup_sh.getString("tqq9_mulcombofield1");
model.setValue("tqq9_suparea_sh", tqq9_mulcombofield1);
HashMap<String,String> queryMap =new HashMap<>();
queryMap.put("supplierId",tqq9_sup_sh.getString("number"));
queryMap.put("companyId",org.getString("number"));
Gson gson = new Gson();
try {
ResponseEntity responseEntity = HttpClient.sendRequest(URL, null, "Authorization", "Bearer b96dad1eb4f84c41bae651162aeacdd3", queryMap, Constants.GET);
String jsonString = responseEntity.getBody().toString();
HashMap map = gson.fromJson(jsonString, HashMap.class);
ArrayList<Map<String, Object>> data = (ArrayList) map.get("data");
if(data!=null){
for (Map datum : data) {
Map<String, Object> dataMap = datum;
String type = dataMap.get("type").toString();//类型
BigDecimal totalMoney = new BigDecimal((Double)dataMap.get("totalMoney"));//剩余总金额
BigDecimal totalMoneyAvailable = new BigDecimal((Double)dataMap.get("totalMoneyAvailable")) ;//可使用金额
if(StringUtils.equals(type,"1.0")){
//货返
model.setValue("tqq9_hshfzje_sh",totalMoney);//含税货返总金额
model.setValue("tqq9_hshfkyje_sh",totalMoneyAvailable);//含税货返可用金额
}else if(StringUtils.equals(type,"0.0")){
//现返
model.setValue("tqq9_hsxfzje_sh",totalMoney);//含税现返总金额
model.setValue("tqq9_hsxfkyje_sh",totalMoneyAvailable);//含税现返可用金额
}
}
}
} catch (ConnectException ex) {
throw new RuntimeException(ex);
}
view.updateView();
}
//收货仓库
@ -85,10 +135,40 @@ public class PurApplyBillPlugin extends AbstractBillPlugIn implements Plugin {
//集采供应商
if (StringUtils.equals("tqq9_sup_bj", name)) {
DynamicObject tqq9_sup_bj = (DynamicObject) model.getValue("tqq9_sup_bj");
DynamicObject org = BusinessDataServiceHelper.loadSingle("bos_org", new QFilter[]{new QFilter("number", QCP.equals, BJ_ORGNUMBER)});
EntryFieldRefresher entryFieldRefresher = new EntryFieldRefresher();
entryFieldRefresher.updateDynamicObjectByOrg(BJ_ORGNUMBER, "supplier", tqq9_sup_bj, model);
String tqq9_mulcombofield1 = tqq9_sup_bj.getString("tqq9_mulcombofield1");
model.setValue("tqq9_suparea_bj", tqq9_mulcombofield1);
HashMap<String,String> queryMap =new HashMap<>();
queryMap.put("supplierId",tqq9_sup_bj.getString("number"));
queryMap.put("companyId",org.getString("number"));
Gson gson = new Gson();
try {
ResponseEntity responseEntity = HttpClient.sendRequest(URL, null, "Authorization", "Bearer b96dad1eb4f84c41bae651162aeacdd3", queryMap, Constants.GET);
String jsonString = responseEntity.getBody().toString();
HashMap map = gson.fromJson(jsonString, HashMap.class);
ArrayList<Map<String, Object>> data = (ArrayList) map.get("data");
if(data!=null){
for (Map datum : data) {
Map<String, Object> dataMap = datum;
String type = dataMap.get("type").toString();//类型
BigDecimal totalMoney = new BigDecimal((Double)dataMap.get("totalMoney"));//剩余总金额
BigDecimal totalMoneyAvailable = new BigDecimal((Double)dataMap.get("totalMoneyAvailable")) ;//可使用金额
if(StringUtils.equals(type,"1.0")){
//货返
model.setValue("tqq9_hshfzje_bj",totalMoney);//含税货返总金额
model.setValue("tqq9_hshfkyje_bj",totalMoneyAvailable);//含税货返可用金额
}else if(StringUtils.equals(type,"0.0")){
//现返
model.setValue("tqq9_hsxfzje_bj",totalMoney);//含税现返总金额
model.setValue("tqq9_hsxfkyje_bj",totalMoneyAvailable);//含税现返可用金额
}
}
}
} catch (ConnectException ex) {
throw new RuntimeException(ex);
}
view.updateView();
}
//收货仓库
@ -137,10 +217,40 @@ public class PurApplyBillPlugin extends AbstractBillPlugIn implements Plugin {
//集采供应商
if (StringUtils.equals("tqq9_sup_gz", name)) {
DynamicObject tqq9_sup_gz = (DynamicObject) model.getValue("tqq9_sup_gz");
DynamicObject org = BusinessDataServiceHelper.loadSingle("bos_org", new QFilter[]{new QFilter("number", QCP.equals, GZ_ORGNUMBER)});
EntryFieldRefresher entryFieldRefresher = new EntryFieldRefresher();
entryFieldRefresher.updateDynamicObjectByOrg(GZ_ORGNUMBER, "supplier", tqq9_sup_gz, model);
String tqq9_mulcombofield1 = tqq9_sup_gz.getString("tqq9_mulcombofield1");
model.setValue("tqq9_suparea_gz", tqq9_mulcombofield1);
HashMap<String,String> queryMap =new HashMap<>();
queryMap.put("supplierId",tqq9_sup_gz.getString("number"));
queryMap.put("companyId",org.getString("number"));
Gson gson = new Gson();
try {
ResponseEntity responseEntity = HttpClient.sendRequest(URL, null, "Authorization", "Bearer b96dad1eb4f84c41bae651162aeacdd3", queryMap, Constants.GET);
String jsonString = responseEntity.getBody().toString();
HashMap map = gson.fromJson(jsonString, HashMap.class);
ArrayList<Map<String, Object>> data = (ArrayList) map.get("data");
if(data!=null){
for (Map datum : data) {
Map<String, Object> dataMap = datum;
String type = dataMap.get("type").toString();//类型
BigDecimal totalMoney = new BigDecimal((Double)dataMap.get("totalMoney"));//剩余总金额
BigDecimal totalMoneyAvailable = new BigDecimal((Double)dataMap.get("totalMoneyAvailable")) ;//可使用金额
if(StringUtils.equals(type,"1.0")){
//货返
model.setValue("tqq9_hshfzje_gz",totalMoney);//含税货返总金额
model.setValue("tqq9_hshfkyje_gz",totalMoneyAvailable);//含税货返可用金额
}else if(StringUtils.equals(type,"0.0")){
//现返
model.setValue("tqq9_hsxfzje_gz",totalMoney);//含税现返总金额
model.setValue("tqq9_hsxfkyje_gz",totalMoneyAvailable);//含税现返可用金额
}
}
}
} catch (ConnectException ex) {
throw new RuntimeException(ex);
}
view.updateView();
}
//收货仓库
@ -207,6 +317,51 @@ public class PurApplyBillPlugin extends AbstractBillPlugIn implements Plugin {
BigDecimal tqq9_hsxfsyje_gz = (BigDecimal) model.getValue("tqq9_hsxfsyje_gz");
entryFieldRefresher.updateAmountByOrg(GZ_ORGNUMBER, "tqq9_xfamount", tqq9_hsxfsyje_gz, model);
}
//物料带出最高限价
if (StringUtils.equals("material", name)) {
ChangeData changeData = e.getChangeSet()[0];
int rowIndex = changeData.getRowIndex();
DynamicObjectCollection dynamicObjectCollection = dataEntity.getDynamicObjectCollection(ENTRYENTITY);
DynamicObject dynamicObject = dynamicObjectCollection.get(rowIndex);
DynamicObject material = dynamicObject.getDynamicObject("material");
DynamicObject masterid = material.getDynamicObject("masterid");
DynamicObject bd_material = BusinessDataServiceHelper.loadSingle(masterid.getLong("id"), "bd_material");
DynamicObject org = (DynamicObject)this.getModel().getValue("entryrecorg", rowIndex);
//上海
if (StringUtils.equals(SH_ORGNUMBER, org.getString("number"))) {
BigDecimal tqq9_maxprice_sh = bd_material.getBigDecimal("tqq9_maxprice_sh");
if (tqq9_maxprice_sh.compareTo(BigDecimal.ZERO) > 0) {
getModel().setValue("priceandtax", tqq9_maxprice_sh, rowIndex);
getModel().setValue("tqq9_zgcgxj", tqq9_maxprice_sh, rowIndex);
}
//北京
} else if (StringUtils.equals(BJ_ORGNUMBER, org.getString("number"))) {
BigDecimal tqq9_maxprice_bj = bd_material.getBigDecimal("tqq9_maxprice_bj");
if (tqq9_maxprice_bj.compareTo(BigDecimal.ZERO) > 0) {
getModel().setValue("priceandtax", tqq9_maxprice_bj, rowIndex);
getModel().setValue("tqq9_zgcgxj", tqq9_maxprice_bj, rowIndex);
}
//广州
} else if (StringUtils.equals(GZ_ORGNUMBER, org.getString("number"))) {
BigDecimal tqq9_maxprice_gz = bd_material.getBigDecimal("tqq9_maxprice_gz");
if (tqq9_maxprice_gz.compareTo(BigDecimal.ZERO) > 0) {
getModel().setValue("priceandtax", tqq9_maxprice_gz, rowIndex);
getModel().setValue("tqq9_zgcgxj", tqq9_maxprice_gz, rowIndex);
}
}
}
//校验含税单价和最高限价
if (StringUtils.equals("priceandtax", name)) {
ChangeData changeData = e.getChangeSet()[0];
int rowIndex = changeData.getRowIndex();
int seq = rowIndex;
BigDecimal newValue = (BigDecimal) changeData.getNewValue();
BigDecimal tqq9_zgcgxj = (BigDecimal) getModel().getValue("tqq9_zgcgxj",seq);
if (newValue.compareTo(tqq9_zgcgxj) > 0 && tqq9_zgcgxj.compareTo(BigDecimal.ZERO) > 0) {
getModel().setValue("priceandtax", 0,seq);
this.getView().showErrorNotification("物料明细分录行" + seq + "含税单价超过最高采购限价,请修改");
}
}
}

View File

@ -396,7 +396,7 @@ public class PurSuggestRptFromPlugin extends AbstractFormPlugin implements Plugi
purapplybill.set("tqq9_hsxfsysl_gz", taxrate);//含税现返使用税率
}
DynamicObject tqq9_org = dynamicObject.getDynamicObject("tqq9_org");//组织
DynamicObject tqq9_sku = dynamicObject.getDynamicObject("tqq9_sku");//商品
// DynamicObject tqq9_sku = dynamicObject.getDynamicObject("tqq9_sku");//商品
DynamicObject tqq9_material = dynamicObject.getDynamicObject("tqq9_material");//物料
DynamicObject materialpurchaseinfo = BusinessDataServiceHelper.loadSingle("bd_materialpurchaseinfo",
new QFilter[]{new QFilter("masterid", QCP.equals, tqq9_material.getLong("id"))});//物料采购信息
@ -424,6 +424,16 @@ public class PurSuggestRptFromPlugin extends AbstractFormPlugin implements Plugi
dynamicObject1.set("entrypurdept", tqq9_org);//采购部门
dynamicObject1.set("entryoperatorgroup", tqq9_org);//采购组
dynamicObject1.set("tqq9_expectsaletime", tqq9_saledates);//预计销售时间()
if(StringUtils.equals(tqq9_org.getString("number"),"SHLC")){
dynamicObject1.set("tqq9_zgcgxj", tqq9_material.getBigDecimal("tqq9_maxprice_sh"));//最高采购限价
dynamicObject1.set("priceandtax", tqq9_material.getBigDecimal("tqq9_maxprice_sh"));//含税单价
}else if(StringUtils.equals(tqq9_org.getString("number"),"BJLC")){
dynamicObject1.set("tqq9_zgcgxj", tqq9_material.getBigDecimal("tqq9_maxprice_bj"));//最高采购限价
dynamicObject1.set("priceandtax", tqq9_material.getBigDecimal("tqq9_maxprice_bj"));//含税单价
}else if(StringUtils.equals(tqq9_org.getString("number"),"GZLC")){
dynamicObject1.set("tqq9_zgcgxj", tqq9_material.getBigDecimal("tqq9_maxprice_gz"));//最高采购限价
dynamicObject1.set("priceandtax", tqq9_material.getBigDecimal("tqq9_maxprice_gz"));//含税单价
}
dynamicObjectCollection.set(i, dynamicObject1);
i++;
}

View File

@ -1,7 +1,6 @@
package tqq9.lc123.cloud.app.plugin.form.pm;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;
import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
@ -26,6 +25,7 @@ import java.net.ConnectException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 采购订单
@ -322,41 +322,42 @@ public class PuroderBillShareRefundPlugin extends AbstractBillPlugIn {
getModel().setValue("priceandtax", 0,seq);
this.getView().showErrorNotification("物料明细分录行" + seq + "含税单价超过最高采购限价,请修改");
}
}
// if (StringUtils.equals("supplier", name)) {
// IDataModel model = this.getModel();
// ChangeData changeData = e.getChangeSet()[0];
// DynamicObject newValue = (DynamicObject) changeData.getNewValue();//供应商
// DynamicObject org = (DynamicObject)model.getValue("org");//组织
// HashMap<String,String> queryMap =new HashMap<>();
// queryMap.put("supplierId",newValue.getString("number"));
// queryMap.put("companyId",org.getString("number"));
// try {
// ResponseEntity responseEntity = HttpClient.sendRequest(URL, null, "Authorization", "Bearer b96dad1eb4f84c41bae651162aeacdd3", queryMap, Constants.GET);
// JSONObject responseEntityBody = (JSONObject)responseEntity.getBody();
// JSONArray data = responseEntityBody.getJSONArray("data");
// for (Object datum : data) {
// JSONObject datum1 = (JSONObject) datum;
// String type = datum1.get("type").toString();//类型
// if(StringUtils.equals(type,"0")){
// //货返
// BigDecimal totalMoney = (BigDecimal) datum1.get("totalMoney");//剩余总金额
// BigDecimal totalMoneyAvailable = (BigDecimal) datum1.get("totalMoneyAvailable");//可使用金额
// model.setValue("tqq9_hshfzje",totalMoney);//含税货返总金额
// model.setValue("tqq9_hshfkyje",totalMoneyAvailable);//含税货返可用金额
// }else if(StringUtils.equals(type,"1")){
// BigDecimal totalMoney = (BigDecimal) datum1.get("totalMoney");//剩余总金额
// BigDecimal totalMoneyAvailable = (BigDecimal) datum1.get("totalMoneyAvailable");//可使用金额
// model.setValue("tqq9_hsxfzje",totalMoney);//含税现返总金额
// model.setValue("tqq9_hsxfzje",totalMoneyAvailable);//含税现返可用金额
// }
// }
// getView().updateView();
// } catch (ConnectException ex) {
// throw new RuntimeException(ex);
// }
// }
if (StringUtils.equals("supplier", name)) {
IDataModel model = this.getModel();
ChangeData changeData = e.getChangeSet()[0];
DynamicObject newValue = (DynamicObject) changeData.getNewValue();//供应商
DynamicObject org = (DynamicObject)model.getValue("org");//组织
HashMap<String,String> queryMap =new HashMap<>();
queryMap.put("supplierId",newValue.getString("number"));
queryMap.put("companyId",org.getString("number"));
Gson gson = new Gson();
try {
ResponseEntity responseEntity = HttpClient.sendRequest(URL, null, "Authorization", "Bearer b96dad1eb4f84c41bae651162aeacdd3", queryMap, Constants.GET);
String jsonString = responseEntity.getBody().toString();
HashMap map = gson.fromJson(jsonString, HashMap.class);
ArrayList<Map<String, Object>> data = (ArrayList) map.get("data");
if(data!=null){
for (Map datum : data) {
Map<String, Object> dataMap = datum;
String type = dataMap.get("type").toString();//类型
BigDecimal totalMoney = new BigDecimal((Double)dataMap.get("totalMoney"));//剩余总金额
BigDecimal totalMoneyAvailable = new BigDecimal((Double)dataMap.get("totalMoneyAvailable")) ;//可使用金额
if(StringUtils.equals(type,"1.0")){
//货返
model.setValue("tqq9_hshfzje",totalMoney);//含税货返总金额
model.setValue("tqq9_hshfkyje",totalMoneyAvailable);//含税货返可用金额
}else if(StringUtils.equals(type,"0.0")){
//现返
model.setValue("tqq9_hsxfzje",totalMoney);//含税现返总金额
model.setValue("tqq9_hsxfzje",totalMoneyAvailable);//含税现返可用金额
}
}
}
getView().updateView();
} catch (ConnectException ex) {
throw new RuntimeException(ex);
}
}
}
}

View File

@ -14,6 +14,7 @@ import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;