| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433 |
- using System;
- using System.Collections.Generic;
- using System.Data;
- using Curtain.DataAccess;
- /// <summary>
- /// 自动生成下月计划
- /// </summary>
- public class CreateMonthPlan
- {
- /// <summary>
- /// 自动生成下月计划
- /// </summary>
- /// <returns></returns>
- public static string CreateNextMonthPlan(DateTime accountdatebegin)
- {
- string accountMonth = accountdatebegin.ToString("yyyy-MM");
- DateTime accountdateend = accountdatebegin.AddMonths(1).AddDays(-1);
- int accountID = 1, userID = 2; // 账套、用户ID
- int result = 0;
- using (IDataAccess conn = DataAccess.Create())
- {
- conn.BeginTransaction();
- try
- {
- object isExists = conn.ExecuteScalar(@"
- SELECT 1
- FROM TP_PC_MONTHPLAN
- WHERE ACCOUNTMONTH = @ACCOUNTMONTH@ ",
- new CDAParameter("ACCOUNTMONTH", accountMonth)
- );
- if (isExists != null)
- {
- return "已经生成";
- }
- // 获取采购订单
- DataTable dtPMCOrder = conn.ExecuteDatatable(@"
- SELECT I.EBELN,
- I.EBELP,
- P.ETENR,
- I.MATNR,
- P.MENGE
- FROM TP_SAP_ITEM I
- INNER JOIN TP_SAP_PLAN P
- ON P.EBELP = I.EBELP
- AND P.EBELN = I.EBELN
- WHERE P.VALUEFLAG = '1'
- -- AND I.PLANFLAG = '1'
- AND P.EINDT >= @EINDTBEGIN@
- AND P.EINDT <= @EINDTEND@ ",
- new CDAParameter("EINDTBEGIN", accountdatebegin),
- new CDAParameter("EINDTEND", accountdateend)
- );
- /*************************************************** 建包装计划begin *************************************************/
- object primaryKeyBZ = conn.GetSequenceNextval("SEQ_PC_MONTHPLAN");
- result += conn.ExecuteNonQuery(@"
- INSERT INTO TP_PC_MONTHPLAN (
- MONTHPLANID,
- ACCOUNTMONTH,
- MONTHPLANNAME,
- PROCEDUREID,
- SAPDATEBEGIN,
- SAPDATEEND,
- ACCOUNTID,
- CREATEUSERID,
- UPDATEUSERID
- ) VALUES (
- @MONTHPLANID@,
- @ACCOUNTMONTH@,
- @MONTHPLANNAME@,
- 107,
- @SAPDATEBEGIN@,
- @SAPDATEEND@,
- @ACCOUNTID@,
- @USERID@,
- @USERID@) ",
- new CDAParameter("MONTHPLANID", primaryKeyBZ),
- new CDAParameter("ACCOUNTMONTH", accountMonth),
- new CDAParameter("MONTHPLANNAME", "包装计划" + accountMonth),
- new CDAParameter("SAPDATEBEGIN", accountdatebegin),
- new CDAParameter("SAPDATEEND", accountdateend),
- new CDAParameter("ACCOUNTID", accountID),
- new CDAParameter("USERID", userID)
- );
- string sqlIniMonthPlanDetail = @"
- INSERT INTO TP_PC_MONTHPLANDETAIL (
- MONTHPLANID,
- MATNR,
- MENGE,
- PMCORDERNO,
- EBELP,
- ACCOUNTID,
- CREATEUSERID,
- UPDATEUSERID)
- VALUES (
- @MONTHPLANID@,
- @MATNR@,
- @MENGE@,
- @PMCORDERNO@,
- @EBELP@,
- @ACCOUNTID@,
- @USERID@,
- @USERID@) ";
- foreach (DataRow drPMCOrder in dtPMCOrder.Rows)
- {
- result += conn.ExecuteNonQuery(sqlIniMonthPlanDetail,
- new CDAParameter("MONTHPLANID", primaryKeyBZ),
- new CDAParameter("MATNR", drPMCOrder["MATNR"]),
- new CDAParameter("MENGE", drPMCOrder["MENGE"]),
- new CDAParameter("PMCORDERNO", drPMCOrder["EBELN"]),
- new CDAParameter("EBELP", drPMCOrder["EBELP"]),
- new CDAParameter("ACCOUNTID", accountID),
- new CDAParameter("USERID", userID)
- );
- }
- /*************************************************** 建包装计划end ***************************************************/
- /*************************************************** 建成检计划begin *************************************************/
- object primaryKeyCJ = conn.GetSequenceNextval("SEQ_PC_MONTHPLAN");
- result += conn.ExecuteNonQuery(@"
- INSERT INTO TP_PC_MONTHPLAN (
- MONTHPLANID,
- ACCOUNTMONTH,
- MONTHPLANNAME,
- PROCEDUREID,
- TODAILYFLAG,
- ACCOUNTID,
- CREATEUSERID,
- UPDATEUSERID
- ) VALUES (
- @MONTHPLANID@,
- @ACCOUNTMONTH@,
- @MONTHPLANNAME@,
- 104,
- '1',
- @ACCOUNTID@,
- @USERID@,
- @USERID@
- ) ",
- new CDAParameter("MONTHPLANID", primaryKeyCJ),
- new CDAParameter("ACCOUNTMONTH", accountMonth),
- new CDAParameter("MONTHPLANNAME", "成检计划" + accountMonth),
- new CDAParameter("ACCOUNTID", accountID),
- new CDAParameter("USERID", userID)
- );
- result += conn.ExecuteNonQuery(@"
- INSERT INTO TP_PC_MONTHPLANDETAIL
- (MONTHPLANID,
- MATNR,
- MENGE,
- ACCOUNTID,
- CREATEUSERID,
- UPDATEUSERID)
- SELECT @MONTHPLANID@,
- MATNR,
- SUM(MENGE),
- @ACCOUNTID@,
- @USERID@,
- @USERID@
- FROM TP_PC_MONTHPLANDETAIL
- WHERE MONTHPLANID = @MONTHPLANIDBZ@
- GROUP BY MATNR ",
- new CDAParameter("MONTHPLANID", primaryKeyCJ),
- new CDAParameter("ACCOUNTID", accountID),
- new CDAParameter("USERID", userID),
- new CDAParameter("MONTHPLANIDBZ", primaryKeyBZ)
- );
- DataTable dtCJMonthPlanDetail = conn.ExecuteDatatable(@"
- SELECT MPD.DETAILID
- ,PB.GOODSID
- ,MPD.MENGE
- FROM TP_PC_MONTHPLANDETAIL MPD
- LEFT JOIN TP_MST_PACKINGBOM PB
- ON PB.MATNR = MPD.MATNR
- WHERE MPD.MONTHPLANID = @MONTHPLANID@ ",
- new CDAParameter("MONTHPLANID", primaryKeyCJ)
- );
- string sqlUpdate = @"
- UPDATE TP_PC_MONTHPLANDETAIL
- SET OUTQUANTITY = @OUTQUANTITY@
- ,QUALIFIEDPERCENT = @QUALIFIEDPERCENT@
- WHERE DETAILID = @DETAILID@ ";
- // 获取合格率
- DataTable dtQualifiedPercent = QualifiedPercent.GetQualifiedPercent(conn, accountdatebegin);
- DataRow[] rows;
- decimal planquantity;
- foreach (DataRow item in dtCJMonthPlanDetail.Rows)
- {
- // 数量
- decimal.TryParse(item["MENGE"] + "", out planquantity);
- decimal outquantity = planquantity;
- rows = dtQualifiedPercent.Select("GOODSID = " + item["GOODSID"]);
- decimal qualifiedpercent = 1;
- if (rows.Length > 0)
- {
- qualifiedpercent = Convert.ToDecimal(rows[0]["QUALIFIEDPERCENT"]);
- outquantity = Math.Floor(planquantity / qualifiedpercent);
- }
- result = conn.ExecuteNonQuery(sqlUpdate,
- new CDAParameter("OUTQUANTITY", outquantity, DataType.Int32),
- new CDAParameter("QUALIFIEDPERCENT", qualifiedpercent * 100, DataType.Decimal),
- new CDAParameter("DETAILID", item["DETAILID"])
- );
- }
- /*************************************************** 生成成检日计划begin **********************************************/
- DataTable dtMonthPlanDetail = conn.ExecuteDatatable(@"
- SELECT MPD.DETAILID,
- MPD.MATNR,
- PB.GOODSID,
- PB.LOGOID,
- MPD.MENGE
- FROM TP_PC_MONTHPLANDETAIL MPD
- LEFT JOIN (SELECT PB.MATNR,
- GOODSID,
- LOGOID
- FROM TP_MST_PACKINGBOM PB
- GROUP BY PB.MATNR,
- GOODSID,
- LOGOID) PB
- ON PB.MATNR = MPD.MATNR
- WHERE MPD.MONTHPLANID = @MONTHPLANID@ ",
- new CDAParameter("MONTHPLANID", primaryKeyCJ)
- );
- DataRow[] drMonthPlanDetails = dtMonthPlanDetail.Select("GOODSID IS NULL OR LOGOID IS NULL");
- if (drMonthPlanDetails.Length > 0)
- {
- string message = string.Empty;
- foreach (DataRow row in drMonthPlanDetails)
- {
- message += row["MATNR"] + ",";
- }
- return "存在无法绑定产品的物料编码:" + message;
- }
- DateTime begindate = Convert.ToDateTime(accountMonth + "-01");
- DateTime enddate = begindate.AddMonths(1).AddDays(-1);
- // 获取合格率
- TimeSpan sp = enddate.Subtract(begindate);
- int days = sp.Days;
- if (days > 0)
- {
- string sqlIniDailyPlan = @"
- INSERT INTO TP_PC_DAILYPLAN
- (DAILYPLANID,
- DAILYPLANNAME,
- MONTHPLANID,
- ACCOUNTDATE,
- ACCOUNTID,
- CREATEUSERID,
- UPDATEUSERID)
- VALUES
- (@DAILYPLANID@,
- @DAILYPLANNAME@,
- @MONTHPLANID@,
- @ACCOUNTDATE@,
- @ACCOUNTID@,
- @USERID@,
- @USERID@) ";
- string sqlIniDailyPlanDetail = @"
- INSERT INTO TP_PC_DAILYPLANDETAIL
- (DAILYPLANID,
- MONTHPLANDETAILID,
- MATNR,
- GOODSID,
- LOGOID,
- OUTQUANTITY,
- PLANQUANTITY,
- QUALIFIEDPERCENT,
- ACCOUNTID,
- CREATEUSERID,
- UPDATEUSERID)
- VALUES
- (@DAILYPLANID@,
- @MONTHPLANDETAILID@,
- @MATNR@,
- @GOODSID@,
- @LOGOID@,
- @OUTQUANTITY@,
- @PLANQUANTITY@,
- @QUALIFIEDPERCENT@,
- @ACCOUNTID@,
- @USERID@,
- @USERID@) ";
- rows = null;
- for (int i = 0; i <= days; i++)
- {
- //获取日计划主键
- object dailyPlanID = conn.GetSequenceNextval("SEQ_PC_DAILYPLAN");
- DateTime dailyAccountDate = begindate.AddDays(i);
- //新建日计划总单
- result += conn.ExecuteNonQuery(sqlIniDailyPlan,
- new CDAParameter("DAILYPLANID", dailyPlanID),
- new CDAParameter("DAILYPLANNAME", "成检日计划" + dailyAccountDate.ToString("yyyy-MM-dd")),
- new CDAParameter("MONTHPLANID", primaryKeyCJ),
- new CDAParameter("ACCOUNTDATE", dailyAccountDate),
- new CDAParameter("ACCOUNTID", accountID),
- new CDAParameter("USERID", userID)
- );
- //新建日计划明细
- foreach (DataRow drMonthPlanDetail in dtMonthPlanDetail.Rows)
- {
- // 日均值,向下取整
- decimal avgquantity = Math.Floor(Convert.ToDecimal(drMonthPlanDetail["MENGE"]) / (days + 1));
- planquantity = avgquantity;
- if (i == days)
- {
- planquantity = Convert.ToDecimal(drMonthPlanDetail["MENGE"]) - days * avgquantity;
- }
- // 出窑数量
- decimal outquantity = planquantity;
- rows = dtQualifiedPercent.Select("GOODSID = " + drMonthPlanDetail["GOODSID"]);
- decimal qualifiedpercent = 1;
- if (rows.Length > 0)
- {
- qualifiedpercent = Convert.ToDecimal(rows[0]["QUALIFIEDPERCENT"]);
- outquantity = Math.Floor(planquantity / qualifiedpercent);
- }
- result = conn.ExecuteNonQuery(sqlIniDailyPlanDetail,
- new CDAParameter("DAILYPLANID", dailyPlanID),
- new CDAParameter("MONTHPLANDETAILID", drMonthPlanDetail["DETAILID"], DataType.Int32),
- new CDAParameter("MATNR", drMonthPlanDetail["MATNR"], DataType.NVarChar),
- new CDAParameter("GOODSID", drMonthPlanDetail["GOODSID"], DataType.Int32),
- new CDAParameter("LOGOID", drMonthPlanDetail["LOGOID"], DataType.Int32),
- new CDAParameter("OUTQUANTITY", outquantity, DataType.Int32),
- new CDAParameter("PLANQUANTITY", planquantity, DataType.Int32),
- new CDAParameter("QUALIFIEDPERCENT", qualifiedpercent * 100, DataType.Decimal),
- new CDAParameter("ACCOUNTID", accountID),
- new CDAParameter("USERID", userID)
- );
- }
- }
- }
- /*************************************************** 生成成检日计划end ***************************************************/
- /*************************************************** 更新成检月计划出窑量begin ********************************************/
- result += conn.ExecuteNonQuery(@"
- UPDATE TP_PC_MONTHPLANDETAIL T
- SET (T.OUTQUANTITY, T.QUALIFIEDPERCENT) =
- (SELECT SUM(DPD.OUTQUANTITY),
- MAX(QUALIFIEDPERCENT)
- FROM TP_PC_DAILYPLANDETAIL DPD
- WHERE DPD.MONTHPLANDETAILID = T.DETAILID)
- WHERE T.MONTHPLANID = @MONTHPLANID@ ",
- new CDAParameter("MONTHPLANID", primaryKeyCJ)
- );
- /*************************************************** 更新成检月计划出窑量end ***********************************************/
- List<string> ebelns = new List<string>();
- // 更新采购订单明细生成标识
- foreach (DataRow row in dtPMCOrder.Rows)
- {
- string order = row["EBELN"] + "";
- if (!ebelns.Contains(order))
- {
- ebelns.Add(order);
- }
- result += conn.ExecuteNonQuery(@"
- UPDATE TP_SAP_PLAN T
- SET T.MONTHPLANFLAG = '1'
- WHERE T.EBELN = @EBELN@
- AND T.EBELP = @EBELP@
- AND T.ETENR = @ETENR@ ",
- new CDAParameter("EBELN", order),
- new CDAParameter("EBELP", row["EBELP"]),
- new CDAParameter("ETENR", row["ETENR"])
- );
- }
- // 更新采购订单总表生成标识
- foreach (string order in ebelns)
- {
- result += conn.ExecuteNonQuery(@"
- UPDATE TP_SAP_HEAD
- SET CREATEFLAG =
- (SELECT DECODE(COUNT(1), 0, '2', '1')
- FROM TP_SAP_PLAN P
- WHERE P.MONTHPLANFLAG = '0'
- AND P.EBELN = @EBELN@)
- WHERE EBELN = @EBELN@ ",
- new CDAParameter("EBELN", order)
- );
- }
- //提交数据
- if (result > 0)
- {
- conn.Commit();
- return "生成成功";
- }
- else
- {
- conn.Rollback();
- return "生成失败";
- }
- }
- catch (Exception e)
- {
- conn.Rollback();
- return "操作失败:" + e.Message;
- }
- }
- }
- }
|