From 473dfb06daab61f95df18ae98271bdd4b46b4389 Mon Sep 17 00:00:00 2001 From: Eric <1617486762@qq.com> Date: Thu, 12 Jun 2025 17:10:23 +0800 Subject: [PATCH] =?UTF-8?q?feat(wms):=20=E6=B7=BB=E5=8A=A0=20MDM=20?= =?UTF-8?q?=E4=B8=BB=E6=95=B0=E6=8D=AE=E5=B9=B3=E5=8F=B0=E4=B8=8E=20LMS=20?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 CommonResponseDto 类用于统一返回消息格式 - 添加 MdmToLmsController 控制器处理 MDM 与 LMS 之间的接口请求 - 实现 MdmToLmsService接口和 MdmToLmsServiceImpl 实现类,提供客户、供应商和物料信息的传输功能- 新增 ResponseItemsData 类用于封装响应项数据 - 定义 StatusEnum 枚举表示接口状态码 - 在 logback-spring.xml 中添加 MDM 日志配置 --- .../org/nl/wms/basedata/master/wql/mdcs.xls | Bin 184320 -> 185856 bytes .../org/nl/wms/basedata/master/wql/mdme.xls | Bin 172544 -> 173568 bytes .../wms/ext/mdm/entity/CommonResponseDto.java | 34 ++ .../wms/ext/mdm/entity/ResponseItemsData.java | 31 ++ .../org/nl/wms/ext/mdm/entity/StatusEnum.java | 28 ++ .../wms/ext/mdm/rest/MdmToLmsController.java | 55 +++ .../wms/ext/mdm/service/MdmToLmsService.java | 16 + .../mdm/service/impl/MdmToLmsServiceImpl.java | 327 ++++++++++++++++++ .../src/main/resources/logback-spring.xml | 2 +- 9 files changed, 492 insertions(+), 1 deletion(-) create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/ext/mdm/entity/CommonResponseDto.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/ext/mdm/entity/ResponseItemsData.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/ext/mdm/entity/StatusEnum.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/ext/mdm/rest/MdmToLmsController.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/ext/mdm/service/MdmToLmsService.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/ext/mdm/service/impl/MdmToLmsServiceImpl.java diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/mdcs.xls b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/mdcs.xls index 24fd3ca1e9266ce746392f4137f4c543e904f588..ffbb5b35894898cc88257794e300fcf9eab10e7a 100644 GIT binary patch delta 17282 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 Z%`Mx{M9W{yq_2UQ{#Kfpqy-AEg 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 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/mdme.xls b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/mdme.xls index 6455952668f6a3b19330e10f784236c2b72b3184..d569cbcd7fe19a066fe87e516c99e266d4ae56f7 100644 GIT binary patch delta 12288 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 w;Qx*2hNh@)CarV$7ys}Dc0&^r responseData; + + /** + 统一返回消息类 构造 + */ + public static CommonResponseDto adapter(String status,String message,List responseData) { + CommonResponseDto commonResponseDto = new CommonResponseDto(); + commonResponseDto.setStatus(status); + commonResponseDto.setMessage(message); + commonResponseDto.setResponseData(responseData); + return commonResponseDto; + } +} + diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mdm/entity/ResponseItemsData.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mdm/entity/ResponseItemsData.java new file mode 100644 index 000000000..c09d6b02c --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mdm/entity/ResponseItemsData.java @@ -0,0 +1,31 @@ +package org.nl.wms.ext.mdm.entity; + + +import lombok.Data; + +@Data +public class ResponseItemsData { + //主数据唯一主键 + private Long mdId; + //主数据编码 + private String mdCode; + //主数据描述 + private String mdDescription; + //处理状态 + private String status; + //处理状态描述 + private String message; + + /** + 统一构造方法 + */ + public static ResponseItemsData adapter(Long mdId,String mdCode,String mdDescription,String status,String message){ + ResponseItemsData responseItemsData = new ResponseItemsData(); + responseItemsData.setMdId(mdId); + responseItemsData.setMdCode(mdCode); + responseItemsData.setMdDescription(mdDescription); + responseItemsData.setStatus(status); + responseItemsData.setMessage(message); + return responseItemsData; + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mdm/entity/StatusEnum.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mdm/entity/StatusEnum.java new file mode 100644 index 000000000..2ae7932bb --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mdm/entity/StatusEnum.java @@ -0,0 +1,28 @@ +package org.nl.wms.ext.mdm.entity; + + +/** + * @Author Eric.Yang + * @Version V1.1 + * @Date 2025/6/10 + * @Description 接口状态统一码 + */ +public enum StatusEnum { + INSERT_SUCCESS("S", "新增成功"), + UPDATE_SUCCESS("S", "更新成功"), + ACCEPT_SUCCESS("S", "接受成功"), + ACCEPT_FAIL("E", "接受失败"); + + private String code; + private String message; + StatusEnum(String code, String message) { + this.code = code; + this.message = message; + } + public String getCode() { + return code; + } + public String getMessage() { + return message; + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mdm/rest/MdmToLmsController.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mdm/rest/MdmToLmsController.java new file mode 100644 index 000000000..affa11b44 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mdm/rest/MdmToLmsController.java @@ -0,0 +1,55 @@ +package org.nl.wms.ext.mdm.rest; + + +import cn.dev33.satoken.annotation.SaIgnore; +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.collection.CollectionUtil; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.ext.mdm.entity.CommonResponseDto; +import org.nl.wms.ext.mdm.service.MdmToLmsService; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import javax.annotation.Resource; +import java.util.List; + +/** + * @author Eric.Yang + * @version V1.1 + * @Date 2025/5/29 + * @Description MDM主数据平台与LMS接口 + */ + +@RestController +@RequestMapping("/api/mdm") +@Slf4j +@SaIgnore +public class MdmToLmsController { + + @Resource + private MdmToLmsService mdmToLmsService; + + @PostMapping("/transCustomerInfo") + @Log("MDM给LMS推送客户信息") + public CommonResponseDto transCustomerInfo(@RequestBody JSONObject jsonData){ + return mdmToLmsService.transCustomerInfo(jsonData); + } + + + @PostMapping("/transSupplierInfo") + @Log("MDM给LMS推送供应商信息") + public CommonResponseDto transSupplierInfo(@RequestBody JSONObject jsonData){ + return mdmToLmsService.transSupplierInfo(jsonData); + } + + @PostMapping("/transMaterialInfo") + @Log("MDM给LMS推送物料主数据信息") + public CommonResponseDto transMaterialInfo(@RequestBody JSONObject jsonData){ + return mdmToLmsService.transMaterialInfo(jsonData); + } + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mdm/service/MdmToLmsService.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mdm/service/MdmToLmsService.java new file mode 100644 index 000000000..f8ed1f39d --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mdm/service/MdmToLmsService.java @@ -0,0 +1,16 @@ +package org.nl.wms.ext.mdm.service; + + +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.ext.mdm.entity.CommonResponseDto; + +import java.util.List; + +public interface MdmToLmsService { + + CommonResponseDto transCustomerInfo(JSONObject jsonData); + + CommonResponseDto transSupplierInfo(JSONObject jsonData); + + CommonResponseDto transMaterialInfo(JSONObject jsonData); +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mdm/service/impl/MdmToLmsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mdm/service/impl/MdmToLmsServiceImpl.java new file mode 100644 index 000000000..61fce1990 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mdm/service/impl/MdmToLmsServiceImpl.java @@ -0,0 +1,327 @@ +package org.nl.wms.ext.mdm.service.impl; + + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.compress.utils.Lists; +import org.nl.common.utils.SecurityUtils; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.ext.mdm.entity.CommonResponseDto; +import org.nl.wms.ext.mdm.entity.ResponseItemsData; +import org.nl.wms.ext.mdm.entity.StatusEnum; +import org.nl.wms.ext.mdm.service.MdmToLmsService; +import org.springframework.stereotype.Service; +import java.util.List; + +/** + * @Author Eric.Yang + * @Version V1.1 + * @Date 2025/5/29 + * @Description MDM数据对接接口业务实现类 + */ +@Service +@Slf4j +public class MdmToLmsServiceImpl implements MdmToLmsService { + + /** + * @Description: MDM客户主数据接口 + * @Author Eric.Yang + * @Date: 2025/6/3 9:12 + **/ + @Override + public CommonResponseDto transCustomerInfo(JSONObject jsonData) { + log.info("MDM客户主数据业务请求参数为:{}", jsonData); + CommonResponseDto commonResponseDto = new CommonResponseDto(); + boolean flag = true; + if(CollectionUtil.isEmpty(jsonData)){ + commonResponseDto.setStatus("E"); + commonResponseDto.setMessage("MDM传输数据为空!"); + return commonResponseDto; + } + List responseItemsData = Lists.newArrayList(); + JSONArray customers = jsonData.getJSONArray("customer"); + if(CollectionUtil.isNotEmpty(customers)){ + for (int i = 0; i < customers.size(); i++) { + JSONObject json = customers.getJSONObject(i); + //主编码主键 + long mdId = json.getLongValue("mdId"); + //客户编号 + String mdCode = json.getString("mdCode"); + //主数据描述 + String mdDescription = json.getString("mdDescription"); + try { + //客户名称 + String customerName = json.getString("customerName"); + //核心字段判断 + if (StrUtil.isEmpty(mdCode) || StrUtil.isEmpty(customerName)) { + throw new BadRequestException("MDM->客户编码或名称不能为空!"); + } + //客户简称 + String abbreviation = json.getString("abbreviation"); + //客户状态 + String customerStatus = json.getString("customerStatus"); + JSONArray salesOrgs = json.getJSONArray("salesOrg"); + if (CollectionUtil.isEmpty(salesOrgs)) { + throw new BadRequestException("MDM->客户数据核心字段数据为空,缺失字段:[salesOrgs]!"); + } + JSONObject salesOrg = salesOrgs.getJSONObject(0); + JSONArray salesList = salesOrg.getJSONArray("sales"); + if (CollectionUtil.isEmpty(salesList)) { + throw new BadRequestException("MDM->客户数据核心字段数据为空,缺失字段:[sales]!"); + } + JSONObject sales = salesList.getJSONObject(0); + JSONArray parList = sales.getJSONArray("par"); + if (CollectionUtil.isEmpty(parList)) { + throw new BadRequestException("MDM->客户数据核心字段数据为空,缺失字段:[par]!"); + } + JSONObject par = parList.getJSONObject(0); + //业务员工号 + String empSupplier = par.getString("empSupplier"); + //业务员名称 + String empSupplierDesc = par.getString("empSupplierDesc"); + + //todo 后续确认这个步骤的作用,考虑是否移除该步骤 + JSONObject jo = new JSONObject(); + jo.put("id", mdId); + jo.put("customer_name", mdCode); + jo.put("description", customerName); + jo.put("company", abbreviation); + jo.put("mdm_status", customerStatus); + String sales_owner = StrUtil.join("|",empSupplier,empSupplierDesc); + jo.put("sales_owner", sales_owner); + WQLObject.getWQLObject("md_cs_customerbaseproc").insert(jo); + log.info("MDM客户接口表处理数据:{}", jo); + //插入客户表 + String currentUserId = SecurityUtils.getCurrentUserId(); + String now = DateUtil.now(); + + JSONObject customer_jo = WQLObject.getWQLObject("md_cs_customerbase").query("cust_code = '" + mdCode + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(customer_jo)) { + customer_jo = new JSONObject(); + customer_jo.put("cust_id", mdId); + customer_jo.put("cust_code", mdCode); + customer_jo.put("cust_name", customerName); + customer_jo.put("cust_simple_name", abbreviation); + customer_jo.put("mdm_status", customerStatus); + customer_jo.put("sales_owner", sales_owner); + customer_jo.put("create_id", currentUserId); + customer_jo.put("create_name", "mdmAdmin"); + customer_jo.put("create_time", now); + WQLObject.getWQLObject("md_cs_customerbase").insert(customer_jo); + ResponseItemsData itemsData = ResponseItemsData.adapter(mdId, mdCode, mdDescription, StatusEnum.INSERT_SUCCESS.getCode(), StatusEnum.INSERT_SUCCESS.getMessage()); + responseItemsData.add(itemsData); + } else { + customer_jo.put("cust_name", customerName); + customer_jo.put("cust_simple_name", abbreviation); + customer_jo.put("sales_owner", sales_owner); + customer_jo.put("update_optid", currentUserId); + customer_jo.put("update_optname", "mdmAdmin"); + customer_jo.put("mdm_status", customerStatus); + customer_jo.put("update_time", now); + WQLObject.getWQLObject("md_cs_customerbase").update(customer_jo); + ResponseItemsData itemsData = ResponseItemsData.adapter(mdId, mdCode, mdDescription, StatusEnum.UPDATE_SUCCESS.getCode(), StatusEnum.UPDATE_SUCCESS.getMessage()); + responseItemsData.add(itemsData); + } + }catch (Exception e) { + //获取抛出异常的信息 + String message = e.getMessage(); + flag= false; + ResponseItemsData itemsData = ResponseItemsData.adapter(mdId, mdCode, mdDescription, StatusEnum.ACCEPT_FAIL.getCode(),message.contains("MDM")?message:StatusEnum.ACCEPT_FAIL.getMessage()); + responseItemsData.add(itemsData); + log.error("MDM客户数据接口业务实现类处理数据异常", e); + } + } + } + commonResponseDto.setStatus(flag ? StatusEnum.ACCEPT_SUCCESS.getCode() : StatusEnum.ACCEPT_FAIL.getCode()); + commonResponseDto.setMessage(flag ? StatusEnum.ACCEPT_SUCCESS.getMessage() : StatusEnum.ACCEPT_FAIL.getMessage()); + commonResponseDto.setResponseData(responseItemsData); + return commonResponseDto; + } + + + /** + * @Description: MDM供应商主数据接口 + * @Author Eric.Yang + * @Date: 2025/6/5 9:12 + **/ + @Override + public CommonResponseDto transSupplierInfo(JSONObject jsonData) { + log.info("MDM供应商主数据请求参数为:{}", jsonData); + CommonResponseDto commonResponseDto = new CommonResponseDto(); + boolean flag = true; + if(CollectionUtil.isEmpty(jsonData)){ + commonResponseDto.setStatus("E"); + commonResponseDto.setMessage("MDM传输数据为空!"); + return commonResponseDto; + } + List responseItemsData = Lists.newArrayList(); + JSONArray supplier = jsonData.getJSONArray("supplier"); + if(CollectionUtil.isNotEmpty(supplier)){ + for (int i = 0; i < supplier.size(); i++) { + JSONObject json = supplier.getJSONObject(i); + //主编码主键 + long mdId = json.getLongValue("mdId"); + //客户编号 + String mdCode = json.getString("mdCode"); + //主数据描述 + String mdDescription = json.getString("mdDescription"); + try { + //供应商名称 + String supplierName = json.getString("supplierName"); + //供应商简称 + String abbreviation = json.getString("abbreviation"); + //股份供应商状态 + String gfSupplierStatus = json.getString("gfSupplierStatus"); + //股份供应商状态_描述 + String gfSupplierStatusDesc = json.getString("gfSupplierStatusDesc"); + //插入客户表 + String currentUserId = SecurityUtils.getCurrentUserId(); + String now = DateUtil.now(); + //核心字段判断 + if (StrUtil.isEmpty(mdCode) || StrUtil.isEmpty(supplierName)) { + throw new BadRequestException("MDM->供应商编码或名称不能为空!"); + } + JSONObject supplier_jo = WQLObject.getWQLObject("md_cs_transportationbase").query("cust_code = '" + mdCode + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(supplier_jo)) { + supplier_jo = new JSONObject(); + supplier_jo.put("cust_id", mdId); + supplier_jo.put("cust_code", mdCode); + supplier_jo.put("cust_name", supplierName); + supplier_jo.put("cust_simple_name", abbreviation); + supplier_jo.put("mdm_status", gfSupplierStatus); + supplier_jo.put("create_id", currentUserId); + supplier_jo.put("create_name", "mdmAdmin"); + supplier_jo.put("create_time", now); + WQLObject.getWQLObject("md_cs_transportationbase").insert(supplier_jo); + ResponseItemsData itemsData = ResponseItemsData.adapter(mdId, mdCode, mdDescription, StatusEnum.INSERT_SUCCESS.getCode(), StatusEnum.INSERT_SUCCESS.getMessage()); + responseItemsData.add(itemsData); + } else { + supplier_jo.put("cust_name", supplierName); + supplier_jo.put("cust_simple_name", abbreviation); + supplier_jo.put("update_optid", currentUserId); + supplier_jo.put("update_optname", "mdmAdmin"); + supplier_jo.put("mdm_status", gfSupplierStatus); + supplier_jo.put("update_time", now); + WQLObject.getWQLObject("md_cs_transportationbase").update(supplier_jo); + ResponseItemsData itemsData = ResponseItemsData.adapter(mdId, mdCode, mdDescription, StatusEnum.UPDATE_SUCCESS.getCode(), StatusEnum.UPDATE_SUCCESS.getMessage()); + responseItemsData.add(itemsData); + } + }catch (Exception e) { + //获取抛出异常的信息 + String message = e.getMessage(); + flag= false; + ResponseItemsData itemsData = ResponseItemsData.adapter(mdId, mdCode, mdDescription, StatusEnum.ACCEPT_FAIL.getCode(),message.contains("MDM")?message:StatusEnum.ACCEPT_FAIL.getMessage()); + responseItemsData.add(itemsData); + log.error("MDM供应商数据接口数据异常", e); + } + } + } + commonResponseDto.setStatus(flag ? StatusEnum.ACCEPT_SUCCESS.getCode() : StatusEnum.ACCEPT_FAIL.getCode()); + commonResponseDto.setMessage(flag ? StatusEnum.ACCEPT_SUCCESS.getMessage() : StatusEnum.ACCEPT_FAIL.getMessage()); + commonResponseDto.setResponseData(responseItemsData); + return commonResponseDto; + } + + /** + * @Description: MDM物料主数据接口 + * @Author Eric.Yang + * @Date: 2025/6/3 9:12 + **/ + @Override + public CommonResponseDto transMaterialInfo(JSONObject jsonData) { + log.info("MDM物料主数据请求参数为:{}", jsonData); + CommonResponseDto commonResponseDto = new CommonResponseDto(); + boolean flag = true; + if(CollectionUtil.isEmpty(jsonData)){ + commonResponseDto.setStatus("E"); + commonResponseDto.setMessage("MDM传输数据为空!"); + return commonResponseDto; + } + List responseItemsData = Lists.newArrayList(); + JSONArray materiels = jsonData.getJSONArray("materiels"); + if(CollectionUtil.isNotEmpty(materiels)){ + for (int i = 0; i < materiels.size(); i++) { + JSONObject json = materiels.getJSONObject(i); + //主编码主键 + long mdId = json.getLongValue("mdId"); + //物料编码 + String mdCode = json.getString("mdCode"); + //物料名称 + String mdDescription = json.getString("mdDescription"); + try { + //物料分类 + String categoryCode = json.getString("categoryCode"); + //计量单位 + String meins = json.getString("meins"); + //主数据状态 + String mdStatusCode = json.getString("mdStatusCode"); + //跨工厂的物料状态 + String mstae = json.getString("mstae"); + //跨工厂的物料状态_描述 + String mstaeDesc = json.getString("mstaeDesc"); + //插入客户表 + String currentUserId = SecurityUtils.getCurrentUserId(); + String now = DateUtil.now(); + if (StrUtil.isEmpty(mdCode) || StrUtil.isEmpty(mdDescription)) { + throw new BadRequestException("MDM->物料编码或名称不能为空!"); + } + //todo 后续确认这个步骤的作用,考虑是否移除该步骤 + //todo 插入md_me_materialbaseext 物料基本信息接口表 + + JSONObject material_jo = WQLObject.getWQLObject("md_me_materialbase").query("material_code = '" + mdCode + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(material_jo)) { + JSONObject unit = WQLObject.getWQLObject("md_pb_measureunit").query("unit_code = '" + meins + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(unit)) { + throw new BadRequestException("MDM->未查询到相关计量单位,请进行维护!"); + } + material_jo = new JSONObject(); + material_jo.put("material_id", mdId); + material_jo.put("material_code", mdCode); + material_jo.put("material_name", mdDescription); + material_jo.put("base_unit_id", unit.getString("measure_unit_id")); + material_jo.put("mdm_status", mdStatusCode); + material_jo.put("create_id", currentUserId); + material_jo.put("create_name", "mdmAdmin"); + material_jo.put("create_time", now); + WQLObject.getWQLObject("md_me_materialbase").insert(material_jo); + ResponseItemsData itemsData = ResponseItemsData.adapter(mdId, mdCode, mdDescription, StatusEnum.INSERT_SUCCESS.getCode(), StatusEnum.INSERT_SUCCESS.getMessage()); + responseItemsData.add(itemsData); + } else { + JSONObject unit = WQLObject.getWQLObject("md_pb_measureunit").query("unit_code = '" + meins + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(unit)) { + throw new BadRequestException("MDM->未查询到相关计量单位,请进行维护!"); + } + material_jo.put("material_name", mdDescription); + material_jo.put("base_unit_id", unit.getString("measure_unit_id")); + material_jo.put("mdm_status", mdStatusCode); + material_jo.put("update_optid", currentUserId); + material_jo.put("update_optname", "mdmAdmin"); + material_jo.put("update_time", now); + WQLObject.getWQLObject("md_me_materialbase").update(material_jo); + ResponseItemsData itemsData = ResponseItemsData.adapter(mdId, mdCode, mdDescription, StatusEnum.UPDATE_SUCCESS.getCode(), StatusEnum.UPDATE_SUCCESS.getMessage()); + responseItemsData.add(itemsData); + } + }catch (Exception e) { + //获取抛出异常的信息 + String message = e.getMessage(); + flag= false; + ResponseItemsData itemsData = ResponseItemsData.adapter(mdId, mdCode, mdDescription, StatusEnum.ACCEPT_FAIL.getCode(),message.contains("MDM")?message:StatusEnum.ACCEPT_FAIL.getMessage()); + responseItemsData.add(itemsData); + log.error("MDM物料主数据接口数据异常", e); + } + } + } + //todo 错误的定义,是有一个错就是状态为错误还是? + commonResponseDto.setStatus(flag ? StatusEnum.ACCEPT_SUCCESS.getCode() : StatusEnum.ACCEPT_FAIL.getCode()); + commonResponseDto.setMessage(flag ? StatusEnum.ACCEPT_SUCCESS.getMessage() : StatusEnum.ACCEPT_FAIL.getMessage()); + commonResponseDto.setResponseData(responseItemsData); + return commonResponseDto; + } +} diff --git a/lms/nladmin-system/src/main/resources/logback-spring.xml b/lms/nladmin-system/src/main/resources/logback-spring.xml index 2c520ee34..6995a1ab5 100644 --- a/lms/nladmin-system/src/main/resources/logback-spring.xml +++ b/lms/nladmin-system/src/main/resources/logback-spring.xml @@ -25,7 +25,7 @@ https://juejin.cn/post/6844903775631572999 - + true