|
|
@@ -2,6 +2,7 @@ using Amazon.Runtime.Internal.Util;
|
|
|
using Business.Core.Enum;
|
|
|
using Business.Core.Utilities;
|
|
|
using Business.Domain;
|
|
|
+using Business.DOP;
|
|
|
using Business.Dto;
|
|
|
using Business.EntityFrameworkCore;
|
|
|
using Business.EntityFrameworkCore.SqlRepositories;
|
|
|
@@ -313,6 +314,8 @@ namespace Business.ResourceExamineManagement
|
|
|
|
|
|
private readonly SerialNumberAppService _serialNumberAppService;
|
|
|
|
|
|
+ private readonly HolidayHelper _holidayHelper;
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 优先级
|
|
|
/// </summary>
|
|
|
@@ -492,6 +495,7 @@ namespace Business.ResourceExamineManagement
|
|
|
IRepository<srm_purchase, long> srmPurchase,
|
|
|
IUnitOfWorkManager unitOfWorkManager,
|
|
|
SerialNumberAppService serialNumberAppService,
|
|
|
+ HolidayHelper holidayHelper,
|
|
|
ReplenishmentAppService replenishmentAppService,
|
|
|
IRepository<ReplenishmentWeekPlan,long> replenishmentWeekPlan,
|
|
|
ISqlRepository<InvMaster> invMaster
|
|
|
@@ -584,6 +588,7 @@ namespace Business.ResourceExamineManagement
|
|
|
_unitOfWorkManager = unitOfWorkManager;
|
|
|
_scheduleResultOpMaster = scheduleResultOpMaster;
|
|
|
_serialNumberAppService = serialNumberAppService;
|
|
|
+ _holidayHelper = holidayHelper;
|
|
|
_replenishmentAppService = replenishmentAppService;
|
|
|
_replenishmentWeekPlan = replenishmentWeekPlan;
|
|
|
_invMaster = invMaster;
|
|
|
@@ -2854,12 +2859,12 @@ namespace Business.ResourceExamineManagement
|
|
|
/// <returns></returns>
|
|
|
public async Task<string> ProduceDayPlanKittingCheck(string startime,string endtime,string domain, string userAccount)
|
|
|
{
|
|
|
- DateTime stime = DateTime.Now.Date.AddDays(-100);
|
|
|
+ DateTime stime = DateTime.Now.AddDays(1).Date;
|
|
|
if (!string.IsNullOrEmpty(startime))
|
|
|
{
|
|
|
DateTime.TryParse(startime, out stime);
|
|
|
}
|
|
|
- DateTime etime = DateTime.Now.Date.AddYears(2);
|
|
|
+ DateTime etime = stime.AddDays(6);
|
|
|
if (!string.IsNullOrEmpty(endtime))
|
|
|
{
|
|
|
DateTime.TryParse(endtime, out etime);
|
|
|
@@ -3717,6 +3722,9 @@ namespace Business.ResourceExamineManagement
|
|
|
var Items = _mysql_ic_item.GetListAsync(s => workDetails.Select(c => c.ItemNum).Contains(s.number) && s.factory_id.ToString() == workOrdMasters[0].Domain).Result;
|
|
|
List<ItemMaster> itemMasterList = _itemMaster.Select(p => workDetails.Select(c => c.ItemNum).Contains(p.ItemNum) && p.Domain == workOrdMasters[0].Domain).Distinct().ToList();
|
|
|
|
|
|
+ //1.读取配置的补班、法休。默认周六周日休息,如果周六是工作日,需在配置中维护好每周六的都设置为补班。
|
|
|
+ var holidayList = _holidayMaster.Select(x => x.IsActive == true && x.Domain == workOrdMasters[0].Domain && (x.Dated.Value.Year == DateTime.Now.Year || x.Dated.Value.Year == DateTime.Now.Year + 1)).ToList();
|
|
|
+
|
|
|
//按照工单领料,之前是按照排产日期和产线分别领料
|
|
|
foreach (var workord in workOrdMasters)
|
|
|
{
|
|
|
@@ -3756,13 +3764,13 @@ namespace Business.ResourceExamineManagement
|
|
|
if (noCleanDetail.Any())
|
|
|
{
|
|
|
//无需前处理领料单
|
|
|
- GenerateNbr(workord, cleanTime, defaultLine, userAccount, nbrMasterList, nbrDetailList, noCleanDetail, itemLocList, ewdmList, LocationTo, user,"");
|
|
|
+ GenerateNbr(workord, cleanTime, defaultLine, userAccount, nbrMasterList, nbrDetailList, noCleanDetail, itemLocList, ewdmList, LocationTo, user,"", holidayList);
|
|
|
}
|
|
|
if (cleanDetail.Any())
|
|
|
{
|
|
|
//需要前处理的领料单
|
|
|
cleanTime = Items.Where(s=> cleanDetail.Select(i=>i.ItemNum).Contains(s.number)).Max(s => s.clean_leadtime.GetValueOrDefault());
|
|
|
- GenerateNbr(workord, cleanTime, defaultLine, userAccount, nbrMasterList, nbrDetailList, cleanDetail, itemLocList, ewdmList, LocationTo, user, "PrevProcess");
|
|
|
+ GenerateNbr(workord, cleanTime, defaultLine, userAccount, nbrMasterList, nbrDetailList, cleanDetail, itemLocList, ewdmList, LocationTo, user, "PrevProcess", holidayList);
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -3836,15 +3844,20 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void GenerateNbr(WorkOrdMaster workord,decimal cleanTime, LineMaster defaultLine, string userAccount, List<NbrMaster> nbrMasterList, List<NbrDetail> nbrDetailList, List<WorkOrdDetail> detail, List<ItemMaster> itemLocList, List<EmpWorkDutyMaster> ewdmList, string LocationTo,EmployeeMaster user,string TransType)
|
|
|
+ private void GenerateNbr(WorkOrdMaster workord,decimal cleanTime, LineMaster defaultLine, string userAccount, List<NbrMaster> nbrMasterList, List<NbrDetail> nbrDetailList, List<WorkOrdDetail> detail, List<ItemMaster> itemLocList, List<EmpWorkDutyMaster> ewdmList, string LocationTo,EmployeeMaster user,string TransType, List<HolidayMaster> holidayList)
|
|
|
{
|
|
|
string Nbr = help.NextId().ToString();
|
|
|
- DateTime eff = workord.OrdDate.GetValueOrDefault().Date.AddDays(-1);
|
|
|
- DateTime start = eff.AddDays((double)(0 - cleanTime));
|
|
|
+ //DateTime eff = workord.OrdDate.GetValueOrDefault().Date.AddDays(-1);
|
|
|
+ DateTime eff = _holidayHelper.GetWorkDateByWorkCalendar(workord.OrdDate.GetValueOrDefault(), 1, holidayList);
|
|
|
+ DateTime start = _holidayHelper.GetWorkDateByWorkCalendar(eff, (int)Math.Ceiling(cleanTime), holidayList);
|
|
|
if (start <= DateTime.Now.Date)
|
|
|
{
|
|
|
start = DateTime.Now.Date;
|
|
|
}
|
|
|
+ if (eff <= DateTime.Now.Date)
|
|
|
+ {
|
|
|
+ eff = DateTime.Now.Date;
|
|
|
+ }
|
|
|
var newNbr = new NbrMaster
|
|
|
{
|
|
|
Domain = workord.Domain,
|
|
|
@@ -4086,6 +4099,7 @@ namespace Business.ResourceExamineManagement
|
|
|
seqId++;
|
|
|
});
|
|
|
var nbrlistDto = _serialNumberAppService.GetBillNo(workOrdMasters[0].Domain, "SM", nbrMasterList.Count, userAccount, 1);
|
|
|
+
|
|
|
if (nbrlistDto.Any())
|
|
|
{
|
|
|
index = 0;
|
|
|
@@ -4897,5 +4911,70 @@ namespace Business.ResourceExamineManagement
|
|
|
return rst;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 日计划自动发布
|
|
|
+ /// </summary>
|
|
|
+ public async Task<string> ProductionDailyPlanAutoPublish(string domain)
|
|
|
+ {
|
|
|
+ //取数开始时间为当前日期
|
|
|
+ DateTime startTime = DateTime.Now.Date;
|
|
|
+ DateTime endDate = DateTime.Now.Date.AddDays(4);
|
|
|
+
|
|
|
+ var periodList = _periodSequenceDet.Select(x => x.PlanDate >= startTime && x.PlanDate <= endDate && string.IsNullOrEmpty(x.Status) == true && x.Domain == domain).ToList();
|
|
|
+ if (periodList.Any())
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ List<PeriodSequenceDet> updateList = new List<PeriodSequenceDet>();
|
|
|
+ var workords = periodList.Select(s => s.WorkOrds);
|
|
|
+ var workordList = _workOrdMaster.Select(x => x.Domain == domain && x.Status.ToLower() == "r" && workords.Contains(x.WorkOrd)).ToList();
|
|
|
+ var nbrMasterList = _nbrMaster.Select(x => x.Domain == domain && x.Type == "SM" && workords.Contains(x.WorkOrd)).ToList();
|
|
|
+ foreach (var work in workordList)
|
|
|
+ {
|
|
|
+ bool flag = false;
|
|
|
+ var nbrlist = nbrMasterList.Where(s => s.WorkOrd == work.WorkOrd).ToList();
|
|
|
+ if (nbrlist.Any())
|
|
|
+ {
|
|
|
+ flag = true;
|
|
|
+ foreach (var nbr in nbrlist)
|
|
|
+ {
|
|
|
+ //还有未出库数据
|
|
|
+ if (nbr.Status.ToLower() != "c")
|
|
|
+ {
|
|
|
+ flag = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ //需要前处理,但是前处理还未完成
|
|
|
+ if (nbr.TransType == "PrevProcess" && nbr.Ufld1 != "completed")
|
|
|
+ {
|
|
|
+ flag = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (flag)
|
|
|
+ {
|
|
|
+ var publish = periodList.Where(x => x.WorkOrds == work.WorkOrd).ToList();
|
|
|
+ publish.ForEach(x =>
|
|
|
+ {
|
|
|
+ x.Status = "r";
|
|
|
+ });
|
|
|
+ updateList.AddRange(publish);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (updateList.Any())
|
|
|
+ {
|
|
|
+ _periodSequenceDet.Update(updateList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (Exception e)
|
|
|
+ {
|
|
|
+ new NLogHelper("ResourceExamineAppService").WriteLog("ProductionDailyPlanAutoPublish", "日计划自动任务失败:" + e.Message, _currentTenant.Id.ToString());
|
|
|
+ return "保存失败,请联系管理员。";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return "ok";
|
|
|
+ }
|
|
|
}
|
|
|
}
|