| | |
| | | using NewPdaSqlServer.DB; |
| | | using NewPdaSqlServer.Dto.service; |
| | | using NewPdaSqlServer.entity; |
| | | using NewPdaSqlServer.util; |
| | | using NewPdaSqlServer.entity.Base; |
| | | using SharpCompress; |
| | | using SqlSugar; |
| | | using System.Data; |
| | | using System.Data.SqlClient; |
| | | using DbHelperSQL = NewPdaSqlServer.DB.DbHelperSQL; |
| | | using static Microsoft.EntityFrameworkCore.DbLoggerCategory; |
| | | |
| | | namespace NewPdaSqlServer.service.Wom; |
| | | |
| | |
| | | var po_womInBarSum = parameters[4].Value != DBNull.Value ? Convert.ToDecimal(parameters[4].Value) : 0m; |
| | | |
| | | |
| | | // 声明变量在外层,确保在所有分支中都可访问 |
| | | MesInvItemIns rksqOrder = null; |
| | | List<MesInvItemInRksqDetails> rksqDetails = new List<MesInvItemInRksqDetails>(); |
| | | List<MesInvItemInRksqDetails> itemDetails = new List<MesInvItemInRksqDetails>(); |
| | | |
| | | if (po_outSum == 1) |
| | | { |
| | | rksqOrder = Db.Queryable<MesInvItemIns>() |
| | | .LeftJoin<Womdaa>((a, daa) => a.TaskNo == daa.Daa001) |
| | | .Where(a => a.Status == 0) |
| | | .Where(a => a.TransctionNo == "181") |
| | | .Where((a, daa) => daa.Daa029 == item.ItemNo) |
| | | .Where((a, daa) => daa.Daa015 == workOrder.Daa015) |
| | | .Where(a => a.InsDate.Value.Date == DateTime.Today) |
| | | .First(); |
| | | |
| | | if (rksqOrder != null) |
| | | { |
| | | 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 sql1 = string.Format(@"SELECT |
| | | SUM(ISNULL(B.QUANTITY,0)) as BgQuantity, |
| | | c.item_no as ItemNo, |
| | | c.item_name as ItemName, |
| | | c.item_model as ItemModel, |
| | | MAX(A.create_date) as LatestCreateDate -- 添加这个字段 |
| | | 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}' |
| | | GROUP BY c.item_no, c.item_name, c.item_model |
| | | ORDER BY MAX(A.create_date) DESC", rksqOrder.BillNo); |
| | | |
| | | rksqDetails = Db.Ado.SqlQuery<MesInvItemInRksqDetails>(sql).ToList(); |
| | | itemDetails = Db.Ado.SqlQuery<MesInvItemInRksqDetails>(sql1).ToList(); |
| | | } |
| | | } |
| | | else if (po_outSum == 2) |
| | | { |
| | | rksqOrder = Db.Queryable<MesInvItemIns>() |
| | | .LeftJoin<Womdaa>((a, daa) => a.TaskNo == daa.Daa001) |
| | | .Where(a => a.Status == 0) |
| | | .Where(a => a.TransctionNo == "181") |
| | | .Where((a, daa) => daa.Daa029 == item.ItemNo) |
| | | .Where((a, daa) => daa.Daa015 == workOrder.Daa015) |
| | | .Where(a => a.InsDate.Value.Date == DateTime.Today) |
| | | .First(); |
| | | |
| | | if (rksqOrder != null) |
| | | { |
| | | rksqOrder.BillNo = ""; |
| | | } |
| | | |
| | | rksqDetails = new List<MesInvItemInRksqDetails>(); |
| | | itemDetails = new List<MesInvItemInRksqDetails>(); |
| | | } |
| | | |
| | | // Check if the procedure failed |
| | | if (po_outSum == -1) |
| | | { |
| | | throw new Exception(po_outMsg); |
| | | } |
| | | |
| | | // 处理rksqOrder为null的情况 |
| | | string sjBillNo = rksqOrder?.BillNo ?? ""; |
| | | |
| | | // 15. Return processing result |
| | | return new ScanWorkResult |
| | |
| | | ItemName = item.ItemName, |
| | | ItemModel = workOrder.Daa004, |
| | | Message = po_outMsg, |
| | | //sjBillNo = sjBillNo, |
| | | //BarcodesDetail = rksqDetails, |
| | | sjBillNo = sjBillNo, |
| | | BarcodesDetail = rksqDetails, |
| | | itemDetail = itemDetails |
| | | }; |
| | | |
| | | } |
| | |
| | | /// </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") |
| | | //// 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[] |
| | | { |
| | | 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 |
| | | // 输出参数:返回消息(最大长度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 |
| | | }; |
| | | |
| | | db.Insertable(workProd).IgnoreColumns(true).ExecuteCommand(); |
| | | } |
| | | // 存储过程名称 |
| | | string procedureName = "prc_pda_scbg_submit"; |
| | | // 执行存储过程 |
| | | int res = DbHelperSQL.RunProcedure_NonQuery(procedureName, parameters); |
| | | |
| | | // 6.4 插入报工明细记录 |
| | | var detail = new MesWorkProdCDetails |
| | | // 获取输出参数值(带类型转换) |
| | | var outMsg = parameters[0].Value?.ToString() ?? string.Empty; // 返回消息 |
| | | var outSum = parameters[1].Value != DBNull.Value ? Convert.ToInt32(parameters[1].Value) : -1; // 影响行数 |
| | | |
| | | if (outSum == -1) |
| | | { |
| | | 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; |
| | | throw new Exception(outMsg); |
| | | } |
| | | else |
| | | { |
| | | return true; |
| | | } |
| | | } |
| | | |
| | | 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 sql1 = string.Format(@"SELECT |
| | | SUM(ISNULL(B.QUANTITY,0)) as BgQuantity, |
| | | c.item_no as ItemNo, |
| | | c.item_name as ItemName, |
| | | c.item_model as ItemModel, |
| | | MAX(A.create_date) as LatestCreateDate -- 添加这个字段 |
| | | 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}' |
| | | GROUP BY c.item_no, c.item_name, c.item_model |
| | | ORDER BY MAX(A.create_date) DESC", rksqOrder.BillNo); |
| | | |
| | | var RKSQ = Db.Ado.SqlQuery<MesInvItemInRksqDetails>(sql); |
| | | var wlhz = Db.Ado.SqlQuery<MesInvItemInRksqDetails>(sql1); |
| | | |
| | | |
| | | var rksqDetails = RKSQ.ToList(); |
| | | var wlhzDetails = wlhz.ToList(); |
| | | |
| | | |
| | | //var rksqDetails = Db.Queryable<MesInvItemInRksqDetails>() |
| | | // .Where(x => x.BillNo == ) |
| | | // .ToList(); |
| | | |
| | | // 15. Return processing result |
| | | return new ScanWorkResult |
| | | { |
| | | BarcodesDetail = rksqDetails, |
| | | itemDetail = wlhzDetails |
| | | }; |
| | | } |
| | | |
| | | 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) |
| | | .ToList(); |
| | | |
| | | return new ScanWorkResult |
| | | { |
| | | rksqOrderList = rksqOrder, |
| | | }; |
| | | } |
| | | |
| | | } |