Przeglądaj źródła

功能提交。

tangdi 2 lat temu
rodzic
commit
2a3b2d960a

+ 7 - 0
MicroServices/Business/Business.Application.Contracts/SystemJob/ISystemJobAppService.cs

@@ -22,6 +22,13 @@ namespace Business.SystemJob
         /// <returns></returns>
         string SyncWMSDataToMySQLJob();
 
+        /// <summary>
+        /// 定时同步工单和采购订单
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        string SyncOrderAndPurOrd();
+
         /// <summary>
         /// 定时创建NLog日志按月分表
         /// </summary>

+ 3 - 2
MicroServices/Business/Business.Application/ReplenishmentManagement/ReplenishmentAppService.cs

@@ -4014,7 +4014,7 @@ namespace Business.Replenishment
             List<b_bom_pretreatment> addList = new List<b_bom_pretreatment>();
             foreach (var bom in ic_Boms)
             {
-                var pret = pretreatment.Find(s => s.sourceid == bom.mysql_id && s.bom_id == bom.mysql_id);
+                /*var pret = pretreatment.Find(s => s.sourceid == bom.mysql_id && s.bom_id == bom.mysql_id);
                 if (pret != null)
                 {
                     if (pret.version == bom.version)
@@ -4024,7 +4024,8 @@ namespace Business.Replenishment
                     }
                     //版本不同则重新生成
                     deleteList.Add(pret);
-                }
+                }*/
+                deleteList.AddRange(pretreatment);
                 //bom层级组装
                 var getBomList = _pretreatmentAppService.BomPretreatment(bom.mysql_id, bomlist, bomchildlist, icitemlist);
                 //bom替代关系组装

+ 6 - 3
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -2385,6 +2385,8 @@ namespace Business.ResourceExamineManagement
             podetaillist.ForEach(a =>
             {
                 var refItem = itemMasterList.Find(x => x.ItemNum == a.ItemNum);
+                short line = 1;
+                short.TryParse(a.polist_row.GetValueOrDefault().ToString(),out line);
                 purOrdDetails.Add(new PurOrdDetail
                 {
                     Domain = domain,
@@ -2393,7 +2395,7 @@ namespace Business.ResourceExamineManagement
                     IsActive = true,
                     CreateTime = a.create_time,
                     UpdateTime = a.update_time,
-                    Line = a.polist_row,
+                    Line = line,
                     ItemNum = a.ItemNum,
                     QtyOrded = a.qty.GetValueOrDefault(),
                     QtyReceived = a.rqty.GetValueOrDefault(),
@@ -3640,7 +3642,7 @@ namespace Business.ResourceExamineManagement
             List<b_bom_pretreatment> addList = new List<b_bom_pretreatment>();
             foreach (var bom in ic_Boms)
             {
-                var pret = pretreatment.Find(s => s.sourceid == bom.mysql_id && s.bom_id == bom.mysql_id);
+                /*var pret = pretreatment.Find(s => s.sourceid == bom.mysql_id && s.bom_id == bom.mysql_id);
                 if (pret != null)
                 {
                     if (pret.version == bom.version)
@@ -3650,7 +3652,8 @@ namespace Business.ResourceExamineManagement
                     }
                     //版本不同则重新生成
                     deleteList.Add(pret);
-                }
+                }*/
+                deleteList.AddRange(pretreatment);
                 //bom层级组装
                 var getBomList = _pretreatmentAppService.BomPretreatment(bom.mysql_id, bomlist, bomchildlist, icitemlist);
                 //bom替代关系组装

+ 291 - 29
MicroServices/Business/Business.Application/SystemJobManagement/SystemJobAppService.cs

@@ -1,10 +1,13 @@
-using Business.Core.Utilities;
+using Business.Core.Enum;
+using Business.Core.Utilities;
 using Business.Domain;
 using Business.EntityFrameworkCore;
 using Business.EntityFrameworkCore.SqlRepositories;
 using Business.ResourceExamineManagement;
+using Business.ResourceExamineManagement.Dto;
 using Business.SystemJob;
 using EFCore.BulkExtensions;
+using Microsoft.Extensions.Configuration;
 using MongoDB.Driver.Linq;
 using NLog;
 using System;
@@ -71,6 +74,23 @@ namespace Business.SystemJobManagement
         private readonly ISqlRepository<ItemMaster> _itemMaster;
         private readonly ISqlRepository<ProductStructureMaster> _productStructureMaster;
 
+        private readonly ISqlRepository<PurOrdMaster> _purOrdMaster;
+        private readonly ISqlRepository<PurOrdDetail> _purOrdDetail;
+
+
+        /// <summary>
+        /// 生产工单主表
+        /// </summary>
+        private readonly IRepository<mes_morder, long> _mysql_mes_morder;
+        /// <summary>
+        /// 生产工单子表
+        /// </summary>
+        private readonly IRepository<mes_moentry, long> _mysql_mes_moentry;
+        /// <summary>
+        /// 工单主表
+        /// </summary>
+        private readonly ISqlRepository<WorkOrdMaster> _workOrdMaster;
+
         /// <summary>
         /// 替代群组
         /// </summary>
@@ -104,6 +124,8 @@ namespace Business.SystemJobManagement
         private readonly IRepository<mo_mes_tech_process, long> _mes_tech_process;
         private IRepository<mes_tech_process, long> _mysql_mes_tech_process;
 
+        private IRepository<srm_po_main, long> _srm_po_main;
+        private IRepository<srm_po_list, long> _srm_po_list;
 
         /// <summary>
         /// 生产排产
@@ -134,6 +156,13 @@ namespace Business.SystemJobManagement
          IRepository<mo_mes_process, long> mes_process,
          IRepository<mo_mes_tech_process, long> mes_tech_process,
          ProductionScheduleAppService productionScheduleAppService,
+         ISqlRepository<WorkOrdMaster> workOrdMaster,
+         IRepository<mes_morder, long> mysql_mes_morder,
+         IRepository<mes_moentry, long> mysql_mes_moentry,
+         ISqlRepository<PurOrdMaster> purOrdMaster,
+         ISqlRepository<PurOrdDetail> purOrdDetail,
+         IRepository<srm_po_main, long> srm_po_main,
+         IRepository<srm_po_list, long> srm_po_list,
          BusinessDbContext businessDbContext
          )
         {
@@ -162,6 +191,13 @@ namespace Business.SystemJobManagement
             _businessDbContext = businessDbContext;
             _itemMaster = itemMaster;
             _productionScheduleAppService = productionScheduleAppService;
+            _workOrdMaster = workOrdMaster;
+            _mysql_mes_morder = mysql_mes_morder;
+            _mysql_mes_moentry = mysql_mes_moentry;
+            _purOrdMaster = purOrdMaster;
+            _purOrdDetail = purOrdDetail;
+            _srm_po_main = srm_po_main;
+            _srm_po_list = srm_po_list;
         }
 
         public string SyncWMSDataToMySQLJob()
@@ -712,32 +748,6 @@ namespace Business.SystemJobManagement
                         addStock.create_by_name = "admin";
                         addStock.update_by_name = "admin";
                         stockAdd.Add(addStock);
-                        /*srm_purchaseAdd.Add(new srm_purchase(help.NextId())
-                        {
-                            icitem_id = itemId,
-                            icitem_name = custList[i].Descr,
-                            sourcelist_number = "HYQD12064",
-                            supplier_id = 10101000051,
-                            supplier_number = "",
-                            supplier_name = "广州市伟正金属构件有限公司",
-                            purchgroup = "",
-                            purcher = "",
-                            purchase_unit = "",
-                            netpurchase_price = 1,
-                            taxrate = 0.13m,
-                            currency_type = 1,
-                            order_rector_name = "",
-                            order_rector_num = "",
-                            factory_code = "",
-                            order_dept = "",
-                            order_price = 13,
-                            sale_price = 130,
-                            qty_min = 10,
-                            batch_append_qty = 10,
-                            factory_id = 1001,
-                            tenant_id = 1000,
-                            IsDeleted = false
-                        });*/
                     }
                     else
                     {
@@ -888,8 +898,6 @@ namespace Business.SystemJobManagement
             }
         }
 
-        
-
         public string DoProductScheduleJob()
         {
             try
@@ -903,5 +911,259 @@ namespace Business.SystemJobManagement
             return "任务执行成功";
 
         }
+        /// <summary>
+        /// 同步工单和采购订单数据
+        /// </summary>
+        /// <returns></returns>
+        public string SyncOrderAndPurOrd()
+        {
+            try
+            {
+                IConfiguration configuration = new ConfigurationBuilder().AddJsonFile("appsettings.json", optional: true, reloadOnChange: true).Build();
+                string domain = configuration.GetConnectionString("Factory_id");
+                string companyid = configuration.GetConnectionString("Company_id");
+                if (string.IsNullOrEmpty(domain) || string.IsNullOrEmpty(companyid))
+                {
+                    return "请检查配置文件中公司和工厂编码是否维护。";
+                }
+                var sysResult =  SyncOrder(domain).Result;
+                if (sysResult == "ok")
+                {
+                    //sysResult = SyncPurOrd(domain, companyid).Result;
+                }
+                return sysResult;
+            }
+            catch (Exception ex)
+            {
+                return ex.Message;
+            }
+        }
+
+        private async Task<string> SyncOrder(string domain)
+        {
+            try
+            {
+                //取数范围 需明确数据范围
+                var workList = _workOrdMaster.Select(c => c.Domain == domain && string.IsNullOrWhiteSpace(c.Status) == false).ToList();
+                var mesMorder = _mysql_mes_morder.GetListAsync(x => x.factory_id.ToString() == domain).Result;
+                var mesMoentry = _mysql_mes_moentry.GetListAsync(x => x.factory_id.ToString() == domain).Result;
+                List<mes_morder> updateList = new List<mes_morder>();
+                List<mes_moentry> updateMoentryList = new List<mes_moentry>();
+                foreach (var work in workList)
+                {
+                    var morder = mesMorder.Find(x => x.morder_no == work.WorkOrd);
+                    if (morder != null)
+                    {
+                        //修改
+                        morder.moentry_sys_stime = work.OrdDate;
+                        morder.moentry_sys_etime = work.DueDate;
+                        morder.need_number = work.QtyOrded;
+                        morder.morder_production_number = work.QtyOrded;
+                        morder.morder_need_time = work.LbrVar;
+                        string status = "";
+                        switch (work.Status.ToUpper())
+                        {
+                            case "P":
+                                status = MorderEnum.Initial_state;
+                                break;
+                            case "R":
+                                status = MorderEnum.Xd_state;
+                                break;
+                            case "W":
+                                status = MorderEnum.tc_state;
+                                break;
+                            case "C":
+                                status = MorderEnum.Accomplish_state;
+                                break;
+                            default:
+                                status = MorderEnum.Initial_state;
+                                break;
+                        }
+                        morder.morder_state = status;
+                        updateList.Add(morder);
+                        var moentry = mesMoentry.Find(x => x.moentry_moid == morder.Id);
+                        if (moentry != null)
+                        {
+                            moentry.morder_production_number = morder.morder_production_number;
+                            moentry.need_number = morder.need_number;
+                            updateMoentryList.Add(moentry);
+                        }
+                    }
+                }
+                await _mysql_mes_morder.UpdateManyAsync(updateList);
+                await _mysql_mes_moentry.UpdateManyAsync(updateMoentryList);
+            }
+            catch (Exception e)
+            {
+                return e.Message;
+            }
+            return "ok";
+        }
+
+        private async Task<string> SyncPurOrd(string domain,string companyid)
+        {
+            var masters = _purOrdMaster.Select(x => x.Domain == domain).ToList();
+            var details = _purOrdDetail.Select(x => x.Domain == domain).ToList();
+            var pomains = _srm_po_main.GetListAsync(x => x.factory_id.ToString() == domain && x.company_id.ToString() == companyid).Result;
+            var polists = _srm_po_list.GetListAsync(x => x.factory_id.ToString() == domain && x.company_id.ToString() == companyid).Result;
+            List<ic_item> itemList = _mysql_ic_item.GetListAsync(x => x.factory_id.ToString() == domain && x.company_id.ToString() == companyid).Result;
+            List<srm_po_main> poList = new List<srm_po_main>();
+            List<srm_po_list> detailList = new List<srm_po_list>();
+
+            List<srm_po_main> addPo = new List<srm_po_main>();
+            List<srm_po_main> updatePo = new List<srm_po_main>();
+
+            List<srm_po_list> addPolist = new List<srm_po_list>();
+            List<srm_po_list> updatePolist = new List<srm_po_list>();
+            List<srm_po_list> delPolist = new List<srm_po_list>();
+
+            try
+            {
+                foreach (var m in masters)
+                {
+                    var po = pomains.Find(x => x.po_billno == m.PurOrd);
+                    if (po != null)
+                    {
+                        updatePo.Add(po);
+                    }
+                    else
+                    {
+                        //add PO Polist
+                        po = new srm_po_main();
+                        po.GenerateNewId(help.NextId());
+                        po.po_billno = m.PurOrd;
+                        //var pr = list.Find(s => s.Id == dto.polist[0].pr_id);
+                        //var itemsupplier = itemsupplierList.Find(a => a.Id == pr.pr_purchaseid);
+                        //po.po_purchaser = m.;
+                        po.po_purchaser_no = m.Buyer;
+                        po.po_ssend_date = m.OrdDate;
+                        po.po_tax_rate = m.Tax1;
+                        po.po_express = 1;
+                        po.po_note = "";
+                        po.po_order_type = 1;
+                        po.po_total = 0;
+                        po.supplier_type = m.USAGE;
+                        //po.currency = pr.currencytype;
+                        po.bill_type = 1;
+                        //po.supplier_id = pr.pr_purchaseid;
+                        //po.supplier_name = m.;
+                        po.supplier_no = m.Supp;
+                        //po.contact = m.cus;
+                        po.suppliertelephone = m.CustPhone;
+                        //po.deliveryaddress = "";
+                        po.supplierdddress = m.CustAddress;
+                        po.confirmstate = 1;
+                        po.logisticsstate = 0;
+                        po.financialstate = 0;
+                        po.create_time = DateTime.Now;
+                        po.factory_id = long.Parse(domain);
+                        po.company_id = long.Parse(companyid);
+                        po.po_delivery = 1;
+                        addPo.Add(po);
+                    }
+                    po.state = GetPurOrdStatus(m.Status);
+
+                    var dtls = details.Where(x => x.PurOrdRecID == m.RecID).ToList();
+                    var plists = polists.Where(x => x.po_id == po.Id).ToList();
+                    //所有数据先默认删除
+                    delPolist.AddRange(plists);
+                    foreach (var dtl in dtls)
+                    {
+                        var plist = plists.Find(x => x.number == dtl.ItemNum);
+                        if (plist != null)
+                        {
+                            //如果有存在,则从删除集合移除
+                            delPolist.Remove(plist);
+                            plist.state = dtl.Status.ToUpper() == "C" ? 0 : 1;
+                            updatePolist.Add(plist);
+                        }
+                        else
+                        {
+                            plist = new srm_po_list();
+
+                            plist.GenerateNewId(help.NextId());
+                            var icitem = itemList.Find(a => a.number == dtl.ItemNum);
+                            if (icitem == null)
+                            {
+                                continue;
+                            }
+                            plist.icitem_id = icitem.Id;
+                            plist.model = icitem.model;
+                            plist.ItemNum = icitem.number;
+                            plist.icitem_name = icitem.name;
+                            plist.qty = dtl.QtyOrded.GetValueOrDefault();
+                            plist.netprice = dtl.PurCost.GetValueOrDefault();
+                            plist.netmoney = dtl.QtyOrded.GetValueOrDefault() * dtl.PurCost.GetValueOrDefault();
+                            plist.rate = dtl.TaxRate;
+                            plist.price = dtl.PurCost.GetValueOrDefault();
+                            plist.total_price = dtl.QtyOrded.GetValueOrDefault() * dtl.PurCost.GetValueOrDefault();
+                            //plist.taxamount = item.pr_orderprice.GetValueOrDefault() - podetail.netmoney;
+                            plist.plan_qty = dtl.QtyOrded.GetValueOrDefault();
+                            plist.unit = icitem.unit;
+                            plist.state = dtl.Status.ToUpper() == "C" ? 0 : 1;
+                            plist.rarrdate = dtl.DueDate;
+                            plist.rnumber = 0;
+                            //plist.currencytype = m.Curr;
+                            plist.create_time = DateTime.Now;
+                            plist.factory_id = po.factory_id;
+                            plist.company_id = po.company_id;
+                            plist.tenant_id = po.tenant_id;
+                            plist.stock_id = 1;
+                            plist.state = dtl.Status.ToUpper() == "C" ? 0 : 1;
+                            addPolist.Add(plist);
+                        }
+                    }
+                }
+                if (addPo.Any())
+                {
+                    await _srm_po_main.InsertManyAsync(addPo);
+                }
+                if (updatePo.Any())
+                {
+                    await _srm_po_main.UpdateManyAsync(updatePo);
+                }
+                if (addPolist.Any())
+                {
+                    await _srm_po_list.InsertManyAsync(addPolist);
+                }
+                if (updatePolist.Any())
+                {
+                    await _srm_po_list.UpdateManyAsync(updatePolist);
+                }
+                if (delPolist.Any())
+                {
+                    await _srm_po_list.HardDeleteAsync(delPolist);
+                }
+            }
+            catch(Exception ex)
+            {
+                return ex.Message;
+            }
+            return "ok";
+        }
+
+        private int GetPurOrdStatus(string status)
+        {
+            int poStatu = 0;
+            switch (status)
+            {
+                case "":
+                    poStatu = 0;
+                    break;
+                case "A":
+                    poStatu = 1;
+                    break;
+                case "B":
+                    poStatu = 2;
+                    break;
+                case "C":
+                    poStatu = 3;
+                    break;
+                default:
+                    poStatu = 0;
+                    break;
+            }
+            return poStatu;
+        }
     }
 }

+ 4 - 0
MicroServices/Business/Business.Core/Enum/MorderEnum.cs

@@ -62,6 +62,10 @@ namespace Business.Core.Enum
         /// </summary>
         public const string Xd_state = "下达";
         /// <summary>
+        /// 投产
+        /// </summary>
+        public const string tc_state = "投产";
+        /// <summary>
         /// 暂停
         /// </summary>
         public const string Suspend_state = "暂停";

+ 8 - 1
MicroServices/Business/Business.Domain/StructuredDB/MES/IC/PurOrdDetail.cs

@@ -47,7 +47,7 @@ namespace Business.Domain
         /// 行号
         /// </summary>
         [Comment("行号")]
-        public int? Line { get; set; }
+        public short Line { get; set; }
 
 
         /// <summary>
@@ -149,5 +149,12 @@ namespace Business.Domain
         /// </summary>
         [Comment("库位")]
         public string Location { get; set; }
+
+        /// <summary>
+        /// 状态
+        /// </summary>
+        [Comment("状态")]
+        public string Status { get; set; }
+        
     }
 }

+ 1 - 0
MicroServices/Business/Business.Host/appsettings.json

@@ -24,6 +24,7 @@
     "DOPExt": "Server=172.16.8.154;Database=DOPEXT;uid=sa;pwd=ac%qams)aCXI;Trusted_Connection=false;TrustServerCertificate=True",
     "MongoDB": "mongodb://zzydop:zzyd0pB()@172.16.8.154/dopbase",
     "Factory_id": "8010"
+    "Company_id": "1000"
   },
   "Redis": {
     "Configuration": "192.168.1.191"

+ 11 - 0
MicroServices/Business/Business.HttpApi/Controllers/SystemJobController.cs

@@ -32,6 +32,17 @@ namespace Business.Controllers
             return _SystemJobAppService.SyncWMSDataToMySQLJob();
         }
 
+        /// <summary>
+        /// 定时同步WMS物料订单等基础数据到MySQL
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet]
+        [Route("SyncOrderAndPurOrd")]
+        public string SyncOrderAndPurOrd()
+        {
+            return _SystemJobAppService.SyncOrderAndPurOrd();
+        }
+
         /// <summary>
         /// 定时创建NLog日志按月分表
         /// </summary>