| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- namespace Admin.NET.Plugin.AiDOP.WorkOrder;
- /// <summary>工单齐套检查动作。</summary>
- public class WorkOrderKittingCheckService : ITransient
- {
- private readonly ISqlSugarClient _db;
- public WorkOrderKittingCheckService(ISqlSugarClient db)
- {
- _db = db;
- }
- public async Task<KittingCheckResult> CheckTenantWorkOrdersAsync(long tenantId, string account)
- {
- var workOrds = await _db.Ado.SqlQueryAsync<string>(
- """
- SELECT WorkOrd FROM WorkOrdMaster
- WHERE tenant_id = @TenantId
- AND LOWER(TRIM(IFNULL(Status,''))) IN ('p', 'r')
- ORDER BY WorkOrd
- """,
- new SugarParameter("@TenantId", tenantId));
- var result = new KittingCheckResult();
- foreach (var wo in workOrds)
- {
- var one = await CheckSingleAsync(tenantId, wo, account);
- result.CheckedCount++;
- if (one.IsKitted) result.KittedCount++;
- else result.ShortageCount++;
- }
- return result;
- }
- public async Task<SingleKittingCheckResult> CheckSingleAsync(long tenantId, string workOrd, string account)
- {
- var now = DateTime.Now;
- var shortage = await _db.Ado.GetIntAsync(
- """
- SELECT COUNT(*)
- FROM b_examine_result ber
- INNER JOIN b_bom_child_examine bce ON ber.Id = bce.examine_id AND bce.is_use = 1
- WHERE ber.tenant_id = @TenantId
- AND ber.IsDeleted = 0
- AND ber.morder_no = @WorkOrd
- AND IFNULL(bce.lack_qty, 0) > 0
- """,
- new SugarParameter("@TenantId", tenantId),
- new SugarParameter("@WorkOrd", workOrd.Trim()));
- var isKitted = shortage == 0;
- var situation = isKitted ? "齐套" : "缺料";
- await _db.Ado.ExecuteCommandAsync(
- """
- UPDATE mes_morder
- SET MaterialSituation = @Situation,
- update_by_name = @User,
- update_time = @Now
- WHERE tenant_id = @TenantId AND morder_no = @WorkOrd AND IsDeleted = 0
- """,
- new SugarParameter("@Situation", situation),
- new SugarParameter("@User", account),
- new SugarParameter("@Now", now),
- new SugarParameter("@TenantId", tenantId),
- new SugarParameter("@WorkOrd", workOrd.Trim()));
- return new SingleKittingCheckResult
- {
- WorkOrd = workOrd,
- IsKitted = isKitted,
- ShortageLineCount = shortage,
- MaterialSituation = situation
- };
- }
- public sealed class KittingCheckResult
- {
- public int CheckedCount { get; set; }
- public int KittedCount { get; set; }
- public int ShortageCount { get; set; }
- }
- public sealed class SingleKittingCheckResult
- {
- public string WorkOrd { get; set; } = string.Empty;
- public bool IsKitted { get; set; }
- public int ShortageLineCount { get; set; }
- public string MaterialSituation { get; set; } = string.Empty;
- }
- }
|