dengjunjie
2 天以前 7ca9651f81d7b84f054194d3d46fdbd1d9c8b922
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
using Magicodes.IE.Core;
using MailKit.Search;
using System;
using System.Threading.Tasks;
using WIDESEA_Core;
using WIDESEA_Core.Enums;
using WIDESEA_Core.Helper;
using WIDESEA_DTO.Inbound;
using WIDESEA_DTO.WCSInfo;
using WIDESEA_Model.Models;
using WIDESEAWCS_DTO.WCSInfo;
 
namespace WIDESEA_TaskInfoService
{
    public partial class TaskService
    {
 
        /// <summary>
        /// 产线申请
        /// </summary>
        /// <param name="productionlineDTO"></param>
        /// <returns></returns>
        public WebResponseContent ProductionlineRequest(ProductionlineDTO productionlineDTO)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                #region MyRegion
                Dt_InventoryInfo inventoryInfo = _inventoryInfoRepository.QueryFirst(x => x.PalletCode == productionlineDTO.Barcode);
                if (inventoryInfo != null) throw new Exception($"托盘【{productionlineDTO.Barcode}】已存在库存信息");
                Dt_InboundOrderDetail inboundOrderDetail = _inboundService.InboundOrderDetailService.Repository.QueryFirst(x => x.BatchNo == productionlineDTO.batchNo);
                if (inboundOrderDetail == null) throw new Exception($"未找到批号【{productionlineDTO.batchNo}】的入库单");
                if (inboundOrderDetail.OrderQuantity - inboundOrderDetail.ReceiptQuantity < 1) throw new Exception($"批号【{productionlineDTO.batchNo}】的可组盘数量不足");
                Dt_InboundOrder inboundOrder = _inboundService.InbounOrderService.Repository.QueryFirst(x => x.Id == inboundOrderDetail.OrderId);
                if (inboundOrder == null) throw new Exception($"未找到批号为【{productionlineDTO.batchNo}】的入库单");
                var materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == inboundOrderDetail.MaterielCode);
                if (materielInfo == null) throw new Exception($"未找到物料信息,物料编码【{inboundOrderDetail.MaterielCode}】");
                Dt_Task dt_Task = new Dt_Task()
                {
                    CurrentAddress = productionlineDTO.stationCode,
                    NextAddress = "SC01",
                    SourceAddress = productionlineDTO.stationCode,
                    TargetAddress = "SC01",
                    Creater = "System",
                    PalletCode = productionlineDTO.Barcode,
                    Roadway = "SC01",
                    OrderNo = productionlineDTO.batchNo,// inboundOrder.OrderNo,
                    TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
                    TaskState = InTaskStatusEnum.InNew.ObjToInt(),
                    TaskType = TaskTypeEnum.Inbound.ObjToInt(),
                    CreateDate = DateTime.Now,
                    Dispatchertime = DateTime.Now,
                };
 
                var productionDate = DateTime.Now.ToString("yyyy-MM-dd");
                var validityPeriod = DateTime.Now.AddDays(materielInfo.Validity).ToString("yyyy-MM-dd");//加天
                //var validityPeriod = DateTime.Now.AddMonths(materielInfo.Validity).ToString("yyyy-MM-dd");//加月
                //var validityPeriod = DateTime.Now.AddYears(materielInfo.Validity).ToString("yyyy-MM-dd");//加年
                #region 库存
                inventoryInfo = new Dt_InventoryInfo()
                {
                    BatchNo = productionlineDTO.batchNo,
                    MaterielCode = inboundOrderDetail.MaterielCode,
                    MaterielName = inboundOrderDetail.MaterielName,
                    PalletCode = productionlineDTO.Barcode,
                    ProductionDate = productionDate,
                    StockStatus = StockStatusEmun.组盘暂存.ObjToInt(),
                    ProductStatus = ProductStatusEmun.待检1.ObjToInt(),
                    ShelfLife = materielInfo.Validity,
                    ValidityPeriod = validityPeriod,
                    Creater = "System"
                };
                #endregion
 
                #region 入库单
                inboundOrder.OrderStatus = InboundStatusEnum.入库中.ObjToInt();
                var Item1 = _inboundService.InboundOrderDetailService.GetBoxStockQuantity(inboundOrderDetail);
                inventoryInfo.StockQuantity = Item1.StockQuantity;
                inventoryInfo.BoxQuantity = Item1.BoxQuantity;
                inboundOrderDetail.ReceiptQuantity = inboundOrderDetail.ReceiptQuantity + Item1.StockQuantity;
                inboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.GroupAndInbound.ObjToInt();
                #endregion
 
                Db.Ado.BeginTran();
                _inboundService.InbounOrderService.UpdateData(inboundOrder);
                _inboundService.InboundOrderDetailService.UpdateData(inboundOrderDetail);
                _inventoryInfoRepository.AddData(inventoryInfo);
                AddData(dt_Task);
                content.OK(data: dt_Task);
                Db.Ado.CommitTran();
                #endregion
            }
            catch (Exception ex)
            {
                Db.Ado.RollbackTran();
                content.Error(ex.Message);
            }
            return content;
        }
        /// <summary>
        /// 产线申请
        /// </summary>
        /// <param name="lineDTO"></param>
        /// <returns></returns>
        public WebResponseContent ProductionlineRequest(ConveyorLineDTO lineDTO)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                var task = BaseDal.QueryFirst(x => x.PalletCode == lineDTO.Barcode);
                if (task != null && task.TaskType == TaskTypeEnum.Inbound.ObjToInt())
                    return content.OK(data: task);
                if (task != null) throw new Exception($"托盘号[{lineDTO.Barcode}]已存在任务");
                Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(lineDTO.Barcode);
                (bool, string) result = CheckRequestInbound(lineDTO.stationCode, lineDTO.Barcode, true, stockInfo);
                if (!result.Item1) return content = WebResponseContent.Instance.Error(result.Item2);
                var StockInfoDetails = stockInfo.Details.Where(x => x.StockId == stockInfo.Id).ToList();
                #region 生成入库任务
                Dt_Task dt_Task = new Dt_Task()
                {
                    CurrentAddress = lineDTO.stationCode,
                    NextAddress = "SC01",
                    SourceAddress = lineDTO.stationCode,
                    TargetAddress = "SC01",
                    CreateDate = DateTime.Now,
                    Creater = "System",
                    PalletCode = lineDTO.Barcode,
                    OrderNo = StockInfoDetails.Count() == 1 ? StockInfoDetails.First().OrderNo : null,
                    Roadway = "SC01",
                    TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
                    TaskState = InTaskStatusEnum.InNew.ObjToInt(),
                    TaskType = TaskTypeEnum.Inbound.ObjToInt(),
                };
                dt_Task.Dispatchertime = dt_Task.CreateDate;
                Db.Ado.BeginTran();
                BaseDal.AddData(dt_Task);
                task = BaseDal.QueryFirst(x => x.PalletCode == lineDTO.Barcode && x.TaskType == TaskTypeEnum.Inbound.ObjToInt());
                //content.Data = dt_Task;
                Db.Ado.CommitTran();
                if (task != null) return content.OK(data: task);
                #endregion
            }
            catch (Exception ex)
            {
                Db.Ado.RollbackTran();
                content.Error(ex.Message);
            }
            return content;
        }
    }
}