新火炬后端单体项目初始化代码
已添加4个文件
已修改28个文件
1304 ■■■■ 文件已修改
.gitignore 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
db/双林新火炬MES数据库设计.pdma.json 560 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/common/aspect/ApiLogAspect.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/andon/controller/AndonButtonConfigController.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/andon/controller/AndonOrderController.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/andon/controller/AndonResponseConfigController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/andon/dto/AndonOrdeDto.java 151 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/andon/mapper/AndonButtonConfigMapper.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/andon/mapper/xml/AndonButtonConfigMapper.xml 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/andon/service/IAndonButtonConfigService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/andon/service/IAndonResponseConfigService.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/andon/service/impl/AndonButtonConfigServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/andon/service/impl/AndonResponseConfigServiceImpl.java 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/base/service/impl/FactoryServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/feishu/service/FeishuUserService.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/controller/MesWorkReportingController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/entity/MesProductionWorkOrder.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/entity/MesWorkReporting.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/service/IMesWorkReportingService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/service/impl/MesWorkReportingServiceImpl.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/qms/enums/PlanCategoryEnum.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/wms/WMSWebService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/wms/controller/WMSTestController.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/wms/dto/WSResponse.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/wms/request/ArrayOfWebServiceSendItem.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/wms/request/ReceiveMESScanItemList.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/wms/request/ReceiveReservation.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/wms/request/WebReservationOrder.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/wms/request/WebServiceSendItem.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/wms/service/WMSWebServiceClient.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/wms/service/WebServiceSoap.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/wms/service/impl/WMSWebServiceClientImpl.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gitignore
@@ -13,3 +13,4 @@
os_del_doc.cmd
.svn
derby.log
.gitignore
db/Ë«ÁÖлð¾æMESÊý¾Ý¿âÉè¼Æ.pdma.json
@@ -2,9 +2,9 @@
  "name": "双林新火炬MES数据库设计",
  "describe": "描述双薪新火炬MES数据库设计详情",
  "avatar": "",
  "version": "4.9.2",
  "version": "4.9.4",
  "createdTime": "2025-3-10 16:38:19",
  "updatedTime": "2025-8-18 15:02:20",
  "updatedTime": "2025-8-20 16:04:03",
  "dbConns": [],
  "profile": {
    "default": {
@@ -632,7 +632,7 @@
      "#DDE5FF"
    ],
    "DDLToggleCase": "L",
    "menuWidth": "364px"
    "menuWidth": "304px"
  },
  "entities": [
    {
@@ -64779,24 +64779,6 @@
          "id": "FC8D8EFD-EDAD-42FD-81CA-B2B3962BD05F"
        },
        {
          "defKey": "publish_time",
          "defName": "发布时间",
          "comment": "",
          "type": "",
          "len": "",
          "scale": "",
          "primaryKey": false,
          "notNull": false,
          "autoIncrement": false,
          "defaultValue": "",
          "hideInGraph": false,
          "refDict": "",
          "baseType": "89D69E81-EA34-42EE-9FA2-93B8BD27E098",
          "extProps": {},
          "domain": "7CFFA0D3-6A93-4DDC-BC10-DF21211064DC",
          "id": "7BC5A8E6-31E0-4B70-BAC5-87EFF639FE63"
        },
        {
          "defKey": "request_status",
          "defName": "请求状态",
          "comment": "",
@@ -64807,7 +64789,7 @@
          "notNull": false,
          "autoIncrement": false,
          "defaultValue": "",
          "hideInGraph": true,
          "hideInGraph": false,
          "refDict": "",
          "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64",
          "extProps": {},
@@ -64834,7 +64816,7 @@
        },
        {
          "defKey": "original_warehouse_id",
          "defName": "起始库存地",
          "defName": "原库存地",
          "comment": "",
          "type": "",
          "len": "",
@@ -64923,146 +64905,6 @@
          "extProps": {},
          "domain": "7CFFA0D3-6A93-4DDC-BC10-DF21211064DC",
          "id": "F0CEC477-F5FE-4622-83DB-FBFDA4344E30"
        },
        {
          "defKey": "material_number",
          "defName": "物料编码",
          "comment": "",
          "type": "",
          "len": "",
          "scale": "",
          "primaryKey": false,
          "notNull": false,
          "autoIncrement": false,
          "defaultValue": "",
          "hideInGraph": false,
          "domain": "BE09D493-E183-402D-ACC4-EEA21EB35B8E",
          "refDict": "",
          "extProps": {},
          "notes": {},
          "attr1": "",
          "attr2": "",
          "attr3": "",
          "attr4": "",
          "attr5": "",
          "attr6": "",
          "attr7": "",
          "attr8": "",
          "attr9": "",
          "id": "0B5A2CD6-7472-4E18-ACB1-6418C2A8A109",
          "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64"
        },
        {
          "defKey": "material_name",
          "defName": "物料名称",
          "comment": "",
          "type": "",
          "len": "",
          "scale": "",
          "primaryKey": false,
          "notNull": false,
          "autoIncrement": false,
          "defaultValue": "",
          "hideInGraph": true,
          "domain": "9092C4E0-1A54-4859-ABBB-5B62DBC27573",
          "refDict": "",
          "extProps": {},
          "notes": {},
          "attr1": "",
          "attr2": "",
          "attr3": "",
          "attr4": "",
          "attr5": "",
          "attr6": "",
          "attr7": "",
          "attr8": "",
          "attr9": "",
          "id": "AFBDF9D2-3B49-4620-9541-C15731785905",
          "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64"
        },
        {
          "defKey": "specified_quantity",
          "defName": "理论拉动数量",
          "comment": "",
          "type": "",
          "len": "",
          "scale": "",
          "primaryKey": false,
          "notNull": false,
          "autoIncrement": false,
          "defaultValue": "",
          "hideInGraph": false,
          "domain": "FF4459C5-6B45-4DBF-8FC0-E06239BC05B4",
          "refDict": "",
          "extProps": {},
          "notes": {},
          "attr1": "",
          "attr2": "",
          "attr3": "",
          "attr4": "",
          "attr5": "",
          "attr6": "",
          "attr7": "",
          "attr8": "",
          "attr9": "",
          "id": "60A2C50B-3F37-4319-B53A-72AE3E55CAFC",
          "baseType": "1A0BDC09-0792-4174-9E8E-80BE8DF44B8E"
        },
        {
          "defKey": "actual_quantity",
          "defName": "实际拉动数量",
          "comment": "",
          "type": "",
          "len": "",
          "scale": "",
          "primaryKey": false,
          "notNull": false,
          "autoIncrement": false,
          "defaultValue": "",
          "hideInGraph": false,
          "domain": "FF4459C5-6B45-4DBF-8FC0-E06239BC05B4",
          "refDict": "",
          "extProps": {},
          "notes": {},
          "attr1": "",
          "attr2": "",
          "attr3": "",
          "attr4": "",
          "attr5": "",
          "attr6": "",
          "attr7": "",
          "attr8": "",
          "attr9": "",
          "id": "AE123111-CDE3-4CFE-96ED-EFA3D3115CD2",
          "baseType": "1A0BDC09-0792-4174-9E8E-80BE8DF44B8E"
        },
        {
          "defKey": "remaining_quantity",
          "defName": "车间剩余数量",
          "comment": "",
          "type": "",
          "len": "",
          "scale": "",
          "primaryKey": false,
          "notNull": false,
          "autoIncrement": false,
          "defaultValue": "",
          "hideInGraph": false,
          "domain": "FF4459C5-6B45-4DBF-8FC0-E06239BC05B4",
          "refDict": "",
          "extProps": {},
          "notes": {},
          "attr1": "",
          "attr2": "",
          "attr3": "",
          "attr4": "",
          "attr5": "",
          "attr6": "",
          "attr7": "",
          "attr8": "",
          "attr9": "",
          "id": "12249855-7F62-4734-B5B8-1AACBE2A50CC",
          "baseType": "1A0BDC09-0792-4174-9E8E-80BE8DF44B8E"
        }
      ],
      "correlations": [],
@@ -65901,6 +65743,397 @@
          "attr9": "",
          "id": "4B21EDEF-B9C4-48C7-BF6A-AC5ABA159B8A",
          "baseType": "1A0BDC09-0792-4174-9E8E-80BE8DF44B8E"
        }
      ],
      "correlations": [],
      "indexes": [],
      "type": "P"
    },
    {
      "id": "2FF92658-07FE-49BC-A690-E24FA5226BB3",
      "env": {
        "base": {
          "nameSpace": "",
          "codeRoot": ""
        }
      },
      "defKey": "mes_material_transfer_detail",
      "defName": "物料拉动明细",
      "comment": "",
      "properties": {
        "partitioned by": "(date string)",
        "row format delimited": "",
        "fields terminated by ','": "",
        "collection items terminated by '-'": "",
        "map keys terminated by ':'": "",
        "store as textfile;": ""
      },
      "sysProps": {
        "nameTemplate": "{defKey}[{defName}]"
      },
      "notes": {},
      "headers": [
        {
          "refKey": "hideInGraph",
          "hideInGraph": true
        },
        {
          "refKey": "defKey",
          "freeze": false,
          "hideInGraph": false
        },
        {
          "refKey": "defName",
          "freeze": false,
          "hideInGraph": false
        },
        {
          "refKey": "primaryKey",
          "freeze": false,
          "hideInGraph": false
        },
        {
          "refKey": "notNull",
          "freeze": false,
          "hideInGraph": true
        },
        {
          "refKey": "autoIncrement",
          "freeze": false,
          "hideInGraph": true
        },
        {
          "refKey": "domain",
          "freeze": false,
          "hideInGraph": true
        },
        {
          "refKey": "type",
          "freeze": false,
          "hideInGraph": false
        },
        {
          "refKey": "len",
          "freeze": false,
          "hideInGraph": false
        },
        {
          "refKey": "scale",
          "freeze": false,
          "hideInGraph": false
        },
        {
          "refKey": "comment",
          "freeze": false,
          "hideInGraph": true
        },
        {
          "refKey": "refDict",
          "freeze": false,
          "hideInGraph": true
        },
        {
          "refKey": "defaultValue",
          "freeze": false,
          "hideInGraph": true
        },
        {
          "refKey": "isStandard",
          "freeze": false,
          "hideInGraph": false
        },
        {
          "refKey": "uiHint",
          "freeze": false,
          "hideInGraph": true
        },
        {
          "refKey": "extProps",
          "freeze": false,
          "hideInGraph": true
        },
        {
          "refKey": "attr1",
          "freeze": false,
          "hideInGraph": true
        },
        {
          "refKey": "attr2",
          "freeze": false,
          "hideInGraph": true
        },
        {
          "refKey": "attr3",
          "freeze": false,
          "hideInGraph": true
        },
        {
          "refKey": "attr4",
          "freeze": false,
          "hideInGraph": true
        },
        {
          "refKey": "attr5",
          "freeze": false,
          "hideInGraph": true
        },
        {
          "refKey": "attr6",
          "freeze": false,
          "hideInGraph": true
        },
        {
          "refKey": "attr7",
          "freeze": false,
          "hideInGraph": true
        },
        {
          "refKey": "attr8",
          "freeze": false,
          "hideInGraph": true
        },
        {
          "refKey": "attr9",
          "freeze": false,
          "hideInGraph": true
        }
      ],
      "fields": [
        {
          "defKey": "id",
          "defName": "主键",
          "comment": "",
          "type": "",
          "len": "",
          "scale": "",
          "primaryKey": true,
          "notNull": true,
          "autoIncrement": false,
          "defaultValue": "",
          "hideInGraph": false,
          "refDict": "",
          "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64",
          "extProps": {},
          "domain": "16120F75-6AA7-4483-868D-F07F511BB081",
          "id": "F7E0BFAE-F178-43E0-8482-2DCE7CEFB184"
        },
        {
          "defKey": "create_by",
          "defName": "创建人",
          "comment": "",
          "domain": "54611CCC-CA4B-42E1-9F32-4944C85B85A6",
          "type": "",
          "len": "",
          "scale": "",
          "primaryKey": false,
          "notNull": false,
          "autoIncrement": false,
          "defaultValue": "",
          "hideInGraph": true,
          "refDict": "",
          "uiHint": "",
          "id": "F445F433-E877-4D2A-8ECE-03043F0ACB7D",
          "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64"
        },
        {
          "defKey": "create_time",
          "defName": "创建时间",
          "comment": "",
          "domain": "7CFFA0D3-6A93-4DDC-BC10-DF21211064DC",
          "type": "",
          "len": "",
          "scale": "",
          "primaryKey": false,
          "notNull": false,
          "autoIncrement": false,
          "defaultValue": "",
          "hideInGraph": true,
          "refDict": "",
          "uiHint": "",
          "id": "E690295E-8BFF-49DA-8966-6A3FE3824883",
          "baseType": "89D69E81-EA34-42EE-9FA2-93B8BD27E098"
        },
        {
          "defKey": "update_by",
          "defName": "更新人",
          "comment": "",
          "domain": "54611CCC-CA4B-42E1-9F32-4944C85B85A6",
          "type": "",
          "len": "",
          "scale": "",
          "primaryKey": false,
          "notNull": false,
          "autoIncrement": false,
          "defaultValue": "",
          "hideInGraph": true,
          "refDict": "",
          "uiHint": "",
          "id": "E3C7E33A-8B8C-4F70-BA59-3B5A10C50734",
          "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64"
        },
        {
          "defKey": "update_time",
          "defName": "更新时间",
          "comment": "",
          "domain": "7CFFA0D3-6A93-4DDC-BC10-DF21211064DC",
          "type": "",
          "len": "",
          "scale": "",
          "primaryKey": false,
          "notNull": false,
          "autoIncrement": false,
          "defaultValue": "",
          "hideInGraph": true,
          "refDict": "",
          "uiHint": "",
          "id": "93258189-F627-4142-BC39-0295E3A52033",
          "baseType": "89D69E81-EA34-42EE-9FA2-93B8BD27E098"
        },
        {
          "defKey": "del_flag",
          "defName": "删除标记",
          "comment": "",
          "type": "",
          "len": "",
          "scale": "",
          "primaryKey": false,
          "notNull": false,
          "autoIncrement": false,
          "defaultValue": "",
          "hideInGraph": false,
          "refDict": "",
          "baseType": "1D764C4A-6F9F-421E-B11A-6F3E23B51811",
          "extProps": {},
          "domain": "6BC8F04B-6CFA-4995-98D3-318F5CDD774E",
          "id": "F80D66E7-8670-4B1C-9940-041DBAD0580A"
        },
        {
          "defKey": "request_id",
          "defName": "申请单ID",
          "comment": "",
          "type": "",
          "len": "",
          "scale": "",
          "primaryKey": false,
          "notNull": false,
          "autoIncrement": false,
          "defaultValue": "",
          "hideInGraph": false,
          "refDict": "",
          "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64",
          "extProps": {},
          "domain": "16120F75-6AA7-4483-868D-F07F511BB081",
          "id": "850A2C7A-D321-4283-B735-7BCC56DF7933"
        },
        {
          "defKey": "material_number",
          "defName": "物料编码",
          "comment": "",
          "type": "",
          "len": "",
          "scale": "",
          "primaryKey": false,
          "notNull": false,
          "autoIncrement": false,
          "defaultValue": "",
          "hideInGraph": false,
          "domain": "BE09D493-E183-402D-ACC4-EEA21EB35B8E",
          "refDict": "",
          "extProps": {},
          "notes": {},
          "attr1": "",
          "attr2": "",
          "attr3": "",
          "attr4": "",
          "attr5": "",
          "attr6": "",
          "attr7": "",
          "attr8": "",
          "attr9": "",
          "id": "E77D6EFA-7408-4891-888B-D6FC2CF8E6E5",
          "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64"
        },
        {
          "defKey": "material_name",
          "defName": "物料名称",
          "comment": "",
          "type": "",
          "len": "",
          "scale": "",
          "primaryKey": false,
          "notNull": false,
          "autoIncrement": false,
          "defaultValue": "",
          "hideInGraph": true,
          "domain": "9092C4E0-1A54-4859-ABBB-5B62DBC27573",
          "refDict": "",
          "extProps": {},
          "notes": {},
          "attr1": "",
          "attr2": "",
          "attr3": "",
          "attr4": "",
          "attr5": "",
          "attr6": "",
          "attr7": "",
          "attr8": "",
          "attr9": "",
          "id": "270E5417-96C7-4540-AC29-07C8FCC3CD38",
          "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64"
        },
        {
          "defKey": "specified_quantity",
          "defName": "理论拉动数量",
          "comment": "",
          "type": "",
          "len": "",
          "scale": "",
          "primaryKey": false,
          "notNull": false,
          "autoIncrement": false,
          "defaultValue": "",
          "hideInGraph": false,
          "refDict": "",
          "baseType": "1A0BDC09-0792-4174-9E8E-80BE8DF44B8E",
          "extProps": {},
          "domain": "FF4459C5-6B45-4DBF-8FC0-E06239BC05B4",
          "id": "D7028092-5311-4FC1-B6F2-19B1FFBFA85B"
        },
        {
          "defKey": "actual_quantity",
          "defName": "实际拉动数量",
          "comment": "",
          "type": "",
          "len": "",
          "scale": "",
          "primaryKey": false,
          "notNull": false,
          "autoIncrement": false,
          "defaultValue": "",
          "hideInGraph": false,
          "refDict": "",
          "baseType": "1A0BDC09-0792-4174-9E8E-80BE8DF44B8E",
          "extProps": {},
          "domain": "FF4459C5-6B45-4DBF-8FC0-E06239BC05B4",
          "id": "4E9708B3-14B0-45A0-A3B8-351D759C7B47"
        },
        {
          "defKey": "remaining_quantity",
          "defName": "车间剩余数量",
          "comment": "",
          "type": "",
          "len": "",
          "scale": "",
          "primaryKey": false,
          "notNull": false,
          "autoIncrement": false,
          "defaultValue": "",
          "hideInGraph": false,
          "refDict": "",
          "baseType": "1A0BDC09-0792-4174-9E8E-80BE8DF44B8E",
          "extProps": {},
          "domain": "FF4459C5-6B45-4DBF-8FC0-E06239BC05B4",
          "id": "FE041E9A-5D05-42EE-AA33-C563B66B99A5"
        }
      ],
      "correlations": [],
@@ -69821,6 +70054,7 @@
        "70FEB6D0-FC18-42C5-8608-34E8BBB4A406",
        "D16FD5E0-8B16-4C0E-AD67-6E5C2FED1A65",
        "5835D3E9-4B10-48DC-B116-584E447AA201",
        "2FF92658-07FE-49BC-A690-E24FA5226BB3",
        "23C6B8F0-0010-4453-B3C2-9305746C37AB",
        "D3263A0C-1D6A-453A-B933-86651B5566FE"
      ],
src/main/java/org/jeecg/common/aspect/ApiLogAspect.java
@@ -4,7 +4,6 @@
import com.alibaba.fastjson.parser.Feature;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sap.conn.jco.*;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
@@ -83,6 +82,13 @@
                    break;
                case WMS:
                    dto.setRequestMethod("Webservice");
                    if (result instanceof Map) {
                        Map<String, Object> map = (Map<String, Object>) result;
                        dto.setResponseCode(map.get("ztype").toString());
                        dto.setResponseMessage(map.get("zmess").toString());
                        dto.setRequestBody(map.get("importParameters") == null ? null : map.get("importParameters").toString());
                        dto.setResponseBody(parseSAPResponseResult(map.get("result")));
                    }
                    break;
                case FEI_SHU:
                    dto.setRequestMethod("Http");
@@ -146,6 +152,8 @@
            } catch (JsonProcessingException e) {
                throw new JeecgBootException(e);
            }
        } else if (result instanceof String) {
            return result.toString();
        } else {
            try {
                String json = objectMapper.writeValueAsString(result);
src/main/java/org/jeecg/modules/andon/controller/AndonButtonConfigController.java
@@ -11,6 +11,7 @@
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.andon.dto.AndonButtonDTO;
import org.jeecg.modules.andon.dto.AndonOrdeDto;
import org.jeecg.modules.andon.entity.AndonButtonConfig;
import org.jeecg.modules.andon.service.IAndonButtonConfigService;
import org.jeecg.modules.andon.service.impl.AndonOrderServiceImpl;
@@ -84,8 +85,8 @@
     */
    @ApiOperation(value = "安灯发起-分页列表查询", notes = "安灯发起-分页列表查询")
    @GetMapping(value = "/queryUserAndonCallList")
    public Result<List<AndonButtonDTO>> queryUserAndonCallList(@RequestParam("factoryId") String factoryId) {
        List<AndonButtonDTO> list = andonButtonConfigService.queryUserAndonCallList(factoryId);
    public Result<List<AndonOrdeDto>> queryUserAndonCallList(@RequestParam("factoryId") String factoryId, @RequestParam("orderStatus") String orderStatus) {
        List<AndonOrdeDto> list = andonButtonConfigService.queryUserAndonCallList(factoryId,orderStatus);
        return Result.OK(list);
    }
@@ -97,8 +98,8 @@
     */
    @ApiOperation(value = "安灯响应-分页列表查询", notes = "安灯响应-分页列表查询")
    @GetMapping(value = "/queryUserAndonRespondList")
    public Result<List<AndonButtonDTO>> queryUserAndonRespondList(@RequestParam("factoryId") String factoryId) {
        List<AndonButtonDTO> list = andonButtonConfigService.queryUserAndonRespondList(factoryId);
    public Result<List<AndonOrdeDto>> queryUserAndonRespondList(@RequestParam("factoryId") String factoryId, @RequestParam("orderStatus") String orderStatus) {
        List<AndonOrdeDto> list = andonButtonConfigService.queryUserAndonRespondList(factoryId,orderStatus);
        return Result.OK(list);
    }
@@ -110,8 +111,8 @@
     */
    @ApiOperation(value = "安灯响应-分页列表查询", notes = "安灯响应-分页列表查询")
    @GetMapping(value = "/queryUserAndonHandelList")
    public Result<List<AndonButtonDTO>> queryUserAndonHandelList(@RequestParam("factoryId") String factoryId) {
        List<AndonButtonDTO> list = andonButtonConfigService.queryUserAndonHandelList(factoryId);
    public Result<List<AndonOrdeDto>> queryUserAndonHandelList(@RequestParam("factoryId") String factoryId ,@RequestParam("orderStatus") String orderStatus) {
        List<AndonOrdeDto> list = andonButtonConfigService.queryUserAndonHandelList(factoryId,orderStatus);
        return Result.OK(list);
    }
    /**
src/main/java/org/jeecg/modules/andon/controller/AndonOrderController.java
@@ -6,12 +6,16 @@
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.modules.andon.dto.AndonOrdeDto;
import org.jeecg.modules.andon.entity.AndonOrder;
import org.jeecg.modules.andon.service.IAndonOrderService;
import org.jeecg.modules.andon.service.IAndonResponseConfigService;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.modules.system.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -20,6 +24,7 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.Date;
import java.util.Arrays;
/**
@@ -37,6 +42,8 @@
    private IAndonOrderService andonOrderService;
    @Autowired
    private IAndonResponseConfigService andonResponseConfigService;
    /**
     * åˆ†é¡µåˆ—表查询
@@ -71,21 +78,62 @@
    @ApiOperation(value = "安灯工单-添加", notes = "安灯工单-添加")
    @PostMapping(value = "/add")
    public Result<String> add(@RequestBody AndonOrder andonOrder) {
        // æ ¹æ®button_id查询对应的产线ID
        if (andonOrder.getButtonId() != null) {
            String productionLineId = andonResponseConfigService.getProductionLineIdByButtonId(andonOrder.getButtonId());
            if (productionLineId != null) {
                andonOrder.setFactoryId(productionLineId);
            }
        }
        andonOrderService.save(andonOrder);
        return Result.OK("添加成功!");
    }
    /**
     * æ·»åŠ 
     *
     * @param andonOrder
     * @return
     */
    @AutoLog(value = "安灯APP工单-添加")
    @ApiOperation(value = "安灯APP工单-添加", notes = "安灯APP工单-添加")
    @PostMapping(value = "/app/add")
    public Result<String> appAdd(@RequestBody AndonOrder andonOrder) {
        // æ ¹æ®button_id查询对应的产线ID
        andonOrder.setAndonLevel("1");
        andonOrder.setFactoryId(andonOrder.getFactoryId());
        andonOrder.setOperator(andonOrder.getOperator());
        String Responder = andonResponseConfigService.getResponderByButtonId(andonOrder.getButtonId(),andonOrder.getFactoryId());
        andonOrder.setResponder(Responder);
        andonOrder.setProcessor(Responder);
        andonOrder.setOperateTime(new java.sql.Timestamp(System.currentTimeMillis()));
        andonOrderService.save(andonOrder);
        // åˆ›å»ºAndonOrderDto对象并复制属性
        AndonOrdeDto andonOrderDto = new AndonOrdeDto();
        // å¤åˆ¶å¿…要属性到Dto对象
        andonOrderDto.setId(andonOrder.getId());
        andonOrderDto.setButtonId(andonOrder.getButtonId());
        andonOrderDto.setFactoryId(andonOrder.getFactoryId());
        andonOrderDto.setOperator(andonOrder.getOperator());
        andonOrderDto.setResponder(andonOrder.getResponder());
        andonOrderDto.setProcessor(andonOrder.getProcessor());
        andonOrderDto.setAndonLevel(andonOrder.getAndonLevel());
        andonOrderDto.setOperateTime(andonOrder.getOperateTime());
        andonResponseConfigService.sendAndonNotification(andonOrderDto);
        return Result.OK("添加成功!");
    }
    /**
     * APP安灯响应操作
     *
     * @param orderId
     * @param id
     * @return
     */
    @ApiOperation(value = "APP安灯响应操作", notes = "APP安灯响应操作")
    @GetMapping(value = "/AndonRespond")
    public Result<String> AndonRespond(@RequestParam("orderId") String orderId) {
        AndonOrder andonOrder = andonOrderService.getById(orderId);
    public Result<String> AndonRespond(@RequestParam("id") String id) {
        AndonOrder andonOrder = andonOrderService.getById(id);
        andonOrder.setOrderStatus("2");
        andonOrderService.updateById(andonOrder);
        return Result.OK("响应成功!");
@@ -94,7 +142,6 @@
    /**
     * APP安灯处理操作
     *
     *
     * @return
     */
src/main/java/org/jeecg/modules/andon/controller/AndonResponseConfigController.java
@@ -11,6 +11,7 @@
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.andon.dto.AndonButtonDTO;
import org.jeecg.modules.andon.dto.AndonOrdeDto;
import org.jeecg.modules.andon.entity.AndonResponseConfig;
import org.jeecg.modules.andon.service.IAndonResponseConfigService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -68,9 +69,8 @@
    @AutoLog(value = "安灯工单-发送飞书消息")
    @ApiOperation(value = "安灯工单-发送飞书消息", notes = "安灯工单-发送飞书消息")
    @PostMapping(value = "/sendMessage")
    public Result<String> sendMessage(@RequestBody AndonButtonDTO andonButtonDTO) {
    public Result<String> sendMessage(@RequestBody AndonOrdeDto andonButtonDTO) {
        try {
            andonButtonDTO.setBlinkingFlag(1);
            // è°ƒç”¨æœåŠ¡å±‚å¤„ç†ä¸šåŠ¡é€»è¾‘
            andonResponseConfigService.sendAndonNotification(andonButtonDTO);
            return Result.OK("添加成功!");
src/main/java/org/jeecg/modules/andon/dto/AndonOrdeDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,151 @@
package org.jeecg.modules.andon.dto;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.jeecg.common.aspect.annotation.Dict;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
@Data
public class AndonOrdeDto {
    /**主键*/
    @TableId(type = IdType.ASSIGN_ID)
    @ApiModelProperty(value = "主键")
    private String id;
    /**创建人*/
    @ApiModelProperty(value = "创建人")
    private String createBy;
    /**创建日期*/
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "创建日期")
    private Date createTime;
    /**更新人*/
    @ApiModelProperty(value = "更新人")
    private String updateBy;
    /**更新日期*/
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "更新日期")
    private Date updateTime;
    /**删除标记*/
    @ApiModelProperty(value = "删除标记")
    @TableLogic
    private Integer delFlag;
    /**产线ID*/
    @ApiModelProperty(value = "产线ID")
    @Dict(dictTable = "base_factory", dicCode = "id", dicText = "factory_name")
    private String factoryId;
    /**安灯类型*/
    @ApiModelProperty(value = "安灯类型")
    @Dict(dictTable = "andon_button_config", dicCode = "id", dicText = "button_name")
    private String buttonId;
    /**安灯人*/
    @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username")
    @ApiModelProperty(value = "安灯人")
    private String operator;
    /**安灯时间*/
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "安灯时间")
    private Date operateTime;
    /**安灯等级*/
    @Dict(dicCode = "andon_level")
    @ApiModelProperty(value = "安灯等级")
    private String andonLevel;
    /**响应人*/
    @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username")
    @ApiModelProperty(value = "响应人")
    private String responder;
    /**响应时间*/
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "响应时间")
    private Date responseTime;
    /**处理人*/
    @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username")
    @ApiModelProperty(value = "处理人")
    private String processor;
    /**处理完成时间*/
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "处理完成时间")
    private Date processTime;
    /**安灯状态*/
    @Dict(dicCode = "order_status")
    @ApiModelProperty(value = "安灯状态")
    private String orderStatus;
    /**问题描述*/
    @ApiModelProperty(value = "问题描述")
    private String problemDescreption;
    /**处理结果描述*/
    @ApiModelProperty(value = "处理结果描述")
    private String resolutionDescreption;
    @ApiModelProperty(value = "一级响应人openId")
    private String responderOpenId;
    @ApiModelProperty(value = "二级响应人openId")
    private String secondResponderOpenId;
    @ApiModelProperty(value = "三级响应人openId")
    private String thirdResponderOpenId;
    @ApiModelProperty(value = "三级响应人")
    private String thirdResponder;
    @ApiModelProperty(value = "二级响应人")
    private String secondResponder;
    /**产线名称*/
    @ApiModelProperty(value = "产线名称")
    private String factoryName;
    /**产线名称*/
    @ApiModelProperty(value = "工厂名称")
    private String parentFactoryName;
    /**一级响应时长*/
    @ApiModelProperty(value = "一级响应时长")
    private Integer upgradeResponseDuration;
    /**按钮名称*/
    @ApiModelProperty(value = "按钮名称")
    private String buttonName;
    /**
     * å®‰ç¯äººåç§°
     */
    @ApiModelProperty(value = "安灯人名称")
    private String operatorName;
    /**二级响应时长*/
    @ApiModelProperty(value = "二级响应时长")
    private Integer secondUpgradeResponseDuration;
    /**三级级响应时长*/
    @ApiModelProperty(value = "三级响应时长")
    private Integer thirdUpgradeResponseDuration;
}
src/main/java/org/jeecg/modules/andon/mapper/AndonButtonConfigMapper.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.andon.dto.AndonButtonDTO;
import org.jeecg.modules.andon.dto.AndonOrdeDto;
import org.jeecg.modules.andon.entity.AndonButtonConfig;
import java.util.List;
@@ -27,22 +28,21 @@
     * @param factoryId
     * @return
     */
    List<AndonButtonDTO> queryUserAndonCallList(String factoryId);
    List<AndonOrdeDto> queryUserAndonCallList(String factoryId, String orderStatus);
    /**
     * å“åº”安灯列表
     * @param factoryId
     * @return
     */
    List<AndonButtonDTO> queryUserAndonRespondList(String factoryId);
    List<AndonOrdeDto> queryUserAndonRespondList(String factoryId, String orderStatus);
    /**
     * å¤„理安灯列表
     * @param factoryId
     * @return
     */
    List<AndonButtonDTO> queryUserAndonHandelList(String factoryId);
    List<AndonOrdeDto> queryUserAndonHandelList(String factoryId, String orderStatus);
}
src/main/java/org/jeecg/modules/andon/mapper/xml/AndonButtonConfigMapper.xml
@@ -28,49 +28,26 @@
        where arc.factory_id=#{factoryId};
    </select>
    <select id="queryUserAndonCallList" resultType="org.jeecg.modules.andon.dto.AndonButtonDTO">
        select arc.id,
               abc.id          as buttonId,
               abc.button_name as buttonName,
               abc.button_code as buttonCode,
               (select count(1)
                from andon_order ao
                where ao.button_id = arc.button_id
                  and ao.factory_id = arc.factory_id
                  and ao.order_status = '1') as blinkingFlag,
               STUFF((SELECT ',' + CAST (ao.id AS VARCHAR)
                      FROM andon_order ao
                      WHERE ao.button_id = arc.button_id
                        and ao.factory_id = arc.factory_id
                        and ao.order_status = '1'
                   FOR XML PATH ('')), 1, 1, '') as orderIds,
               bf.factory_name as factoryName,
               parent_bf.factory_name as parentFactoryName,
               abc.upgrade_response_duration as upgradeResponseDuration,
               abc.second_upgrade_response_duration as secondUpgradeResponseDuration,
               arc.firster_responder as responder,
               arc.second_responder,
               arc.third_responder,
               STUFF((SELECT ',' + ao.order_status
                      FROM andon_order ao
                      WHERE ao.button_id = arc.button_id
                        and ao.factory_id = arc.factory_id
                        and ao.order_status = '1'
                   FOR XML PATH ('')), 1, 1, '') as orderStatus
        from andon_response_config arc
                 left join andon_button_config abc
                           on arc.button_id = abc.id
                 left join base_factory bf on arc.factory_id = bf.id
                 left join base_factory parent_bf on bf.parent_id = parent_bf.id
        where arc.factory_id=#{factoryId}
          and (select count (1)
               from andon_order ao
               where ao.button_id = arc.button_id
                 and ao.factory_id = arc.factory_id
                 and ao.order_status = '1') = 1
    <select id="queryUserAndonCallList" resultType="org.jeecg.modules.andon.dto.AndonOrdeDto">
        SELECT
            ao.*,
            bf.factory_name as factoryName,
            parent_bf.factory_name as parentFactoryName,
            abc.button_name as buttonName,
            abc.upgrade_response_duration as upgradeResponseDuration,
            abc.second_upgrade_response_duration as secondUpgradeResponseDuration,
            su.username as operatorName
        FROM andon_order ao
                 LEFT JOIN base_factory bf ON ao.factory_id = bf.id
                 LEFT JOIN base_factory parent_bf ON bf.parent_id = parent_bf.id
                 LEFT JOIN andon_button_config abc ON ao.button_id = abc.id
                 LEFT JOIN sys_user su ON ao.operator = su.id
        WHERE ao.factory_id = #{factoryId}
          AND ao.del_flag = 0
          AND ao.order_status = #{orderStatus}
    </select>
    <select id="queryUserAndonRespondList" resultType="org.jeecg.modules.andon.dto.AndonButtonDTO">
    <select id="queryUserAndonRespondList" resultType="org.jeecg.modules.andon.dto.AndonOrdeDto">
        select arc.id,
               abc.id                               as buttonId,
               abc.button_name                      as buttonName,
src/main/java/org/jeecg/modules/andon/service/IAndonButtonConfigService.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.andon.dto.AndonButtonDTO;
import org.jeecg.modules.andon.dto.AndonOrdeDto;
import org.jeecg.modules.andon.entity.AndonButtonConfig;
import java.util.List;
@@ -28,21 +29,20 @@
     * @param factoryId
     * @return
     */
    List<AndonButtonDTO> queryUserAndonCallList(String factoryId);
    List<AndonOrdeDto> queryUserAndonCallList(String factoryId, String orderStatus);
    /**
     * æŸ¥è¯¢ç”¨æˆ·å‘起安灯响应列表
     * @param factoryId
     * @return
     */
    List<AndonButtonDTO> queryUserAndonRespondList(String factoryId);
    List<AndonOrdeDto> queryUserAndonRespondList(String factoryId,String orderStatus);
    /**
     * æŸ¥è¯¢ç”¨æˆ·å‘起安灯处理列表
     * @param factoryId
     * @return
     */
    List<AndonButtonDTO> queryUserAndonHandelList(String factoryId);
    List<AndonOrdeDto> queryUserAndonHandelList(String factoryId,String orderStatus);
}
src/main/java/org/jeecg/modules/andon/service/IAndonResponseConfigService.java
@@ -2,6 +2,8 @@
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.andon.dto.AndonButtonDTO;
import org.jeecg.modules.andon.dto.AndonOrdeDto;
import org.jeecg.modules.andon.entity.AndonOrder;
import org.jeecg.modules.andon.entity.AndonResponseConfig;
import java.util.List;
@@ -17,11 +19,34 @@
    /**
     * æ ¹æ®button_id获取产线ID
     * @param buttonId
     * @return
     */
    String getProductionLineIdByButtonId(String buttonId);
    /**
     * æ ¹æ®button_id获取响应人
     * @param buttonId
     * @return
     */
    String getResponderByButtonId(String buttonId,String factoryId);
    /**
     * æ ¹æ®button_id和factory_id获取响应配置对象
     * @param buttonId æŒ‰é’®ID
     * @param factoryId å·¥åŽ‚/产线ID
     * @return AndonResponseConfig å“åº”配置对象
     */
    AndonResponseConfig getResponseConfigByButtonIdAndFactoryId(String buttonId, String factoryId);
    /**
     * å‘送安灯通知
     * @param andonButtonDTO å®‰ç¯æŒ‰é’®DTO
     * @return ç»“æžœ
     */
    void sendAndonNotification(AndonButtonDTO andonButtonDTO);
    void sendAndonNotification(AndonOrdeDto andonButtonDTO);
}
src/main/java/org/jeecg/modules/andon/service/impl/AndonButtonConfigServiceImpl.java
@@ -1,7 +1,9 @@
package org.jeecg.modules.andon.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import liquibase.pro.packaged.S;
import org.jeecg.modules.andon.dto.AndonButtonDTO;
import org.jeecg.modules.andon.dto.AndonOrdeDto;
import org.jeecg.modules.andon.entity.AndonButtonConfig;
import org.jeecg.modules.andon.mapper.AndonButtonConfigMapper;
import org.jeecg.modules.andon.service.IAndonButtonConfigService;
@@ -30,18 +32,18 @@
    }
    @Override
    public List<AndonButtonDTO> queryUserAndonCallList(String factoryId) {
        return baseMapper.queryUserAndonCallList(factoryId);
    public List<AndonOrdeDto> queryUserAndonCallList(String factoryId, String orderStatus) {
        return baseMapper.queryUserAndonCallList(factoryId, orderStatus);
    }
    @Override
    public List<AndonButtonDTO> queryUserAndonRespondList(String factoryId) {
        return baseMapper.queryUserAndonRespondList(factoryId);
    public List<AndonOrdeDto> queryUserAndonRespondList(String factoryId, String orderStatus) {
        return baseMapper.queryUserAndonRespondList(factoryId, orderStatus);
    }
    @Override
    public List<AndonButtonDTO> queryUserAndonHandelList(String factoryId) {
        return baseMapper.queryUserAndonHandelList(factoryId);
    public List<AndonOrdeDto> queryUserAndonHandelList(String factoryId, String orderStatus) {
        return baseMapper.queryUserAndonHandelList(factoryId, orderStatus);
    }
src/main/java/org/jeecg/modules/andon/service/impl/AndonResponseConfigServiceImpl.java
@@ -6,6 +6,7 @@
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.modules.andon.dto.AndonButtonDTO;
import org.jeecg.modules.andon.dto.AndonOrdeDto;
import org.jeecg.modules.andon.entity.AndonButtonConfig;
import org.jeecg.modules.andon.entity.AndonOrder;
import org.jeecg.modules.andon.entity.AndonResponseConfig;
@@ -51,10 +52,35 @@
        return baseMapper.getAndonResponseConfigByFactoryIdAndButtonId(factoryId, buttonId);
    }
    @Override
    public String getProductionLineIdByButtonId(String buttonId) {
        QueryWrapper<AndonResponseConfig> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("button_id", buttonId);
        AndonResponseConfig config = this.getOne(queryWrapper);
        return config != null ? config.getFactoryId() : null;
    }
    @Override
    public String getResponderByButtonId(String buttonId,String factoryId) {
        QueryWrapper<AndonResponseConfig> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("button_id", buttonId);
        queryWrapper.eq("factory_id", factoryId); // å‡è®¾factory_id对应产线ID
        AndonResponseConfig config = this.getOne(queryWrapper, false);
        return config != null ? config.getFirsterResponder() : null;
    }
    @Override
    public AndonResponseConfig getResponseConfigByButtonIdAndFactoryId(String buttonId, String factoryId) {
        QueryWrapper<AndonResponseConfig> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("button_id", buttonId);
        queryWrapper.eq("factory_id", factoryId);
        // ä½¿ç”¨false参数,当查询到多条记录时不会抛出异常,而是返回第一条
        return this.getOne(queryWrapper, false);
    }
    @Override
    public void sendAndonNotification(AndonButtonDTO andonButtonDTO) {
    public void sendAndonNotification(AndonOrdeDto andonButtonDTO) {
        /**
         * 1. éªŒè¯å·¥å•状态
         */
@@ -62,16 +88,13 @@
            log.warn("请求参数为空");
            throw new IllegalArgumentException("请求参数不能为空");
        }
        /**
         * è®¾ç½®å®‰ç¯äºº
         */
        /**
         * 2. èŽ·å–å“åº”é…ç½®
         */
        AndonResponseConfig andonResponseConfig = this.getById(andonButtonDTO.getId());
        AndonResponseConfig andonResponseConfig = getResponseConfigByButtonIdAndFactoryId(andonButtonDTO.getButtonId(), andonButtonDTO.getFactoryId());
        AndonOrder andonOrder = andonOrderService.getById(andonButtonDTO.getOrderIds());
        AndonOrder andonOrder = andonOrderService.getById(andonButtonDTO.getId());
        if (andonOrder == null) {
            log.warn("未找到ID为[{}]的安灯订单");
            throw new IllegalArgumentException("未找到对应的安灯订单");
src/main/java/org/jeecg/modules/base/service/impl/FactoryServiceImpl.java
@@ -192,7 +192,7 @@
        List<String> list = Arrays.asList(productionIds.split(","));
        LambdaQueryWrapper<Factory> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Factory::getDelFlag, CommonConstant.DEL_FLAG_0);
//        queryWrapper.eq(Factory::getFactoryCategory, "PRODUCTION_LINE");
        queryWrapper.eq(Factory::getFactoryCategory, "3");
        queryWrapper.in(Factory::getId, list);
        queryWrapper.orderByAsc(Factory::getSorter);
        return super.list(queryWrapper);
src/main/java/org/jeecg/modules/feishu/service/FeishuUserService.java
@@ -5,7 +5,7 @@
import org.jeecg.common.util.PasswordUtil;
import org.jeecg.common.util.RestUtil;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.andon.dto.AndonButtonDTO;
import org.jeecg.modules.andon.dto.AndonOrdeDto;
import org.jeecg.modules.mes.entity.FeishuUser;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.modules.system.service.ISysUserService;
@@ -139,7 +139,7 @@
     * 2. ä¸€çº§å“åº”时长后检查状态,未处理则发送二级
     * 3. äºŒçº§å“åº”时长后检查状态,未处理则发送三级
     */
    public boolean sendAndonNotification(String accessToken, AndonButtonDTO andonOrde) {
    public boolean sendAndonNotification(String accessToken, AndonOrdeDto andonOrde) {
        try {
            String currentTime = sdf.format(new Date());
            log.info("【{}】触发一级响应(初级响应),安灯ID: {}", currentTime, andonOrde.getId());
@@ -178,7 +178,7 @@
     * å‘送指定级别的通知
     * @param level 1-一级,2-二级,3-三级
     */
    private boolean sendLevelNotification(String accessToken, AndonButtonDTO andonOrde, int level) {
    private boolean sendLevelNotification(String accessToken, AndonOrdeDto andonOrde, int level) {
        try {
            String levelDesc = getLevelDesc(level);
            String openId = getResponderOpenId(andonOrde, level);
@@ -250,7 +250,7 @@
     * @param currentLevel å½“前级别
     * @param delayMinutes å»¶è¿Ÿåˆ†é’Ÿæ•°ï¼ˆç”±å½“前级别响应时长决定)
     */
    private void scheduleNextLevelNotification(String accessToken, AndonButtonDTO andonOrde, int currentLevel, int delayMinutes) {
    private void scheduleNextLevelNotification(String accessToken, AndonOrdeDto andonOrde, int currentLevel, int delayMinutes) {
        int nextLevel = currentLevel + 1;
        if (nextLevel > 3) {
            log.info("已到达最高级别通知,无需继续调度,安灯ID: {}", andonOrde.getId());
@@ -306,7 +306,7 @@
    /**
     * æž„建通知内容(优化分隔符,提升可读性)
     */
    private String buildNotificationContent(AndonButtonDTO andonOrde, int level) {
    private String buildNotificationContent(AndonOrdeDto andonOrde, int level) {
        // èŽ·å–å·¥åŽ‚åç§°å’Œäº§çº¿åç§°ï¼Œåšç©ºå€¼ä¿æŠ¤
        String parentFactoryName = andonOrde.getParentFactoryName() != null ? andonOrde.getParentFactoryName() : "未知工厂";
        String factoryName = andonOrde.getFactoryName() != null ? andonOrde.getFactoryName() : "未知产线";
@@ -358,7 +358,7 @@
    /**
     * éªŒè¯é€šçŸ¥ç›¸å…³å‚æ•°
     */
    private boolean validateNotificationParams(AndonButtonDTO andonOrde) {
    private boolean validateNotificationParams(AndonOrdeDto andonOrde) {
        if (andonOrde == null) {
            log.error("安灯订单信息为空");
            return false;
@@ -401,7 +401,7 @@
    }
    // å·¥å…·æ–¹æ³•:获取响应人openId
    private String getResponderOpenId(AndonButtonDTO andonOrde, int level) {
    private String getResponderOpenId(AndonOrdeDto andonOrde, int level) {
        switch (level) {
            case 1: return andonOrde.getResponderOpenId();
            case 2: return andonOrde.getSecondResponderOpenId();
@@ -411,7 +411,7 @@
    }
    // å·¥å…·æ–¹æ³•:获取响应人名称
    private String getResponderName(AndonButtonDTO andonOrde, int level) {
    private String getResponderName(AndonOrdeDto andonOrde, int level) {
        String name = null;
        switch (level) {
            case 1:
@@ -430,7 +430,7 @@
    }
    // å·¥å…·æ–¹æ³•:获取响应时长(一级=二级延迟,二级=三级延迟)
    private int getResponseDuration(AndonButtonDTO andonOrde, int level) {
    private int getResponseDuration(AndonOrdeDto andonOrde, int level) {
        int duration = 0;
        switch (level) {
            case 1:
@@ -449,7 +449,7 @@
    }
    // å·¥å…·æ–¹æ³•:判断指定级别响应人是否有效
    private boolean hasValidResponder(AndonButtonDTO andonOrde, int level) {
    private boolean hasValidResponder(AndonOrdeDto andonOrde, int level) {
        String openId = getResponderOpenId(andonOrde, level);
        return openId != null && !openId.isEmpty();
    }
src/main/java/org/jeecg/modules/mes/controller/MesWorkReportingController.java
@@ -67,9 +67,9 @@
   @ApiOperation(value="工单报工-新增报工", notes="工单报工-新增报工")
   //@RequiresPermissions("org.jeecg.modules:mes_work_reporting:add")
   @PostMapping(value = "/add")
   public Result<String> add(@RequestBody MesWorkReporting mesWorkReporting) {
       mesWorkReportingService.addReporting(mesWorkReporting);
       return Result.OK("添加成功!");
   public Result<MesWorkReporting> add(@RequestBody MesWorkReporting mesWorkReporting) {
       MesWorkReporting workReporting = mesWorkReportingService.addReporting(mesWorkReporting);
       return Result.OK("添加成功!", workReporting);
   }
   /**
src/main/java/org/jeecg/modules/mes/entity/MesProductionWorkOrder.java
@@ -115,7 +115,7 @@
    /**实际报工数量*/
    @Excel(name = "实际报工数量", width = 15)
    @ApiModelProperty(value = "实际报工数量")
    private BigDecimal actualQuantity;
    private BigDecimal actualQuantity = BigDecimal.ZERO;
    /**已生产托数(当前班次已生产的托数量,每次报工时更新)*/
    @Excel(name = "已生产托数", width = 15)
    @ApiModelProperty(value = "已生产托数")
src/main/java/org/jeecg/modules/mes/entity/MesWorkReporting.java
@@ -114,5 +114,11 @@
    @TableField(exist = false)
    @ApiModelProperty(value = "仓库名称")
    private String warehouseName;
    @TableField(exist = false)
    @ApiModelProperty(value = "仓库编码")
    private String warehouseCode;
    @TableField(exist = false)
    @ApiModelProperty(value = "报工类型(成品FINISHED、半成品HALF)")
    private String reportType;
}
src/main/java/org/jeecg/modules/mes/service/IMesWorkReportingService.java
@@ -15,5 +15,5 @@
    List<MesWorkReporting> queryWorkReportingByWorkOrderId(String workOrderId);
    List<MesWorkReporting> queryWorkReportingByOrderId(String orderId);
    void addReporting(MesWorkReporting mesWorkReporting);
    MesWorkReporting addReporting(MesWorkReporting mesWorkReporting);
}
src/main/java/org/jeecg/modules/mes/service/impl/MesWorkReportingServiceImpl.java
@@ -34,6 +34,11 @@
import org.jeecg.modules.pms.service.IPmsMaterialProcessService;
import org.jeecg.modules.pms.service.IPmsProcessBillMaterialsService;
import org.jeecg.modules.pms.vo.ProcessBillMaterialsDetailVo;
import org.jeecg.modules.qms.entity.InspectionPlan;
import org.jeecg.modules.qms.entity.InspectionPlanItem;
import org.jeecg.modules.qms.enums.PlanCategoryEnum;
import org.jeecg.modules.qms.service.IInspectionPlanItemService;
import org.jeecg.modules.qms.service.IInspectionPlanService;
import org.jeecg.modules.sap.request.OrderLoadRequest;
import org.jeecg.modules.sap.request.OrderReportRequest;
import org.jeecg.modules.sap.service.OrderLoadService;
@@ -88,6 +93,10 @@
    private OrderReportService orderReportService;
    @Autowired
    private OrderLoadService orderLoadService;
    @Autowired
    private IInspectionPlanService inspectionPlanService;
    @Autowired
    private IInspectionPlanItemService inspectionPlanItemService;
    @Override
    public List<MesWorkReporting> queryWorkReportingByWorkOrderId(String workOrderId) {
@@ -101,7 +110,7 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void addReporting(MesWorkReporting mesWorkReporting) {
    public MesWorkReporting addReporting(MesWorkReporting mesWorkReporting) {
        MesProductionWorkOrder workOrder = mesProductionWorkOrderService.getById(mesWorkReporting.getWorkOrderId());
        if (workOrder == null) {
            throw new JeecgBootException("工单不存在!");
@@ -134,7 +143,9 @@
        int currentPallets = workOrder.getFinishedPallets() + 1;
        String batchNumber = yearLastTwo + dayOfYearStr + shiftGroup.getGroupCode() + currentPallets;
        mesWorkReporting.setBatchNumber(batchNumber)
                .setWorkOrderCode(workOrder.getWorkOrderCode())
                .setWarehouseId(lineSideWarehouse.getId())
                .setWarehouseCode(lineSideWarehouse.getWarehouseCode())
                .setReporter(Objects.requireNonNull(CommonUtils.getCurrentUser()).getUsername())
                .setReportTime(new Date());
        String date = today.format(DateTimeFormatter.ofPattern("yyMMdd"));
@@ -144,11 +155,12 @@
            case FINISHED_PRODUCT:
                //成品报工
                productReport(mesWorkReporting, workOrder, lineSideWarehouse);
                //生成检验工单
                generateInspectionOrder(mesWorkReporting, workOrder);
                //拼接成品报工托号
                String palletNumber4 = sysBusinessCodeRuleService.generateBusinessCodeSeq("WorkReportingPalletNumber4");
                String finishedPalletNumber = material.getMaterialNumber() + date + palletNumber4;
                mesWorkReporting.setPalletNumber(finishedPalletNumber);
                //todo æ‰“印成品托标签、检验标识卡、移库单、完工检验工单
                mesWorkReporting.setPalletNumber(finishedPalletNumber).setReportType("FINISHED");
                break;
            case INNER_FLANGE:
            case OUTER_FLANGE:
@@ -158,7 +170,7 @@
                Shift shift = shiftService.getById(workOrder.getShiftId());
                String palletNumber6 = sysBusinessCodeRuleService.generateBusinessCodeSeq("WorkReportingPalletNumber6");
                String halfPalletNumber = factory.getFactoryCode() + material.getMaterialNumber() + date + shift.getShiftCode() + palletNumber6;
                mesWorkReporting.setPalletNumber(halfPalletNumber);
                mesWorkReporting.setPalletNumber(halfPalletNumber).setReportType("HALF");
                break;
        }
        //新增报工记录
@@ -169,6 +181,8 @@
                .setActualQuantity(workOrder.getActualQuantity().add(mesWorkReporting.getQuantity()))
                .setFinishedPallets(workOrder.getFinishedPallets() + 1);
        mesProductionWorkOrderService.updateById(productionWorkUpdateOrder);
        //返回报工记录,用于托标签打印
        return mesWorkReporting;
    }
    //半成品(内法兰、外法兰)、成品报工
@@ -246,6 +260,27 @@
        }
    }
    //根据检验方案生成检验工单
    private void generateInspectionOrder(MesWorkReporting mesWorkReporting, MesProductionWorkOrder workOrder) {
        //1.根据物料编码查询检验方案
        InspectionPlan inspectionPlan = inspectionPlanService.list(new LambdaQueryWrapper<InspectionPlan>()
                .eq(InspectionPlan::getMaterialNumber, workOrder.getMaterialNumber())
                .eq(InspectionPlan::getPlanCategory, PlanCategoryEnum.COMPLETION_INSPECTION.name())
                .eq(InspectionPlan::getPlanStatus, CommonConstant.STATUS_1)
                .eq(InspectionPlan::getDelFlag, CommonConstant.DEL_FLAG_0)).stream().findFirst().orElse(null);
        if (inspectionPlan == null) {
            throw new JeecgBootException("未找到该物料的检验方案!");
        }
        List<InspectionPlanItem> inspectionPlanItemList = inspectionPlanItemService.list(new LambdaQueryWrapper<InspectionPlanItem>()
                .eq(InspectionPlanItem::getPlanId, inspectionPlan.getId())
                .orderByAsc(InspectionPlanItem::getSorter));
        if (inspectionPlanItemList.isEmpty()) {
            throw new JeecgBootException("未找到该物料的检验方案检验项明细!");
        }
        //2.生成检验工单
        //todo æ£€éªŒå·¥å•目前还没有生成代码,没有功能
    }
    private List<MesMaterialLoading> deductQuantity(List<MesMaterialLoading> materialLoadingRecordList, BigDecimal quantity) {
        for (MesMaterialLoading mesMaterialLoading : materialLoadingRecordList) {
            if (mesMaterialLoading.getRemainingQuantity().compareTo(quantity) >= 0) {
src/main/java/org/jeecg/modules/qms/enums/PlanCategoryEnum.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package org.jeecg.modules.qms.enums;
public enum PlanCategoryEnum {
    FIRST_INSPECTION, //首检
    ROUTING_INSPECTION, //巡检
    COMPLETION_INSPECTION; //完工检
    public static PlanCategoryEnum fromName(String name) {
        for (PlanCategoryEnum category : PlanCategoryEnum.values()) {
            if (category.name().equals(name)) {
                return category;
            }
        }
        return null;
    }
}
src/main/java/org/jeecg/modules/wms/WMSWebService.java
@@ -7,6 +7,8 @@
import javax.xml.ws.WebServiceClient;
import javax.xml.ws.WebServiceFeature;
import javax.xml.ws.Service;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.modules.wms.service.WebServiceSoap;
import org.springframework.stereotype.Component;
@@ -16,6 +18,7 @@
 * Generated source version: 3.5.5
 *
 */
@Slf4j
@Component
@WebServiceClient(name = "WebService",
                  wsdlLocation = "classpath:/wsdl/WebService.asmx.wsdl",
@@ -32,9 +35,7 @@
        try {
            url = new URL("classpath:/wsdl/WebService.asmx.wsdl");
        } catch (MalformedURLException e) {
            java.util.logging.Logger.getLogger(WMSWebService.class.getName())
                .log(java.util.logging.Level.INFO,
                     "Can not initialize the default wsdl from {0}", "classpath:/wsdl/WebService.asmx.wsdl");
            log.error("Can not initialize the default wsdl from {}", "classpath:/wsdl/WebService.asmx.wsdl");
        }
        WSDL_LOCATION = url;
    }
src/main/java/org/jeecg/modules/wms/controller/WMSTestController.java
@@ -3,44 +3,38 @@
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.transport.http.HTTPConduit;
import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.wms.WMSWebService;
import org.jeecg.modules.wms.dto.WSResponse;
import org.jeecg.modules.wms.request.ReceiveWMSScanItemList;
import org.jeecg.modules.wms.request.*;
import org.jeecg.modules.wms.service.MESWebServiceSoap;
import org.jeecg.modules.wms.service.WebServiceSoap;
import org.jeecg.modules.wms.service.WMSWebServiceClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
@Api(tags = "WMS集成测试")
@RestController
@RequestMapping("/wms/client")
@Slf4j
public class WMSTestController {
    @Value("${webservice.url}")
    private String url;
    @Autowired
    private WMSWebService webService;
    private WMSWebServiceClient webServiceClient;
    private final static String localUrl = "http://localhost:9989/jeecg-boot/webservice/ReceiveWMSScanItemList?wsdl";
    private final static String localUrl = "http://localhost:9989/ebservice/ReceiveWMSScanItemList?wsdl";
    @ApiOperation(value = "WMS集成测试-接收WMS移库结果", notes = "WMS集成测试-接收WMS移库结果")
    @PostMapping("/testReceiveWMSScanItemList")
    public Result<?> testReceiveWMSScanItemList() {
    public Result<?> testReceiveWMSScanItemList(@RequestBody List<WMSWebServiceSendItem> list) {
        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
        factory.setAddress(localUrl);
        factory.setServiceClass(MESWebServiceSoap.class);
        MESWebServiceSoap service = (MESWebServiceSoap) factory.create();
        ReceiveWMSScanItemList request = new ReceiveWMSScanItemList();
        request.setWmsWebServiceSendItemList(list);
        WSResponse response = service.receiveWMSScanItemList(request);
        return Result.ok(response);
    }
@@ -54,20 +48,45 @@
//        WebServiceSoap service = (WebServiceSoap) factory.create();
//        String response = service.helloWorld();
//        return Result.ok(response);
        WebServiceSoap port = webService.getWebServiceSoap12();
//        WebServiceSoap port = webService.getWebServiceSoap();
        // 2. èŽ·å– CXF åº•层 Client å¯¹è±¡
        Client client = ClientProxy.getClient(port);
//        Client client = ClientProxy.getClient(port);
        // 3. èŽ·å– HTTPConduit å¹¶è®¾ç½®è¶…æ—¶
        HTTPConduit http = (HTTPConduit) client.getConduit();
        HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
//        HTTPConduit http = (HTTPConduit) client.getConduit();
//        HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
//
//        httpClientPolicy.setConnectionTimeout(10 * 1000); // è¿žæŽ¥è¶…æ—¶ 10 ç§’
//        httpClientPolicy.setReceiveTimeout(300 * 1000);   // è¯»å–è¶…æ—¶ 60 ç§’(重点!)
        httpClientPolicy.setConnectionTimeout(10 * 1000); // è¿žæŽ¥è¶…æ—¶ 10 ç§’
        httpClientPolicy.setReceiveTimeout(300 * 1000);   // è¯»å–è¶…æ—¶ 60 ç§’(重点!)
        http.setClient(httpClientPolicy);
        String result = port.helloWorld();
        return Result.ok(result);
//        http.setClient(httpClientPolicy);
        Map<String, Object> stringObjectMap = webServiceClient.helloWorld();
        return Result.ok(stringObjectMap);
    }
    @ApiOperation(value = "WMS集成测试-物料拉动", notes = "WMS集成测试-物料拉动")
    @PostMapping("/receiveReservation")
    public Result<?> receiveReservation(@RequestBody WebReservationOrder request) {
        Map<String, Object> stringObjectMap = webServiceClient.receiveReservation(request);
        return Result.ok(stringObjectMap);
    }
    @ApiOperation(value = "WMS集成测试-移库申请", notes = "WMS集成测试-移库申请")
    @PostMapping("/receiveMESScanItemList")
    public Result<?> receiveMESScanItemList(@RequestBody List<WebServiceSendItem> webServiceSendItem) {
        ArrayOfWebServiceSendItem request = new ArrayOfWebServiceSendItem();
        request.setWebServiceSendItem(webServiceSendItem);
        Map<String, Object> stringObjectMap = webServiceClient.receiveMESScanItemList(request);
        return Result.ok(stringObjectMap);
    }
    @ApiOperation(value = "WMS集成测试-移库申请撤销", notes = "WMS集成测试-移库申请撤销")
    @PostMapping("/deliOrderDelete")
    public Result<?> deliOrderDelete(@RequestParam String sFactoryCode, @RequestParam String sStockRecord) {
        Map<String, Object> stringObjectMap = webServiceClient.deliOrderDelete(sFactoryCode, sStockRecord);
        return Result.ok(stringObjectMap);
    }
}
src/main/java/org/jeecg/modules/wms/dto/WSResponse.java
@@ -33,14 +33,14 @@
@Getter
@Setter
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "WSResponse", propOrder = {
@XmlType(name = "WSResponse",  propOrder = {
        "errorCode",
        "errorDesc"
})
public class WSResponse {
    @XmlElement(name = "ErrorCode")
    @XmlElement(name = "ErrorCode", namespace = "http://tempuri.org/")
    protected String errorCode;
    @XmlElement(name = "ErrorDesc")
    @XmlElement(name = "ErrorDesc", namespace = "http://tempuri.org/")
    protected String errorDesc;
}
src/main/java/org/jeecg/modules/wms/request/ArrayOfWebServiceSendItem.java
@@ -34,7 +34,7 @@
})
public class ArrayOfWebServiceSendItem {
    @XmlElement(name = "WebServiceSendItem", nillable = true)
    @XmlElement(name = "WebServiceSendItem", nillable = true, namespace = "http://tempuri.org/")
    protected List<WebServiceSendItem> webServiceSendItem;
    /**
@@ -66,4 +66,7 @@
        return this.webServiceSendItem;
    }
    public void setWebServiceSendItem(List<WebServiceSendItem> webServiceSendItem) {
        this.webServiceSendItem = webServiceSendItem;
    }
}
src/main/java/org/jeecg/modules/wms/request/ReceiveMESScanItemList.java
@@ -35,6 +35,6 @@
@Setter
public class ReceiveMESScanItemList {
    @XmlElement(name = "oMESScanItemList")
    @XmlElement(name = "oMESScanItemList", namespace = "http://tempuri.org/")
    protected ArrayOfWebServiceSendItem omesScanItemList;
}
src/main/java/org/jeecg/modules/wms/request/ReceiveReservation.java
@@ -4,10 +4,7 @@
import lombok.Getter;
import lombok.Setter;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.*;
/**
@@ -38,5 +35,6 @@
@Setter
public class ReceiveReservation {
    @XmlElement(name = "oWebReservationOrder")
    protected WebReservationOrder oWebReservationOrder;
}
src/main/java/org/jeecg/modules/wms/request/WebReservationOrder.java
@@ -8,6 +8,7 @@
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
import java.io.Serializable;
import java.math.BigDecimal;
@@ -40,12 +41,21 @@
})
@Getter
@Setter
public class WebReservationOrder {
public class WebReservationOrder implements Serializable {
    @XmlElement(name = "FactoryCode")
    @XmlElement(name = "FactoryCode", namespace = "http://tempuri.org/")
    protected String factoryCode;
    @XmlElement(name = "ReservationOrder")
    @XmlElement(name = "ReservationOrder", namespace = "http://tempuri.org/")
    protected String reservationOrder;
    @XmlElement(name = "Total", required = true)
    @XmlElement(name = "Total", required = true, namespace = "http://tempuri.org/")
    protected BigDecimal total;
    @Override
    public String toString() {
        return "WebReservationOrder{" +
                "factoryCode='" + factoryCode + '\'' +
                ", reservationOrder='" + reservationOrder + '\'' +
                ", total=" + total +
                '}';
    }
}
src/main/java/org/jeecg/modules/wms/request/WebServiceSendItem.java
@@ -70,38 +70,38 @@
@Setter
public class WebServiceSendItem {
    @XmlElement(name = "FactoryCode")
    @XmlElement(name = "FactoryCode", namespace = "http://tempuri.org/")
    protected String factoryCode;
    @XmlElement(name = "SkuCode")
    @XmlElement(name = "SkuCode", namespace = "http://tempuri.org/")
    protected String skuCode;
    @XmlElement(name = "Align")
    @XmlElement(name = "Align", namespace = "http://tempuri.org/")
    protected String align;
    @XmlElement(name = "Pallet")
    @XmlElement(name = "Pallet", namespace = "http://tempuri.org/")
    protected String pallet;
    @XmlElement(name = "PackageNo")
    @XmlElement(name = "PackageNo", namespace = "http://tempuri.org/")
    protected String packageNo;
    @XmlElement(name = "TrackLot")
    @XmlElement(name = "TrackLot", namespace = "http://tempuri.org/")
    protected long trackLot;
    @XmlElement(name = "Series")
    @XmlElement(name = "Series", namespace = "http://tempuri.org/")
    protected long series;
    @XmlElement(name = "MesStockID")
    @XmlElement(name = "MesStockID", namespace = "http://tempuri.org/")
    protected String mesStockID;
    @XmlElement(name = "Quantity", required = true)
    @XmlElement(name = "Quantity", required = true, namespace = "http://tempuri.org/")
    protected BigDecimal quantity;
    @XmlElement(name = "SapTrackLot")
    @XmlElement(name = "SapTrackLot", namespace = "http://tempuri.org/")
    protected String sapTrackLot;
    @XmlElement(name = "Section")
    @XmlElement(name = "Section", namespace = "http://tempuri.org/")
    protected String section;
    @XmlElement(name = "DestSection")
    @XmlElement(name = "DestSection", namespace = "http://tempuri.org/")
    protected String destSection;
    @XmlElement(name = "SupplierCode")
    @XmlElement(name = "SupplierCode", namespace = "http://tempuri.org/")
    protected String supplierCode;
    @XmlElement(name = "SupplierTrackLot")
    @XmlElement(name = "SupplierTrackLot", namespace = "http://tempuri.org/")
    protected String supplierTrackLot;
    @XmlElement(name = "StageID")
    @XmlElement(name = "StageID", namespace = "http://tempuri.org/")
    protected String stageID;
    @XmlElement(name = "Remark")
    @XmlElement(name = "Remark", namespace = "http://tempuri.org/")
    protected String remark;
    @XmlElement(name = "OrderCode")
    @XmlElement(name = "OrderCode", namespace = "http://tempuri.org/")
    protected String orderCode;
}
src/main/java/org/jeecg/modules/wms/service/WMSWebServiceClient.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
package org.jeecg.modules.wms.service;
import org.jeecg.modules.wms.request.ArrayOfWebServiceSendItem;
import org.jeecg.modules.wms.request.WebReservationOrder;
import java.util.Map;
public interface WMSWebServiceClient {
    /**
     * æµ‹è¯•连通接口
     * @return
     */
    Map<String, Object> helloWorld();
    /**
     * ç‰©æ–™æ‹‰åЍ
     * @param oWebReservationOrder
     * @return
     */
    Map<String, Object> receiveReservation(WebReservationOrder oWebReservationOrder);
    /**
     * ç§»åº“申请
     * @param oMESScanItemList
     * @return
     */
    Map<String, Object> receiveMESScanItemList(ArrayOfWebServiceSendItem oMESScanItemList);
    /**
     * æ’¤é”€ç§»åº“申请
     * @param sFactoryCode
     * @param sStockRecord
     * @return
     */
    Map<String, Object> deliOrderDelete(String sFactoryCode, String sStockRecord);
}
src/main/java/org/jeecg/modules/wms/service/WebServiceSoap.java
@@ -46,7 +46,7 @@
    WSResponse receiveMESScanItemList(
            @WebParam(name = "oMESScanItemList", targetNamespace = "http://tempuri.org/")
            ArrayOfWebServiceSendItem oMESScanItemList
            ArrayOfWebServiceSendItem omesScanItemList
    );
    @WebMethod(operationName = "DeliOrderDelete", action = "http://tempuri.org/DeliOrderDelete")
src/main/java/org/jeecg/modules/wms/service/impl/WMSWebServiceClientImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,75 @@
package org.jeecg.modules.wms.service.impl;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.aspect.annotation.ApiLog;
import org.jeecg.common.constant.ApiLogCategoryEnum;
import org.jeecg.modules.wms.WMSWebService;
import org.jeecg.modules.wms.dto.WSResponse;
import org.jeecg.modules.wms.request.ArrayOfWebServiceSendItem;
import org.jeecg.modules.wms.request.WebReservationOrder;
import org.jeecg.modules.wms.service.WMSWebServiceClient;
import org.jeecg.modules.wms.service.WebServiceSoap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
@Service
@Slf4j
public class WMSWebServiceClientImpl implements WMSWebServiceClient {
    @Autowired
    private WMSWebService webService;
    @Override
    @ApiLog(apiName = "WMS测试连通接口(HelloWorld)", apiCategory = ApiLogCategoryEnum.WMS)
    public Map<String, Object> helloWorld() {
        Map<String, Object> resultMap = new HashMap<>();
        WebServiceSoap port = webService.getWebServiceSoap();
        String result = port.helloWorld();
        resultMap.put("zmess", "请求成功");
        resultMap.put("ztype", 200);
        resultMap.put("importParameters", null);
        resultMap.put("result", result);
        return resultMap;
    }
    @Override
    @ApiLog(apiName = "物料拉动(receiveReservation)", apiCategory = ApiLogCategoryEnum.WMS)
    public Map<String, Object> receiveReservation(WebReservationOrder oWebReservationOrder) {
        Map<String, Object> resultMap = new HashMap<>();
        WebServiceSoap port = webService.getWebServiceSoap();
        WSResponse result = port.receiveReservation(oWebReservationOrder);
        resultMap.put("zmess", "请求成功");
        resultMap.put("ztype", 200);
        resultMap.put("importParameters", oWebReservationOrder);
        resultMap.put("result", result);
        return resultMap;
    }
    @Override
    @ApiLog(apiName = "移库申请(receiveMESScanItemList)", apiCategory = ApiLogCategoryEnum.WMS)
    public Map<String, Object> receiveMESScanItemList(ArrayOfWebServiceSendItem oMESScanItemList) {
        Map<String, Object> resultMap = new HashMap<>();
        WebServiceSoap port = webService.getWebServiceSoap();
        WSResponse result = port.receiveMESScanItemList(oMESScanItemList);
        resultMap.put("zmess", "请求成功");
        resultMap.put("ztype", 200);
        resultMap.put("importParameters", oMESScanItemList);
        resultMap.put("result", result);
        return resultMap;
    }
    @Override
    @ApiLog(apiName = "撤销移库申请(deliOrderDelete)", apiCategory = ApiLogCategoryEnum.WMS)
    public Map<String, Object> deliOrderDelete(String sFactoryCode, String sStockRecord) {
        Map<String, Object> resultMap = new HashMap<>();
        WebServiceSoap port = webService.getWebServiceSoap();
        WSResponse result = port.deliOrderDelete(sFactoryCode, sStockRecord);
        resultMap.put("zmess", "请求成功");
        resultMap.put("ztype", 200);
        resultMap.put("importParameters", sStockRecord);
        resultMap.put("result", result);
        return resultMap;
    }
}