产值确认隔离优化,OA供应商同步数据优化

This commit is contained in:
weiyunlong 2024-11-12 12:09:33 +08:00
parent 0b8d92068b
commit 1b06952d17
6 changed files with 224 additions and 78 deletions

View File

@ -193,7 +193,7 @@ public class ContractFormPlugin extends AbstractFormPlugin implements UploadLis
//删除单据体数据
qeug_invoiceentryinfos.clear();
SaveServiceHelper.save(new DynamicObject[]{this.getModel().getDataEntity()});
SaveServiceHelper.save(new DynamicObject[]{this.getModel().getDataEntity(true)});
// 删除完成之后刷新界面
this.getView().invokeOperation("refresh");
return result;
@ -547,8 +547,9 @@ public class ContractFormPlugin extends AbstractFormPlugin implements UploadLis
QFilter q1 = new QFilter("qeug_sheetname", QCP.equals, qeug_summarycontent);
QFilter q2 = new QFilter("qeug_contractid",QCP.equals, String.valueOf(pkValue));
QFilter q3 = new QFilter("qeug_workloadcfmid",QCP.equals, "");
List<QFilter> listQF = Lists.newArrayList();
listQF.add(q1.and(q2));
listQF.add(q1.and(q2).and(q3));
parameter.setListFilterParameter(new ListFilterParameter(listQF, null));
this.getView().showForm(parameter);
}

View File

@ -20,11 +20,13 @@ import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import kd.bos.util.StringUtils;
import kd.scm.pds.common.util.OpenFormUtils;
import org.apache.cxf.Bus;
import java.math.BigDecimal;
import java.util.EventObject;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -88,6 +90,7 @@ public class WorkloadcfmbillFormPlugin extends AbstractFormPlugin implements Tab
//
QFilter q1 = new QFilter("qeug_sheetname", QCP.equals, qeug_summarycontent);
QFilter q2 = new QFilter("qeug_contractid",QCP.equals, contentId);
QFilter q3 = new QFilter("qeug_workloadcfmid",QCP.equals,String.valueOf(this.getModel().getDataEntity().getPkValue()));
// List<QFilter> listQF = Lists.newArrayList();
// listQF.add(q1.and(q2));
// parameter.setListFilterParameter(new ListFilterParameter(listQF, null));
@ -96,7 +99,9 @@ public class WorkloadcfmbillFormPlugin extends AbstractFormPlugin implements Tab
// parameter.setStatus(OperationStatus.ADDNEW);
// this.getView().showForm(parameter);
// OpenFormUtils.openListPage();
OpenFormUtils.openListPage(this.getView(), "qeug_contractsummarylist", ShowType.MainNewTabPage, (Map) null, q1.and(q2), (CloseCallBack) null);
Map<String, Object> map = new HashMap<String, Object>();
map.put("Workloadcfmbill_id", this.getModel().getDataEntity().getPkValue());
OpenFormUtils.openListPage(this.getView(), "qeug_contractsummarylist", ShowType.MainNewTabPage,map, q1.and(q2).and(q3), (CloseCallBack) null);
}
@ -147,6 +152,45 @@ public class WorkloadcfmbillFormPlugin extends AbstractFormPlugin implements Tab
this.getView().updateView("qeug_invoiceentryinfo");
this.getView().updateView("qeug_engmanager");
SaveServiceHelper.save(new DynamicObject[]{this.getModel().getDataEntity(true)});
//todo 根据汇总的条件查出明细,复制一个明细单据将产值确认id存放
// 汇总查看明细时,条件再加一个产值确认id
// 合同/补充/暂转固查看清单时,新增过滤条件,产值确认id=null
// 产值确认删除时,删除对应的清单明细
for (DynamicObject invoiceentryinfo : invoiceentryinfos) {
QFilter q3 = new QFilter("qeug_sheetname", QCP.equals, invoiceentryinfo.getString("qeug_summarycontent"));
QFilter q4 = new QFilter("qeug_contractid",QCP.equals, String.valueOf(id));
QFilter q5 = new QFilter("qeug_workloadcfmid",QCP.equals, "");//防止第二次产值确认时,id覆盖确认过的清单产值确认
DynamicObject[] recon_contractbills = BusinessDataServiceHelper.load("qeug_contractsummarylist",
"id,qeug_seq,qeug_projectnumber,qeug_projectname,qeug_featuredescript,qeug_engincontent," +
"qeug_unit,qeug_decimalqty,qeug_unitprice,qeug_amounttotal,qeug_artificial,qeug_provisional," +
"qeug_remarks,qeug_contractid,qeug_sheetname", new QFilter[]{q3,q4,q5});
if (recon_contractbills.length > 0) {
for (int i = 0; i < recon_contractbills.length; i++) {
DynamicObject contractsummarylist = recon_contractbills[i];
DynamicObject add = BusinessDataServiceHelper.newDynamicObject("qeug_contractsummarylist");
add.set("qeug_seq", contractsummarylist.getString("qeug_seq"));
add.set("qeug_projectnumber", contractsummarylist.getString("qeug_projectnumber"));
add.set("qeug_projectname", contractsummarylist.getString("qeug_projectname"));
add.set("qeug_featuredescript", contractsummarylist.getString("qeug_featuredescript"));
add.set("qeug_engincontent", contractsummarylist.getString("qeug_engincontent"));
add.set("qeug_unit", contractsummarylist.getString("qeug_unit"));
add.set("qeug_decimalqty", contractsummarylist.getBigDecimal("qeug_decimalqty"));
add.set("qeug_unitprice", contractsummarylist.getBigDecimal("qeug_unitprice"));
add.set("qeug_amounttotal", contractsummarylist.getBigDecimal("qeug_amounttotal"));
add.set("qeug_artificial", contractsummarylist.getBigDecimal("qeug_artificial"));
add.set("qeug_provisional", contractsummarylist.getBigDecimal("qeug_provisional"));
add.set("qeug_remarks", contractsummarylist.getString("qeug_remarks"));
add.set("qeug_contractid", contractsummarylist.getString("qeug_contractid"));
add.set("qeug_sheetname", contractsummarylist.getString("qeug_sheetname"));
add.set("qeug_workloadcfmid",String.valueOf(this.getModel().getDataEntity().getPkValue()));
add.set("enable","1");//使用状态
add.set("status","A");//数据状态
SaveServiceHelper.save(new DynamicObject[]{add});
}
}
}
break;
default:
break;
@ -195,29 +239,37 @@ public class WorkloadcfmbillFormPlugin extends AbstractFormPlugin implements Tab
String tabKey = tabSelectEvent.getTabKey();
if ("tabbillinfo".equals(tabKey)) {
//获取产值确认当前合同对应的所有清单明细
DynamicObject cqcontract = (DynamicObject) this.getModel().getValue("contractbill");
long id = 0;
if (null != cqcontract) {
id = cqcontract.getLong("id");
}
QFilter q1 = new QFilter("qeug_contractid",QCP.equals, String.valueOf(id));
DynamicObject[] recon_contractbills = BusinessDataServiceHelper.load("qeug_contractsummarylist",
"id,qeug_bcdecimalqty,qeug_unitprice", new QFilter[]{q1});
if (recon_contractbills.length > 0) {
BigDecimal bigDecimal = BigDecimal.ZERO;
for (DynamicObject recon_contractbill : recon_contractbills) {
BigDecimal qeugBcdecimalqty = recon_contractbill.getBigDecimal("qeug_bcdecimalqty");//本次完工量
BigDecimal qeugUnitprice = recon_contractbill.getBigDecimal("qeug_unitprice");//综合单价
BigDecimal qeugAmount = qeugBcdecimalqty.multiply(qeugUnitprice).setScale(2, BigDecimal.ROUND_HALF_UP);//四舍五入金额
bigDecimal = bigDecimal.add(qeugAmount);
String billstatus = (String)this.getModel().getValue("billstatus");
if ("A".equals(billstatus)) {
DynamicObject cqcontract = (DynamicObject) this.getModel().getValue("contractbill");
long id = 0;
if (null != cqcontract) {
id = cqcontract.getLong("id");
}
this.getModel().setValue("amount", bigDecimal);//合同总金额
this.getView().updateView("amount");//
Object pkValue = this.getModel().getDataEntity().getPkValue();
String qeug_workloadcfmid = String.valueOf(pkValue);
if (StringUtils.isNotEmpty(qeug_workloadcfmid)) {
QFilter q1 = new QFilter("qeug_contractid",QCP.equals, String.valueOf(id));
QFilter q2 = new QFilter("qeug_workloadcfmid",QCP.equals, String.valueOf(this.getModel().getDataEntity().getPkValue()));
DynamicObject[] recon_contractbills = BusinessDataServiceHelper.load("qeug_contractsummarylist",
"id,qeug_bcdecimalqty,qeug_unitprice,qeug_bcdecimalqtys", new QFilter[]{q1,q2});
if (recon_contractbills.length > 0) {
BigDecimal bigDecimal = BigDecimal.ZERO;
for (DynamicObject recon_contractbill : recon_contractbills) {
BigDecimal qeugBcdecimalqty = recon_contractbill.getBigDecimal("qeug_bcdecimalqtys");//本次完工量
BigDecimal qeugUnitprice = recon_contractbill.getBigDecimal("qeug_unitprice");//综合单价
BigDecimal qeugAmount = qeugBcdecimalqty.multiply(qeugUnitprice).setScale(2, BigDecimal.ROUND_HALF_UP);//四舍五入金额
bigDecimal = bigDecimal.add(qeugAmount);
}
this.getModel().setValue("amount", bigDecimal);//合同总金额
this.getView().updateView("amount");//
// this.getModel().setValue("notaxamount", bigDecimal);//合同总金额
// this.getView().updateView("notaxamount");//
}
}
}
}
}
}

View File

@ -6,10 +6,8 @@ import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.entity.datamodel.ListSelectedRow;
import kd.bos.entity.datamodel.ListSelectedRowCollection;
import kd.bos.entity.filter.FilterParameter;
import kd.bos.form.events.AfterDoOperationEventArgs;
import kd.bos.form.events.ExportFileEvent;
import kd.bos.form.events.FlexBeforeClosedEvent;
import kd.bos.form.events.SetFilterEvent;
import kd.bos.form.events.*;
import kd.bos.form.operate.FormOperate;
import kd.bos.list.BillList;
import kd.bos.list.events.BillClosedCallBackEvent;
import kd.bos.list.plugin.AbstractListPlugin;
@ -19,8 +17,12 @@ import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import kd.bos.servicehelper.user.UserServiceHelper;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
@ -33,10 +35,45 @@ import java.util.stream.Collectors;
*/
public class ContractSummaryListPlugin extends AbstractListPlugin implements IListPlugin {
@Override
public void beforeDoOperation(BeforeDoOperationEventArgs args) {
super.beforeDoOperation(args);
Map<String, Object> customParams = this.getView().getFormShowParameter().getCustomParams();
Object Workloadcfmbill_id = customParams.get("Workloadcfmbill_id");
FormOperate source = (FormOperate) args.getSource();
String operateKey = source.getOperateKey();
if ("exportlist".equals(operateKey)) {
// ListSelectedRowCollection rows = this.getSelectedRows();
// for (ListSelectedRow row : rows) {
// Long pk = (Long) row.getPrimaryKeyValue();
// DynamicObject dataEntity = BusinessDataServiceHelper.loadSingle(pk, "qeug_contractsummarylist");
// dataEntity.set("qeug_workloadcfmid",Workloadcfmbill_id);
// SaveServiceHelper.save(new DynamicObject[]{dataEntity});
// }
// // 获取单据列表
// BillList billList = this.getControl(AbstractListPlugin.BILLLISTID);
// //获取过滤参数
// FilterParameter generalFilterParameter = billList.generalFilterParameter();
// //获取过滤条件
// List<QFilter> qFilters = generalFilterParameter.getQFilters();
// QFilter[] array = qFilters.toArray(new QFilter[0]);
// DynamicObject[] loads = BusinessDataServiceHelper.load("qeug_contractsummarylist",
// "id,qeug_workloadcfmid", array);
// for (DynamicObject load : loads) {
// load.set("qeug_workloadcfmid",Workloadcfmbill_id);
// }
// SaveServiceHelper.save(loads);
}
}
@Override
public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) {
super.afterDoOperation(afterDoOperationEventArgs);
//
// String operateKey = afterDoOperationEventArgs.getOperateKey();
// if ("importdata".equals(operateKey)) {
//
@ -90,9 +127,51 @@ public class ContractSummaryListPlugin extends AbstractListPlugin implements ILi
// qFilters.addAll(listQF);
}
/** 导出文件后事件可以用来修改导出的文件内容比如修改excel数据、格式、加密等 */
@Override
public void afterQueryOfExport(AfterQueryOfExportEvent e) {
super.afterQueryOfExport(e);
// DynamicObject[] datas = e.getQueryValues();
// for (DynamicObject data : datas) {
// String billno = (String) data.get("billno");
// if (billno != null) {
// billno = "****" + billno.substring(4);
// } else {
// billno = "******";
// }
// data.set("billno", billno);
// }
}
/**
* 导出文件后事件可以用来修改导出的文件内容比如修改excel数据格式加密等
*/
public void afterExportFile(ExportFileEvent e) {
File file = e.getFile();
// Map<String, Object> customParams = this.getView().getFormShowParameter().getCustomParams();
// Object Workloadcfmbill_id = customParams.get("Workloadcfmbill_id");
// File file = e.getFile();
// if (file != null) {
// try (FileInputStream fis = new FileInputStream(file)) {
// Workbook wb = new XSSFWorkbook(fis);
// Sheet sheet = wb.getSheetAt(0);
// // 写入产值确认id
// int rowCountsheet = sheet.getPhysicalNumberOfRows();//总行数
// for (int i = 4; i < rowCountsheet; i++) {
// Row row = sheet.getRow(i);
// Cell cell = row.getCell(16);
// cell.setCellValue(String.valueOf(Workloadcfmbill_id));
// }
// // 保存
// FileOutputStream out = new FileOutputStream(file);
// wb.write(out);
// wb.close();
// out.close();
// } catch
// (Throwable ex) {
// ex.printStackTrace();
// }
// }
}

View File

@ -21,17 +21,18 @@ public class IntroduceContractPlugin extends BatchImportPlugin {
while (iterator.hasNext()){
ImportBillData importBillData = iterator.next();
JSONObject data = importBillData.getData();
String qeug_bcdecimalqty = (String) data.get("qeug_bcdecimalqty");//本次完工量
String qeug_bcdecimalqtys = (String) data.get("qeug_bcdecimalqtys");//本次完工量
String qeug_decimalqty = (String) data.get("qeug_decimalqty");//工程量
String qeug_preofpro = (String) data.get("qeug_preofpro");//进度百分比
double bcdecimalqty = 0;
double decimalqty =0;
double preofpro =0;
String qeug_workloadcfmid = (String) data.get("qeug_workloadcfmid");//产值确认id
BigDecimal bcdecimalqty = null;
BigDecimal decimalqty =null;
BigDecimal preofpro =null;
if (qeug_decimalqty != null && qeug_preofpro!= null) {
//校验 工程量&进度百分比 数据格式是否正确
try {
decimalqty = Double.parseDouble(qeug_decimalqty);
preofpro = Double.parseDouble(qeug_preofpro);
decimalqty = new BigDecimal(qeug_decimalqty);
preofpro = new BigDecimal(qeug_preofpro);
} catch (NumberFormatException e) {
logger.log(importBillData.getStartIndex(),"工程量数据格式有误").fail();
iterator.remove();
@ -39,14 +40,15 @@ public class IntroduceContractPlugin extends BatchImportPlugin {
// 本次完工量 = 工程量 * 进度百分比
BigDecimal bd1 = new BigDecimal(qeug_decimalqty);
BigDecimal bd2 = new BigDecimal(qeug_preofpro);
BigDecimal result = bd1.multiply(bd2);
result = result.setScale(2, BigDecimal.ROUND_HALF_UP);
data.put("qeug_bcdecimalqty",result);
BigDecimal result = bd1.multiply(bd2).multiply(BigDecimal.valueOf(0.01));
// result = result.setScale(2, BigDecimal.ROUND_HALF_UP);
data.put("qeug_bcdecimalqtys",result);
if (StringUtils.isNotEmpty(qeug_preofpro)) {
preofpro = Double.parseDouble(qeug_preofpro);
preofpro = new BigDecimal(qeug_preofpro);
}
if (preofpro>1){
logger.log(importBillData.getStartIndex(),"进度百分比不能大于1").fail();
if (preofpro != null && preofpro.compareTo(BigDecimal.valueOf(100)) > 0) {
logger.log(importBillData.getStartIndex(), "进度百分比不能大于100").fail();
iterator.remove();
}
}

View File

@ -23,6 +23,8 @@ import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import static shkd.utils.OAUtils.pushOASupplier;
/**
* 推送OA供应商
*/
@ -42,43 +44,11 @@ public class PushOASupplierOPPlugin extends AbstractOperationServicePlugIn {
if ("audit".equals(operationKey)) {
for (DynamicObject dataEntity : e.getDataEntities()) {
//String url = System.getProperty("efms.infcompany.url.ip");
//logger.info("url");
//获取token
// String oaToken = OAUtils.getOaToken();
String oaToken = "OAUtils.getOaToken()";
String oaToken = OAUtils.getOaToken(dataEntity.getString("name"));
if (StringUtils.isNotEmpty(oaToken)) {
//ICS新增/更新OA客户租户接口
String customerUrl = "http://172.31.254.240:9090/seeyon/rest/ats/type/customer";
Map<String, String> customerHeader = new HashMap<>();
customerHeader.put("Content-Type", "application/json");
customerHeader.put("token", oaToken);
//组装请求体
DynamicObject supplier = dataEntity.getDynamicObject("supplier");
if (null != supplier) {
JSONObject customerBody = assembleBody(OAUtils.l(supplier.getPkValue()));
if (null != customerBody) {
String customerPostjson = null;
try {
customerPostjson = HttpClientUtils.postjson(customerUrl, customerHeader, customerBody.toJSONString());
JSONObject jsonObject = JSONObject.parseObject(customerPostjson);
if (!jsonObject.isEmpty()) {
String result = (String) JSONObject.parseObject(customerPostjson).get("success");
if ("success".equals(result)) {
// logger.info("ICS新增/更新OA客户租户接口返回结果\n{}", customerPostjson);
}
}
logger.info("ICS新增/更新OA客户租户接口返回结果\n{}", customerPostjson);
} catch (Exception ex) {
logger.info(String.format("ICS新增/更新OA客户租户接口异常%s", ex.getMessage()));
throw new RuntimeException(ex);
}
}
}
pushOASupplier(oaToken,dataEntity);
}
}
}
@ -87,7 +57,7 @@ public class PushOASupplierOPPlugin extends AbstractOperationServicePlugIn {
/**
* 组装供应商入参
*/
private static JSONObject assembleBody(long supplierID){
public static JSONObject assembleBody(long supplierID){
JSONObject customerBody = null;
//获取正式供应商
QFilter q = new QFilter("id", QCP.equals, supplierID);

View File

@ -13,6 +13,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static shkd.repc.resm.opplugin.PushOASupplierOPPlugin.assembleBody;
/**
* @author weiyunlong
* @date Created 2024/9/11 16:02
@ -21,8 +23,8 @@ import java.util.Map;
public class OAUtils {
private static final Log logger = LogFactory.getLog(OAUtils.class);
private static final String oaUrl = System.getProperty("oaurl");//(测试环境外网地址)
// private static final String oaUrl = "http://172.31.254.240:9090";//本地(内网地址)
public static final String oaUrl = System.getProperty("oaurl");//(测试环境外网地址)
// public static final String oaUrl = "http://172.31.254.240:9090";//本地(内网地址)
//致远服务前获取token接口
public static String getOaToken(String billNo){
@ -67,6 +69,46 @@ public class OAUtils {
}
}
/**
* OA供应商同步接口
*/
public static void pushOASupplier(String oaToken, DynamicObject dataEntity){
//ICS新增/更新OA客户租户接口
String customerUrl = OAUtils.oaUrl+"/seeyon/rest/ats/type/customer";
Map<String, String> customerHeader = new HashMap<>();
customerHeader.put("Content-Type", "application/json");
customerHeader.put("token", oaToken);
//组装请求体
// DynamicObject supplier = dataEntity.getDynamicObject("syssupplier");//系统供应商
// if (null != supplier) {
JSONObject customerBody = assembleBody(OAUtils.l(dataEntity.getPkValue()));
if (null != customerBody) {
String customerPostjson = null;
try {
customerPostjson = HttpClientUtils.postjson(customerUrl, customerHeader, customerBody.toJSONString());
JSONObject jsonObject = JSONObject.parseObject(customerPostjson);
if (!jsonObject.isEmpty()) {
String result = jsonObject.getString("success");
boolean success = "true".equals(result);
DobeDWUtils.saveLog(dataEntity.getString("name"),
"致远", customerBody.toJSONString(), customerPostjson,
success, "调用ICS新增/更新OA客户租户接口");
}
} catch (Exception ex) {
DobeDWUtils.saveLog(dataEntity.getString("name"),
"致远", customerBody.toJSONString(), customerPostjson,
false, "调用ICS新增/更新OA客户租户接口");
throw new RuntimeException(ex);
}
}
// }
}
/**
* OA接口绑定用户
* 代办接口之前需要先(用户的绑定 你通过定时任务 增量推就行或者你们系统有人员进来推一次这个人绑定成功了 就不需要再绑定除非人员工号有变动)