diff --git a/.gitignore b/.gitignore index b961e7ff..627233e8 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ *.idea/ out/ +!/src/main/java/kd/cosmic/ diff --git a/src/main/java/com/yem/or/api/AssepcDynamic.java b/src/main/java/com/yem/or/api/AssepcDynamic.java index 1d1524b8..41bdb299 100644 --- a/src/main/java/com/yem/or/api/AssepcDynamic.java +++ b/src/main/java/com/yem/or/api/AssepcDynamic.java @@ -2,16 +2,20 @@ package com.yem.or.api; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; import com.yem.em.utils.SubRelationUtils; import com.yem.or.utils.OrderUtils; +import com.yem.rf.utils.RFUtils; import com.yem.wm.utils.DynamicObjectUtil; +import com.yem.wm.utils.RptUtil; import com.yem.wm.utils.YEM; +import com.yem.wm.utils.groupfunc.GroupTopOneFunction; import kd.bos.algo.DataSet; import kd.bos.algo.Row; -import kd.bos.algo.sql.tree.OrderBy; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; -import kd.bos.dataentity.entity.OrmLocaleValue; import kd.bos.openapi.common.custom.annotation.ApiController; import kd.bos.openapi.common.custom.annotation.ApiParam; import kd.bos.openapi.common.custom.annotation.ApiPostMapping; @@ -23,6 +27,7 @@ import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.QueryServiceHelper; import org.jetbrains.annotations.NotNull; +import javax.validation.constraints.NotBlank; import java.io.IOException; import java.math.BigDecimal; import java.text.ParseException; @@ -533,8 +538,8 @@ public class AssepcDynamic { @ApiPostMapping("/assepcdynamic/colorlibrary") public CustomApiResult colorlibrary(@NotNull @ApiParam("产品类型") String modnumber, @NotNull @ApiParam("物料编码") String material, - @NotNull @ApiParam("页码") int page, - @NotNull @ApiParam("每一页个数") int number) { + @ApiParam("页码") int page, + @ApiParam("每一页个数") int number) { material = material.trim(); JSONArray jsonArray = new JSONArray(); QFilter qFilter = new QFilter("yem_productclass.number", QCP.equals, modnumber + "PJ"); @@ -629,4 +634,140 @@ public class AssepcDynamic { } } } + + /** + * 查询客户购买过的资源 + * @param customerNo + * @return + */ + @ApiPostMapping("/assepcdynamic/queassequipment") + public CustomApiResult queryBayedResourceNo(@NotBlank @ApiParam(value = "客户编码", example = "116021200012") String customerNo) { + String algoKey = this.getClass().getName(); + QFilter qFilter = new QFilter("status", "=", "C"); + qFilter.and("yem_customer.number", "=", customerNo); + qFilter.and("yem_model", "is not null", null); + ArrayList list = Lists.newArrayList(); + list.add("yem_model"); + list.add("yem_customer"); + list.add("number"); + DataSet dataSet = ORM.create().queryDataSet(algoKey, "yem_em_devicefiles", String.join(",", list), qFilter.toArray()); + HashSet set = Sets.newHashSet(); + DynamicObjectCollection collection = ORM.create().toPlainDynamicObjectCollection(dataSet); + Set ids = new HashSet<>(); + for (DynamicObject dynamicObject : collection) { + Long model = dynamicObject.getLong("yem_model"); + ids.add(model); + } + DataSet basemodelib = ORM.create().queryDataSet(algoKey, "yem_bd_basemodelib", "number", new QFilter[]{new QFilter("id", "in", ids)}); + DynamicObjectCollection libs = ORM.create().toPlainDynamicObjectCollection(basemodelib); + for (DynamicObject lib : libs) { + set.add(lib.getString("number")); + } + + ArrayList ass = Lists.newArrayList(); + ass.add("number");//电子目录编码 + ass.add("name");//电子目录名称 + ass.add("yem_eqctype.number");//产品类型.编码 + ass.add("yem_eqctype.name");//产品类型.名称 + ass.add("yem_eqctype.longnumber");//产品类型.长编码 + ass.add("yem_eqctype.fullname");//产品类型.长名称 + ass.add("yem_brandmodel.number");//品牌车型.编码 + ass.add("yem_brandmodel.name");//品牌车型.名称 + ass.add("yem_brandmodel.longnumber");//品牌车型.长编码 + ass.add("yem_brandmodel.fullname");//品牌车型.长名称 + ass.add("yem_eqctype.yem_enname");//产品类型.英文名称 + QFilter assFilter = new QFilter("status", "=", "C"); + assFilter.and("number", "in", set); + DataSet assDataSet = ORM.create().queryDataSet(algoKey, "yem_em_assequipment", String.join(",", ass), assFilter.toArray()); + DynamicObjectCollection assColl = ORM.create().toPlainDynamicObjectCollection(assDataSet); + HashMap map = Maps.newHashMap(); + ArrayList> rows = Lists.newArrayList(); + for (DynamicObject dynamicObject : assColl) { + Map row = Maps.newHashMap(); + row.put("number", dynamicObject.getString("number"));//电子目录编码 + row.put("name", dynamicObject.getString("name"));//电子目录名称 + row.put("yem_eqctype_number", dynamicObject.getString("yem_eqctype.number"));//产品类型.编码 + row.put("yem_eqctype_name", dynamicObject.getString("yem_eqctype.name"));//产品类型.名称 + row.put("yem_eqctype_longnumber", dynamicObject.getString("yem_eqctype.longnumber"));//产品类型.长编码 + row.put("yem_eqctype_fullname", dynamicObject.getString("yem_eqctype.fullname"));//产品类型.长名称 + row.put("yem_brandmodel_number", dynamicObject.getString("yem_brandmodel.number"));//品牌车型.编码 + row.put("yem_brandmodel_name", dynamicObject.getString("yem_brandmodel.name"));//品牌车型.名称 + row.put("yem_brandmodel_longnumber", dynamicObject.getString("yem_brandmodel.longnumber"));//品牌车型.长编码 + row.put("yem_brandmodel_fullname", dynamicObject.getString("yem_brandmodel.fullname"));//品牌车型.长名称 + row.put("yem_eqctype_yem_enname", dynamicObject.getString("yem_eqctype.yem_enname"));//产品类型.英文名称 + rows.add(row); + } + HashMap rowMap = Maps.newHashMap(); + rowMap.put("rows", rows); + return CustomApiResult.success(rowMap); + } + + @ApiPostMapping("/assepcdynamic/page/pricelib") + public CustomApiResult queryPriceLibPage(@ApiParam("产品机型") String type, @ApiParam("每页个数") int pageSize, @ApiParam("页码") int pageNum) { + String algoKey = this.getClass().getName(); + HashMap resMap = Maps.newHashMap(); + + QFilter qFilter = RFUtils.getBaseQFilter(); + qFilter.and("yem_productclass.number", QCP.equals, type + "PJ"); + + ArrayList selectfields = Lists.newArrayList(); + selectfields.add("id"); + selectfields.add("yem_bizdate"); + selectfields.add("yem_bd_products.id products_id"); + selectfields.add("yem_accessory entry_id"); + selectfields.add("yem_accessory.yem_material.id yem_material_id"); + selectfields.add("yem_accessory.yem_material.number yem_material_number"); + selectfields.add("yem_accessory.yem_material.name yem_material_name"); + selectfields.add("yem_accessory.yem_materialename yem_material_ename"); + selectfields.add("yem_accessory.yem_material.modelnum yem_material_modelnum"); + selectfields.add("yem_accessory.yem_standsalesprice price"); + + + DataSet dataSet = ORM.create().queryDataSet(algoKey, "yem_pricelibrary", String.join(",", selectfields), qFilter.toArray()); + DataSet origin = dataSet.copy(); + dataSet = dataSet.orderBy(new String[]{"yem_bizdate DESC"}) + .groupBy(new String[]{"yem_material_id"}) + .agg(new GroupTopOneFunction(), "entry_id", "entry_id") + .finish(); + dataSet = dataSet.select("entry_id ordered_entry_id"); + dataSet = dataSet.leftJoin(origin) + .on("ordered_entry_id", "entry_id") + .select(RptUtil.getDataSetFiledAlias(dataSet), RptUtil.getDataSetFiledAlias(origin)) + .finish(); + dataSet = dataSet.orderBy(new String[]{"yem_bizdate DESC"}); + ArrayList rows = Lists.newArrayList(); + + DynamicObjectCollection collection = ORM.create().toPlainDynamicObjectCollection(dataSet.copy()); + resMap.put("total", collection.size()); + dataSet.close(); + if (pageSize > collection.size()) { + pageSize = collection.size(); + } + for (DynamicObject dynamicObject : collection) { + HashMap map = Maps.newHashMap(); + map.put("yem_bizdate", dynamicObject.get("yem_bizdate")); + map.put("yem_material_id", dynamicObject.get("yem_material_id")); + map.put("yem_material_number", dynamicObject.get("yem_material_number")); + map.put("yem_material_name", dynamicObject.get("yem_material_name")); + map.put("yem_material_ename", dynamicObject.get("yem_material_ename")); + map.put("yem_material_modelnum", dynamicObject.get("yem_material_modelnum")); + map.put("price", dynamicObject.get("price")); + rows.add(map); + } + resMap.put("rows", getPageData(rows, pageSize, pageNum)); + int totalPage = (int) Math.ceil((double) rows.size() / pageSize); + if (pageNum > totalPage) { + pageNum = totalPage; + } + resMap.put("pageSize", pageSize); + resMap.put("pageNum", pageNum); + resMap.put("isLastPage", pageNum == totalPage); + return CustomApiResult.success(resMap); + } + + public static List getPageData(List rows, int pageSize, int pageNum) { + int startIndex = (pageNum - 1) * pageSize; + int endIndex = Math.min(startIndex + pageSize, rows.size()); + return rows.subList(startIndex, endIndex); + } } diff --git a/src/main/java/com/yem/wm/es/salesorder/op/SalesOrderAutoSignOp.java b/src/main/java/com/yem/wm/es/salesorder/op/SalesOrderAutoSignOp.java index a863a600..de2bab43 100644 --- a/src/main/java/com/yem/wm/es/salesorder/op/SalesOrderAutoSignOp.java +++ b/src/main/java/com/yem/wm/es/salesorder/op/SalesOrderAutoSignOp.java @@ -47,7 +47,7 @@ public class SalesOrderAutoSignOp extends AbstractOperationServicePlugIn { DynamicObject[] entities = e.getDataEntities(); // Word中的书签名称 - final String bookmark = "ensign"; + final String BOOKMARK = "ensign"; // 修改Word后上传的附件面板 final String UPLOAD_ATTACHMENT_KEY = "yem_approval"; @@ -113,7 +113,7 @@ public class SalesOrderAutoSignOp extends AbstractOperationServicePlugIn { // 获取书签 List bookMarks = ContactSignUtils.getFileBookMarks(validatorStream); - validatorSignAble(bookMarks, bookmark, filename); + validatorSignAble(bookMarks, BOOKMARK, filename); File file; try { @@ -121,7 +121,7 @@ public class SalesOrderAutoSignOp extends AbstractOperationServicePlugIn { ByteArrayInputStream stream = new ByteArrayInputStream(imageData); // 书签位置替换为图片(书签不会删除) - file = ContactSignUtils.replaceBookmarkWithImage(in, stream, filename, bookmark); + file = ContactSignUtils.replaceBookmarkWithImage(in, stream, filename, BOOKMARK); AttachmentUtil.uploadAttachment(appId, formId, String.valueOf(pkId), UPLOAD_ATTACHMENT_KEY, file.getName(), file.getPath()); } catch (IOException ex) { throw new RuntimeException(ex); diff --git a/src/main/java/com/yem/wm/task/ServiceRepairTask.java b/src/main/java/com/yem/wm/task/ServiceRepairTask.java index 3eadaade..884e7932 100644 --- a/src/main/java/com/yem/wm/task/ServiceRepairTask.java +++ b/src/main/java/com/yem/wm/task/ServiceRepairTask.java @@ -1,6 +1,7 @@ package com.yem.wm.task; import com.yem.wm.utils.DynamicObjectUtil; +import com.yem.wm.utils.YEM; import kd.bos.context.RequestContext; import kd.bos.dataentity.OperateOption; import kd.bos.dataentity.entity.DynamicObject; @@ -86,6 +87,51 @@ public class ServiceRepairTask extends AbstractTask { } } } + + updateVoidStatus(); + } + + + /** + * 更新作废状态 + */ + private void updateVoidStatus() { + QFilter qFilter = new QFilter("billstatus", QCP.equals, "C"); + qFilter.and(new QFilter("yem_ismachine", QCP.equals, true)); + DynamicObjectCollection servicerepair_pl = QueryServiceHelper.query("yem_servicerepair", "id,billno,yem_factoryno", new QFilter[]{qFilter}, null); + + for (DynamicObject object : servicerepair_pl) { + String factoryno = object.getString("yem_factoryno"); + if (YEM.isEmpty(factoryno)) { + continue; + } + + //整机档案 + DynamicObject getdevicefiles = getdevicefiles(factoryno); + //服务维修单 + DynamicObject servicerepair = BusinessDataServiceHelper.loadSingle(object.getString("id"), "yem_servicerepair"); + + if (YEM.isNotEmpty(servicerepair) && YEM.isNotEmpty(getdevicefiles)) { + //整机档案维修记录 + DynamicObjectCollection maintenancerecords = getdevicefiles.getDynamicObjectCollection("yem_maintenancerecords"); + //服务维修 + DynamicObjectCollection faultypartsreco = servicerepair.getDynamicObjectCollection("yem_faultypartsreco"); + + for (DynamicObject dynamicObject : faultypartsreco) { + long id = dynamicObject.getLong("id"); + String voidstatus = servicerepair.getString("yem_voidstatus");//作废状态 + for (DynamicObject maintenancerecord : maintenancerecords) { + long yem_servicerepairenryid = maintenancerecord.getLong("yem_servicerepairenryid"); + if (yem_servicerepairenryid == id) { + maintenancerecord.set("yem_voidstatus", voidstatus); + } + } + } + } + + OperationServiceHelper.executeOperate("save", + getdevicefiles.getDynamicObjectType().getName(), new DynamicObject[]{getdevicefiles}, OperateOption.create()); + } } /**