| | |
| | | using NewPdaSqlServer.DB; |
| | | using NewPdaSqlServer.Dto.service; |
| | | using NewPdaSqlServer.entity; |
| | | using NewPdaSqlServer.entity.Base; |
| | | using NewPdaSqlServer.util; |
| | | using SqlSugar; |
| | | using System.Data; |
| | | using System.Data.SqlClient; |
| | | using static Microsoft.EntityFrameworkCore.DbLoggerCategory; |
| | | |
| | | namespace NewPdaSqlServer.service.Wom; |
| | | |
| | |
| | | /// </exception> |
| | | public ScanWorkResult ScanWorkAsync(ScanWorkRequest request) |
| | | { |
| | | // // 1. 验证员工信息 |
| | | // var staff = Db.Queryable<MesStaff>() |
| | | // .Where(x => x.StaffNo == request.StaffNo) |
| | | // .First(); |
| | | // if (staff == null) |
| | | // throw new Exception("请先选择人员"); |
| | | |
| | | // // 2. 验证条码信息 |
| | | // var barcode = Db.Queryable<MesInvItemBarcodes>() |
| | | // .Where(x => x.ItemBarcode == request.ItemBarcode) |
| | | // .First(); |
| | | // if (barcode == null) |
| | | // throw new Exception($"无此条码,请核对!{request.ItemBarcode}"); |
| | | |
| | | // // 3. 验证物料信息 |
| | | // var item = Db.Queryable<MesItems>() |
| | | // .Where(x => x.Id == barcode.ItemId) |
| | | // .First(); |
| | | // if (item == null) |
| | | // throw new Exception($"无此物料,请核对!{request.ItemBarcode}"); |
| | | |
| | | // // 4. 根据条码备注确定单据类型和交易号 |
| | | // var billTypeId = 900; // 默认单据类型 |
| | | // var transactionNo = 902; // 默认交易号 |
| | | // switch (barcode.Memo?.Trim() ?? "0") |
| | | // { |
| | | // case "丝印": |
| | | // transactionNo = 901; // 丝印工序 |
| | | // break; |
| | | // case "半成品": |
| | | // transactionNo = 902; // 半成品工序 |
| | | // break; |
| | | // case "包装": |
| | | // case "成品": |
| | | // transactionNo = 903; // 成品/包装工序 |
| | | // break; |
| | | // } |
| | | |
| | | // // 5. 检查条码是否重复扫描 |
| | | // var exists = Db.Queryable<MesWorkProd, MesWorkProdCDetails>( |
| | | // (a, b) => |
| | | // new JoinQueryInfos(JoinType.Inner, |
| | | // a.Id == b.MesWorkProdId)) |
| | | // .Where((a, b) => b.ItemBarcode == request.ItemBarcode |
| | | // && a.BillTypeId == billTypeId |
| | | // && a.TransactionNo == transactionNo) |
| | | // .Any(); |
| | | |
| | | // if (exists) |
| | | // throw new Exception("条码重复扫描,请核对!"); |
| | | |
| | | // // 6. 获取已报工数量 |
| | | // var reportedQty = Db.Queryable<MesWorkProd, MesWorkProdCDetails>( |
| | | // (a, b) => |
| | | // new JoinQueryInfos(JoinType.Inner, |
| | | // a.BillNo == b.BillNo)) |
| | | // .Where((a, b) => a.BillTypeId == billTypeId |
| | | // && a.TransactionNo == transactionNo |
| | | // && a.TaskNo == barcode.BillNo) |
| | | // .Sum((a, b) => b.Quantity); |
| | | |
| | | // // 7. 获取工单计划数量和型号 |
| | | // var workOrder = Db.Queryable<Womdaa>() |
| | | // .Where(x => x.Daa001 == barcode.BillNo) |
| | | // .First(); |
| | | // if (workOrder == null) |
| | | // throw new Exception($"无工单明细,请核对!{request.ItemBarcode}"); |
| | | |
| | | // var planQty = workOrder.Daa008; |
| | | // var itemModel = workOrder.Daa004; |
| | | |
| | | // // 8. 使用事务处理报工数据 |
| | | // UseTransaction(db => |
| | | // { |
| | | // // 9. 处理有数量条码的自动报工 |
| | | // if (barcode.Quantity > 0) |
| | | // { |
| | | // var reportQty = barcode.Quantity; |
| | | // if (reportQty <= 0) |
| | | // throw new Exception( |
| | | // $"报工数量不能小于等于0,请核对!{request.ItemBarcode}"); |
| | | |
| | | // var totalQty = (reportedQty ?? 0) + reportQty; |
| | | // if (totalQty > workOrder.Daa008) |
| | | // throw new Exception( |
| | | // $"本次报工数量:{reportQty} 大于剩余报工数量:{workOrder.Daa008 - reportedQty ?? 0},请核对!"); |
| | | |
| | | // // 10. 更新条码状态 |
| | | // db.Updateable<MesInvItemBarcodes>() |
| | | // .SetColumns(x => new MesInvItemBarcodes |
| | | // { |
| | | // WorkFlg = true |
| | | // //Quantity = reportQty |
| | | // }) |
| | | // .Where(x => x.Guid == barcode.Guid) |
| | | // .ExecuteCommand(); |
| | | |
| | | // // 11. 获取或创建报工单 |
| | | // var workProd = db.Queryable<MesWorkProd>() |
| | | // .Where(x => x.TaskNo == barcode.BillNo |
| | | // && x.CreateDate.Value.Date.ToString( |
| | | // "yyyy-MM-dd") == |
| | | // DateTime.Now.Date.ToString("yyyy-MM-dd") |
| | | // && x.BillTypeId == billTypeId |
| | | // && x.TransactionNo == transactionNo |
| | | // && x.ReportBy == request.StaffNo) |
| | | // .First(); |
| | | |
| | | // var id = Guid.Empty; |
| | | // var billNo = ""; |
| | | // if (workProd == null) |
| | | // { |
| | | // id = Guid.NewGuid(); |
| | | // billNo = BillNo.GetBillNo("BG(报工)"); |
| | | |
| | | // workProd = new MesWorkProd |
| | | // { |
| | | // Id = id, |
| | | // BillNo = billNo, |
| | | // LineNo = barcode.LineNo, |
| | | // Company = barcode.Company, |
| | | // Factory = barcode.Factory, |
| | | // CreateBy = request.UserNo, |
| | | // CreateDate = DateTime.Now, |
| | | // LastupdateBy = request.UserNo, |
| | | // LastupdateDate = DateTime.Now, |
| | | // BillTypeId = billTypeId, |
| | | // TransactionNo = transactionNo, |
| | | // TaskNo = barcode.BillNo, |
| | | // ReportBy = request.StaffNo, |
| | | // ReportDate = DateTime.Now |
| | | // }; |
| | | |
| | | // db.Insertable(workProd).IgnoreColumns(true) |
| | | // .ExecuteCommand(); |
| | | // } |
| | | // else |
| | | // { |
| | | // id = workProd.Id; |
| | | // billNo = workProd.BillNo; |
| | | // } |
| | | |
| | | // // 12. 插入报工明细 |
| | | // var detailId = Guid.NewGuid(); |
| | | // db.Insertable(new MesWorkProdCDetails |
| | | // { |
| | | // Id = detailId, |
| | | // MesWorkProdId = id, |
| | | // BillNo = billNo, |
| | | // ItemBarcode = request.ItemBarcode, |
| | | // Quantity = (int)reportQty, |
| | | // Company = barcode.Company, |
| | | // Factory = barcode.Factory, |
| | | // CreateBy = request.UserNo, |
| | | // CreateDate = DateTime.Now, |
| | | // LastupdateBy = request.UserNo, |
| | | // LastupdateDate = DateTime.Now, |
| | | // ItemNo = item.ItemNo, |
| | | // WorkLast = barcode.WorkLast, |
| | | // SilkPqty = barcode.SilkPqty, |
| | | // SilkId = barcode.SilkId, |
| | | // Silk = barcode.Silk, |
| | | // BgYg = request.StaffNo |
| | | // }).IgnoreColumns(true).ExecuteCommand(); |
| | | |
| | | // // 13. 更新工单已报工数量 |
| | | // db.Updateable<Womdaa>() |
| | | // .SetColumns(x => new Womdaa |
| | | // { |
| | | // Daa011 = (x.Daa011 ?? 0) + (int)barcode.Quantity |
| | | // }) |
| | | // .Where(x => x.Daa001 == barcode.BillNo) |
| | | // .ExecuteCommand(); |
| | | |
| | | // // 14. 重新获取最新已报工数量 |
| | | // reportedQty = db.Queryable<MesWorkProd, MesWorkProdCDetails>( |
| | | // (a, b) => |
| | | // new JoinQueryInfos(JoinType.Inner, |
| | | // a.BillNo == b.BillNo)) |
| | | // .Where((a, b) => a.BillTypeId == billTypeId |
| | | // && a.TransactionNo == transactionNo |
| | | // && a.TaskNo == barcode.BillNo) |
| | | // .Sum((a, b) => b.Quantity); |
| | | // } |
| | | |
| | | // return 1; |
| | | // }); |
| | | |
| | | // // 15. 返回处理结果 |
| | | // return new ScanWorkResult |
| | | // { |
| | | // TaskNo = barcode.BillNo, |
| | | // ItemNo = item.ItemNo, |
| | | // PlanQty = planQty ?? 0, |
| | | // ReportedQty = reportedQty ?? 0, |
| | | // CurrentQty = barcode.Quantity.Value, |
| | | // BarcodeQty = barcode.Quantity.Value, |
| | | // ItemName = item.ItemName, |
| | | // ItemModel = itemModel, |
| | | // Message = "扫码成功!" |
| | | // }; |
| | | |
| | | //1.验证员工信息 |
| | | var staff = Db.Queryable<MesStaff>() |
| | | .Where(x => x.StaffNo == request.StaffNo) |
| | | .First(); |
| | | // 1. 验证员工信息 |
| | | var staff = Db.Queryable<MesStaff>() |
| | | .Where(x => x.StaffNo == request.StaffNo) |
| | | .First(); |
| | | if (staff == null) |
| | | throw new Exception("请先选择人员"); |
| | | |
| | |
| | | if (item == null) |
| | | throw new Exception($"无此物料,请核对!{request.ItemBarcode}"); |
| | | |
| | | // 4. 根据条码备注确定单据类型和交易号 |
| | | var billTypeId = 900; // 默认单据类型 |
| | | var transactionNo = 902; // 默认交易号 |
| | | switch (barcode.Memo?.Trim() ?? "0") |
| | | { |
| | | case "丝印": |
| | | transactionNo = 901; // 丝印工序 |
| | | break; |
| | | case "半成品": |
| | | transactionNo = 902; // 半成品工序 |
| | | break; |
| | | case "包装": |
| | | case "成品": |
| | | transactionNo = 903; // 成品/包装工序 |
| | | break; |
| | | } |
| | | |
| | | // 5. 检查条码是否重复扫描 |
| | | var exists = Db.Queryable<MesWorkProd, MesWorkProdCDetails>( |
| | | (a, b) => |
| | | new JoinQueryInfos(JoinType.Inner, |
| | | a.Id == b.MesWorkProdId)) |
| | | .Where((a, b) => b.ItemBarcode == request.ItemBarcode |
| | | && a.BillTypeId == billTypeId |
| | | && a.TransactionNo == transactionNo) |
| | | .Any(); |
| | | |
| | | if (exists) |
| | | throw new Exception("条码重复扫描,请核对!"); |
| | | |
| | | // 6. 获取已报工数量 |
| | | var reportedQty = Db.Queryable<MesWorkProd, MesWorkProdCDetails>( |
| | | (a, b) => |
| | | new JoinQueryInfos(JoinType.Inner, |
| | | a.BillNo == b.BillNo)) |
| | | .Where((a, b) => a.BillTypeId == billTypeId |
| | | && a.TransactionNo == transactionNo |
| | | && a.TaskNo == barcode.BillNo) |
| | | .Sum((a, b) => b.Quantity); |
| | | |
| | | // 7. 获取工单计划数量和型号 |
| | | var workOrder = Db.Queryable<Womdaa>() |
| | | .Where(x => x.Daa001 == barcode.BillNo) |
| | |
| | | if (workOrder == null) |
| | | throw new Exception($"无工单明细,请核对!{request.ItemBarcode}"); |
| | | |
| | | // 使用存储过程处理生产报工 |
| | | var parameters = new SqlParameter[] |
| | | var planQty = workOrder.Daa008; |
| | | var itemModel = workOrder.Daa004; |
| | | |
| | | // 8. 使用事务处理报工数据 |
| | | UseTransaction(db => |
| | | { |
| | | new SqlParameter("@pi_user", request.StaffNo), |
| | | new SqlParameter("@pi_barcode", request.ItemBarcode), |
| | | new SqlParameter("@po_outMsg", SqlDbType.NVarChar, 200) { Direction = ParameterDirection.Output }, |
| | | new SqlParameter("@po_outSum", SqlDbType.Int) { Direction = ParameterDirection.Output }, |
| | | new SqlParameter("@po_womInBarSum", SqlDbType.Decimal) { Direction = ParameterDirection.Output } |
| | | }; |
| | | |
| | | string procedureName = "prc_pda_scbg"; |
| | | int res = DbHelperSQL.RunProcedure_NonQuery(procedureName, parameters); |
| | | |
| | | // Retrieve output parameters with proper type conversion |
| | | var po_outMsg = parameters[2].Value?.ToString() ?? string.Empty; |
| | | var po_outSum = parameters[3].Value != DBNull.Value ? Convert.ToInt32(parameters[3].Value) : -1; |
| | | var po_womInBarSum = parameters[4].Value != DBNull.Value ? Convert.ToDecimal(parameters[4].Value) : 0m; |
| | | |
| | | |
| | | // 声明变量在外层,确保在所有分支中都可访问 |
| | | MesInvItemIns rksqOrder = null; |
| | | List<MesInvItemInRksqDetails> rksqDetails = new List<MesInvItemInRksqDetails>(); |
| | | |
| | | if (po_outSum == 1) |
| | | { |
| | | rksqOrder = Db.Queryable<MesInvItemIns>() |
| | | .Where(x => x.RbillNo == barcode.BillNo && x.TransctionNo == "181" && x.CreateBy == request.StaffNo) |
| | | .First(); |
| | | |
| | | if (rksqOrder != null) |
| | | // 9. 处理有数量条码的自动报工 |
| | | if (barcode.Quantity > 0) |
| | | { |
| | | var sql = string.Format(@"SELECT A.item_barcode ItemBarcode,B.QUANTITY BgQuantity,c.item_no ItemNo,c.item_name ItemName,c.item_model ItemModel |
| | | FROM MES_INV_ITEM_IN_RKSQ_DETAILS A |
| | | LEFT JOIN MES_INV_ITEM_BARCODES B ON A.item_barcode = B.ITEM_BARCODE |
| | | LEFT JOIN MES_ITEMS C ON B.ITEM_ID = C.item_id |
| | | WHERE A.bill_no= '{0}' ORDER BY A.create_date DESC", rksqOrder.BillNo); |
| | | var reportQty = barcode.Quantity; |
| | | if (reportQty <= 0) |
| | | throw new Exception( |
| | | $"报工数量不能小于等于0,请核对!{request.ItemBarcode}"); |
| | | |
| | | rksqDetails = Db.Ado.SqlQuery<MesInvItemInRksqDetails>(sql).ToList(); |
| | | } |
| | | } |
| | | else if (po_outSum == 2) |
| | | { |
| | | rksqOrder = Db.Queryable<MesInvItemIns>() |
| | | .Where(x => x.RbillNo == barcode.BillNo && x.TransctionNo == "181" && x.CreateBy == request.StaffNo) |
| | | .First(); |
| | | var totalQty = (reportedQty ?? 0) + reportQty; |
| | | if (totalQty > workOrder.Daa008) |
| | | throw new Exception( |
| | | $"本次报工数量:{reportQty} 大于剩余报工数量:{workOrder.Daa008 - reportedQty ?? 0},请核对!"); |
| | | |
| | | if (rksqOrder != null) |
| | | { |
| | | rksqOrder.BillNo = ""; |
| | | // 10. 更新条码状态 |
| | | db.Updateable<MesInvItemBarcodes>() |
| | | .SetColumns(x => new MesInvItemBarcodes |
| | | { |
| | | WorkFlg = true |
| | | //Quantity = reportQty |
| | | }) |
| | | .Where(x => x.Guid == barcode.Guid) |
| | | .ExecuteCommand(); |
| | | |
| | | // 11. 获取或创建报工单 |
| | | var workProd = db.Queryable<MesWorkProd>() |
| | | .Where(x => x.TaskNo == barcode.BillNo |
| | | && x.CreateDate.Value.Date.ToString( |
| | | "yyyy-MM-dd") == |
| | | DateTime.Now.Date.ToString("yyyy-MM-dd") |
| | | && x.BillTypeId == billTypeId |
| | | && x.TransactionNo == transactionNo |
| | | && x.ReportBy == request.StaffNo) |
| | | .First(); |
| | | |
| | | var id = Guid.Empty; |
| | | var billNo = ""; |
| | | if (workProd == null) |
| | | { |
| | | id = Guid.NewGuid(); |
| | | billNo = BillNo.GetBillNo("BG(报工)"); |
| | | |
| | | workProd = new MesWorkProd |
| | | { |
| | | Id = id, |
| | | BillNo = billNo, |
| | | LineNo = barcode.LineNo, |
| | | Company = barcode.Company, |
| | | Factory = barcode.Factory, |
| | | CreateBy = request.UserNo, |
| | | CreateDate = DateTime.Now, |
| | | LastupdateBy = request.UserNo, |
| | | LastupdateDate = DateTime.Now, |
| | | BillTypeId = billTypeId, |
| | | TransactionNo = transactionNo, |
| | | TaskNo = barcode.BillNo, |
| | | ReportBy = request.StaffNo, |
| | | ReportDate = DateTime.Now |
| | | }; |
| | | |
| | | db.Insertable(workProd).IgnoreColumns(true) |
| | | .ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | id = workProd.Id; |
| | | billNo = workProd.BillNo; |
| | | } |
| | | |
| | | // 12. 插入报工明细 |
| | | var detailId = Guid.NewGuid(); |
| | | db.Insertable(new MesWorkProdCDetails |
| | | { |
| | | Id = detailId, |
| | | MesWorkProdId = id, |
| | | BillNo = billNo, |
| | | ItemBarcode = request.ItemBarcode, |
| | | Quantity = (int)reportQty, |
| | | Company = barcode.Company, |
| | | Factory = barcode.Factory, |
| | | CreateBy = request.UserNo, |
| | | CreateDate = DateTime.Now, |
| | | LastupdateBy = request.UserNo, |
| | | LastupdateDate = DateTime.Now, |
| | | ItemNo = item.ItemNo, |
| | | WorkLast = barcode.WorkLast, |
| | | SilkPqty = barcode.SilkPqty, |
| | | SilkId = barcode.SilkId, |
| | | Silk = barcode.Silk, |
| | | BgYg = request.StaffNo |
| | | }).IgnoreColumns(true).ExecuteCommand(); |
| | | |
| | | // 13. 更新工单已报工数量 |
| | | db.Updateable<Womdaa>() |
| | | .SetColumns(x => new Womdaa |
| | | { |
| | | Daa011 = (x.Daa011 ?? 0) + (int)barcode.Quantity |
| | | }) |
| | | .Where(x => x.Daa001 == barcode.BillNo) |
| | | .ExecuteCommand(); |
| | | |
| | | // 14. 重新获取最新已报工数量 |
| | | reportedQty = db.Queryable<MesWorkProd, MesWorkProdCDetails>( |
| | | (a, b) => |
| | | new JoinQueryInfos(JoinType.Inner, |
| | | a.BillNo == b.BillNo)) |
| | | .Where((a, b) => a.BillTypeId == billTypeId |
| | | && a.TransactionNo == transactionNo |
| | | && a.TaskNo == barcode.BillNo) |
| | | .Sum((a, b) => b.Quantity); |
| | | } |
| | | |
| | | rksqDetails = new List<MesInvItemInRksqDetails>(); |
| | | } |
| | | return 1; |
| | | }); |
| | | |
| | | // Check if the procedure failed |
| | | if (po_outSum == -1) |
| | | { |
| | | throw new Exception(po_outMsg); |
| | | } |
| | | |
| | | // 处理rksqOrder为null的情况 |
| | | string sjBillNo = rksqOrder?.BillNo ?? ""; |
| | | |
| | | // 15. Return processing result |
| | | // 15. 返回处理结果 |
| | | return new ScanWorkResult |
| | | { |
| | | TaskNo = barcode.BillNo, |
| | | ItemNo = item.ItemNo, |
| | | PlanQty = workOrder.Daa008 ?? 0, |
| | | ReportedQty = po_womInBarSum, |
| | | PlanQty = planQty ?? 0, |
| | | ReportedQty = reportedQty ?? 0, |
| | | CurrentQty = barcode.Quantity.Value, |
| | | BarcodeQty = barcode.Quantity.Value, |
| | | ItemName = item.ItemName, |
| | | ItemModel = workOrder.Daa004, |
| | | Message = po_outMsg, |
| | | sjBillNo = sjBillNo, |
| | | BarcodesDetail = rksqDetails, |
| | | ItemModel = itemModel, |
| | | Message = "扫码成功!" |
| | | }; |
| | | |
| | | } |
| | | |
| | | |
| | |
| | | /// </exception> |
| | | public bool ScanWorkProdAsync(ScanWorkRequest request) |
| | | { |
| | | //// 1. 验证报工数量是否大于0 |
| | | //if (request.Quantity <= 0) |
| | | // throw new Exception("报工数量不能小于等于 0,请核对!"); |
| | | // 1. 验证报工数量是否大于0 |
| | | if (request.Quantity <= 0) |
| | | throw new Exception("报工数量不能小于等于 0,请核对!"); |
| | | |
| | | //// 2. 查询条码信息,验证条码是否存在 |
| | | //var barcode = Db.Queryable<MesInvItemBarcodes>() |
| | | // .Where(x => x.ItemBarcode == request.ItemBarcode) |
| | | // .First(); |
| | | //if (barcode == null) |
| | | // throw new Exception($"库存中无此条码,请核对!{request.ItemBarcode}"); |
| | | // 2. 查询条码信息,验证条码是否存在 |
| | | var barcode = Db.Queryable<MesInvItemBarcodes>() |
| | | .Where(x => x.ItemBarcode == request.ItemBarcode) |
| | | .First(); |
| | | if (barcode == null) |
| | | throw new Exception($"库存中无此条码,请核对!{request.ItemBarcode}"); |
| | | |
| | | //// 3. 查询工单信息,验证工单是否存在 |
| | | //var womdaa = Db.Queryable<Womdaa>() |
| | | // .Where(x => x.Daa001 == barcode.BillNo) |
| | | // .First(); |
| | | //if (womdaa == null) |
| | | // throw new Exception($"条码不是报工条码/无对应工单,请核对!{request.ItemBarcode}"); |
| | | // 3. 查询工单信息,验证工单是否存在 |
| | | var womdaa = Db.Queryable<Womdaa>() |
| | | .Where(x => x.Daa001 == barcode.BillNo) |
| | | .First(); |
| | | if (womdaa == null) |
| | | throw new Exception($"条码不是报工条码/无对应工单,请核对!{request.ItemBarcode}"); |
| | | |
| | | //// 4. 根据条码备注确定单据类型和交易号 |
| | | //var billTypeId = 900; // 默认单据类型 |
| | | //var transactionNo = 902; // 默认交易号(半成品工序) |
| | | //switch (barcode.Memo?.Trim() ?? "0") |
| | | //{ |
| | | // case "丝印": |
| | | // transactionNo = 901; // 丝印工序 |
| | | // break; |
| | | // case "半成品": |
| | | // transactionNo = 902; // 半成品工序 |
| | | // break; |
| | | // case "成品": |
| | | // case "包装": |
| | | // transactionNo = 903; // 成品/包装工序 |
| | | // break; |
| | | //} |
| | | |
| | | //// 5. 汇总已扫条码数量,验证是否超出计划数量 |
| | | //var sumQty = Db.Queryable<MesWorkProd, MesWorkProdCDetails>((a, b) => |
| | | // new JoinQueryInfos(JoinType.Inner, a.BillNo == b.BillNo)) |
| | | // .Where((a, b) => a.BillTypeId == billTypeId |
| | | // && a.TransactionNo == transactionNo |
| | | // && b.SilkId == barcode.SilkId |
| | | // && a.TaskNo == barcode.BillNo) |
| | | // .Sum((a, b) => b.Quantity); |
| | | |
| | | //sumQty = (sumQty ?? 0) + (int)request.Quantity; |
| | | |
| | | //if (sumQty > womdaa.Daa008) |
| | | // throw new Exception( |
| | | // $"本次报工数量:{request.Quantity} 大于剩余报工数量:{womdaa.Daa008 - (sumQty - request.Quantity)},请核对!"); |
| | | |
| | | //// 6. 开启事务处理报工数据 |
| | | //return UseTransaction(db => |
| | | //{ |
| | | // // 6.1 更新条码信息,设置已报工标记和数量 |
| | | // db.Updateable<MesInvItemBarcodes>() |
| | | // .SetColumns(x => x.WorkFlg == true) |
| | | // .SetColumns(x => x.Quantity == request.Quantity) |
| | | // .Where(x => x.Guid == barcode.Guid) |
| | | // .ExecuteCommand(); |
| | | |
| | | // // 6.2 获取或创建报工单 |
| | | // var workProd = db.Queryable<MesWorkProd>() |
| | | // .Where(x => x.TaskNo == barcode.BillNo |
| | | // && x.CreateDate.Value.Date.ToString("yyyy-MM-dd") == |
| | | // DateTime.Now.Date.ToString("yyyy-MM-dd") |
| | | // && x.BillTypeId == billTypeId |
| | | // && x.TransactionNo == transactionNo |
| | | // && x.Status == 0) |
| | | // .First(); |
| | | |
| | | // // 6.3 如果报工单不存在则创建新的报工单 |
| | | // if (workProd == null) |
| | | // { |
| | | // var billNo = BillNo.GetBillNo("BG(报工编号)"); |
| | | // workProd = new MesWorkProd |
| | | // { |
| | | // Id = Guid.NewGuid(), |
| | | // BillNo = billNo, |
| | | // LineNo = barcode.LineNo, |
| | | // Company = barcode.Company, |
| | | // Factory = barcode.Factory, |
| | | // CreateBy = request.UserNo, |
| | | // CreateDate = DateTime.Now, |
| | | // LastupdateBy = request.UserNo, |
| | | // LastupdateDate = DateTime.Now, |
| | | // PbillNo = barcode.BillNo, |
| | | // BillTypeId = billTypeId, |
| | | // TransactionNo = transactionNo, |
| | | // TaskNo = barcode.BillNo |
| | | // }; |
| | | |
| | | // db.Insertable(workProd).IgnoreColumns(true).ExecuteCommand(); |
| | | // } |
| | | |
| | | // // 6.4 插入报工明细记录 |
| | | // var detail = new MesWorkProdCDetails |
| | | // { |
| | | // Id = Guid.NewGuid(), |
| | | // BillNo = workProd.BillNo, |
| | | // ItemBarcode = request.ItemBarcode, |
| | | // Quantity = (int)request.Quantity, |
| | | // Company = barcode.Company, |
| | | // Factory = barcode.Factory, |
| | | // CreateBy = request.UserNo, |
| | | // CreateDate = DateTime.Now, |
| | | // LastupdateBy = request.UserNo, |
| | | // LastupdateDate = DateTime.Now, |
| | | // ItemNo = barcode.ItemNo, |
| | | // PbillNo = barcode.BillNo, |
| | | // WorkLast = barcode.WorkLast, |
| | | // SilkPqty = barcode.SilkPqty, |
| | | // SilkId = barcode.SilkId, |
| | | // Silk = barcode.Silk |
| | | // }; |
| | | |
| | | // db.Insertable(detail).IgnoreColumns(true).ExecuteCommand(); |
| | | |
| | | // return 1; |
| | | //}) > 0; |
| | | |
| | | // 调用存储过程处理生产报工审核 |
| | | var parameters = new SqlParameter[] |
| | | // 4. 根据条码备注确定单据类型和交易号 |
| | | var billTypeId = 900; // 默认单据类型 |
| | | var transactionNo = 902; // 默认交易号(半成品工序) |
| | | switch (barcode.Memo?.Trim() ?? "0") |
| | | { |
| | | // 输出参数:返回消息(最大长度2500字符) |
| | | new SqlParameter("@outMsg", SqlDbType.NVarChar, 2500) { Direction = ParameterDirection.Output }, |
| | | // 输出参数:返回影响行数 |
| | | new SqlParameter("@outSum", SqlDbType.Int) { Direction = ParameterDirection.Output }, |
| | | // 输入参数:操作人工号 |
| | | new SqlParameter("@userno", request.UserNo), |
| | | // 输入参数:单据编号(这里传入了条码值) |
| | | new SqlParameter("@inorder", request.sjBillNo), |
| | | // 输入参数:操作类型(1为审核,0为反审核) |
| | | new SqlParameter("@inFieldValue", 1) |
| | | // 注:以下参数在存储过程中有默认值,可根据需要添加 |
| | | // @inFieldName nvarchar(20)=null, // 扩展字段名 |
| | | // @in1 nvarchar(20)=null, // 扩展字段1 |
| | | // @in2 nvarchar(20)=null // 扩展字段2 |
| | | }; |
| | | |
| | | // 存储过程名称 |
| | | string procedureName = "prc_pda_scbg_submit"; |
| | | // 执行存储过程 |
| | | int res = DbHelperSQL.RunProcedure_NonQuery(procedureName, parameters); |
| | | |
| | | // 获取输出参数值(带类型转换) |
| | | var outMsg = parameters[0].Value?.ToString() ?? string.Empty; // 返回消息 |
| | | var outSum = parameters[1].Value != DBNull.Value ? Convert.ToInt32(parameters[1].Value) : -1; // 影响行数 |
| | | |
| | | if (outSum == -1) |
| | | { |
| | | throw new Exception(outMsg); |
| | | case "丝印": |
| | | transactionNo = 901; // 丝印工序 |
| | | break; |
| | | case "半成品": |
| | | transactionNo = 902; // 半成品工序 |
| | | break; |
| | | case "成品": |
| | | case "包装": |
| | | transactionNo = 903; // 成品/包装工序 |
| | | break; |
| | | } |
| | | else |
| | | |
| | | // 5. 汇总已扫条码数量,验证是否超出计划数量 |
| | | var sumQty = Db.Queryable<MesWorkProd, MesWorkProdCDetails>((a, b) => |
| | | new JoinQueryInfos(JoinType.Inner, a.BillNo == b.BillNo)) |
| | | .Where((a, b) => a.BillTypeId == billTypeId |
| | | && a.TransactionNo == transactionNo |
| | | && b.SilkId == barcode.SilkId |
| | | && a.TaskNo == barcode.BillNo) |
| | | .Sum((a, b) => b.Quantity); |
| | | |
| | | sumQty = (sumQty ?? 0) + (int)request.Quantity; |
| | | |
| | | if (sumQty > womdaa.Daa008) |
| | | throw new Exception( |
| | | $"本次报工数量:{request.Quantity} 大于剩余报工数量:{womdaa.Daa008 - (sumQty - request.Quantity)},请核对!"); |
| | | |
| | | // 6. 开启事务处理报工数据 |
| | | return UseTransaction(db => |
| | | { |
| | | return true; |
| | | } |
| | | // 6.1 更新条码信息,设置已报工标记和数量 |
| | | db.Updateable<MesInvItemBarcodes>() |
| | | .SetColumns(x => x.WorkFlg == true) |
| | | .SetColumns(x => x.Quantity == request.Quantity) |
| | | .Where(x => x.Guid == barcode.Guid) |
| | | .ExecuteCommand(); |
| | | |
| | | // 6.2 获取或创建报工单 |
| | | var workProd = db.Queryable<MesWorkProd>() |
| | | .Where(x => x.TaskNo == barcode.BillNo |
| | | && x.CreateDate.Value.Date.ToString("yyyy-MM-dd") == |
| | | DateTime.Now.Date.ToString("yyyy-MM-dd") |
| | | && x.BillTypeId == billTypeId |
| | | && x.TransactionNo == transactionNo |
| | | && x.Status == 0) |
| | | .First(); |
| | | |
| | | // 6.3 如果报工单不存在则创建新的报工单 |
| | | if (workProd == null) |
| | | { |
| | | var billNo = BillNo.GetBillNo("BG(报工编号)"); |
| | | workProd = new MesWorkProd |
| | | { |
| | | Id = Guid.NewGuid(), |
| | | BillNo = billNo, |
| | | LineNo = barcode.LineNo, |
| | | Company = barcode.Company, |
| | | Factory = barcode.Factory, |
| | | CreateBy = request.UserNo, |
| | | CreateDate = DateTime.Now, |
| | | LastupdateBy = request.UserNo, |
| | | LastupdateDate = DateTime.Now, |
| | | PbillNo = barcode.BillNo, |
| | | BillTypeId = billTypeId, |
| | | TransactionNo = transactionNo, |
| | | TaskNo = barcode.BillNo |
| | | }; |
| | | |
| | | db.Insertable(workProd).IgnoreColumns(true).ExecuteCommand(); |
| | | } |
| | | |
| | | // 6.4 插入报工明细记录 |
| | | var detail = new MesWorkProdCDetails |
| | | { |
| | | Id = Guid.NewGuid(), |
| | | BillNo = workProd.BillNo, |
| | | ItemBarcode = request.ItemBarcode, |
| | | Quantity = (int)request.Quantity, |
| | | Company = barcode.Company, |
| | | Factory = barcode.Factory, |
| | | CreateBy = request.UserNo, |
| | | CreateDate = DateTime.Now, |
| | | LastupdateBy = request.UserNo, |
| | | LastupdateDate = DateTime.Now, |
| | | ItemNo = barcode.ItemNo, |
| | | PbillNo = barcode.BillNo, |
| | | WorkLast = barcode.WorkLast, |
| | | SilkPqty = barcode.SilkPqty, |
| | | SilkId = barcode.SilkId, |
| | | Silk = barcode.Silk |
| | | }; |
| | | |
| | | db.Insertable(detail).IgnoreColumns(true).ExecuteCommand(); |
| | | |
| | | return 1; |
| | | }) > 0; |
| | | } |
| | | |
| | | public ScanWorkResult GetRksqList(ScanWorkRequest request) |
| | | { |
| | | |
| | | //1.验证员工信息 |
| | | var staff = Db.Queryable<MesStaff>() |
| | | .Where(x => x.StaffNo == request.StaffNo) |
| | | .First(); |
| | | if (staff == null) |
| | | throw new Exception("请先选择人员"); |
| | | |
| | | var rksqOrder = Db.Queryable<MesInvItemIns>() |
| | | .Where(x => x.BillNo == request.sjBillNo && x.Status == 0) |
| | | .First(); |
| | | if (rksqOrder == null) |
| | | throw new Exception("该检验单已提交送检"); |
| | | |
| | | var sql = string.Format(@"SELECT A.item_barcode ItemBarcode,B.QUANTITY BgQuantity,c.item_no ItemNo,c.item_name ItemName,c.item_model ItemModel |
| | | FROM MES_INV_ITEM_IN_RKSQ_DETAILS A |
| | | LEFT JOIN MES_INV_ITEM_BARCODES B ON A.item_barcode = B.ITEM_BARCODE |
| | | LEFT JOIN MES_ITEMS C ON B.ITEM_ID = C.item_id |
| | | WHERE A.bill_no= '{0}'ORDER BY A.create_date DESC", rksqOrder.BillNo); |
| | | |
| | | var RKSQ = Db.Ado.SqlQuery<MesInvItemInRksqDetails>(sql); |
| | | |
| | | |
| | | var rksqDetails = RKSQ.ToList(); |
| | | |
| | | |
| | | //var rksqDetails = Db.Queryable<MesInvItemInRksqDetails>() |
| | | // .Where(x => x.BillNo == ) |
| | | // .ToList(); |
| | | |
| | | // 15. Return processing result |
| | | return new ScanWorkResult |
| | | { |
| | | BarcodesDetail = rksqDetails, |
| | | }; |
| | | } |
| | | |
| | | public ScanWorkResult GetRksqSelect(ScanWorkRequest request) |
| | | { |
| | | //1.验证员工信息 |
| | | var staff = Db.Queryable<MesStaff>() |
| | | .Where(x => x.StaffNo == request.StaffNo) |
| | | .First(); |
| | | if (staff == null) |
| | | throw new Exception("请先选择人员"); |
| | | |
| | | var rksqOrder = Db.Queryable<MesInvItemIns>() |
| | | .Where(x => x.TransctionNo=="181"&& x.Status == 0 && x.CreateBy== request.StaffNo) |
| | | .ToList(); |
| | | |
| | | return new ScanWorkResult |
| | | { |
| | | rksqOrderList = rksqOrder, |
| | | }; |
| | | } |
| | | |
| | | } |