7765eca9414fb89d0821d0bd03bfb1daf4597ab1..2044377679930e8580573322b2a62624a9b0e927
2 天以前 647556386
Merge branch 'master' of http://115.159.85.185:8098/r/Rui...
204437 对比 | 目录
2 天以前 647556386
PLS接口开发
0f0b7b 对比 | 目录
已添加16个文件
已修改8个文件
984 ■■■■■ 文件已修改
项目代码/WCS/WCSServices/WIDESEAWCS_Server/appsettings.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_BasicService/Service/MaterielInfoService.cs 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Common/APIEnum/APIEnum.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Common/CommonEnum/EnableEnum.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Common/PLSEnum/ReturnToPlsStatusEnum.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Common/PLSEnum/VMIStatusEnum.cs 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_DTO/PLS/MoInboundOrderDTO.cs 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_DTO/PLS/PLSBaseModel.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_DTO/PLS/PLSRequestContent.cs 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_DTO/PLS/PlsResponseContent.cs 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_DTO/PLS/ReturnMoInboundStatuModel.cs 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_DTO/PLS/VMIItemCodeInfo.cs 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_External/IPLSService/IInvokePLSService.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_External/PLSService/InvokePLSService.cs 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IBasicService/IMaterielInfoService.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundRepository/IMoInboundOrderRepository.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundService/IMoInboundOrderService.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundRepository/MoInboundOrderRepository.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundService/MoInboundOrderService.cs 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Basic/Dt_MaterielInfo.cs 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_MoInboundOrder.cs 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/WIDESEA_Model.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/PLS/PlsController.cs 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/appsettings.json 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Server/appsettings.json
@@ -12,7 +12,7 @@
  "MainDB": "DB_WIDESEA", //当前项目的主库,所对应的连接字符串的Enabled必须为true
  "DBType": "SqlServer",
  //连接字符串
  "ConnectionString": "Data Source=.;Initial Catalog=WIDESEA_HF;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  "ConnectionString": "Data Source=.;Initial Catalog=WIDESEA_HanDanWCS;User ID=sa;Password=root;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  //跨域
  "Cors": {
    "PolicyName": "CorsIpAccess", //策略名称
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_BasicService/Service/MaterielInfoService.cs
@@ -11,6 +11,7 @@
using WIDESEA_Core.Helper;
using WIDESEA_DTO.Basic;
using WIDESEA_DTO.ERP;
using WIDESEA_DTO.PLS;
using WIDESEA_IBasicRepository;
using WIDESEA_IBasicService;
using WIDESEA_Model.Models;
@@ -163,5 +164,66 @@
                return WebResponseContent.Instance.OK(ex.Message);
            }
        }
        /// <summary>
        /// åŒæ­¥VMI物料信息
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public WebResponseContent ReceiveVMIMaterial(VMIItemCodeInfo vmiModel)
        {
            try
            {
                ///参数校验
                if (vmiModel == null || vmiModel.Data == null || !vmiModel.Data.Any())
                {
                    return WebResponseContent.Instance.Error("接口传入的物料数据集合不能为空");
                }
                foreach (var itemData in vmiModel.Data)
                {
                    var existMateriel = BaseDal.QueryFirst(x => x.MaterielCode == itemData.ItemCode);
                    if (existMateriel == null)
                    {
                        Dt_MaterielInfo addEntity = new Dt_MaterielInfo()
                        {
                            MaterielCode = itemData.ItemCode,
                            OrgId = itemData.OrgId,
                            MaterielInvOrgId = itemData.SupplierCode,
                            PackageQty = itemData.PackageQty,
                            MaterielState = itemData.DeleteFlag == "0" ? EnableEnum.Enable : EnableEnum.Disable,
                            WarehouseId = 0,
                            MaterielSourceType = 0,
                            Creater = itemData.CreateUser,
                            CreateDate = itemData.CreateDate,
                            Modifier = itemData.UpdateUser,
                            ModifyDate = itemData.UpdateDate
                        };
                        BaseDal.AddData(addEntity);
                    }
                    else
                    {
                        existMateriel.OrgId = itemData.OrgId;
                        existMateriel.MaterielInvOrgId = itemData.SupplierCode;
                        existMateriel.PackageQty = itemData.PackageQty;
                        existMateriel.MaterielState = itemData.DeleteFlag == "0" ? EnableEnum.Enable : EnableEnum.Disable;
                        existMateriel.Modifier = itemData.UpdateUser;
                        existMateriel.ModifyDate = itemData.UpdateDate;
                        BaseDal.UpdateData(existMateriel);
                    }
                }
                // å¤„理完成
                return WebResponseContent.Instance.OK("VMI物料数据同步成功");
            }
            catch (Exception ex)
            {
                // å¼‚常返回
                return WebResponseContent.Instance.Error($"VMI物料同步失败:{ex.Message}");
            }
        }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Common/APIEnum/APIEnum.cs
@@ -71,6 +71,12 @@
        /// å›žè°ƒWCS任务完成
        /// </summary>
        [Description("回调WCS任务完成")]
        FeedBackWCSTaskCompleted
        FeedBackWCSTaskCompleted,
        /// <summary>
        /// PLS接口调用
        /// </summary>
        [Description("PLS接口调用")]
        InvokePLSApi
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Common/CommonEnum/EnableEnum.cs
@@ -15,13 +15,13 @@
        /// <summary>
        /// ç¦ç”¨
        /// </summary>
        [Description("禁用")]
        [Description("有效")]
        Disable = 0,
        /// <summary>
        /// å¯ç”¨
        /// </summary>
        [Description("启用")]
        [Description("无效")]
        Enable = 1,
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Common/PLSEnum/ReturnToPlsStatusEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_Common.PLSEnum
{
    public enum ReturnToPlsStatusEnum
    {
        /// <summary>
        /// æœªæŽ¨é€
        /// </summary>
        [Description("未推送")]
        æœªæŽ¨é€ = 0,
        /// <summary>
        /// æŽ¨é€æˆåŠŸ
        /// </summary>
        [Description("推送成功")]
        æŽ¨é€æˆåŠŸ = 1,
        /// <summary>
        /// æŽ¨é€å¤±è´¥
        /// </summary>
        [Description("推送失败")]
        æŽ¨é€å¤±è´¥ = 2,
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Common/PLSEnum/VMIStatusEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_Common.PLSEnum
{
    public enum VMIStatusEnum
    {
        /// <summary>
        /// å·²ç»‘定
        /// </summary>
        [Description("已绑定")]
        å·²ç»‘定 = 1,
        /// <summary>
        /// å·²å…¥åº“
        /// </summary>
        [Description("已入库")]
        å·²å…¥åº“ = 2,
        /// <summary>
        /// å·²å†»ç»“
        /// </summary>
        [Description("已冻结")]
        å·²å†»ç»“ = 3,
        /// <summary>
        /// å·²å‡ºåº“
        /// </summary>
        [Description("已出库")]
        å·²å‡ºåº“ = 4,
        /// <summary>
        /// å·²é€€è´§
        /// </summary>
        [Description("已退货")]
        å·²é€€è´§ = 5,
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_DTO/PLS/MoInboundOrderDTO.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,89 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_DTO.PLS
{
    /// <summary>
    /// MO票同步
    /// </summary>
    public class MoInboundOrderDTO
    {
        /// <summary>
        /// æ—¶é—´æˆ³
        /// </summary>
        public string TimeStamp { get; set; }
        /// <summary>
        /// ç­¾å
        /// </summary>
        public string Sign { get; set; }
        /// <summary>
        /// æ•°æ®é›†åˆ
        /// </summary>
        public List<PLS_MoStatusItemDto> Data { get; set; }
    }
    /// <summary>
    /// MO票单条数据
    /// </summary>
    public class PLS_MoStatusItemDto
    {
        /// <summary>
        /// ç»„织编码
        /// </summary>
        public string OrgId { get; set; }
        /// <summary>
        /// MO票号
        /// </summary>
        public string LabelNo { get; set; }
        /// <summary>
        /// VMI物流状态
        /// </summary>
        public string Status { get; set; }
        /// <summary>
        /// å•据号
        /// </summary>
        public string BarcodeNumber { get; set; }
        /// <summary>
        /// ä¾›æ–¹ç¼–码
        /// </summary>
        public string SupplierCode { get; set; }
        /// <summary>
        /// ç‰©æ–™ç¼–码
        /// </summary>
        public string ItemCode { get; set; }
        /// <summary>
        /// æ•°é‡
        /// </summary>
        public decimal Qty { get; set; }
        /// <summary>
        /// ä½œä¸šå·
        /// </summary>
        public string WorkOrderName { get; set; }
        /// <summary>
        /// æ˜¯å¦æœ‰æ•ˆ
        /// </summary>
        public long DeleteFlag { get; set; }
        /// <summary>
        /// åˆ›å»ºäºº
        /// </summary>
        public string CreateUser { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
        public DateTime CreateDate { get; set; }
        /// <summary>
        /// ä¿®æ”¹äºº
        /// </summary>
        public string UpdateUser { get; set; }
        /// <summary>
        /// ä¿®æ”¹æ—¶é—´
        /// </summary>
        public DateTime UpdateDate { get; set; }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_DTO/PLS/PLSBaseModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_DTO.PLS
{
    /// <summary>
    /// PLS通用实体头
    /// </summary>
    public class PLSBaseModel<T>
    {
        /// <summary>
        /// æ—¶é—´æˆ³
        /// </summary>
        public long TimeStamp { get; set; }
        /// <summary>
        /// ç­¾å
        /// </summary>
        public string Sign { get; set; }
        /// <summary>
        /// æ•°æ®å¯¹è±¡
        /// </summary>
        public T Data { get; set; }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_DTO/PLS/PLSRequestContent.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,51 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_DTO.PLS
{
    /// <summary>
    /// PLS接口响应实体
    /// </summary>
    public class PLSRequestContent
    {
        /// <summary>
        /// çŠ¶æ€ç  0-成功,1-失败
        /// </summary>
        public int Code { get; set; }
        /// <summary>
        /// å“åº”信息
        /// </summary>
        public string Msg { get; set; }
        /// <summary>
        /// è¿”回数据集合(每条MO票的处理结果)
        /// </summary>
        public List<PlsMoStatusResult> Data { get; set; }
    }
    /// <summary>
    /// å•条 MO ç¥¨çŠ¶æ€æŽ¨é€ç»“æžœ
    /// </summary>
    public class PlsMoStatusResult
    {
        /// <summary>
        /// MO票号
        /// </summary>
        public string LabelNo { get; set; }
        /// <summary>
        /// æŽ¨é€æ˜¯å¦æˆåŠŸ 0-成功 1-失败
        /// </summary>
        public int Success { get; set; }
        /// <summary>
        /// å“åº”信息/失败原因
        /// </summary>
        public string Msg { get; set; }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_DTO/PLS/PlsResponseContent.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,91 @@
using System;
using System.Collections.Generic;
using WIDESEA_Core;
using WIDESEA_Core.Attributes;
namespace WIDESEA_DTO
{
    /// <summary>
    /// PLS响应实体
    /// </summary>
    [ModelValidate]
    public class ApiResponseContent
    {
        /// <summary>
        /// çŠ¶æ€ç  0-成功 1-失败
        /// </summary>
        public int Code { get; set; } = 0;
        /// <summary>
        /// å“åº”信息
        /// </summary>
        public string Msg { get; set; } = "成功";
        /// <summary>
        /// è¿”回数据
        /// </summary>
        public object Data { get; set; } = null;
        /// <summary>
        /// å•例实例
        /// </summary>
        public static ApiResponseContent Instance
        {
            get { return new ApiResponseContent(); }
        }
        /// <summary>
        /// æˆåŠŸè¿”å›ž
        /// </summary>
        public ApiResponseContent OK(string message = null)
        {
            Code = 0;
            Msg = message ?? "成功";
            Data = null??"无";
            return this;
        }
        /// <summary>
        /// å¤±è´¥è¿”回
        /// </summary>
        public ApiResponseContent Error(string message = null)
        {
            Code = 1;
            Msg = message ?? "失败";
            Data = null ?? "无";
            return this;
        }
        /// <summary>
        /// å¸¦æ˜Žç»†æ•°æ®è¿”回(MO票号专用)
        /// </summary>
        public ApiResponseContent OK(List<LabelNoData> dataList, string message = null)
        {
            Code = 0;
            Msg = message ?? "成功";
            Data = dataList;
            return this;
        }
    }
    /// <summary>
    /// MO票号返回明细
    /// </summary>
    public class LabelNoData
    {
        /// <summary>
        /// MO票号
        /// </summary>
        public string LabelNo { get; set; }
        /// <summary>
        /// æŽ¨é€æ˜¯å¦æˆåŠŸ 0-成功 1-失败
        /// </summary>
        public int Success { get; set; }
        /// <summary>
        /// å“åº”信息
        /// </summary>
        public object Msg { get; set; }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_DTO/PLS/ReturnMoInboundStatuModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,49 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_DTO.PLS
{
    /// <summary>
    /// MO票状态上报实体
    /// </summary>
    public class ReturnMoInboundStatuModel
    {
        /// <summary>
        /// ç»„织编码
        /// </summary>
        public string OrgId { get; set; }
        /// <summary>
        /// MO票号
        /// </summary>
        public string LabelNo { get; set; }
        /// <summary>
        /// VMI物流状态
        /// </summary>
        public string Status { get; set; }
        /// <summary>
        /// å•据号
        /// </summary>
        public string BarcodeNumber { get; set; }
        /// <summary>
        /// åˆ›å»ºäºº
        /// </summary>
        public string CreateUser { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
        public DateTime CreateDate { get; set; }
        /// <summary>
        /// ä¿®æ”¹äºº
        /// </summary>
        public string UpdateUser { get; set; }
        /// <summary>
        /// ä¿®æ”¹æ—¶é—´
        /// </summary>
        public DateTime UpdateDate { get; set; }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_DTO/PLS/VMIItemCodeInfo.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,85 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_DTO.PLS
{
    /// <summary>
    /// VMI物料同步
    /// </summary>
    public class VMIItemCodeInfo
    {
        /// <summary>
        /// é‰´æƒè´¦å·
        /// </summary>
        public string AppId {  get; set; }
        /// <summary>
        /// æ—¶é—´æˆ³
        /// </summary>
        public long TimeStamp { get; set; }
        /// <summary>
        /// ç­¾å
        /// </summary>
        public string Sign { get; set; }
        /// <summary>
        /// VMI物料数据集合
        /// </summary>
        public List<VMIItemCodeData> Data { get; set; }
    }
    /// <summary>
    /// VMI物料数据集合
    /// </summary>
    public class VMIItemCodeData
    {
        /// <summary>
        /// éœ€æ±‚组织编码
        /// </summary>
        public long OrgId { get; set; }
        /// <summary>
        /// ä¾›æ–¹ç¼–码
        /// </summary>
        public string SupplierCode { get; set; }
        /// <summary>
        /// ç‰©æ–™ç¼–码
        /// </summary>
        public string ItemCode { get; set; }
        /// <summary>
        /// åŒ…装数
        /// </summary>
        public decimal PackageQty { get; set; }
        /// <summary>
        /// æœ‰æ•ˆæ ‡è¯†
        /// </summary>
        public string DeleteFlag { get; set; }
        /// <summary>
        /// åˆ›å»ºäºº
        /// </summary>
        public string CreateUser { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
        public DateTime CreateDate { get; set; }
        /// <summary>
        /// ä¿®æ”¹äºº
        /// </summary>
        public string UpdateUser { get; set; }
        /// <summary>
        /// ä¿®æ”¹æ—¶é—´
        /// </summary>
        public DateTime UpdateDate { get; set; }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_External/IPLSService/IInvokePLSService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core;
using WIDESEA_DTO.PLS;
using WIDESEA_External.Model;
namespace WIDESEA_External.IPLSService
{
    public interface IInvokePLSService:IDependency
    {
        /// <summary>
        /// MO票上报PLS接口调用
        /// </summary>
        /// <param name="receiveModel"></param>
        /// <returns></returns>
        string InvokeMoInboundStatuApi(ReturnMoInboundStatuModel moInboundStatuModel);
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_External/PLSService/InvokePLSService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common.APIEnum;
using WIDESEA_Core.Helper;
using WIDESEA_DTO.PLS;
using WIDESEA_External.IPLSService;
using WIDESEA_External.Model;
using WIDESEA_IBasicRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_External.PLSService
{
    public class InvokePLSService : IInvokePLSService
    {
        private readonly IApiInfoRepository _apiInfoRepository;
        public InvokePLSService(IApiInfoRepository apiInfoRepository)
        {
            _apiInfoRepository = apiInfoRepository;
        }
        JsonSerializerSettings settings = new JsonSerializerSettings
        {
            ContractResolver = new CamelCasePropertyNamesContractResolver()
        };
        public string InvokeMoInboundStatuApi(ReturnMoInboundStatuModel moInboundStatuModel)
        {
            Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.InvokePLSApi.ToString());
            PLSBaseModel<ReturnMoInboundStatuModel> model = new PLSBaseModel<ReturnMoInboundStatuModel>()
            {
                Data = moInboundStatuModel,
                TimeStamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
                Sign = "RWMS001"
            };
            string request = JsonConvert.SerializeObject(model, settings);
            string response = HttpHelper.Post(apiInfo.ApiAddress, request);
            return response;
        }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IBasicService/IMaterielInfoService.cs
@@ -7,6 +7,7 @@
using WIDESEA_Core.BaseServices;
using WIDESEA_DTO.Basic;
using WIDESEA_DTO.ERP;
using WIDESEA_DTO.PLS;
using WIDESEA_IBasicRepository;
using WIDESEA_Model.Models;
@@ -51,5 +52,13 @@
        /// <param name="model"></param>
        /// <returns></returns>
        WebResponseContent ReceiveMaterial(MaterielInfoDTO model);
        /// <summary>
        /// åŒæ­¥VMI物料信息
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        WebResponseContent ReceiveVMIMaterial(VMIItemCodeInfo vmiModel);
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundRepository/IMoInboundOrderRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_IInboundRepository
{
    public interface IMoInboundOrderRepository : IRepository<Dt_MoInboundOrder>
    {
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundService/IMoInboundOrderService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.BaseServices;
using WIDESEA_IInboundRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_IInboundService
{
    public interface IMoInboundOrderService : IService<Dt_MoInboundOrder>
    {
        IMoInboundOrderRepository Repository { get; }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundRepository/MoInboundOrderRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.BaseRepository;
using WIDESEA_IInboundRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_InboundRepository
{
    public class MoInboundOrderRepository : RepositoryBase<Dt_MoInboundOrder>, IMoInboundOrderRepository
    {
        public MoInboundOrderRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
        {
        }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundService/MoInboundOrderService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,130 @@
using SqlSugar.Extensions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common.PLSEnum;
using WIDESEA_Core.BaseServices;
using WIDESEA_DTO;
using WIDESEA_DTO.PLS;
using WIDESEA_IBasicRepository;
using WIDESEA_IBasicService;
using WIDESEA_IInboundRepository;
using WIDESEA_IInboundService;
using WIDESEA_Model.Models;
namespace WIDESEA_InboundService
{
    public class MoInboundOrderService : ServiceBase<Dt_MoInboundOrder, IMoInboundOrderRepository>, IMoInboundOrderService
    {
        public IMoInboundOrderRepository Repository => BaseDal;
        public MoInboundOrderService(IMoInboundOrderRepository BaseDal) : base(BaseDal)
        {
        }
        /// <summary>
        /// PLS同步MO票信息
        /// </summary>
        public ApiResponseContent ReceiveMoStatus(MoInboundOrderDTO model)
        {
            // 1. åŸºç¡€å‚数校验
            if (model == null || model.Data == null || !model.Data.Any())
            {
                return ApiResponseContent.Instance.Error("MO票传入参数为空");
            }
            var dataList = new List<LabelNoData>();
            int successCount = 0;
            int totalCount = model.Data.Count;
            try
            {
                foreach (var item in model.Data)
                {
                    var itemResult = new LabelNoData
                    {
                        LabelNo = item.LabelNo
                    };
                    try
                    {
                        // å‚数校验
                        if (string.IsNullOrWhiteSpace(item.LabelNo))
                        {
                            throw new Exception("标签号 LabelNo ä¸èƒ½ä¸ºç©º");
                        }
                        // æŸ¥è¯¢MO票是否已存在
                        var existMo = BaseDal.QueryFirst(x => x.LabelNo == item.LabelNo);
                        if (existMo == null)
                        {
                            var addEntity = new Dt_MoInboundOrder()
                            {
                                OrgId = item.OrgId,
                                LabelNo = item.LabelNo,
                                Status = item.Status,
                                BarcodeNumber = item.BarcodeNumber,
                                SupplierCode = item.SupplierCode,
                                ItemCode = item.ItemCode,
                                Qty = item.Qty,
                                WorkOrderName = item.WorkOrderName,
                                DeleteFlag = item.DeleteFlag,
                                ReturnToPlsStatus = ReturnToPlsStatusEnum.未推送.ObjToInt(),
                                CreateDate = item.CreateDate,
                                Creater = item.CreateUser,
                                Modifier = item.UpdateUser,
                                ModifyDate = item.UpdateDate
                            };
                            BaseDal.AddData(addEntity);
                        }
                        else
                        {
                            existMo.OrgId = item.OrgId;
                            existMo.Status = item.Status;
                            existMo.BarcodeNumber = item.BarcodeNumber;
                            existMo.SupplierCode = item.SupplierCode;
                            existMo.ItemCode = item.ItemCode;
                            existMo.Qty = item.Qty;
                            existMo.WorkOrderName = item.WorkOrderName;
                            existMo.DeleteFlag = item.DeleteFlag;
                            existMo.Modifier = item.UpdateUser;
                            existMo.ModifyDate = item.UpdateDate;
                            BaseDal.UpdateData(existMo);
                        }
                        // å•条处理成功
                        itemResult.Success = 0;
                        successCount++;
                    }
                    catch (Exception ex)
                    {
                        // å•条处理失败
                        itemResult.Success = 1;
                        itemResult.Msg = ex.Message;
                    }
                    finally
                    {
                        // æ¯æ¡æ— è®ºæˆåŠŸ/失败,都加入返回列表
                        dataList.Add(itemResult);
                    }
                }
                // å…¨éƒ¨å¤„理完成,返回结果
                return ApiResponseContent.Instance.OK(
                    dataList,
                    $"处理完成:共{totalCount}条,成功{successCount}条,失败{totalCount - successCount}条"
                );
            }
            catch (Exception ex)
            {
                return ApiResponseContent.Instance.Error($"MO票同步整体异常:{ex.Message}");
            }
        }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Basic/Dt_MaterielInfo.cs
@@ -26,7 +26,7 @@
        /// <summary>
        /// ä»“库编号
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "仓库编号")]
        [SugarColumn(IsNullable = true, ColumnDescription = "仓库编号")]
        public int WarehouseId { get; set; }
        /// <summary>
@@ -38,13 +38,13 @@
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 200, ColumnDescription = "物料名称")]
        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "物料名称")]
        public string MaterielName { get; set; }
        /// <summary>
        /// ç‰©æ–™è§„æ ¼
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 200, ColumnDescription = "物料规格")]
        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "物料规格")]
        public string MaterielSpec { get; set; }
        /// <summary>
@@ -56,7 +56,7 @@
        /// <summary>
        /// åŸºæœ¬å•位(buyUnitId/StockUnitId)
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "基本单位(buyUnitId/StockUnitId)")]
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "基本单位(buyUnitId/StockUnitId)")]
        public string MaterielUnit { get; set; }
        /// <summary>
@@ -96,21 +96,21 @@
        public string MaterielModel { get; set; }
        /// <summary>
        /// ç‰©æ–™çŠ¶æ€(0:禁用、1:可用)
        ///有效标识(0:有效、1:无效)
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "物料状态(0:禁用、1:可用)")]
        [SugarColumn(IsNullable = false, ColumnDescription = "有效标识(0:有效、1:无效)")]
        public EnableEnum MaterielState { get; set; }
        /// <summary>
        /// åº“存组织(默认:淮安特创二厂)
        /// ä¾›æ–¹ç¼–码
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "库存组织")]
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "供方编码")]
        public string MaterielInvOrgId { get; set; }
        /// <summary>
        /// æ˜¯å¦éœ€è¦è´¨æ£€
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "是否需要质检")]
        [SugarColumn(IsNullable = true, ColumnDescription = "是否需要质检")]
        public WhetherEnum IsCheck { get; set; }
        /// <summary>
@@ -118,5 +118,18 @@
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "备注")]
        public string Remark { get; set; }
        /// <summary>
        /// éœ€æ±‚组织编码
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "需求组织编码")]
        public long OrgId { get; set; }
        /// <summary>
        /// åŒ…装数
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "包装数")]
        public decimal PackageQty { get; set; }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_MoInboundOrder.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,95 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common.CommonEnum;
using WIDESEA_Core.DB.Models;
namespace WIDESEA_Model.Models
{
    /// <summary>
    /// MO票入库单据表
    /// </summary>
    [SugarTable(nameof(Dt_MoInboundOrder), "MO票入库单据表")]
    public class Dt_MoInboundOrder:BaseEntity
    {
        /// <summary>
        /// ä¸»é”®
        /// </summary>
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "主键")]
        public int Id { get; set; }
        /// <summary>
        /// ç‰©æ–™ç¼–号
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "物料编号")]
        public string ItemCode { get; set; }
        /// <summary>
        /// MO票
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "MO票")]
        public string LabelNo { get; set; }
        /// <summary>
        /// å•据号
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 200, ColumnDescription = "单据号")]
        public string BarcodeNumber { get; set; }
        /// <summary>
        /// VMI物流状态(已创建,已备货,已发运,已取消)
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 10, ColumnDescription = "VMI物流状态(已创建,已备货,已发运,已取消)")]
        public string Status { get; set; }
        /// <summary>
        ///有效标识(0:有效、1:无效)
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "有效标识(0:有效、1:无效)")]
        public long DeleteFlag { get; set; }
        /// <summary>
        /// ä¾›æ–¹ç¼–码
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "供方编码")]
        public string SupplierCode { get; set; }
        /// <summary>
        /// éœ€æ±‚组织编码
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "需求组织编码")]
        public string OrgId { get; set; }
        /// <summary>
        /// æ•°é‡
        /// </summary>
        [SugarColumn(IsNullable = false,  ColumnDescription = "数量")]
        public decimal Qty { get; set; }
        /// <summary>
        /// ä½œä¸šå·
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "作业号")]
        public string WorkOrderName { get; set; }
        /// <summary>
        /// æŽ¨é€çŠ¶æ€
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "推送状态")]
        public int ReturnToPlsStatus { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "备注")]
        public string Remark { get; set; }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/WIDESEA_Model.csproj
@@ -18,7 +18,6 @@
    <ItemGroup>
      <Folder Include="Models\Check\" />
      <Folder Include="Models\Inbound\" />
      <Folder Include="Models\Outbound\" />
    </ItemGroup>
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/PLS/PlsController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,56 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using WIDESEA_Core.Attributes;
using WIDESEA_Core;
using WIDESEA_DTO.ERP;
using WIDESEA_DTO;
using WIDESEA_External.ERPService;
using WIDESEA_IBasicService;
using WIDESEA_DTO.PLS;
using WIDESEA_External.Model;
using WIDESEA_External.IPLSService;
namespace WIDESEA_WMSServer.Controllers.PLS
{
    [Route("api/Pls")]
    [ApiController]
    public class PlsController:ControllerBase
    {
        private readonly IBasicService _basicService;
        private readonly IInvokePLSService _invokePLSService;
        public PlsController(IBasicService basicService,IInvokePLSService invokePLSService)
        {
            _basicService = basicService;
            _invokePLSService = invokePLSService;
        }
        /// <summary>
        /// æŽ¥æ”¶PLS同步VMI物料信息
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost, Route("ReceiveVMIMaterial"), AllowAnonymous, MethodParamsValidate]
        public ApiResponseContent ReceiveVMIMaterial([FromBody] VMIItemCodeInfo vmiModel)
        {
            WebResponseContent content = _basicService.MaterielInfoService.ReceiveVMIMaterial(vmiModel);
            if (content.Status) {
                return ApiResponseContent.Instance.OK();
            }
            else {
                return ApiResponseContent.Instance.Error();
            }
        }
        /// <summary>
        /// MO票状态上报PLS
        /// </summary>
        /// <returns></returns>
        [HttpPost, Route("InvokeMoInboundStatuApi"), AllowAnonymous]
        public string InvokeMoInboundStatuApi([FromBody] ReturnMoInboundStatuModel moInboundStatuModel)
        {
            return _invokePLSService.InvokeMoInboundStatuApi(moInboundStatuModel);
        }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/appsettings.json
@@ -13,7 +13,7 @@
  //连接字符串
  //"ConnectionString": "HTI6FB1H05Krd07mNm9yBCNhofW6edA5zLs9TY~MNthRYW3kn0qKbMIsGp~3yyPDF1YZUCPBQx8U0Jfk4PH~ajNFXVIwlH85M3F~v_qKYQ3CeAz3q1mLVDn8O5uWt1~3Ut2V3KRkEwYHvW2oMDN~QIDXPxDgXN0R2oTIhc9dNu7QNaLEknblqmHhjaNSSpERdDVZIgHnMKejU_SL49tralBkZmDNi0hmkbL~837j1NWe37u9fJKmv91QPb~16JsuI9uu0EvNZ06g6PuZfOSAeFH9GMMIZiketdcJG3tHelo=",
  //"ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWMS_HUAIAN;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  "ConnectionString": "Data Source=.;Initial Catalog=WIDESEA_WMSLLD;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  "ConnectionString": "Data Source=.;Initial Catalog=WIDESEA_HanDanWMS;User ID=sa;Password=root;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  //"ConnectionString": "Data Source=10.30.4.92;Initial Catalog=WMS_TC;User ID=sa;Password=duo123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  //旧WMS数据库连接
  //"TeConnectionString": "Data Source=10.30.4.92;Initial Catalog=TeChuang;User ID=sa;Password=duo123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
@@ -32,5 +32,7 @@
  "ExpMinutes": 120,
  "QuartzJobAutoStart": true,
  "PDAVersion": "4",
  "WebSocketPort": 9296
  "WebSocketPort": "9296,",
  "DBSeedEnable": true
}