任务单排班 质量bug

This commit is contained in:
2024-08-23 13:40:20 +08:00
parent a9a64ca88e
commit fea4b31b09
8 changed files with 135 additions and 58 deletions

View File

@@ -29,5 +29,10 @@ namespace Tnb.BasicData
/// BIP地址
/// </summary>
public const string BIPURL = "bipUrl";
/// <summary>
/// 白班夜班时间
/// </summary>
public const string DAYNIGHTWORKTIME = "dayNightWorkTime";
}
}

View File

@@ -26,6 +26,7 @@ namespace Tnb.ProductionMgr.Entities.Dto.PrdManage
public string material_code { get; set; }
public string material_name { get; set; }
public string material_specification { get; set; }
/// <summary>
/// 产线id

View File

@@ -217,7 +217,7 @@ public partial class PrdMoTask : BaseEntity<string>
public int has_last_check { get; set; }
/// <summary>
/// 排班类型
/// 排班类型 1 两班倒 2 四班倒
/// </summary>
public string scheduling_class_type { get; set; }

View File

@@ -1,4 +1,5 @@
using Tnb.ProductionMgr.Entities;
using SqlSugar;
using Tnb.ProductionMgr.Entities;
using Tnb.ProductionMgr.Entities.Dto;
using Tnb.ProductionMgr.Entities.Dto.PrdManage;
@@ -58,6 +59,6 @@ namespace Tnb.ProductionMgr.Interfaces
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task<string> ReportInstock(CheckCompleteInput input);
Task<string> ReportInstock(CheckCompleteInput input,ISqlSugarClient db = null);
}
}

View File

@@ -424,10 +424,27 @@ namespace Tnb.ProductionMgr
estimated_end_date = a.estimated_end_date == null ? null : a.estimated_end_date.Value.ToString(DbTimeFormat.SS),
bom_id = d.id,
bom_version = d.version,
create_time = a.create_time==null ? "" : a.create_time.Value.ToString(DbTimeFormat.SS)
create_time = a.create_time==null ? "" : a.create_time.Value.ToString(DbTimeFormat.SS),
dayshift_worker_id = a.dayshift_worker_id,
dayshiftafter_worker_id = a.dayshiftafter_worker_id,
nightshift_worker_id = a.nightshift_worker_id,
nightshiftafter_worker_id = a.nightshiftafter_worker_id,
})
.Mapper(it => it.mo_task_status = dic.ContainsKey(it.mo_task_status) ? dic[it.mo_task_status].ToString()! : "")
.ToListAsync();
List<string> userIdList = result.Select(x => x.dayshift_worker_id).Distinct().ToList();
userIdList.AddRange(result.Select(x => x.dayshiftafter_worker_id).Distinct().ToList());
userIdList.AddRange(result.Select(x => x.nightshift_worker_id).Distinct().ToList());
userIdList.AddRange(result.Select(x => x.nightshiftafter_worker_id).Distinct().ToList());
List<UserEntity> userEntities = await _db.Queryable<UserEntity>().Where(x=>userIdList.Contains(x.Id)).ToListAsync();
foreach (var item in result)
{
item.dayshift_worker_id = userEntities.Find(x=>x.Id==item.dayshift_worker_id)?.RealName ?? item.dayshift_worker_id;
item.dayshiftafter_worker_id = userEntities.Find(x=>x.Id==item.dayshiftafter_worker_id)?.RealName ?? item.dayshiftafter_worker_id;
item.nightshift_worker_id = userEntities.Find(x=>x.Id==item.nightshift_worker_id)?.RealName ?? item.nightshift_worker_id;
item.nightshiftafter_worker_id = userEntities.Find(x=>x.Id==item.nightshiftafter_worker_id)?.RealName ?? item.nightshiftafter_worker_id;
}
return result;
}
/// <summary>
@@ -2129,13 +2146,13 @@ namespace Tnb.ProductionMgr
return "提报成功";
}
public async Task<string> ReportInstock(CheckCompleteInput input)
public async Task<string> ReportInstock(CheckCompleteInput input,ISqlSugarClient db = null)
{
try
{
var db = _repository.AsSugarClient();
PrdReport report = await db.Queryable<PrdReport>().FirstAsync(it => it.id==input.report_id);
PrdMoTask? prdMoTask = await db.Queryable<PrdMoTask>().SingleAsync(x => x.id == report.mo_task_id);
if(db==null) db = _repository.AsSugarClient();
PrdReport report = await db.Queryable<PrdReport>().FirstAsync(it => it.id==input.report_id && !SqlFunc.IsNullOrEmpty(it.id));
PrdMoTask? prdMoTask = await db.Queryable<PrdMoTask>().FirstAsync(x => x.id == report.mo_task_id && !SqlFunc.IsNullOrEmpty(x.id));
EqpEquipment equip = await db.Queryable<EqpEquipment>().SingleAsync(x => x.id == prdMoTask.eqp_id);
BasMaterial basMaterial = await db.Queryable<BasMaterial>().SingleAsync(x => x.id == prdMoTask.material_id);
WmsCarryH wmsCarryH = await db.Queryable<WmsCarryH>().FirstAsync(x=>x.carry_code==report.material_box_code);
@@ -2219,7 +2236,7 @@ namespace Tnb.ProductionMgr
Log.Information($"生产入库参数:${JsonConvert.SerializeObject(wmsPrdInstockInput)}");
Tnb.WarehouseMgr.Entities.Dto.Outputs.Result result2 = await _wmsPrdInstockHService.PrdInstock(wmsPrdInstockInput, _db);
Tnb.WarehouseMgr.Entities.Dto.Outputs.Result result2 = await _wmsPrdInstockHService.PrdInstock(wmsPrdInstockInput, db);
if (result2 != null)
{
Log.Information($"生产入库接口返回参数:${JsonConvert.SerializeObject(result2)}");
@@ -3033,13 +3050,17 @@ namespace Tnb.ProductionMgr
DbResult<bool> result = await db.Ado.UseTranAsync(async () =>
{
PrdMoTask moTask = await db.Queryable<PrdMoTask>().SingleAsync(x => x.id == input.mo_task_id);
if (moTask.worker_id == input.worker_id)
{
throw new Exception("与原员工相同");
}
// if (moTask.worker_id == input.worker_id)
// {
// throw new Exception("与原员工相同");
// }
_ = await db.Updateable<PrdMoTask>().SetColumns(x => x.worker_id == input.worker_id)
_ = await db.Updateable<PrdMoTask>()
.SetColumns(x => x.dayshift_worker_id == input.dayshift_worker_id)
.SetColumns(x => x.nightshift_worker_id == input.nightshift_worker_id)
.SetColumns(x => x.dayshiftafter_worker_id == input.dayshiftafter_worker_id)
.SetColumns(x => x.nightshiftafter_worker_id == input.nightshiftafter_worker_id)
.Where(x => x.id == input.mo_task_id).ExecuteCommandAsync();
PrdMo mo = await db.Queryable<PrdMo>().SingleAsync(x => x.id == moTask.mo_id);
@@ -3746,11 +3767,13 @@ namespace Tnb.ProductionMgr
string ids = input.GetOrDefault("ids");
string[] idList = ids.Split(",");
// string workerId = input.GetOrDefault("worker_id");
string schedulingClassType = input.GetOrDefault("scheduling_class_type");
string dayshiftWorkerId = input.GetOrDefault("dayshift_worker_id");
string nightshiftWorkerId = input.GetOrDefault("nightshift_worker_id");
string dayshiftafterWorkerId = input.GetOrDefault("dayshiftafter_worker_id");
string nightshiftafterWorkerId = input.GetOrDefault("nightshiftafter_worker_id");
int row = await _db.Updateable<PrdMoTask>()
.SetColumns(x => x.scheduling_class_type == schedulingClassType)
.SetColumns(x => x.dayshift_worker_id == dayshiftWorkerId)
.SetColumns(x => x.nightshift_worker_id == nightshiftWorkerId)
.SetColumns(x => x.dayshiftafter_worker_id == dayshiftafterWorkerId)

View File

@@ -11,6 +11,7 @@ using JNPF.Systems.Entitys.System;
using JNPF.Systems.Interfaces.System;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using SqlSugar;
using Tnb.BasicData;
using Tnb.BasicData.Entities;
@@ -21,6 +22,7 @@ using Tnb.ProductionMgr.Entities.Dto.PrdManage;
using Tnb.ProductionMgr.Entities.Entity;
using Tnb.ProductionMgr.Interfaces;
using Tnb.ProductionMgr.Entities.Dto;
using Tnb.WarehouseMgr.Entities.Consts;
namespace Tnb.ProductionMgr
@@ -413,7 +415,33 @@ namespace Tnb.ProductionMgr
input.sidx = "create_time";
input.sort = "desc";
}
string userId = _userManager.UserId;
string nowTime = DateTime.Now.ToString("HH:mm");
BasFactoryConfig config = await _db.Queryable<BasFactoryConfig>().FirstAsync(x => x.enabled == 1 && x.key == FactoryConfigConst.DAYNIGHTWORKTIME);
Dictionary<string,string> dayNightWorkTime = JsonConvert.DeserializeObject<Dictionary<string, string>>(config.value);
string dayStime = dayNightWorkTime["白班"].Split("-")[0];
string dayEtime = dayNightWorkTime["白班"].Split("-")[1];
string nightStime = dayNightWorkTime["夜班"].Split("-")[0];
string nightEtime = dayNightWorkTime["夜班"].Split("-")[1];
string dayBeforeStime = dayNightWorkTime["白班前"].Split("-")[0];
string dayBeforeEtime = dayNightWorkTime["白班前"].Split("-")[1];
string dayAfterStime = dayNightWorkTime["白班后"].Split("-")[0];
string dayAfterEtime = dayNightWorkTime["白班后"].Split("-")[1];
string nightBeforeStime = dayNightWorkTime["夜班前"].Split("-")[0];
string nightBeforeEtime = dayNightWorkTime["夜班前"].Split("-")[1];
string nightAfterStime = dayNightWorkTime["夜班后"].Split("-")[0];
string nightAfterEtime = dayNightWorkTime["夜班后"].Split("-")[1];
bool twoDayFlag = string.Compare(nowTime, dayStime) >= 0 && string.Compare(nowTime, dayEtime) <= 0;
bool twoNightFlag = string.Compare(nowTime,nightStime)>=0 && string.Compare(nowTime,nightEtime)<=0;
bool fourDayBeforeFlag = (string.Compare(nowTime,dayBeforeStime)>=0 && string.Compare(nowTime,dayBeforeEtime)<=0) ;
bool fourDayAfterFlag = (string.Compare(nowTime,dayAfterStime)>=0 && string.Compare(nowTime,dayAfterEtime)<=0) ;
bool fourNightBeforeFlag = (string.Compare(nowTime,nightBeforeStime)>=0 && string.Compare(nowTime,nightBeforeEtime)<=0) ;
bool fourNightAfterFlag = (string.Compare(nowTime,nightAfterStime)>=0 && string.Compare(nowTime,nightAfterEtime)<=0) ;
//模具部门的人
List<string> moldUserIds = await _db.Queryable<UserRelationEntity>().Where(x=>x.ObjectId=="35792898276629").Select(x=>x.UserId).ToListAsync();
SqlSugarPagedList<PADPackageTaskPageOutput> result = await _db.Queryable<PrdMoTask>()
.LeftJoin<BasMaterial>((a, b) => a.material_id == b.id)
.LeftJoin<BasProcess>((a, b, c) => a.process_id == c.id)
@@ -422,18 +450,30 @@ namespace Tnb.ProductionMgr
.LeftJoin<EqpEquipment>((a, b, c, d, e, f) => a.eqp_id == f.id)
.LeftJoin<ToolMolds>((a, b, c, d, e, f, g) => a.mold_id == g.id)
.LeftJoin<PerProcessStandardsH>((a, b, c, d, e, f, g, h) => a.material_id == h.output_material_id && a.eqp_id == h.equip_id && a.mold_id == h.molds_id && h.enabled == 1)
.LeftJoin<BasStandardTime>((a, b, c, d, e, f, g, h, i) => a.process_id == i.process_id && i.enabled == 1 && a.schedule_type==1)
.LeftJoin<PrdMo>((a, b, c, d, e, f, g, h, i, j) => a.mo_id == j.id)
.LeftJoin<BasMaterialUnit>((a, b, c, d, e, f, g, h, i, j, k) => a.material_id == k.material_id && k.auxiliary_unit_id == "KGM")
.LeftJoin<EqpDaq>((a, b, c, d, e, f, g, h, i, j, k, l) => a.eqp_id == l.equip_id && l.enabled == 1 && l.label_name.Contains("允许称重"))//注塑空满箱请求
//.LeftJoin<BasStandardTime>((a, b, c, d, e, f, g, h, i) => a.process_id == i.process_id && i.enabled == 1 && a.schedule_type==1)
.LeftJoin<PrdMo>((a, b, c, d, e, f, g, h, j) => a.mo_id == j.id)
.LeftJoin<BasMaterialUnit>((a, b, c, d, e, f, g, h, j, k) => a.material_id == k.material_id && k.auxiliary_unit_id == "KGM")
.LeftJoin<EqpDaq>((a, b, c, d, e, f, g, h, j, k, l) => a.eqp_id == l.equip_id && l.enabled == 1 && l.label_name.Contains("允许称重"))//注塑空满箱请求
.LeftJoin<OrganizeEntity>((a, b, c, d, e, f, g, h, j, k, l,m)=>a.workstation_id==m.Id)
// .Where((a, b) => a.workstation_id == input.stationId)
.Where((a, b) => a.worker_id == _userManager.UserId && (a.schedule_type==1 || (a.schedule_type==2 && a.parent_id!=null)))
// .Where((a, b) => a.worker_id == _userManager.UserId && (a.schedule_type==1 || (a.schedule_type==2 && a.parent_id!=null)))
.Where((a, b) => a.schedule_type==1 || (a.schedule_type==2 && a.parent_id!=null))
// .Where(a=>a.dayshift_worker_id==userId || a.dayshiftafter_worker_id==userId || a.nightshift_worker_id==userId || a.nightshiftafter_worker_id==userId)
.WhereIF(!string.IsNullOrEmpty(mo_task_code), a => a.mo_task_code.Contains(mo_task_code))
//.WhereIF(!string.IsNullOrEmpty(mo_task_status),a=>a.mo_task_status==mo_task_status)
.WhereIF(statusList.Count > 0, a => statusList.Contains(a.mo_task_status))
.WhereIF(status == "3" && start_time != null, a => a.act_end_date >= start_time)
.WhereIF(status == "3" && end_time != null, a => a.act_end_date <= end_time)
.Select((a, b, c, d, e, f, g, h, i, j, k, l) => new PADPackageTaskPageOutput
.Where((a, b, c, d, e, f, g, h, j, k, l,m)=>(m.ManagerId==userId)
|| (a.schedule_type==1 && a.mo_task_status==DictConst.ToBeStartedEnCode && moldUserIds.Contains(userId))
|| (a.scheduling_class_type=="1" && twoDayFlag && a.dayshift_worker_id==userId)
|| (a.scheduling_class_type=="1" && twoNightFlag && a.nightshift_worker_id==userId)
|| (a.scheduling_class_type=="2" && fourDayBeforeFlag && a.dayshift_worker_id==userId)
|| (a.scheduling_class_type=="2" && fourDayAfterFlag && a.dayshiftafter_worker_id==userId)
|| (a.scheduling_class_type=="2" && fourNightBeforeFlag && a.nightshift_worker_id==userId)
|| (a.scheduling_class_type=="2" && fourNightAfterFlag && a.nightshiftafter_worker_id==userId)
)
.Select((a, b, c, d, e, f, g, h, j, k, l) => new PADPackageTaskPageOutput
{
id = a.id,
mo_task_code = a.mo_task_code,
@@ -442,7 +482,8 @@ namespace Tnb.ProductionMgr
material_id = a.material_id,
material_code = b.code,
material_name = b.name,
material_standard = b.material_specification,
material_standard = b.material_standard,
material_specification = b.material_specification,
container_no = b.container_no,
di = b.di,
workline_id = a.workline_id,
@@ -469,7 +510,7 @@ namespace Tnb.ProductionMgr
schedule_type = a.schedule_type,
mold_cavity = g.mold_cavity,
moulding_cycle = h.moulding_cycle,
standard_time = i.standard_time,
// standard_time = i.standard_time,
act_start_date = a.act_start_date == null ? "" : a.act_start_date.Value.ToString(DbTimeFormat.SS),
act_end_date = a.act_end_date == null ? "" : a.act_end_date.Value.ToString(DbTimeFormat.SS),
plan_end_date = a.plan_end_date == null ? "" : a.plan_end_date.Value.ToString(DbTimeFormat.SS),
@@ -521,6 +562,10 @@ namespace Tnb.ProductionMgr
x.output_material_id == item.material_id && x.enabled == 1)
.OrderByDescending(x => x.create_time).FirstAsync();
item.standard_time = processStandardsH?.moulding_cycle?.ToString();
}else if (item.schedule_type==1)
{
BasStandardTime basStandardTime = await _db.Queryable<BasStandardTime>().Where(x=>x.process_id==item.process_id && x.enabled==1).FirstAsync();
item.standard_time = basStandardTime.standard_time;
}
}
}

View File

@@ -423,45 +423,46 @@ namespace Tnb.QcMgr
GetQuery(Query, entity);
List<QcCheckPlanH> list = await Query.ToListAsync();
List<string> removes = new();
// foreach (QcCheckPlanH data in list)
// {
// if (!string.IsNullOrEmpty(entity.materialid))
// {
// if (_repository.AsSugarClient().Queryable<QcCheckPlanMaterial>().Where(p => p.planid == data.id).Any())
// {
// if (!_repository.AsSugarClient().Queryable<QcCheckPlanMaterial>().Where(p => p.planid == data.id && p.materialid == entity.materialid).Any())
// {
// removes.Add(data.id);
// }
// }
// }
// if (!string.IsNullOrEmpty(entity.processid))
// {
// if (_repository.AsSugarClient().Queryable<QcCheckPlanProcess>().Where(p => p.planid == data.id).Any())
// {
// if (!_repository.AsSugarClient().Queryable<QcCheckPlanProcess>().Where(p => p.planid == data.id && p.processid == entity.processid).Any())
// {
// removes.Add(data.id);
// }
//
// }
// }
// if (!string.IsNullOrEmpty(entity.workid))
// {
// if (_repository.AsSugarClient().Queryable<QcCheckPlanWork>().Where(p => p.planid == data.id).Any())
// {
// if (!_repository.AsSugarClient().Queryable<QcCheckPlanWork>().Where(p => p.planid == data.id && p.workid == entity.workid).Any())
// {
// removes.Add(data.id);
// }
// }
// }
// }
foreach (QcCheckPlanH data in list)
{
if (!string.IsNullOrEmpty(entity.materialid))
{
if (_repository.AsSugarClient().Queryable<QcCheckPlanMaterial>().Where(p => p.planid == data.id).Any())
{
if (!_repository.AsSugarClient().Queryable<QcCheckPlanMaterial>().Where(p => p.planid == data.id && p.materialid == entity.materialid).Any())
{
removes.Add(data.id);
}
}
}
if (!string.IsNullOrEmpty(entity.processid))
{
if (_repository.AsSugarClient().Queryable<QcCheckPlanProcess>().Where(p => p.planid == data.id).Any())
{
if (!_repository.AsSugarClient().Queryable<QcCheckPlanProcess>().Where(p => p.planid == data.id && p.processid == entity.processid).Any())
{
removes.Add(data.id);
}
}
}
if (!string.IsNullOrEmpty(entity.workid))
{
if (_repository.AsSugarClient().Queryable<QcCheckPlanWork>().Where(p => p.planid == data.id).Any())
{
if (!_repository.AsSugarClient().Queryable<QcCheckPlanWork>().Where(p => p.planid == data.id && p.workid == entity.workid).Any())
{
removes.Add(data.id);
}
}
}
}
// list = list.Where(p => !removes.Contains(p.id)).ToList();
// .WhereIF(!string.IsNullOrEmpty(entity.materialid), (a, b, c, d, e) => c.materialid == entity.materialid)
// .WhereIF(!string.IsNullOrEmpty(entity.processid), (a, b, c, d, e) => d.processid == entity.processid)
// .WhereIF(!string.IsNullOrEmpty(entity.workid), (a, b, c, d, e) => e.workid == entity.workid).ToListAsync();
Filter(list, entity);
if (list.Count > 0)
{
@@ -478,7 +479,7 @@ namespace Tnb.QcMgr
RemarkAttribute remark = RemarkAttribute.GetRemark(enumTriggerEvent);
string type = DictionaryData.Where(p => p.FullName == remark.CheckType).First().Id;
TriggerEvent = _repository.AsSugarClient().Queryable<QcTriggerEvent>().Where(p => p.type == type && p.name == remark.CheckContent).First();
Query = Query.Where((a, b, c, d, e) => b.triggertype == "3" && b.content!.Contains(TriggerEvent.id) && c.materialid==entity.materialid);
Query = Query.Where((a, b, c, d, e) => b.triggertype == "3" && b.content!.Contains(TriggerEvent.id));
}
private void Filter(List<QcCheckPlanH> QcCheckPlanHs, TriggerPlanEntity entity)
{

View File

@@ -10,6 +10,7 @@ using JNPF.Systems.Entitys.Permission;
using JNPF.Systems.Entitys.System;
using JNPF.VisualDev;
using JNPF.VisualDev.Entitys.Dto.VisualDevModelData;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using SqlSugar;
@@ -367,7 +368,7 @@ namespace Tnb.QcMgr
pqty = pqty,
rqty = rqty,
check_result = ((EnumCheckConclusion)dic[CheckTaskInput.result]).ToString(),
});
},db);
}
}
await db.Ado.CommitTranAsync();