新火炬后端单体项目初始化代码
已添加7个文件
已修改24个文件
已删除1个文件
613 ■■■■ 文件已修改
db/双林新火炬MES数据库设计.pdma.json 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/JeecgSystemApplication.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/config/Swagger2Config.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/base/controller/FactoryController.java 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/base/model/FactoryModel.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/base/service/IFactoryService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/base/service/impl/FactoryServiceImpl.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/controller/MesProductionWorkOrderController.java 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/entity/MesProductionOrder.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/entity/MesProductionWorkOrder.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/enums/ProductionWorkOrderStatus.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/job/FeishuUserService.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/sap/FunctionConst.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/sap/controller/SAPTestController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/sap/dto/MaterialRequestDTO.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/sap/request/MaterialRequest.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/sap/service/OrderMaterialRequestService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/sap/service/impl/OrderLoadServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/sap/service/impl/OrderMaterialRequestServiceImpl.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/sap/service/impl/OrderProcessSyncImpl.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/wms/config/WebServiceClientConfig.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/wms/config/WebServiceServerConfig.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/wms/controller/WMSTestController.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/wms/dto/ReceiveMESScanItemListResponse.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/wms/dto/WSResponse.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/wms/request/ReceiveMESScanItemList.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/wms/request/WebServiceSendItem.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/wms/service/ReceiveWMSScanItemListService.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/wms/service/impl/ReceiveWMSScanItemListServiceImpl.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-dev.yml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-prod.yml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
db/Ë«ÁÖлð¾æMESÊý¾Ý¿âÉè¼Æ.pdma.json
@@ -2,9 +2,9 @@
  "name": "双林新火炬MES数据库设计",
  "describe": "描述双薪新火炬MES数据库设计详情",
  "avatar": "",
  "version": "4.9.4",
  "version": "4.9.2",
  "createdTime": "2025-3-10 16:38:19",
  "updatedTime": "2025-8-7 10:18:16",
  "updatedTime": "2025-8-12 12:29:31",
  "dbConns": [],
  "profile": {
    "default": {
@@ -10982,6 +10982,42 @@
          "extProps": {},
          "domain": "9092C4E0-1A54-4859-ABBB-5B62DBC27573",
          "id": "6E75C587-8628-4A76-BE8A-07CB2185F61B"
        },
        {
          "defKey": "qualified_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": "B4405701-40E7-4987-B540-759F22DC5A91"
        },
        {
          "defKey": "scrap_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": "48F2218D-6129-47BF-85BA-72737EEDCCAC"
        },
        {
          "defKey": "remark",
@@ -28089,6 +28125,24 @@
          "baseType": "89D69E81-EA34-42EE-9FA2-93B8BD27E098",
          "extProps": {},
          "uiHint": "642D2E0A-8846-4549-BE56-8C0473F26EDE"
        },
        {
          "defKey": "open_id",
          "defName": "飞书用户OPENID",
          "comment": "",
          "type": "",
          "len": "",
          "scale": "",
          "primaryKey": false,
          "notNull": false,
          "autoIncrement": false,
          "defaultValue": "",
          "hideInGraph": false,
          "refDict": "",
          "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64",
          "extProps": {},
          "domain": "BE09D493-E183-402D-ACC4-EEA21EB35B8E",
          "id": "BDE72375-D196-41E2-A887-59B59C9A9479"
        }
      ],
      "indexes": [
@@ -28262,7 +28316,8 @@
          "hideInGraph": true
        }
      ],
      "correlations": []
      "correlations": [],
      "notes": {}
    },
    {
      "id": "ADF40C7F-5C97-4196-BCA7-E780FCC8E2FB",
pom.xml
@@ -227,11 +227,11 @@
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web-services</artifactId>
        </dependency>
<!--        <dependency>-->
<!--            <groupId>org.apache.cxf</groupId>-->
<!--            <artifactId>cxf-spring-boot-starter-jaxws</artifactId>-->
<!--            <version>${cxf.version}</version>-->
<!--        </dependency>-->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
            <version>${cxf.version}</version>
        </dependency>
        <!-- CXF webservice -->
        <dependency>
src/main/java/org/jeecg/JeecgSystemApplication.java
@@ -1,6 +1,7 @@
package org.jeecg;
import lombok.extern.slf4j.Slf4j;
import org.apache.cxf.spring.boot.autoconfigure.CxfAutoConfiguration;
import org.flowable.spring.boot.eventregistry.EventRegistryServicesAutoConfiguration;
import org.jeecg.common.util.oConvertUtils;
import org.springframework.boot.SpringApplication;
@@ -22,7 +23,8 @@
*/
@Slf4j
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, MongoAutoConfiguration.class,
        ManagementWebSecurityAutoConfiguration.class, EventRegistryServicesAutoConfiguration.class})
        ManagementWebSecurityAutoConfiguration.class, EventRegistryServicesAutoConfiguration.class,
        CxfAutoConfiguration.class})
public class JeecgSystemApplication extends SpringBootServletInitializer {
    @Override
src/main/java/org/jeecg/config/Swagger2Config.java
@@ -173,6 +173,24 @@
                .groupName("MES模块");
    }
    @Bean(value = "defaultApiWMS")
    public Docket defaultApiWMS() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                //此包路径下的类,才生成接口文档
                .apis(RequestHandlerSelectors.basePackage("org.jeecg.modules.wms"))
                //加了ApiOperation注解的类,才生成接口文档
                .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                .paths(PathSelectors.any())
                .build()
                .securitySchemes(Collections.singletonList(securityScheme()))
                .securityContexts(securityContexts())
                .globalOperationParameters(setHeaderToken())
                .groupName("WMS模块");
    }
    /***
     * oauth2配置
     * éœ€è¦å¢žåŠ swagger授权回调地址
src/main/java/org/jeecg/modules/base/controller/FactoryController.java
@@ -221,25 +221,14 @@
         return result;
     }
     @ApiOperation(value = "产线表集合", notes = "产线表集合")
     @GetMapping(value = "/queryTreeAppList")
     public Result<List<FactoryModel>> queryTreeAppList() {
         Result<List<FactoryModel>> result = new Result<>();
         try {
             List<Factory> factoryList = factoryService.list(new LambdaQueryWrapper<Factory>()
                     .eq(Factory::getDelFlag, CommonConstant.DEL_FLAG_0)
                     .orderByAsc(Factory::getSorter));
             List<FactoryModel> factoryModels = factoryList.stream()
                     .map(factory -> new FactoryModel(factory.getId(), factory.getFactoryName()))
                     .collect(Collectors.toList());
             result.setSuccess(true);
             result.setResult(factoryModels);
         } catch (Exception e) {
             log.error(e.getMessage(), e);
         }
         return result;
     @ApiOperation(value = "获取所有产线列表", notes = "获取所有产线列表")
     @GetMapping(value = "/queryUserProductionLineList")
     public Result<List<FactoryModel>> queryUserProductionLineList() {
         List<Factory> factoryList = factoryService.queryUserProductionLineList();
         List<FactoryModel> factoryModels = factoryList.stream()
                 .map(factory -> new FactoryModel(factory.getId(), factory.getFactoryName()))
                 .collect(Collectors.toList());
         return Result.ok(factoryModels);
     }
src/main/java/org/jeecg/modules/base/model/FactoryModel.java
@@ -4,30 +4,15 @@
@Data
public class FactoryModel {
    // getter和setter方法
    private String value;  // äº§çº¿ID
    private String text;   // äº§çº¿åç§°
    public FactoryModel() {}
    public FactoryModel() {
    }
    public FactoryModel(String value, String text) {
        this.value = value;
        this.text = text;
    }
    // getter和setter方法
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
    public String getText() {
        return text;
    }
    public void setText(String text) {
        this.text = text;
    }
}
src/main/java/org/jeecg/modules/base/service/IFactoryService.java
@@ -45,4 +45,10 @@
    List<Factory> queryFacByPid(String pid);
    List<String> recursionChildren(String factoryId);
    /**
     * æŸ¥è¯¢æŸ¥è¯¢åˆ—表
     * @return
     */
    List<Factory> queryUserProductionLineList();
}
src/main/java/org/jeecg/modules/base/service/impl/FactoryServiceImpl.java
@@ -6,7 +6,9 @@
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.base.entity.Factory;
import org.jeecg.modules.base.entity.UserFactory;
@@ -24,6 +26,7 @@
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -175,6 +178,26 @@
        return this.baseMapper.recursionChildren(factoryId);
    }
    @Override
    public List<Factory> queryUserProductionLineList() {
        //用户数据权限
        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        if (sysUser == null) {
            return Collections.emptyList();
        }
        String productionIds = sysUser.getProductionIds();
        if(StringUtils.isBlank(productionIds)){
            return Collections.emptyList();
        }
        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.in(Factory::getId, list);
        queryWrapper.orderByAsc(Factory::getSorter);
        return super.list(queryWrapper);
    }
    /**
     * æ‰“å¼€ çˆ¶èŠ‚ç‚¹ åŠ ä»¥ä¸Šçš„mdc标记
     * @param parentId
src/main/java/org/jeecg/modules/mes/controller/MesProductionWorkOrderController.java
@@ -167,8 +167,8 @@
    @PostMapping(value = "/republish")
    public Result<String> republish(@RequestBody MesProductionWorkOrderRepublishRequest request) {
        MesProductionWorkOrder workOrder = mesProductionWorkOrderService.getById(request.getId());
        //todo åˆ¤æ–­ç­æ¬¡æ˜¯å¦ç»“束的逻辑
        if (!ProductionWorkOrderStatus.PUBLISHED.name().equals(workOrder.getWorkOrderStatus())) {
        if (ProductionWorkOrderStatus.NEW.name().equals(workOrder.getWorkOrderStatus())
                || ProductionWorkOrderStatus.CLOSED.name().equals(workOrder.getWorkOrderStatus())) {
            return Result.error("当前工单状态不支持重发布!");
        }
        MesProductionWorkOrder republish = new MesProductionWorkOrder()
@@ -176,12 +176,27 @@
                .setPlanQuantity(request.getPlanQuantity())
                .setRepublisher(Objects.requireNonNull(getCurrentUser()).getUsername())
                .setRepublishTime(new Date())
                .setRepublishReason(request.getRepublishReason())
                .setWorkOrderStatus(ProductionWorkOrderStatus.REPUBLISHED.name());
                .setRepublishReason(request.getRepublishReason());
        mesProductionWorkOrderService.updateById(republish);
        return Result.ok("重发布成功!");
    }
    @AutoLog(value = "排产工单-执行排产工单计划")
    @ApiOperation(value = "排产工单-执行排产工单计划", notes = "排产工单-执行排产工单计划")
    @GetMapping(value = "/execute")
    public Result<?> execute(@RequestParam("id") String id) {
        MesProductionWorkOrder workOrder = mesProductionWorkOrderService.getById(id);
        if (!ProductionWorkOrderStatus.PUBLISHED.name().equals(workOrder.getWorkOrderStatus())) {
            return Result.error("当前工单状态不能执行!");
        }
        //todo é½å¥—性检查、工艺点检、设备点检 çš„æ ¡éªŒé€»è¾‘
        MesProductionWorkOrder executeOrder = new MesProductionWorkOrder()
                .setId(id)
                .setWorkOrderStatus(ProductionWorkOrderStatus.EXECUTING.name());
        mesProductionWorkOrderService.updateById(executeOrder);
        return Result.ok("执行成功!");
    }
    /**
     * ç¼–辑
     *
src/main/java/org/jeecg/modules/mes/entity/MesProductionOrder.java
@@ -126,6 +126,12 @@
    /**客户名称*/
    @ApiModelProperty(value = "客户名称")
    private String customer;
    /**合格数量*/
    @ApiModelProperty(value = "合格数量")
    private BigDecimal qualifiedQuantity;
    /**报废数量*/
    @ApiModelProperty(value = "报废数量")
    private BigDecimal scrapQuantity;
    /**备注*/
    @ApiModelProperty(value = "备注")
    private String remark;
src/main/java/org/jeecg/modules/mes/entity/MesProductionWorkOrder.java
@@ -92,8 +92,8 @@
    @ApiModelProperty(value = "排产日期")
    private Date workOrderDate;
    /**工单状态*/
    @Excel(name = "工单状态", width = 15, dicCode = "mes_work_order_status")
    @Dict(dicCode = "mes_work_order_status")
    @Excel(name = "工单状态", width = 15, dicCode = "work_order_status")
    @Dict(dicCode = "work_order_status")
    @ApiModelProperty(value = "工单状态")
    private String workOrderStatus;
    /**实际报工数量*/
src/main/java/org/jeecg/modules/mes/enums/ProductionWorkOrderStatus.java
@@ -11,7 +11,11 @@
     */
    PUBLISHED,
    /**
     * é‡å‘布
     * æ‰§è¡Œä¸­
     */
    REPUBLISHED
    EXECUTING,
    /**
     * å·²å…³é—­
     */
    CLOSED
}
src/main/java/org/jeecg/modules/mes/job/FeishuUserService.java
@@ -40,6 +40,9 @@
    @Value("${feishu.appSecret:}")
    private String appSecret;
    @Value("${feishu.url:}")
    private String feishuUrl;
    /**
     * åŒæ­¥é£žä¹¦éƒ¨é—¨ç”¨æˆ·åˆ°ç³»ç»Ÿç”¨æˆ·è¡¨
     * @param departmentId é£žä¹¦éƒ¨é—¨ID
@@ -87,7 +90,7 @@
    private String getFeishuAccessToken() {
        try {
            String url = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal";
            String url = feishuUrl + "open-apis/auth/v3/tenant_access_token/internal";
            log.info("开始获取飞书访问令牌,AppId: {}",
                    appId != null ? appId.substring(0, Math.min(appId.length(), 10)) + "..." : "null");
@@ -135,7 +138,7 @@
            log.info("使用的访问令牌前缀: Bearer {}", accessToken.substring(0, Math.min(20, accessToken.length())) + "...");
            // é£žä¹¦API端点
            String url = "https://open.feishu.cn/open-apis/contact/v3/users/find_by_department";
            String url = feishuUrl + "open-apis/contact/v3/users/find_by_department";
            String pageToken = null;
            int pageNumber = 1;
src/main/java/org/jeecg/modules/sap/FunctionConst.java
@@ -13,4 +13,6 @@
    public static final String ZMES_GOODSMVT_CREATE_2301 = "ZMES_GOODSMVT_CREATE_2301";
    //6.生产订单关闭接口
    public static final String ZPPF_019 = "ZPPF_019";
    //7.SAP预留号创建接口
    public static final String ZMES_RESERVATION_CREATE = "ZMES_RESERVATION_CREATE";
}
src/main/java/org/jeecg/modules/sap/controller/SAPTestController.java
@@ -4,6 +4,7 @@
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.sap.request.MaterialRequest;
import org.jeecg.modules.sap.request.OrderLoadRequest;
import org.jeecg.modules.sap.request.OrderReportRequest;
import org.jeecg.modules.sap.request.ProductionOrderSyncRequest;
@@ -11,6 +12,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
@Api(tags = "SAP集成测试")
@@ -46,6 +48,8 @@
    private OrderLoadService orderLoadService;
    @Autowired
    private OrderCloseService orderCloseService;
    @Autowired
    private OrderMaterialRequestService orderMaterialRequestService;
    @ApiOperation(value = "SAP集成测试-生产订单同步接口", notes = "SAP集成测试-生产订单同步接口")
    @PostMapping("/syncProductionOrder")
@@ -113,4 +117,12 @@
        Map<String, Object> resultMap = orderCloseService.productionOrderClose(orderCode);
        return Result.ok(resultMap);
    }
    @ApiOperation(value = "SAP集成测试-物料拉动", notes = "SAP集成测试-物料拉动")
    @PostMapping("/orderMaterialRequest")
    public Result<?> orderMaterialRequest(@RequestParam(value = "factoryCode") String factoryCode, @RequestParam(value = "warehouseCode") String warehouseCode, @RequestBody List<MaterialRequest> request) throws Exception {
//        String orderCode = "10698749";
        Map<String, Object> resultMap = orderMaterialRequestService.orderMaterialRequest(factoryCode, warehouseCode, request);
        return Result.ok(resultMap);
    }
}
src/main/java/org/jeecg/modules/sap/dto/MaterialRequestDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package org.jeecg.modules.sap.dto;
import lombok.Data;
@Data
public class MaterialRequestDTO {
    /** æˆåŠŸæ ‡è®° Y-OK N-NG */
    private String O_IS_OK;
    /** é¢„ç•™/相关需求的编号 */
    private String O_SAP_RESV;
    /** æ¶ˆæ¯æ–‡æœ¬ */
    private String O_MESSAGE;
}
src/main/java/org/jeecg/modules/sap/request/MaterialRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package org.jeecg.modules.sap.request;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
public class MaterialRequest implements Serializable {
    /** ç‰©æ–™å· */
    private String materialNumber;
    /** æ•°é‡ */
    private BigDecimal quantity;
    /** å‘货库存地点 */
    private String warehouseCode;
}
src/main/java/org/jeecg/modules/sap/service/OrderMaterialRequestService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package org.jeecg.modules.sap.service;
import org.jeecg.modules.sap.request.MaterialRequest;
import java.util.List;
import java.util.Map;
/**
 * ç‰©æ–™æ‹‰åŠ¨ï¼Œé¢„ç•™å·è¯·æ±‚
 */
public interface OrderMaterialRequestService {
    /**
     * ç‰©æ–™æ‹‰åŠ¨è¯·æ±‚
     * @param factoryCode å·¥åŽ‚ç¼–ç 
     * @param receiveWarehouseCode æŽ¥æ”¶åº“存地点
     * @param request ç‰©æ–™æ‹‰åŠ¨ä¿¡æ¯
     * @return
     * @throws Exception
     */
    Map<String, Object> orderMaterialRequest(String factoryCode, String receiveWarehouseCode, List<MaterialRequest> request) throws Exception;
}
src/main/java/org/jeecg/modules/sap/service/impl/OrderLoadServiceImpl.java
@@ -7,7 +7,6 @@
import org.jeecg.config.sap.SapRfcConnectionManager;
import org.jeecg.modules.sap.FunctionConst;
import org.jeecg.modules.sap.dto.OrderLoadDTO;
import org.jeecg.modules.sap.dto.OrderReportDTO;
import org.jeecg.modules.sap.request.OrderLoadRequest;
import org.jeecg.modules.sap.service.OrderLoadService;
import org.springframework.beans.factory.annotation.Autowired;
src/main/java/org/jeecg/modules/sap/service/impl/OrderMaterialRequestServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,96 @@
package org.jeecg.modules.sap.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.parser.Feature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sap.conn.jco.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.aspect.annotation.ApiLog;
import org.jeecg.common.constant.ApiLogCategoryEnum;
import org.jeecg.config.sap.SapRfcConnectionManager;
import org.jeecg.modules.sap.FunctionConst;
import org.jeecg.modules.sap.dto.MaterialRequestDTO;
import org.jeecg.modules.sap.request.MaterialRequest;
import org.jeecg.modules.sap.service.OrderMaterialRequestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
@Slf4j
public class OrderMaterialRequestServiceImpl implements OrderMaterialRequestService {
    @Autowired
    private SapRfcConnectionManager connectionManager;
    @Autowired
    private ObjectMapper objectMapper;
    @Override
    @ApiLog(apiName = "SAP预留号创建(ZMES_RESERVATION_CREATE)", apiCategory = ApiLogCategoryEnum.SAP)
    public Map<String, Object> orderMaterialRequest(String factoryCode, String receiveWarehouseCode, List<MaterialRequest> request) throws Exception {
        Map<String, Object> resultMap = new HashMap<>();
        JCoDestination destination = connectionManager.getDestination();
        JCoRepository repository = destination.getRepository();
        JCoFunction function = repository.getFunction(FunctionConst.ZMES_RESERVATION_CREATE);
        if (function == null) {
            throw new RuntimeException("RFC å‡½æ•° ZMES_RESERVATION_CREATE æœªæ‰¾åˆ°ï¼");
        }
        if (StringUtils.isBlank(factoryCode) || StringUtils.isBlank(receiveWarehouseCode) || CollectionUtil.isEmpty(request)) {
            resultMap.put("zmess", "工厂编码、接收库存地为空或物料信息为空");
            resultMap.put("ztype", "-1");
            resultMap.put("importParameters", factoryCode + "|" + receiveWarehouseCode + "|" + (request == null ? 0 : request.size()));
            resultMap.put("result", null);
            return resultMap;
        }
        // è®¾ç½®è¾“入参数
        List<JSONObject> items = new ArrayList<>();
        //新火炬
        JCoParameterList importParameterList = function.getImportParameterList();
        importParameterList.setValue("I_SITE", factoryCode);
        //组装请求参数
        JSONObject item = new JSONObject();
        item.put("I_SITE", factoryCode);
        items.add(item);
        //接收库存地
        importParameterList.setValue("I_TO_STORGE_LOC", receiveWarehouseCode);
        //组装请求参数
        item = new JSONObject();
        item.put("I_TO_STORGE_LOC", factoryCode);
        items.add(item);
        JCoTable itemTable = function.getTableParameterList().getTable("T_ITEMS");
        for (MaterialRequest itemReq : request) {
            itemTable.appendRow();
            itemTable.setValue("ITEM", itemReq.getMaterialNumber());
            itemTable.setValue("PULL_QTY", itemReq.getQuantity());
            itemTable.setValue("FROM_STORGE_LOC", itemReq.getWarehouseCode());
            //组装请求参数
            String json = objectMapper.writeValueAsString(itemReq);
            item = JSONObject.parseObject(json, Feature.OrderedField);
            items.add(item);
        }
        // æ‰§è¡Œè°ƒç”¨
        function.execute(destination);
        //获取返回结果
        MaterialRequestDTO response = new MaterialRequestDTO();
        String zmess = function.getExportParameterList().getValue("O_IS_OK").toString();
        String ztype = function.getExportParameterList().getValue("O_MESSAGE").toString();//S æ ‡è¯† æˆåŠŸ
        String resv = function.getExportParameterList().getValue("O_SAP_RESV").toString();//S æ ‡è¯† æˆåŠŸ
        response.setO_IS_OK(ztype);
        response.setO_MESSAGE(zmess);
        response.setO_SAP_RESV(resv);
        //返回结果
        resultMap.put("zmess", zmess);
        resultMap.put("ztype", ztype);
        resultMap.put("importParameters", items);
        resultMap.put("result", response);
        return resultMap;
    }
}
src/main/java/org/jeecg/modules/sap/service/impl/OrderProcessSyncImpl.java
@@ -1,20 +1,25 @@
package org.jeecg.modules.sap.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.sap.conn.jco.*;
import com.sap.conn.jco.JCoDestination;
import com.sap.conn.jco.JCoFunction;
import com.sap.conn.jco.JCoRepository;
import com.sap.conn.jco.JCoTable;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.aspect.annotation.ApiLog;
import org.jeecg.common.constant.ApiLogCategoryEnum;
import org.jeecg.config.sap.SapRfcConnectionManager;
import org.jeecg.modules.sap.FunctionConst;
import org.jeecg.modules.sap.dto.OrderBomDTO;
import org.jeecg.modules.sap.dto.OrderProcessDTO;
import org.jeecg.modules.sap.service.OrderProcessSync;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
@Slf4j
src/main/java/org/jeecg/modules/wms/config/WebServiceClientConfig.java
ÎļþÒÑɾ³ý
src/main/java/org/jeecg/modules/wms/config/WebServiceServerConfig.java
@@ -5,7 +5,7 @@
import org.apache.cxf.jaxws.EndpointImpl;
import org.apache.cxf.transport.servlet.CXFServlet;
import org.jeecg.modules.wms.service.ReceiveWMSScanItemListService;
import org.springframework.beans.factory.annotation.Autowired;
import org.jeecg.modules.wms.service.impl.ReceiveWMSScanItemListServiceImpl;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -15,25 +15,28 @@
@Configuration
public class WebServiceServerConfig {
    @Autowired
    private ReceiveWMSScanItemListService receiveWMSScanItemListService;
    @Bean(name = "cxfServer")
    @Bean(name = Bus.DEFAULT_BUS_ID)
    public Bus springBus() {
        return new SpringBus();
    }
    @Bean(name = "cxfServlet")  // æ³¨å…¥servlet bean name不能dispatcherServlet ,否则会覆盖dispatcherServlet
    public ServletRegistrationBean<CXFServlet> cxfServlet() {
        return new ServletRegistrationBean<CXFServlet>(new CXFServlet(), "/webservice/*");
        return new ServletRegistrationBean<>(new CXFServlet(), "/webservice/*");
    }
    @Bean
    public ReceiveWMSScanItemListService receiveWMSScanItemListService() {
        return new ReceiveWMSScanItemListServiceImpl();
    }
    @Bean
    public Endpoint endpoint() {
        // å‚数二,是SEI实现类对象
        Endpoint endpoint = new EndpointImpl(this.springBus(), receiveWMSScanItemListService);
        Endpoint endpoint = new EndpointImpl(this.springBus(), this.receiveWMSScanItemListService());
        // å‘布服务
        endpoint.publish("/userService");
        endpoint.publish("/ReceiveWMSScanItemList");
        return endpoint;
    }
}
src/main/java/org/jeecg/modules/wms/controller/WMSTestController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
package org.jeecg.modules.wms.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.wms.dto.ReceiveMESScanItemListResponse;
import org.jeecg.modules.wms.request.ReceiveMESScanItemList;
import org.jeecg.modules.wms.service.ReceiveWMSScanItemListService;
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;
@Api(tags = "WMS集成测试")
@RestController
@RequestMapping("/wms/client")
@Slf4j
public class WMSTestController {
    @Value("${webservice.url}")
    private String url;
    @Value("${webservice.namespace}")
    private String namespace;
    @ApiOperation(value = "WMS集成测试-接收WMS移库结果", notes = "WMS集成测试-接收WMS移库结果")
    @PostMapping("/testReceiveWMSScanItemList")
    public Result<?> testReceiveWMSScanItemList() {
        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
        factory.setAddress(url);
        factory.setServiceClass(ReceiveWMSScanItemListService.class);
        ReceiveWMSScanItemListService service = (ReceiveWMSScanItemListService) factory.create();
        ReceiveMESScanItemList request = new ReceiveMESScanItemList();
        ReceiveMESScanItemListResponse response = service.receiveWMSScanItemList(request);
        return Result.ok(response);
    }
}
src/main/java/org/jeecg/modules/wms/dto/ReceiveMESScanItemListResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package org.jeecg.modules.wms.dto;
import lombok.Getter;
import lombok.Setter;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.io.Serializable;
@Getter
@Setter
@XmlRootElement(name = "ReceiveMESScanItemListResponse")
@XmlAccessorType(XmlAccessType.FIELD)
public class ReceiveMESScanItemListResponse implements Serializable {
    @XmlElement(name = "WSResponse")
    private WSResponse wsResponse;
}
src/main/java/org/jeecg/modules/wms/dto/WSResponse.java
@@ -1,6 +1,19 @@
package org.jeecg.modules.wms.dto;
public class WSResponse {
    private String ErrorCode;
    private String ErrorDesc;
import lombok.Getter;
import lombok.Setter;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import java.io.Serializable;
@Getter
@Setter
@XmlAccessorType(XmlAccessType.FIELD)
public class WSResponse implements Serializable {
    @XmlElement(name = "ErrorCode")
    private String errorCode;
    @XmlElement(name = "ErrorDesc")
    private String errorDesc;
}
src/main/java/org/jeecg/modules/wms/request/ReceiveMESScanItemList.java
@@ -1,4 +1,19 @@
package org.jeecg.modules.wms.request;
public class ReceiveMESScanItemList {
import lombok.Getter;
import lombok.Setter;
import javax.xml.bind.annotation.*;
import java.io.Serializable;
import java.util.List;
@Getter
@Setter
@XmlRootElement(name = "ReceiveMESScanItemList")
@XmlAccessorType(XmlAccessType.FIELD)
public class ReceiveMESScanItemList implements Serializable {
    @XmlElementWrapper(name = "ArrayOfWebServiceSendItem")
    @XmlElement(name = "WebServiceSendItem")
    private List<WebServiceSendItem> items;
}
src/main/java/org/jeecg/modules/wms/request/WebServiceSendItem.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,70 @@
package org.jeecg.modules.wms.request;
import lombok.Getter;
import lombok.Setter;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import java.io.Serializable;
import java.math.BigDecimal;
@Getter
@Setter
@XmlAccessorType(XmlAccessType.FIELD)
public class WebServiceSendItem implements Serializable {
    /**工厂编码 */
    @XmlElement(name = "FactoryCode")
    private String factoryCode;
    /** ç‰©æ–™ç¼–码 */
    @XmlElement(name = "SkuCode")
    private String skuCode;
    /** é¢„留号 */
    @XmlElement(name = "ReservationOrder")
    private String reservationOrder;
    /** å¯¹é½æ–¹å¼ */
    @XmlElement(name = "Align")
    private String align;
    /** æ‰˜å· */
    @XmlElement(name = "Pallet")
    private String pallet;
    /** åŒ…装编码 */
    @XmlElement(name = "PackageNo")
    private String packageNo;
    /** æ‰¹æ¬¡å· */
    @XmlElement(name = "TrackLot")
    private String trackLot;
    /** ç³»åˆ—号 */
    @XmlElement(name = "Series")
    private String series;
    /** MES库存ID */
    @XmlElement(name = "MesStockID")
    private String mesStockID;
    /** æ•°é‡ */
    @XmlElement(name = "Quantity")
    private BigDecimal quantity;
    /** SAP批次号 */
    @XmlElement(name = "SapTrackLot")
    private String sapTrackLot;
    /** å‘送库存地 */
    @XmlElement(name = "Section")
    private String section;
    /** ç›®æ ‡åº“存地 */
    @XmlElement(name = "DestSection")
    private String destSection;
    /** ä¾›åº”商代码 */
    @XmlElement(name = "SupplierCode")
    private String supplierCode;
    /** ä¾›åº”商批次号 */
    @XmlElement(name = "SupplierTrackLot")
    private String supplierTrackLot;
    /** é˜¶æ®µID */
    @XmlElement(name = "StageID")
    private String stageID;
    /** å¤‡æ³¨ */
    @XmlElement(name = "Remark")
    private String remark;
    /** è®¢å•编码 */
    @XmlElement(name = "OrderCode")
    private String orderCode;
}
src/main/java/org/jeecg/modules/wms/service/ReceiveWMSScanItemListService.java
@@ -1,8 +1,16 @@
package org.jeecg.modules.wms.service;
import org.jeecg.modules.wms.dto.ReceiveMESScanItemListResponse;
import org.jeecg.modules.wms.request.ReceiveMESScanItemList;
import javax.jws.WebService;
@WebService
@WebService(name = "ReceiveWMSScanItemList", targetNamespace = "http://xhj008.server.webservice.com")
public interface ReceiveWMSScanItemListService {
    /**
     * æŽ¥æ”¶WMS移库信息
     * @param request
     * @return
     */
    ReceiveMESScanItemListResponse receiveWMSScanItemList(ReceiveMESScanItemList request);
}
src/main/java/org/jeecg/modules/wms/service/impl/ReceiveWMSScanItemListServiceImpl.java
@@ -1,14 +1,24 @@
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.dto.ReceiveMESScanItemListResponse;
import org.jeecg.modules.wms.request.ReceiveMESScanItemList;
import org.jeecg.modules.wms.service.ReceiveWMSScanItemListService;
import org.springframework.stereotype.Service;
import javax.jws.WebService;
@WebService(name = "ReceiveWMSScanItemListService",  targetNamespace = "http://xhj008.server.webservice.com")
@Slf4j
@Service
//@Service
@WebService(name = "ReceiveWMSScanItemListService",  targetNamespace = "http://xhj008.server.webservice.com", endpointInterface = "org.jeecg.modules.wms.service.ReceiveWMSScanItemListService")
public class ReceiveWMSScanItemListServiceImpl implements ReceiveWMSScanItemListService {
    @Override
    @ApiLog(apiName = "接收WMS的移库信息(ReceiveWMSScanItemList(MES)", apiCategory = ApiLogCategoryEnum.WMS)
    public ReceiveMESScanItemListResponse receiveWMSScanItemList(ReceiveMESScanItemList request) {
        return new ReceiveMESScanItemListResponse();
    }
}
src/main/resources/application-dev.yml
@@ -298,3 +298,9 @@
    poolSize: 5               # çº¿ç¨‹æ± æ•°é‡
    expirationTime: 10000     # è¿‡æœŸæ—¶é—´
    peekLimit: 10             # å³°å€¼
feishu:
  url: https://open.feishu.cn/
  appId: cli_a74aab6353b7d00e
  appSecret: mx5wm7X9S8WSzZCOYlxcggXTFL8iujIT
  sync:
    departmentId: od-47692f32e6b66cc3985d317fee780a8b
src/main/resources/application-prod.yml
@@ -296,4 +296,10 @@
    lang: ZH                  # è¯­è¨€
    poolSize: 5               # çº¿ç¨‹æ± æ•°é‡
    expirationTime: 10000     # è¿‡æœŸæ—¶é—´
    peekLimit: 10             # å³°å€¼
    peekLimit: 10             # å³°å€¼
feishu:
  url: https://open.feishu.cn/
  appId: cli_a74aab6353b7d00e
  appSecret: mx5wm7X9S8WSzZCOYlxcggXTFL8iujIT
  sync:
    departmentId: od-47692f32e6b66cc3985d317fee780a8b