From 376bb6cf439eaa3b2867825fe22a14e381dd9213 Mon Sep 17 00:00:00 2001
From: yl <ykxkd@outlook.com>
Date: 星期三, 14 八月 2024 17:55:48 +0800
Subject: [PATCH] 1.新增工序找设备(工位)接口 2.新增物料清单查询、新增、修改接口
---
VueWebCoreApi/DLL/DAL/WorkOrderDAL.cs | 462 ++++++++-------
VueWebCoreApi/Models/WorkData/WorkRouteStepEqp.cs | 8
VueWebCoreApi/DLL/DAL/GeneralBasicDataDAL.cs | 69 ++
VueWebCoreApi/DLL/BLL/ProductModelBLL.cs | 57 +
VueWebCoreApi/DLL/BLL/GeneralBasicDataBLL.cs | 7
VueWebCoreApi/DLL/DAL/ProductModelDAL.cs | 699 ++++++++++++++++++++++-
VueWebCoreApi/DLL/DAL/ReportManagerDAL.cs | 14
VueWebCoreApi/Tools/DapperHelper.cs | 36 +
VueWebCoreApi/Controllers/GeneralBasicDataController.cs | 14
VueWebCoreApi/Controllers/ProductModelController.cs | 152 +++++
VueWebCoreApi/DLL/DAL/BasicSettingDAL.cs | 28
VueWebCoreApi/Controllers/WorkOrderController.cs | 2
VueWebCoreApi/Models/MaterialCraftsSave.cs | 4
VueWebCoreApi/Models/WorkData/WorkList.cs | 22
VueWebCoreApi/Models/Bom/BomDate.cs | 127 ++++
15 files changed, 1,410 insertions(+), 291 deletions(-)
diff --git a/VueWebCoreApi/Controllers/GeneralBasicDataController.cs b/VueWebCoreApi/Controllers/GeneralBasicDataController.cs
index 21132a2..0eb8fe7 100644
--- a/VueWebCoreApi/Controllers/GeneralBasicDataController.cs
+++ b/VueWebCoreApi/Controllers/GeneralBasicDataController.cs
@@ -298,6 +298,20 @@
}
#endregion
+ #region[宸ュ簭璁惧鍩虹璧勬枡]
+ /// <summary>
+ /// 宸ュ簭璁惧鍩虹璧勬枡
+ /// </summary>
+ /// <returns></returns>
+ [Route(template: "StepEqpData")]
+ [HttpGet]
+ public JsonResult StepEqpData()
+ {
+ mes = GeneralBasicDataBLL.StepEqpData();
+ return Json(mes);
+ }
+ #endregion
+
#region[缂洪櫡鍩虹璧勬枡]
[Route(template: "DefectPermissions")]
[HttpGet]
diff --git a/VueWebCoreApi/Controllers/ProductModelController.cs b/VueWebCoreApi/Controllers/ProductModelController.cs
index 2354d08..5e88e26 100644
--- a/VueWebCoreApi/Controllers/ProductModelController.cs
+++ b/VueWebCoreApi/Controllers/ProductModelController.cs
@@ -6,6 +6,7 @@
using System.Threading.Tasks;
using VueWebCoreApi.DLL.BLL;
using VueWebCoreApi.Models;
+using VueWebCoreApi.Models.Bom;
using VueWebCoreApi.Models.UnitMaterial;
using VueWebCoreApi.Tools;
@@ -295,6 +296,157 @@
#endregion
+ #region[鐗╂枡娓呭崟淇℃伅鍒楄〃]
+ /// <summary>
+ /// 鐗╂枡娓呭崟淇℃伅鍒楄〃
+ /// </summary>
+ /// <param name="parentpartcode">姣嶄欢缂栫爜</param>
+ /// <param name="parentpartname">姣嶄欢鍚嶇О</param>
+ /// <param name="parentpartspec">姣嶄欢瑙勬牸</param>
+ /// <param name="status">鍚敤鐘舵��</param>
+ /// <param name="version">鐗堟湰鍙�</param>
+ /// <param name="createuser">鍒涘缓浜哄憳</param>
+ /// <param name="createdate">鍒涘缓鏃ユ湡</param>
+ /// <param name="page">椤电爜</param>
+ /// <param name="rows">鍒嗛〉鏉℃暟</param>
+ /// <param name="prop">鎺掑簭瀛楁</param>
+ /// <param name="order">鎺掑簭瑙勬牸</param>
+ /// <returns></returns>
+ [Route(template: "BomMainData")]
+ [HttpGet]
+ public JsonResult BomMainData(string parentpartcode, string parentpartname, string parentpartspec, string status,string version,string createuser,string createdate, int page = 0, int rows = 0, string prop = null, string order = null)
+ {
+ var token = HttpContext.Request.Headers["Token"].ToString();
+ User us = JwtTools.Denocode(token.ToString());
+ string operopendate = ""; //寮�濮嬫椂闂�
+ string operclosedate = ""; //缁撴潫鏃堕棿
+ if (createdate != "" && createdate != null)
+ {
+ operopendate = createdate.Split('~')[0].ToString();
+ operclosedate = createdate.Split('~')[1].ToString();
+ }
+ int startNum = rows * (page - 1) + 1; //璧峰璁板綍rowNum
+ int endNum = rows * page; //缁撴潫璁板綍 rowNum
+ mes = ProductModelBLL.BomMainData(parentpartcode, parentpartname, parentpartspec, status, version, createuser, operopendate, operclosedate, startNum, endNum, prop, order);
+ return Json(mes);
+ }
+ #endregion
+
+ #region[鐗╂枡娓呭崟鏂板淇敼鑾峰彇鐖朵欢淇℃伅-T+鐣呮嵎閫氭ā寮廬
+ /// <summary>
+ /// 鐗╂枡娓呭崟鏂板淇敼鑾峰彇鐖朵欢淇℃伅-T+鐣呮嵎閫氭ā寮�
+ /// </summary>
+ [Route(template: "AddUpdateTBomParentData")]
+ [HttpGet]
+ public JsonResult AddUpdateTBomParentData()
+ {
+ var token = HttpContext.Request.Headers["Token"].ToString();
+ User us = JwtTools.Denocode(token.ToString());
+ mes = ProductModelBLL.AddUpdateTBomParentData(us);
+ return Json(mes);
+ }
+ #endregion
+
+ #region[鐗╂枡娓呭崟鏂板淇敼鏍规嵁鐖朵欢淇℃伅鐨勮閲忓崟浣嶇粍缂栫爜鏌ユ壘璁¢噺鍗曚綅缁勪俊鎭�-T+鐣呮嵎閫氭ā寮廬
+ /// <summary>
+ /// 鐗╂枡娓呭崟鏂板淇敼鏍规嵁鐖朵欢淇℃伅鐨勮閲忓崟浣嶇粍缂栫爜鏌ユ壘璁¢噺鍗曚綅缁勪俊鎭�-T+鐣呮嵎閫氭ā寮�
+ /// </summary>
+ /// <param name="idunitgroup">璁¢噺鍗曚綅缁勭紪鐮�(褰撻�夊彇鐨勭埗浠剁墿鏂欎腑涓鸿閲忓崟浣嶇粍鏃惰皟鐢�,idunitgroup涓嶄负绌�)</param>
+ /// <returns></returns>
+ [Route(template: "AddUpdateTBomUnitGroup")]
+ [HttpGet]
+ public JsonResult AddUpdateTBomUnitGroup(string idunitgroup)
+ {
+ var token = HttpContext.Request.Headers["Token"].ToString();
+ User us = JwtTools.Denocode(token.ToString());
+ mes = ProductModelBLL.AddUpdateTBomUnitGroup(idunitgroup);
+ return Json(mes);
+ }
+ #endregion
+
+ #region[鐗╂枡娓呭崟鏂板鏃惰幏鍙栨渶澶х増鏈彿]
+ /// <summary>
+ /// 鐗╂枡娓呭崟鏂板鏃惰幏鍙栨渶澶х増鏈彿
+ /// </summary>
+ /// <param name="parentpartcode">鐖朵欢缂栫爜</param>
+ /// <returns></returns>
+ [Route(template: "AddUpdateTBomMaxVsion")]
+ [HttpGet]
+ public JsonResult AddUpdateTBomMaxVsion(string parentpartcode)
+ {
+ mes = ProductModelBLL.AddUpdateTBomMaxVsion(parentpartcode);
+ return Json(mes);
+ }
+ #endregion
+
+ #region[鐗╂枡娓呭崟鏂板淇敼鑾峰彇瀛愪欢淇℃伅-T+鐣呮嵎閫氭ā寮廬
+ /// <summary>
+ /// 鐗╂枡娓呭崟鏂板淇敼鑾峰彇瀛愪欢淇℃伅-T+鐣呮嵎閫氭ā寮�
+ /// </summary>
+ [Route(template: "AddUpdateTBomDetailsData")]
+ [HttpGet]
+ public JsonResult AddUpdateTBomDetailsData()
+ {
+ var token = HttpContext.Request.Headers["Token"].ToString();
+ User us = JwtTools.Denocode(token.ToString());
+ mes = ProductModelBLL.AddUpdateTBomDetailsData(us);
+ return Json(mes);
+ }
+ #endregion
+
+ #region[鐗╂枡娓呭崟鏂板淇敼鑾峰彇瀛愪欢Bom-T+鐣呮嵎閫氭ā寮廬
+ /// <summary>
+ /// 鐗╂枡娓呭崟鏂板淇敼鑾峰彇瀛愪欢Bom-T+鐣呮嵎閫氭ā寮�
+ /// </summary>
+ /// <param name="materiel_code">瀛愪欢缂栫爜</param>
+ /// <returns></returns>
+ [Route(template: "AddUpdateTBomDetailsBomData")]
+ [HttpGet]
+ public JsonResult AddUpdateTBomDetailsBomData(string materiel_code)
+ {
+ var token = HttpContext.Request.Headers["Token"].ToString();
+ User us = JwtTools.Denocode(token.ToString());
+ mes = ProductModelBLL.AddUpdateTBomDetailsBomData(materiel_code,us);
+ return Json(mes);
+ }
+ #endregion
+
+ #region[鐗╂枡娓呭崟鏂板淇敼鎻愪氦-T+鐣呮嵎閫氭ā寮廬
+ /// <summary>
+ /// 鐗╂枡娓呭崟鏂板淇敼鎻愪氦-T+鐣呮嵎閫氭ā寮�
+ /// </summary>
+ /// <param name="OperType">鎿嶄綔绫诲瀷:Add/Update</param>
+ /// <param name="bom">鎻愪氦鏁版嵁</param>
+ /// <returns></returns>
+ [Route(template: "TBomAddUpdate")]
+ [HttpPost]
+ public JsonResult TBomAddUpdate(string OperType, [FromBody] BomDate bom)
+ {
+ var token = HttpContext.Request.Headers["Token"].ToString();
+ //var token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyY29kZSI6Ijk5OTkiLCJ1c2VybmFtZSI6Iuezu-e7n-euoeeQhuWRmCIsInN0b3JnX2NvZGUiOiIiLCJzdG9yZ19uYW1lIjoiIiwiaXNfc3lzdGVtX2FkbWluIjoiWSIsInJvbGVfY29kZSI6IiIsInJvbGVfZGF0YXBlcm1pc3Npb25zIjoiIiwidXNlcnR5cGUiOiJQQyIsInJlZGlza2V5IjoiTmV3TUVTTG9naW5Vc2VySURQQzk5OTkiLCJtZXNTZXR0aW5nIjoie1wicm91dGVcIjp0cnVlLFwiaXNPcmRlclwiOnRydWUsXCJkZXZpY2VcIjp0cnVlLFwidGVjaFwiOnRydWUsXCJ3b3JrT3JkZXJcIjp0cnVlLFwiZXZlcnlcIjpmYWxzZSxcImxhc3RcIjpmYWxzZX0iLCJ0aW1lb3V0IjoiMjAyNC0wOC0xNFQxMDo0NjozNi42MTQyNjQ0KzA4OjAwIn0.9IdnyNRCWbMEXvxjuiFS6NhRqOtvp_lx5zKrZ8OPj0Y";
+ User us = JwtTools.Denocode(token.ToString());
+ mes = ProductModelBLL.TBomAddUpdate(OperType, bom, us);
+ return Json(mes);
+ }
+ #endregion
+
+ #region[鐗╂枡娓呭崟鍒犻櫎鎻愪氦-T+鐣呮嵎閫氭ā寮廬
+ /// <summary>
+ /// 鐗╂枡娓呭崟鍒犻櫎鎻愪氦-T+鐣呮嵎閫氭ā寮�
+ /// </summary>
+ /// <param name="bom">鎻愪氦鏁版嵁</param>
+ /// <returns></returns>
+ [Route(template: "TBomDelete")]
+ [HttpPost]
+ public JsonResult TBomDelete([FromBody] BomDate bom)
+ {
+ var token = HttpContext.Request.Headers["Token"].ToString();
+ User us = JwtTools.Denocode(token.ToString());
+ mes = ProductModelBLL.TBomDelete(bom, us);
+ return Json(mes);
+ }
+ #endregion
+
#region[宸ュ崟浜у搧淇℃伅涓嬫媺妗嗘煡璇
/// <summary>
diff --git a/VueWebCoreApi/Controllers/WorkOrderController.cs b/VueWebCoreApi/Controllers/WorkOrderController.cs
index add5868..56173f8 100644
--- a/VueWebCoreApi/Controllers/WorkOrderController.cs
+++ b/VueWebCoreApi/Controllers/WorkOrderController.cs
@@ -19,7 +19,7 @@
[ApiExplorerSettings(GroupName = "宸ュ崟绠$悊")]
[ApiController]
[Route("api/[controller]")]
- //[ChannelActionFilter]
+ [ChannelActionFilter]
public class WorkOrderController : Controller
{
//瀹氫箟鍏ㄥ眬淇℃伅杩斿洖鍙橀噺
diff --git a/VueWebCoreApi/DLL/BLL/GeneralBasicDataBLL.cs b/VueWebCoreApi/DLL/BLL/GeneralBasicDataBLL.cs
index b93506e..3213454 100644
--- a/VueWebCoreApi/DLL/BLL/GeneralBasicDataBLL.cs
+++ b/VueWebCoreApi/DLL/BLL/GeneralBasicDataBLL.cs
@@ -150,6 +150,13 @@
}
#endregion
+ #region[宸ュ簭璁惧鍩虹璧勬枡]
+ public static ToMessage StepEqpData()
+ {
+ return GeneralBasicDataDAL.StepEqpData();
+ }
+ #endregion
+
#region[缂洪櫡鍩虹璧勬枡]
public static ToMessage DefectPermissions()
{
diff --git a/VueWebCoreApi/DLL/BLL/ProductModelBLL.cs b/VueWebCoreApi/DLL/BLL/ProductModelBLL.cs
index d90377b..0f0e3ef 100644
--- a/VueWebCoreApi/DLL/BLL/ProductModelBLL.cs
+++ b/VueWebCoreApi/DLL/BLL/ProductModelBLL.cs
@@ -4,6 +4,7 @@
using System.Threading.Tasks;
using VueWebCoreApi.DLL.DAL;
using VueWebCoreApi.Models;
+using VueWebCoreApi.Models.Bom;
using VueWebCoreApi.Models.UnitMaterial;
using VueWebCoreApi.Tools;
@@ -107,6 +108,62 @@
#endregion
+ #region[鐗╂枡娓呭崟淇℃伅鍒楄〃]
+ public static ToMessage BomMainData(string parentpartcode, string parentpartname, string parentpartspec, string status, string version, string createuser, string operopendate,string operclosedate, int startNum, int endNum, string prop, string order)
+ {
+ return ProductModelDAL.BomMainData(parentpartcode, parentpartname, parentpartspec, version, createuser, operopendate, operclosedate, status, startNum, endNum, prop, order);
+ }
+ #endregion
+
+ #region[鐗╂枡娓呭崟鏂板淇敼鑾峰彇鐖朵欢淇℃伅-T+鐣呮嵎閫氭ā寮廬
+ public static ToMessage AddUpdateTBomParentData(User us)
+ {
+ return ProductModelDAL.AddUpdateTBomParentData(us);
+ }
+ #endregion
+
+ #region[鐗╂枡娓呭崟鏂板淇敼鏍规嵁鐖朵欢淇℃伅鐨勮閲忓崟浣嶇粍缂栫爜鏌ユ壘璁¢噺鍗曚綅缁勪俊鎭�-T+鐣呮嵎閫氭ā寮廬
+ public static ToMessage AddUpdateTBomUnitGroup(string idunitgroup)
+ {
+ return ProductModelDAL.AddUpdateTBomUnitGroup(idunitgroup);
+ }
+ #endregion
+
+ #region[鐗╂枡娓呭崟鏂板鏃惰幏鍙栨渶澶х増鏈彿]
+ public static ToMessage AddUpdateTBomMaxVsion(string parentpartcode)
+ {
+ return ProductModelDAL.AddUpdateTBomMaxVsion(parentpartcode);
+ }
+ #endregion
+
+ #region[鐗╂枡娓呭崟鏂板淇敼鑾峰彇瀛愪欢淇℃伅-T+鐣呮嵎閫氭ā寮廬
+ public static ToMessage AddUpdateTBomDetailsData(User us)
+ {
+ return ProductModelDAL.AddUpdateTBomDetailsData(us);
+ }
+ #endregion
+
+ #region[鐗╂枡娓呭崟鏂板淇敼鑾峰彇瀛愪欢Bom-T+鐣呮嵎閫氭ā寮廬
+ public static ToMessage AddUpdateTBomDetailsBomData(string materiel_code, User us)
+ {
+ return ProductModelDAL.AddUpdateTBomDetailsBomData(materiel_code,us);
+ }
+ #endregion
+
+ #region[鐗╂枡娓呭崟鏂板淇敼鎻愪氦-T+鐣呮嵎閫氭ā寮廬
+ public static ToMessage TBomAddUpdate(string operType, BomDate bom, User us)
+ {
+ return ProductModelDAL.TBomAddUpdate(operType,bom,us);
+ }
+ #endregion
+
+ #region[鐗╂枡娓呭崟鍒犻櫎鎻愪氦-T+鐣呮嵎閫氭ā寮廬
+ public static ToMessage TBomDelete(BomDate bom, User us)
+ {
+ return ProductModelDAL.TBomDelete(bom, us);
+ }
+ #endregion
+
#region[宸ュ崟浜у搧淇℃伅涓嬫媺妗嗘煡璇
public static ToMessage PartSelect()
diff --git a/VueWebCoreApi/DLL/DAL/BasicSettingDAL.cs b/VueWebCoreApi/DLL/DAL/BasicSettingDAL.cs
index f92dc56..4a4638e 100644
--- a/VueWebCoreApi/DLL/DAL/BasicSettingDAL.cs
+++ b/VueWebCoreApi/DLL/DAL/BasicSettingDAL.cs
@@ -3837,12 +3837,12 @@
if (parents[i].flwtype == "Z")
{
//閫氳繃浜у搧缂栫爜+宸ヨ壓璺嚎+宸ュ簭缂栫爜鏌ユ壘瀵瑰簲璁惧淇℃伅
- sql = @"select A.eqp_code,E.name as eqp_name,A.eqp_value,A.stand_value,A.cavity_qty,A.unprice
+ sql = @"select A.eqp_code,E.name as eqp_name,A.enable,A.eqp_value,A.stand_value,A.cavity_qty,A.unprice
from (
- select S.eqp_code,S.eqp_value,S.stand_value,S.cavity_qty,S.unprice from TPrteEqp_Stad S
+ select S.eqp_code,S.eqp_value,S.enable,S.stand_value,S.cavity_qty,S.unprice from TPrteEqp_Stad S
where S.materiel_code=@partcode and S.route_code=@routecode and S.step_code=@stepcode
union all
- select R.eqp_code,'0' as eqp_value,'0' as stand_value,'0' as cavity_qty,'0' as unprice from TMateriel_Route S
+ select R.eqp_code,'0' as eqp_value,'N' as enable,'0' as stand_value,'0' as cavity_qty,'0' as unprice from TMateriel_Route S
inner join TFlw_Rtdt T on S.route_code=T.rout_code
inner join TFlw_Rteqp R on T.step_code=R.step_code
where S.materiel_code=@partcode and S.route_code=@routecode and T.step_code=@stepcode and S.materiel_code+S.route_code+T.step_code+R.eqp_code
@@ -3859,12 +3859,12 @@
else
{
//閫氳繃浜у搧缂栫爜+宸ヨ壓璺嚎+宸ュ簭缂栫爜鏌ユ壘瀵瑰簲澶栧崗渚涘簲鍟嗕俊鎭�
- sql = @"select A.eqp_code,C.name as eqp_name,A.eqp_value,A.stand_value,A.cavity_qty,A.unprice
+ sql = @"select A.eqp_code,C.name as eqp_name,A.enable,A.eqp_value,A.stand_value,A.cavity_qty,A.unprice
from (
- select S.eqp_code,S.eqp_value,S.stand_value,S.cavity_qty,S.unprice from TPrteEqp_Stad S
+ select S.eqp_code,S.eqp_value,S.enable,S.stand_value,S.cavity_qty,S.unprice from TPrteEqp_Stad S
where S.materiel_code=@partcode and S.route_code=@routecode and S.step_code=@stepcode
union all
- select R.eqp_code,'0' as eqp_value,'0' as stand_value,'0' as cavity_qty,'0' as unprice from TMateriel_Route S
+ select R.eqp_code,'0' as eqp_value,'N' as enable,'0' as stand_value,'0' as cavity_qty,'0' as unprice from TMateriel_Route S
inner join TFlw_Rtdt T on S.route_code=T.rout_code
inner join TFlw_Rteqp R on T.step_code=R.step_code
where S.materiel_code=@partcode and S.route_code=@routecode and T.step_code=@stepcode and S.materiel_code+S.route_code+T.step_code+R.eqp_code
@@ -4037,7 +4037,7 @@
var data0 = DapperHelper.selectdata(sql, dynamicParams);
if (data0.Rows.Count > 0)
{
- sql = @"update TPrteEqp_Stad set eqp_value=@eqp_value,stand_value=@stand_value,cavity_qty=@cavity_qty,unprice=@unprice,lm_user=@username,lm_date=@userdate
+ sql = @"update TPrteEqp_Stad set enable=@enable, eqp_value=@eqp_value,stand_value=@stand_value,cavity_qty=@cavity_qty,unprice=@unprice,lm_user=@username,lm_date=@userdate
where materiel_code=@partcode and route_code=@routecode and step_code=@stepcode and eqp_code=@eqpcode";
list.Add(new
{
@@ -4048,6 +4048,7 @@
routecode = json[0].defaultroute_code,
stepcode = json[0].children[i].code,
eqpcode = json[0].children[i].children[j].eqp_code,
+ enable= json[0].children[i].children[j].enable,
eqp_value = json[0].children[i].children[j].eqp_value,
stand_value = json[0].children[i].children[j].stand_value,
cavity_qty = json[0].children[i].children[j].cavity_qty,
@@ -4059,8 +4060,8 @@
}
else
{
- sql = @"insert into TPrteEqp_Stad(materiel_code,route_code,step_code,eqp_code,stand_value,eqp_value,cavity_qty,unprice,lm_user,lm_date)
- values(@materiel_code,@route_code,@step_code,@eqp_code,@stand_value,@eqp_value,@cavity_qty,@unprice,@lm_user,@lm_date)";
+ sql = @"insert into TPrteEqp_Stad(materiel_code,route_code,step_code,eqp_code,enable,stand_value,eqp_value,cavity_qty,unprice,lm_user,lm_date)
+ values(@materiel_code,@route_code,@step_code,@eqp_code,@enable,@stand_value,@eqp_value,@cavity_qty,@unprice,@lm_user,@lm_date)";
list.Add(new
{
str = sql,
@@ -4070,6 +4071,7 @@
route_code = json[0].defaultroute_code,
step_code = json[0].children[i].code,
eqp_code = json[0].children[i].children[j].eqp_code,
+ enable = json[0].children[i].children[j].enable,
stand_value = json[0].children[i].children[j].eqp_value,
eqp_value = json[0].children[i].children[j].stand_value,
cavity_qty = json[0].children[i].children[j].cavity_qty,
@@ -4137,7 +4139,7 @@
var data0 = DapperHelper.selectdata(sql, dynamicParams);
if (data0.Rows.Count > 0)
{
- sql = @"update TPrteEqp_Stad set eqp_value=@eqp_value,stand_value=@stand_value,cavity_qty=@cavity_qty,unprice=@unprice,lm_user=@username,lm_date=@userdate
+ sql = @"update TPrteEqp_Stad set enable=@enable,eqp_value=@eqp_value,stand_value=@stand_value,cavity_qty=@cavity_qty,unprice=@unprice,lm_user=@username,lm_date=@userdate
where materiel_code=@partcode and route_code=@routecode and step_code=@stepcode and eqp_code=@eqpcode";
list.Add(new
{
@@ -4148,6 +4150,7 @@
routecode = json[0].defaultroute_code,
stepcode = json[0].children[i].code,
eqpcode = json[0].children[i].children[j].eqp_code,
+ enable= json[0].children[i].children[j].enable,
eqp_value = json[0].children[i].children[j].eqp_value,
stand_value = json[0].children[i].children[j].stand_value,
cavity_qty = json[0].children[i].children[j].cavity_qty,
@@ -4159,8 +4162,8 @@
}
else
{
- sql = @"insert into TPrteEqp_Stad(materiel_code,route_code,step_code,eqp_code,stand_value,eqp_value,cavity_qty,unprice,lm_user,lm_date)
- values(@materiel_code,@route_code,@step_code,@eqp_code,@stand_value,@eqp_value,@cavity_qty,@unprice,@lm_user,@lm_date)";
+ sql = @"insert into TPrteEqp_Stad(materiel_code,route_code,step_code,eqp_code,enable,stand_value,eqp_value,cavity_qty,unprice,lm_user,lm_date)
+ values(@materiel_code,@route_code,@step_code,@eqp_code,@enable,@stand_value,@eqp_value,@cavity_qty,@unprice,@lm_user,@lm_date)";
list.Add(new
{
str = sql,
@@ -4170,6 +4173,7 @@
route_code = json[0].defaultroute_code,
step_code = json[0].children[i].code,
eqp_code = json[0].children[i].children[j].eqp_code,
+ enable= json[0].children[i].children[j].enable,
stand_value = json[0].children[i].children[j].eqp_value,
eqp_value = json[0].children[i].children[j].stand_value,
cavity_qty = json[0].children[i].children[j].cavity_qty,
diff --git a/VueWebCoreApi/DLL/DAL/GeneralBasicDataDAL.cs b/VueWebCoreApi/DLL/DAL/GeneralBasicDataDAL.cs
index 07182b6..726b5fc 100644
--- a/VueWebCoreApi/DLL/DAL/GeneralBasicDataDAL.cs
+++ b/VueWebCoreApi/DLL/DAL/GeneralBasicDataDAL.cs
@@ -7,6 +7,7 @@
using System.Threading.Tasks;
using VueWebCoreApi.Models;
using VueWebCoreApi.Models.UnitMaterial;
+using VueWebCoreApi.Models.WorkData;
using VueWebCoreApi.Tools;
namespace VueWebCoreApi.DLL.DAL
@@ -21,7 +22,7 @@
public static SqlParameter[] parameters; //瀹氫箟鍏ㄥ眬SqlParameter鍙傛暟鏁扮粍
public static dynamic CompanyCode = AppSetting.GetAppSetting("CompanyCode");
public static dynamic CompanyName = AppSetting.GetAppSetting("CompanyName");
-
+
#region[缁勭粐鏋舵瀯绫诲瀷璧勬枡]
public static ToMessage TOrganTypeDate()
@@ -511,7 +512,7 @@
var data0 = DapperHelper.selectdata(sql, dynamicParams);
for (int j = 0; j < data0.Rows.Count; j++)
{
- LocationData locat = new LocationData();
+ LocationData locat = new LocationData();
locat.value = data0.Rows[j]["code"].ToString();
locat.text = data0.Rows[j]["name"].ToString();
warhouse.children.Add(locat);
@@ -571,6 +572,68 @@
mes.code = "200";
mes.message = "鏌ヨ鎴愬姛!";
mes.data = data;
+ }
+ catch (Exception e)
+ {
+ mes.code = "300";
+ mes.count = 0;
+ mes.message = e.Message;
+ mes.data = null;
+ }
+ return mes;
+ }
+ #endregion
+
+ #region[宸ュ簭璁惧鍩虹璧勬枡]
+ public static ToMessage StepEqpData()
+ {
+ var sql = "";
+ List<object> list = new List<object>();
+ var dynamicParams = new DynamicParameters();
+ try
+ {
+ //鏌ユ壘宸ュ簭淇℃伅
+ sql = @"select '' as id,'' as wo_code,'' as seq,S.stepcode as step_code,T.stepname,T.flwtype,'0' as unprice,'0' as produceq_qty,
+ '0' as good_qty,'0' as ng_qty,'0' as laborbad_qty,'0' as materielbad_qty,'0' as delive_qty,'' as isbott,'' as isend
+ from TStep S
+ left join TStep T on S.stepcode=T.stepcode";
+ var parents = DapperHelper.selectdatalist<WorkRouteStepEqp>(sql);
+ //鑾峰彇宸ュ簭瀵瑰簲璁惧淇℃伅
+ for (int i = 0; i < parents.Count; i++)
+ {
+ if (parents[i].flwtype == "Z")
+ {
+ //閫氳繃宸ヨ壓璺嚎宸ュ簭琛↖D鏌ユ壘瀵瑰簲璁惧淇℃伅
+ sql = @"select R.eqp_code,E.name as eqp_name,'N' as enable,'0' as unprice,
+ '0' as produceq_qty, '0' as good_qty,'0' as ng_qty,'0' as laborbad_qty,'0' as materielbad_qty
+ from TFlw_Rteqp R
+ left join TEqpInfo E on R.eqp_code=E.code
+ where R.step_code=@step_code and R.style=@style";
+ dynamicParams.Add("@step_code", parents[i].step_code);
+ dynamicParams.Add("@style", "E"); //璁惧
+ var children = DapperHelper.select<WorkRouteStepEqpSub>(sql, dynamicParams);
+ parents[i].children = children.ToList();
+ }
+ else
+ {
+ //閫氳繃宸ヨ壓璺嚎宸ュ簭琛↖D鏌ユ壘瀵瑰簲澶栧崗渚涘簲鍟嗕俊鎭�
+ sql = @"select R.eqp_code,E.name as eqp_name,'N' as enable,'0' as unprice,
+ '0' as produceq_qty, '0' as good_qty,'0' as ng_qty,'0' as laborbad_qty,'0' as materielbad_qty
+ from TFlw_Rteqp R
+ inner join TCustomer E on R.eqp_code=E.code
+ where R.step_code=@step_code and R.style=@style";
+ dynamicParams.Add("@step_code", parents[i].step_code);
+ dynamicParams.Add("@style", parents[i].flwtype);
+ var children = DapperHelper.select<WorkRouteStepEqpSub>(sql, dynamicParams);
+ parents[i].children = children.ToList();
+ }
+ }
+
+ var data = DapperHelper.selectdata(sql, dynamicParams);
+ mes.code = "200";
+ mes.count = parents.Count;
+ mes.data = parents;
+ mes.message = "鏌ヨ鎴愬姛!";
}
catch (Exception e)
{
@@ -689,7 +752,7 @@
var dynamicParams = new DynamicParameters();
try
{
- sql = @"WITH RecursiveCTE AS (
+ sql = @"WITH RecursiveCTE AS (
SELECT code, name, idparent
FROM TMateriel_Class
WHERE code in(select distinct idinventoryclass from TMateriel_Info where status='0')
diff --git a/VueWebCoreApi/DLL/DAL/ProductModelDAL.cs b/VueWebCoreApi/DLL/DAL/ProductModelDAL.cs
index 368e313..aff4bdf 100644
--- a/VueWebCoreApi/DLL/DAL/ProductModelDAL.cs
+++ b/VueWebCoreApi/DLL/DAL/ProductModelDAL.cs
@@ -8,6 +8,7 @@
using System.Linq;
using System.Threading.Tasks;
using VueWebCoreApi.Models;
+using VueWebCoreApi.Models.Bom;
using VueWebCoreApi.Models.UnitMaterial;
using VueWebCoreApi.Tools;
@@ -21,6 +22,7 @@
public static string strProcName = ""; //瀹氫箟鍏ㄥ眬sql鍙橀噺
public static List<SqlParameter> listStr = new List<SqlParameter>(); //瀹氫箟鍏ㄥ眬鍙傛暟闆嗗悎
public static SqlParameter[] parameters; //瀹氫箟鍏ㄥ眬SqlParameter鍙傛暟鏁扮粍
+ public static string sqlServerConnectString = AppSetting.GetAppSetting("DBServer");
#region[璁¢噺鍗曚綅缁勪俊鎭痌
@@ -228,7 +230,7 @@
if (aa)
{
//鍐欏叆鎿嶄綔璁板綍琛�
- LogHelper.DbOperateLog(us.usercode, "鏂板", "鏂板浜嗚閲忓崟浣嶏細"+ tunittype == "S" ? ((List<string>)mes.data)[0].ToString() : string.Join(",", listjson[0].children.Select(m => m.unitcode)), us.usertype);
+ LogHelper.DbOperateLog(us.usercode, "鏂板", "鏂板浜嗚閲忓崟浣嶏細" + tunittype == "S" ? ((List<string>)mes.data)[0].ToString() : string.Join(",", listjson[0].children.Select(m => m.unitcode)), us.usertype);
mes.code = "200";
mes.count = 0;
mes.message = "鏂板鎿嶄綔鎴愬姛!";
@@ -475,7 +477,7 @@
if (aa)
{
//鍐欏叆鎿嶄綔璁板綍琛�
- LogHelper.DbOperateLog(us.usercode, "鏂板", "鏂板浜嗚閲忓崟浣嶏細" + tunittype == "S" ? tunitcode : tunittype == "M"&& (tunitgroupcode != "" || tunitgroupcode != null) && (tunitcode == "" || tunitcode == null)? tunitgroupcode: tunitgroupcode+"-->"+tunitcode, us.usertype);
+ LogHelper.DbOperateLog(us.usercode, "鏂板", "鏂板浜嗚閲忓崟浣嶏細" + tunittype == "S" ? tunitcode : tunittype == "M" && (tunitgroupcode != "" || tunitgroupcode != null) && (tunitcode == "" || tunitcode == null) ? tunitgroupcode : tunitgroupcode + "-->" + tunitcode, us.usertype);
mes.code = "200";
mes.count = 0;
mes.message = "鍒犻櫎鎿嶄綔鎴愬姛!";
@@ -594,7 +596,7 @@
if (aa)
{
//鍐欏叆鎿嶄綔璁板綍琛�
- LogHelper.DbOperateLog(us.usercode, "鏂板", "鏂板浜嗗瓨璐у垎绫�:"+ inventoryclasscode, us.usertype);
+ LogHelper.DbOperateLog(us.usercode, "鏂板", "鏂板浜嗗瓨璐у垎绫�:" + inventoryclasscode, us.usertype);
mes.code = "200";
mes.count = 0;
mes.message = "鏂板鎿嶄綔鎴愬姛!";
@@ -642,7 +644,7 @@
if (aa)
{
//鍐欏叆鎿嶄綔璁板綍琛�
- LogHelper.DbOperateLog(us.usercode, "淇敼", "淇敼浜嗗瓨璐у垎绫�:"+ inventoryclasscode, us.usertype);
+ LogHelper.DbOperateLog(us.usercode, "淇敼", "淇敼浜嗗瓨璐у垎绫�:" + inventoryclasscode, us.usertype);
mes.code = "200";
mes.count = 0;
mes.message = "淇敼鎿嶄綔鎴愬姛!";
@@ -703,7 +705,7 @@
if (aa)
{
//鍐欏叆鎿嶄綔璁板綍琛�
- LogHelper.DbOperateLog(us.usercode, "鍒犻櫎", "鍒犻櫎浜嗗瓨璐у垎绫�"+classcode, us.usertype);
+ LogHelper.DbOperateLog(us.usercode, "鍒犻櫎", "鍒犻櫎浜嗗瓨璐у垎绫�" + classcode, us.usertype);
mes.code = "200";
mes.count = 0;
mes.message = "鍒犻櫎鎿嶄綔鎴愬姛!";
@@ -740,42 +742,58 @@
if (inventoryclasscode != "" && inventoryclasscode != null)
{
string[] classcode = Array.ConvertAll<string, string>(inventoryclasscode.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries), s => s.ToString()); //string鍒嗗壊杞瑂tring[]
- search += "and M.idinventoryclass in @classcode ";
+ search += "and AA.idinventoryclass in @classcode ";
dynamicParams.Add("@classcode", classcode);
}
if (partcode != "" && partcode != null)
{
- search += "and M.partcode like '%'+@partcode+'%' ";
+ search += "and AA.partcode like '%'+@partcode+'%' ";
dynamicParams.Add("@partcode", partcode);
}
if (partname != "" && partname != null)
{
- search += "and M.partname like '%'+@partname+'%' ";
+ search += "and AA.partname like '%'+@partname+'%' ";
dynamicParams.Add("@partname", partname);
}
if (partspec != "" && partspec != null)
{
- search += "and M.partspec like '%'+@partspec+'%' ";
+ search += "and AA.partspec like '%'+@partspec+'%' ";
dynamicParams.Add("@partspec", partspec);
}
- sql = @"select M.partcode,M.partname,M.partspec,M.idunit as idunitcode,T.name as idunitname,M.idunitgroup as idunitgroupcode,G.name as idunitgroupname,
- M.isSingleUnit,M.idSubUnitByReport as idSubUnitByReportcode,R.name as idSubUnitByReportname,M.idUnitByStock as idUnitByStockcode,K.name as idUnitByStockname,
- M.idUnitByPurchase as idUnitByPurchasecode,P.name as idUnitByPurchasename,M.idUnitBySale as idUnitBySalecode,S.name as idUnitBySalename,
- M.idunitbymanufacture as idunitbymanufacturecode,F.name as idunitbymanufacturename,M.idinventoryclass as idinventoryclasscode,C.name as idinventoryclassname,
- M.isPurchase,M.isSale,M.isMadeSelf,M.isMaterial,M.isMadeRequest,M.idwarehouse as idwarehousecode,H.name as idwarehousename,M.lowQuantity,M.topQuantity,M.safeQuantity,
- M.status,U.username as lm_user,M.lm_date,M.data_sources,M.is_retdproc,M.default_route
- from TMateriel_Info M
- left join TUnit T on M.idunit=T.code
- left join TUnit R on M.idSubUnitByReport=R.code
- left join TUnit K on M.idUnitByStock=K.code
- left join TUnit P on M.idUnitByPurchase=P.code
- left join TUnit S on M.idUnitBySale=S.code
- left join TUnit F on M.idunitbymanufacture=F.code
- left join TMateriel_Class C on M.idinventoryclass=C.code
- left join TUnitGroup G on M.idunitgroup=G.code
- left join TSecStck H on M.idwarehouse=H.code
- left join TUser U on M.lm_user=U.usercode
- where 1=1 " + search;
+ sql = @"select * from (
+ select
+ M.partcode,M.partname,M.partspec,M.idinventoryclass,M.idunit as idunitcode,T.name as idunitname,M.idunitgroup as idunitgroupcode,G.name as idunitgroupname,
+ M.isSingleUnit,M.idSubUnitByReport as idSubUnitByReportcode,R.name as idSubUnitByReportname,M.idUnitByStock as idUnitByStockcode,K.name as idUnitByStockname,
+ M.idUnitByPurchase as idUnitByPurchasecode,P.name as idUnitByPurchasename,M.idUnitBySale as idUnitBySalecode,S.name as idUnitBySalename,
+ M.idunitbymanufacture as idunitbymanufacturecode,F.name as idunitbymanufacturename,M.idinventoryclass as idinventoryclasscode,C.name as idinventoryclassname,
+ M.isPurchase,M.isSale,M.isMadeSelf,M.isMaterial,M.isMadeRequest,M.idwarehouse as idwarehousecode,H.name as idwarehousename,M.lowQuantity,M.topQuantity,M.safeQuantity,
+ M.status,U.username as lm_user,M.lm_date,M.data_sources,M.is_retdproc,M.default_route
+ from TMateriel_Info M
+ left join TUnit T on M.idunit=T.code
+ left join TUnit R on M.idSubUnitByReport=R.code
+ left join TUnit K on M.idUnitByStock=K.code
+ left join TUnit P on M.idUnitByPurchase=P.code
+ left join TUnit S on M.idUnitBySale=S.code
+ left join TUnit F on M.idunitbymanufacture=F.code
+ left join TMateriel_Class C on M.idinventoryclass=C.code
+ left join TUnitGroup G on M.idunitgroup=G.code
+ left join TSecStck H on M.idwarehouse=H.code
+ left join TUser U on M.lm_user=U.usercode
+ where (M.isSingleUnit = '1' and (T.isSingleUnit = '1' OR T.isSingleUnit IS NULL))
+ or (M.isSingleUnit = '0' AND(
+ (T.isSingleUnit = '0' AND M.idunitgroup = T.idunitgroup)
+ OR
+ (R.isSingleUnit = '0' AND M.idunitgroup = R.idunitgroup)
+ OR
+ (K.isSingleUnit = '0' AND M.idunitgroup = K.idunitgroup)
+ OR
+ (P.isSingleUnit = '0' AND M.idunitgroup = P.idunitgroup)
+ OR
+ (S.isSingleUnit = '0' AND M.idunitgroup = S.idunitgroup)
+ OR
+ (F.isSingleUnit = '0' AND M.idunitgroup = F.idunitgroup)
+ ))
+ ) as AA where 1=1" + search;
// --------------鏌ヨ鎸囧畾鏁版嵁--------------
var total = 0; //鎬绘潯鏁�
data = DapperHelper.GetPageList<object>(sql, dynamicParams, prop, order, startNum, endNum, out total);
@@ -851,25 +869,25 @@
str = sql,
parm = new
{
- partcode=partcode,
- partname=partname,
- partspec=partspec,
- idunit=unittypcode=="1"?unitcode:unitsubcode,
- idunitgroup = unittypcode == "0"?"1":"0",
- isSingleUnit= unittypcode,
- idSubUnitByReport=idSubUnitByReport,
- idUnitByStock= idUnitByStock,
- idUnitByPurchase= idUnitByPurchase,
- idUnitBySale= idUnitBySale,
- idunitbymanufacture= idunitbymanufacture,
- idinventoryclass= inventoryclasscode,
- isPurchase= isPurchase,
- isSale= isSale,
- isMadeSelf= isMadeSelf,
- isMaterial= isMaterial,
- isMadeRequest= isMadeRequest,
- idwarehouse= idwarehouse,
- status= status,
+ partcode = partcode,
+ partname = partname,
+ partspec = partspec,
+ idunit = unittypcode == "1" ? unitcode : unitsubcode,
+ idunitgroup = unittypcode == "0" ? "1" : "0",
+ isSingleUnit = unittypcode,
+ idSubUnitByReport = idSubUnitByReport,
+ idUnitByStock = idUnitByStock,
+ idUnitByPurchase = idUnitByPurchase,
+ idUnitBySale = idUnitBySale,
+ idunitbymanufacture = idunitbymanufacture,
+ idinventoryclass = inventoryclasscode,
+ isPurchase = isPurchase,
+ isSale = isSale,
+ isMadeSelf = isMadeSelf,
+ isMaterial = isMaterial,
+ isMadeRequest = isMadeRequest,
+ idwarehouse = idwarehouse,
+ status = status,
lm_user = us.usercode,
lm_date = DateTime.Now.ToString(),
data_sources = data_sources
@@ -879,7 +897,7 @@
if (aa)
{
//鍐欏叆鎿嶄綔璁板綍琛�
- LogHelper.DbOperateLog(us.usercode, "鏂板", "鏂板浜嗗瓨璐ф。妗�:"+ partcode, us.usertype);
+ LogHelper.DbOperateLog(us.usercode, "鏂板", "鏂板浜嗗瓨璐ф。妗�:" + partcode, us.usertype);
mes.code = "200";
mes.count = 0;
mes.message = "鏂板鎿嶄綔鎴愬姛!";
@@ -957,7 +975,7 @@
if (aa)
{
//鍐欏叆鎿嶄綔璁板綍琛�
- LogHelper.DbOperateLog(us.usercode, "淇敼", "淇敼浜嗗瓨璐ф。妗�:"+ partcode, us.usertype);
+ LogHelper.DbOperateLog(us.usercode, "淇敼", "淇敼浜嗗瓨璐ф。妗�:" + partcode, us.usertype);
mes.code = "200";
mes.count = 0;
mes.message = "淇敼鎿嶄綔鎴愬姛!";
@@ -1023,14 +1041,14 @@
parm = new
{
partcode = partcode,
- data_sources= data_sources
+ data_sources = data_sources
}
});
bool aa = DapperHelper.DoTransaction(list);
if (aa)
{
//鍐欏叆鎿嶄綔璁板綍琛�
- LogHelper.DbOperateLog(us.usercode, "鍒犻櫎", "鍒犻櫎浜嗗瓨璐ф。妗�:"+partcode, us.usertype);
+ LogHelper.DbOperateLog(us.usercode, "鍒犻櫎", "鍒犻櫎浜嗗瓨璐ф。妗�:" + partcode, us.usertype);
mes.code = "200";
mes.count = 0;
mes.message = "鍒犻櫎鎿嶄綔鎴愬姛!";
@@ -1056,7 +1074,7 @@
#endregion
#region[瀛樿揣妗f鍏宠仈宸ヨ壓(宸ヨ壓璺嚎鎴栧伐搴�)鏌ヨ]
- public static ToMessage TMaterielFileAssociationRoute(string partcode,User us)
+ public static ToMessage TMaterielFileAssociationRoute(string partcode, User us)
{
string sql = "";
var dynamicParams = new DynamicParameters();
@@ -1176,7 +1194,7 @@
//string鍒嗗壊杞瑂tring[]
string[] routcode = Array.ConvertAll<string, string>(string.Join(",", json[0].children.Select(s => s.code)).Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries), s => s.ToString());
sql = @"delete TPrteStep_Price where materiel_code=@partcode and route_code not in @routecode";
- list.Add(new { str = sql, parm = new { partcode = json[0].partcode, routecode= routcode } });
+ list.Add(new { str = sql, parm = new { partcode = json[0].partcode, routecode = routcode } });
}
}
else //宸ュ簭鐗�
@@ -1233,7 +1251,7 @@
if (aa)
{
//鍐欏叆鎿嶄綔璁板綍琛�
- LogHelper.DbOperateLog(us.usercode, "瀛樿揣鍏宠仈宸ヨ壓", "浜у搧锛�"+json[0].partcode+"鍏宠仈浜嗗伐鑹�:" + string.Join(",", json[0].children.Select(s => s.code)), us.usertype);
+ LogHelper.DbOperateLog(us.usercode, "瀛樿揣鍏宠仈宸ヨ壓", "浜у搧锛�" + json[0].partcode + "鍏宠仈浜嗗伐鑹�:" + string.Join(",", json[0].children.Select(s => s.code)), us.usertype);
mes.code = "200";
mes.count = 0;
mes.message = "鎿嶄綔鎴愬姛!";
@@ -1259,6 +1277,581 @@
#endregion
+ #region[鐗╂枡娓呭崟淇℃伅鍒楄〃]
+ public static ToMessage BomMainData(string parentpartcode, string parentpartname, string parentpartspec, string version, string createuser, string operopendate, string operclosedate, string status, int startNum, int endNum, string prop, string order)
+ {
+ var dynamicParams = new DynamicParameters();
+ List<BomDate> parents = new List<BomDate>();
+ string search = "", sql = "";
+ try
+ {
+ if (parentpartcode != "" && parentpartcode != null)
+ {
+ search += "and AA.materiel_code like '%'+@parentpartcode+'%' ";
+ dynamicParams.Add("@parentpartcode", parentpartcode);
+ }
+ if (parentpartname != "" && parentpartname != null)
+ {
+ search += "and AA.materiel_name like '%'+@parentpartname+'%' ";
+ dynamicParams.Add("@parentpartname", parentpartname);
+ }
+ if (parentpartspec != "" && parentpartspec != null)
+ {
+ search += "and AA.materiel_spec like '%'+@parentpartspec+'%' ";
+ dynamicParams.Add("@parentpartspec", parentpartspec);
+ }
+ if (version != "" && version != null)
+ {
+ search += "and AA.version like '%'+@version+'%' ";
+ dynamicParams.Add("@version", version);
+ }
+ if (createuser != "" && createuser != null)
+ {
+ search += "and AA.lm_user like '%'+@createuser+'%' ";
+ dynamicParams.Add("@createuser", createuser);
+ }
+ if (operopendate != "" && operopendate != null)
+ {
+ search += "and AA.lm_date between @operopendate and @operclosedate ";
+ dynamicParams.Add("@operopendate", operopendate + " 00:00:00");
+ dynamicParams.Add("@operclosedate", operclosedate + " 23:59:59");
+ }
+ var total = 0; //鎬绘潯鏁�
+ //鏌ヨBom涓昏〃淇℃伅
+ sql = @"select * from(
+ select B.id,B.materiel_code,M.partname as materiel_name,M.partspec as materiel_spec,
+ M.idinventoryclass as materiel_typecode,C.name as materiel_typename,M.idunit as unitcode,T.name as unitname,
+ B.quantity,B.status,B.startdate,B.version,B.isdefaultbom,B.bomdepth,U.username as lm_user,B.lm_date
+ from TBom_Main B
+ left join TMateriel_Info M on B.materiel_code=M.partcode
+ left join TUnit T on M.idunit=T.code
+ left join TMateriel_Class C on M.idinventoryclass=C.code
+ left join TUser U on B.lm_user=U.usercode
+ where (M.isSingleUnit = '1' and (T.isSingleUnit = '1' OR T.isSingleUnit IS NULL))
+ or (M.isSingleUnit = '0' AND(
+ (T.isSingleUnit = '0' AND M.idunitgroup = T.idunitgroup)
+ ))
+ ) as AA " + search;
+ parents = DapperHelper.GetPageListData<BomDate>(sql, dynamicParams, prop, order, startNum, endNum, out total);
+ for (int i = 0; i < parents.Count; i++)
+ {
+ //閫氳繃Bom涓昏〃id鏌ユ壘瀛愪欢淇℃伅
+ sql = @"select * from(
+ select S.id,S.m_id,S.seq,S.materiel_code,M.partname as materiel_name,M.partspec as materiel_spec,
+ M.idunit as unitcode,T.name as unitname,S.base_quantity,S.loss_quantity,S.total_quantity,S.idchildbom
+ from TBom_Deta S
+ left join TMateriel_Info M on S.materiel_code=M.partcode
+ left join TUnit T on M.idunit=T.code
+ where (M.isSingleUnit = '1' and (T.isSingleUnit = '1' OR T.isSingleUnit IS NULL))
+ or (M.isSingleUnit = '0' AND(
+ (T.isSingleUnit = '0' AND M.idunitgroup = T.idunitgroup)
+ ))
+ ) as AA where AA.m_id=@m_id";
+ dynamicParams.Add("@m_id", parents[i].id);
+ var children = DapperHelper.select<BomDateSub>(sql, dynamicParams);
+ parents[i].children = children.ToList();
+ }
+ mes.code = "200";
+ mes.message = "鏌ヨ鎴愬姛!";
+ mes.data = parents;
+ }
+ catch (Exception e)
+ {
+ mes.code = "300";
+ mes.count = 0;
+ mes.message = e.Message;
+ mes.data = null;
+ }
+ return mes;
+ }
+ #endregion
+
+ #region[鐗╂枡娓呭崟鏂板淇敼鑾峰彇鐖朵欢淇℃伅-T+鐣呮嵎閫氭ā寮廬
+ public static ToMessage AddUpdateTBomParentData(User us)
+ {
+ string sql = "";
+ var dynamicParams = new DynamicParameters();
+ try
+ {
+ //鏍规嵁瀛樿揣淇℃伅,鏌ユ壘鑷埗灞炴�ф垨濮斿灞炴�х墿鏂�
+ sql = @"select * from (
+ select M.partcode,M.partname,M.partspec,M.idunit as unitcode,U.name as unitname,M.isMadeSelf,M.isMadeRequest,
+ (case when M.idunitgroup='0' then NUll else M.idunitgroup end) as idunitgroup
+ from TMateriel_Info M
+ left join TUnit U on M.idunitgroup=U.idunitgroup and M.idunit=U.code and M.IsSingleUnit=U.IsSingleUnit
+ where M.isSingleUnit='0' and U.IsMainUnit='1' and M.Status='0'
+ ) as AA where AA.isMadeSelf='1' or AA.isMadeRequest='1'
+ union all
+ select * from (
+ select M.partcode,M.partname,M.partspec,M.idunit as unitcode,U.name as unitname,M.isMadeSelf,M.isMadeRequest,
+ (case when M.idunitgroup='0' then NUll else M.idunitgroup end) as idunitgroup
+ from TMateriel_Info M
+ inner join TUnit U on M.idunit=U.code and M.IsSingleUnit=U.IsSingleUnit
+ where M.IsSingleUnit='1' and U.IsMainUnit='0' and M.Status='0'
+ ) as AA where AA.isMadeSelf='1' or AA.isMadeRequest='1'";
+ var data = DapperHelper.selecttable(sql);
+ mes.code = "200";
+ mes.message = "鏌ヨ鎴愬姛!";
+ mes.data = data;
+ }
+ catch (Exception e)
+ {
+ mes.code = "300";
+ mes.count = 0;
+ mes.message = e.Message;
+ mes.data = null;
+ }
+ return mes;
+ }
+ #endregion
+
+ #region[鐗╂枡娓呭崟鏂板淇敼鏍规嵁鐖朵欢淇℃伅鐨勮閲忓崟浣嶇粍缂栫爜鏌ユ壘璁¢噺鍗曚綅缁勪俊鎭�-T+鐣呮嵎閫氭ā寮廬
+ public static ToMessage AddUpdateTBomUnitGroup(string idunitgroup)
+ {
+ var dynamicParams = new DynamicParameters();
+ string sql = "";
+ try
+ {
+ //鑾峰彇璁¢噺鍗曚綅缁勪俊鎭�
+ sql = @"select code as unitcode,name as unitname
+ from TUnit where idunitgroup=@idunitgroup";
+ dynamicParams.Add("@idunitgroup", idunitgroup);
+ var data = DapperHelper.selectdata(sql, dynamicParams);
+ mes.code = "200";
+ mes.message = "鏌ヨ鎴愬姛!";
+ mes.data = data;
+ }
+ catch (Exception e)
+ {
+ mes.code = "300";
+ mes.count = 0;
+ mes.message = e.Message;
+ mes.data = null;
+ }
+ return mes;
+ }
+ #endregion
+
+ #region[鐗╂枡娓呭崟鏂板鏃惰幏鍙栨渶澶х増鏈彿]
+ public static ToMessage AddUpdateTBomMaxVsion(string parentpartcode)
+ {
+ string sql = "";
+ var dynamicParams = new DynamicParameters();
+ try
+ {
+ sql = @"select isnull(max(substring(version,charindex('V',version)+1,len(version)-charindex('V',version))),0)+1 as version
+ from TBom_Main where materiel_code=@parentpartcode";
+ dynamicParams.Add("@parentpartcode", parentpartcode);
+ var data = DapperHelper.selectdata(sql, dynamicParams);
+ if (data.Rows.Count > 0)
+ {
+ mes.code = "200";
+ mes.message = "鑾峰彇鐗堟湰鍙锋垚鍔�!";
+ mes.data = "V" + data.Rows[0]["version"].ToString();
+ }
+ else
+ {
+ mes.code = "300";
+ mes.message = "鑾峰彇鐗堟湰鍙峰け璐�!";
+ mes.data = null;
+ }
+
+ }
+ catch (Exception e)
+ {
+ mes.code = "300";
+ mes.count = 0;
+ mes.message = e.Message;
+ mes.data = null;
+ }
+ return mes;
+ }
+ #endregion
+
+ #region[鐗╂枡娓呭崟鏂板淇敼鑾峰彇瀛愪欢淇℃伅-T+鐣呮嵎閫氭ā寮廬
+ public static ToMessage AddUpdateTBomDetailsData(User us)
+ {
+ string sql = "";
+ var dynamicParams = new DynamicParameters();
+ try
+ {
+ //鏍规嵁瀛樿揣淇℃伅,鏌ユ壘鐢熶骇鑰楃敤鐨勭墿鏂�
+ sql = @"select * from (
+ select M.partcode,M.partname,M.partspec,M.idunit as unitcode,U.name as unitname,M.IsMaterial,
+ (case when M.idunitgroup='0' then NUll else M.idunitgroup end) as idunitgroup
+ from TMateriel_Info M
+ left join TUnit U on M.idunitgroup=U.idunitgroup and M.idunit=U.code and M.IsSingleUnit=U.IsSingleUnit
+ where M.isSingleUnit='0' and U.IsMainUnit='1' and M.Status='0'
+ ) as AA where AA.IsMaterial='1'
+ union all
+ select * from (
+ select M.partcode,M.partname,M.partspec,M.idunit as unitcode,U.name as unitname,M.IsMaterial,
+ (case when M.idunitgroup='0' then NUll else M.idunitgroup end) as idunitgroup
+ from TMateriel_Info M
+ inner join TUnit U on M.idunit=U.code and M.IsSingleUnit=U.IsSingleUnit
+ where M.IsSingleUnit='1' and U.IsMainUnit='0' and M.Status='0'
+ ) as AA where AA.IsMaterial='1' ";
+ var data = DapperHelper.selecttable(sql);
+ mes.code = "200";
+ mes.message = "鏌ヨ鎴愬姛!";
+ mes.data = data;
+ }
+ catch (Exception e)
+ {
+ mes.code = "300";
+ mes.count = 0;
+ mes.message = e.Message;
+ mes.data = null;
+ }
+ return mes;
+ }
+ #endregion
+
+ #region[鐗╂枡娓呭崟鏂板淇敼鑾峰彇瀛愪欢Bom-T+鐣呮嵎閫氭ā寮廬
+ public static ToMessage AddUpdateTBomDetailsBomData(string materiel_code, User us)
+ {
+ string sql = "";
+ var dynamicParams = new DynamicParameters();
+ try
+ {
+ //鏍规嵁瀛愪欢鐗╂枡缂栫爜鏌ヨ瀛愪欢瀵瑰簲鐨凚om淇℃伅
+ sql = @"select B.id,B.materiel_code,M.partname as materiel_name,M.partspec as materiel_spec,B.version
+ from TBom_Main B
+ left join TMateriel_Info M on B.materiel_code=M.partcode
+ where B.materiel_code=@materiel_code";
+ dynamicParams.Add("@materiel_code", materiel_code);
+ var data = DapperHelper.selectdata(sql, dynamicParams);
+ mes.code = "200";
+ mes.message = "鏌ヨ鎴愬姛!";
+ mes.data = data;
+ }
+ catch (Exception e)
+ {
+ mes.code = "300";
+ mes.count = 0;
+ mes.message = e.Message;
+ mes.data = null;
+ }
+ return mes;
+ }
+ #endregion
+
+ #region[鐗╂枡娓呭崟鏂板淇敼鎻愪氦-T+鐣呮嵎閫氭ā寮廬
+ public static ToMessage TBomAddUpdate(string operType, BomDate bom, User us)
+ {
+ string sql = "";
+ List<object> list = new List<object>();
+ var dynamicParams = new DynamicParameters();
+ using (var conn = new SqlConnection(sqlServerConnectString))
+ {
+ conn.Open();
+ using (var transaction = conn.BeginTransaction())
+ {
+ try
+ {
+ if (operType == "Add")
+ {
+ // 鍋囪浣犲凡缁忔湁浜嗘彃鍏ヤ富琛ㄥ拰瀛愯〃鐨凷QL璇彞
+ string masterUpdateversionSql = @"update TBom_Main set isdefaultbom='0' where materiel_code=@materiel_code";
+ string masterInsertSql = @"insert into TBom_Main(materiel_code,unitcode,bomdepth,isdefaultbom,quantity,status,startdate,version,lm_user,lm_date)
+ values(@materiel_code,@unitcode,@bomdepth,@isdefaultbom,@quantity,@status,@startdate,@version,@lm_user,@lm_date); SELECT CAST(SCOPE_IDENTITY() AS INT)";
+ string detailInsertSql = @"insert into TBom_Deta(m_id,seq,materiel_code,unitcode,base_quantity,loss_quantity,total_quantity,idchildbom)
+ values(@m_id,@seq,@materiel_code,@unitcode,@base_quantity,@loss_quantity,@total_quantity,@idchildbom)";
+ string detailUpdateSql = @"update TBom_Deta set idchildbom=@idchildbom where materiel_code=@materiel_code";
+
+
+ //鏌ヨ褰撳墠鐖朵欢鐗╂枡+鐗堟湰鍙锋槸鍚﹀瓨鍦�
+ sql = @"select * from TBom_Main where materiel_code=@materiel_code and version=@version";
+ dynamicParams.Add("@materiel_code", bom.materiel_code);
+ dynamicParams.Add("@Version", bom.version);
+ var data0 = DapperHelper.selectdata(sql, dynamicParams);
+ if (data0.Rows.Count > 0)
+ {
+ mes.code = "300";
+ mes.count = 0;
+ mes.message = "鍚屼竴鐗╂枡鐗堟湰鍙锋湁閲嶅!";
+ mes.data = null;
+ return mes;
+ }
+ //鏌ヨ褰撳墠鐖朵欢鐗╂枡鏄惁瀛樺湪
+ sql = @"select * from TBom_Main where materiel_code=@materiel_code";
+ dynamicParams.Add("@materiel_code", bom.materiel_code);
+ var data1 = DapperHelper.selectdata(sql, dynamicParams);
+ if (data1.Rows.Count > 0) //瀛樺湪褰撳墠鐗╂枡鐨勫叾浠栫増鏈珺OM
+ {
+ if (bom.isdefaultbom == "1") //榛樿Bom涓�:鏄�
+ {
+ //鏇存柊鐗╂枡娓呭崟瀵瑰簲鍏朵粬闈炴鐗堟湰鐨勬槸鍚﹂粯璁OM
+ var updateversionParam = new DynamicParameters();
+ updateversionParam.Add("@materiel_code", bom.materiel_code);
+ conn.Execute(masterUpdateversionSql, updateversionParam, transaction);
+ }
+ }
+ else
+ {
+ if (bom.isdefaultbom == "0") //榛樿Bom涓�:鍚�
+ {
+ mes.code = "300";
+ mes.count = 0;
+ mes.message = "涓�涓骇鍝佸彧鑳芥湁涓�涓笖蹇呴』鏈変竴涓粯璁OM!";
+ mes.data = null;
+ return mes;
+ }
+ }
+
+ // 鎻掑叆涓昏〃骞惰幏鍙栨柊鎻掑叆鐨処D
+ var masterParam = new DynamicParameters();
+ masterParam.Add("@materiel_code", bom.materiel_code);
+ masterParam.Add("@unitcode", bom.unitcode);
+ masterParam.Add("@bomdepth", bom.bomdepth);
+ masterParam.Add("@isdefaultbom", bom.isdefaultbom);
+ masterParam.Add("@quantity", bom.quantity);
+ masterParam.Add("@status", bom.status);
+ masterParam.Add("@startdate", bom.startdate);
+ masterParam.Add("@version", bom.version);
+ masterParam.Add("@lm_user", us.usercode);
+ masterParam.Add("@lm_date", DateTime.Now);
+
+ int masterId = Convert.ToInt32(conn.ExecuteScalar(masterInsertSql, masterParam, transaction));
+
+ // 鎻掑叆瀛愯〃
+ foreach (var detail in bom.children)
+ {
+ var detailParam = new DynamicParameters();
+ detailParam.Add("@m_id", masterId);
+ detailParam.Add("@seq", detail.seq);
+ detailParam.Add("@materiel_code", detail.materiel_code);
+ detailParam.Add("@unitcode", detail.unitcode);
+ detailParam.Add("@base_quantity", detail.base_quantity);
+ detailParam.Add("@loss_quantity", detail.loss_quantity);
+ detailParam.Add("@total_quantity", detail.total_quantity);
+ detailParam.Add("@idchildbom", string.IsNullOrEmpty(detail.idchildbom) ? null : detail.idchildbom);
+ conn.Execute(detailInsertSql, detailParam, transaction);
+ }
+ //鏇存柊瀛愯〃idchildbom
+ var detailUpdateParam = new DynamicParameters();
+ detailUpdateParam.Add("@idchildbom", masterId);
+ detailUpdateParam.Add("@materiel_code", bom.materiel_code);
+ conn.Execute(detailUpdateSql, detailUpdateParam, transaction);
+
+ // 鎵�鏈夋彃鍏ユ垚鍔燂紝鎻愪氦浜嬪姟
+ transaction.Commit();
+ //鏇存柊Bom灞傜骇
+ var bomdepthParam = new DynamicParameters();
+ bomdepthParam.Add("@bomId", masterId);
+ bomdepthParam.Add("@isAllFlag", 1);
+ var dt = DapperHelper.selectProcedure("AA_SP_UpdateBomDepth", bomdepthParam);
+ mes.code = "200";
+ mes.count = 0;
+ mes.message = "鏂板鎿嶄綔鎴愬姛!";
+ mes.data = null;
+ //鍐欏叆鎿嶄綔璁板綍琛�
+ LogHelper.DbOperateLog(us.usercode, "鏂板", "鏂板浜嗙墿鏂欐竻鍗曪細" + bom.materiel_code + "锛岀増鏈彿涓�:" + bom.version, us.usertype);
+ }
+ if (operType == "Update")
+ {
+ // 鍋囪浣犲凡缁忔湁浜嗘彃鍏ョ殑SQL璇彞
+ string masterUpdateversionSql = @"update TBom_Main set isdefaultbom='0' where materiel_code=@materiel_code and id<>@id";
+ string detailInsertSql = @"insert into TBom_Deta(m_id,seq,materiel_code,unitcode,base_quantity,loss_quantity,total_quantity,idchildbom)
+ values(@m_id,@seq,@materiel_code,@unitcode,@base_quantity,@loss_quantity,@total_quantity,@idchildbom)";
+ string detailUpdateSql = @"update TBom_Deta set seq=@seq,materiel_code=@materiel_code,base_quantity=@base_quantity,loss_quantity=@loss_quantity,
+ total_quantity=@total_quantity,unitcode=@unitcode,idchildbom=@idchildbom where materiel_code=@materiel_code and m_id=@m_id";
+ string detailDeleteSql = @"delete TBom_Deta where materiel_code=@materiel_code and m_id=@m_id";
+ string masterUpdateSql = @"update TBom_Main set materiel_code=@materiel_code,unitcode=@unitcode,quantity=@quantity,status=@status,startdate=@startdate,
+ version=@version,isdefaultbom=@isdefaultbom,lm_user=@lm_user,lm_date=@lm_date where materiel_code=@materiel_code and id=@ID";
+
+ //鏌ヨ褰撳墠鐖朵欢鐗╂枡+鐗堟湰鍙锋槸鍚﹀瓨鍦�
+ sql = @"select * from TBom_Main where materiel_code=@materiel_code and version=@version and id=@ID";
+ dynamicParams.Add("@ID", bom.id);
+ dynamicParams.Add("@materiel_code", bom.materiel_code);
+ dynamicParams.Add("@version", bom.version);
+ var data0 = DapperHelper.selectdata(sql, dynamicParams);
+ if (data0.Rows.Count > 0 && data0.Rows.Count > 1)
+ {
+ mes.code = "300";
+ mes.count = 0;
+ mes.message = "鍚屼竴鐗╂枡鐗堟湰鍙锋湁閲嶅!";
+ mes.data = null;
+ return mes;
+ }
+ //鏍规嵁Bomid鏌ヨ鏄惁琚伐鍗曞紩鐢�
+ sql = @"select * from TK_Wrk_Man where bom_id=@bom_id";
+ dynamicParams.Add("@bom_id", bom.id);
+ var data_1 = DapperHelper.selectdata(sql, dynamicParams);
+ if (data_1.Rows.Count > 0)
+ {
+ mes.code = "300";
+ mes.count = 0;
+ mes.message = "淇敼鍓岯OM宸茬粡琚伐鍗曞紩鐢�,涓嶅彲淇敼!";
+ mes.data = null;
+ return mes;
+ }
+ //鏌ヨ褰撳墠鐖朵欢鐗╂枡闈炴鐗堟湰鏄惁瀛樺湪
+ sql = @"select * from TBom_Main where materiel_code=@materiel_code";
+ dynamicParams.Add("@materiel_code", bom.materiel_code);
+ var data1 = DapperHelper.selectdata(sql, dynamicParams);
+ if (data1.Rows.Count > 0) //瀛樺湪褰撳墠鐗╂枡鐨勫叾浠栫増鏈珺OM
+ {
+ // 浣跨敤LINQ鏌ヨDataTable
+ var BomDefault = from row in data1.AsEnumerable()
+ where row.Field<int>("isdefaultbom") == 1
+ select row;
+
+ // 妫�鏌ユ槸鍚︽湁缁撴灉
+ if (BomDefault.Any())
+ {
+ if (bom.isdefaultbom == "1") //榛樿Bom涓�:鏄�
+ {
+ //鏇存柊鐗╂枡娓呭崟瀵瑰簲鍏朵粬闈炴鐗堟湰鐨勬槸鍚﹂粯璁OM
+ var updateversionParam = new DynamicParameters();
+ updateversionParam.Add("@materiel_code", bom.materiel_code);
+ updateversionParam.Add("@id", bom.id);
+ conn.Execute(masterUpdateversionSql, updateversionParam, transaction);
+ }
+ else
+ {
+ if (bom.isdefaultbom == "0") //榛樿Bom涓�:鏄�
+ {
+ mes.code = "300";
+ mes.count = 0;
+ mes.message = "涓�涓骇鍝佸彧鑳芥湁涓�涓笖蹇呴』鏈変竴涓粯璁OM!";
+ mes.data = null;
+ return mes;
+ }
+ }
+ }
+ else
+ {
+ if (bom.isdefaultbom == "0") //榛樿Bom涓�:鏄�
+ {
+ mes.code = "300";
+ mes.count = 0;
+ mes.message = "涓�涓骇鍝佸彧鑳芥湁涓�涓笖蹇呴』鏈変竴涓粯璁OM!";
+ mes.data = null;
+ return mes;
+ }
+ }
+
+ }
+ else
+ {
+ if (bom.isdefaultbom == "0") //榛樿Bom涓�:鍚�
+ {
+ mes.code = "300";
+ mes.count = 0;
+ mes.message = "涓�涓骇鍝佸彧鑳芥湁涓�涓笖蹇呴』鏈変竴涓粯璁OM!";
+ mes.data = null;
+ return mes;
+ }
+ }
+ //閫氳繃鐖朵欢id鏌ユ壘瀛愪欢淇℃伅
+ sql = @"select * from TBom_Deta where m_id=@m_id";
+ dynamicParams.Add("@m_id", bom.id);
+ var list2 = DapperHelper.select<BomDateSub>(sql, dynamicParams);
+ // 浣跨敤LINQ鐨凣roupJoin鏉ユ壘鍑哄樊寮�
+ var query = from item1 in bom.children
+ join item2 in list2 on new { item1.m_id, item1.materiel_code }
+ equals new { item2.m_id, item2.materiel_code } into gj
+ from subitem in gj.DefaultIfEmpty()
+ select new { Item1 = item1, Item2 = subitem };
+ var toAdd = query.Where(q => q.Item2 == null).Select(q => q.Item1).ToList();
+ var toUpdate = query.Where(q => q.Item2 != null && q.Item1.m_id == q.Item2.m_id && q.Item1.materiel_code == q.Item2.materiel_code).Select(q => q.Item1).ToList();
+ var toDelete = list2
+ .Where(item2 => !bom.children.Any(item1 =>
+ item1.m_id == item2.m_id &&
+ item1.materiel_code == item2.materiel_code
+ ))
+ .ToList();
+ //鏂板
+ for (int i = 0; i < toAdd.Count; i++)
+ {
+ //鍐欏叆鐗╂枡娓呭崟瀛愯〃
+ var detailParam = new DynamicParameters();
+ detailParam.Add("@m_id", toAdd[i].m_id);
+ detailParam.Add("@seq", toAdd[i].seq);
+ detailParam.Add("@materiel_code", toAdd[i].materiel_code);
+ detailParam.Add("@unitcode", toAdd[i].unitcode);
+ detailParam.Add("@base_quantity", toAdd[i].base_quantity);
+ detailParam.Add("@loss_quantity", toAdd[i].loss_quantity);
+ detailParam.Add("@total_quantity", toAdd[i].total_quantity);
+ detailParam.Add("@idchildbom", string.IsNullOrEmpty(toAdd[i].idchildbom) ? null : toAdd[i].idchildbom);
+ conn.Execute(detailInsertSql, detailParam, transaction);
+ }
+ //鏇存柊
+ for (int i = 0; i < toUpdate.Count; i++)
+ {
+ //鏇存柊鐗╂枡娓呭崟瀛愯〃
+ var detailUpdateParam = new DynamicParameters();
+ detailUpdateParam.Add("@m_id", toUpdate[i].m_id);
+ detailUpdateParam.Add("@seq", toUpdate[i].seq);
+ detailUpdateParam.Add("@materiel_code", toUpdate[i].materiel_code);
+ detailUpdateParam.Add("@unitcode", toUpdate[i].unitcode);
+ detailUpdateParam.Add("@base_quantity", toUpdate[i].base_quantity);
+ detailUpdateParam.Add("@loss_quantity", toUpdate[i].loss_quantity);
+ detailUpdateParam.Add("@total_quantity", toUpdate[i].total_quantity);
+ detailUpdateParam.Add("@idchildbom", string.IsNullOrEmpty(toUpdate[i].idchildbom) ? null : toUpdate[i].idchildbom);
+ conn.Execute(detailUpdateSql, detailUpdateParam, transaction);
+ }
+ //鍒犻櫎
+ for (int i = 0; i < toDelete.Count; i++)
+ {
+ //鍒犻櫎鐗╂枡娓呭崟瀛愯〃
+ var detailDeleteParam = new DynamicParameters();
+ detailDeleteParam.Add("@materiel_code", toDelete[i].materiel_code);
+ detailDeleteParam.Add("@m_id", toDelete[i].m_id);
+ conn.Execute(detailDeleteSql, detailDeleteParam, transaction);
+ }
+ //鏇存柊鐗╂枡娓呭崟涓昏〃
+ var masterUpdateParam = new DynamicParameters();
+ masterUpdateParam.Add("@ID", bom.id);
+ masterUpdateParam.Add("@materiel_code", bom.materiel_code);
+ masterUpdateParam.Add("@unitcode", bom.unitcode);
+ masterUpdateParam.Add("@quantity", bom.quantity);
+ masterUpdateParam.Add("@status", bom.status);
+ masterUpdateParam.Add("@startdate", bom.startdate);
+ masterUpdateParam.Add("@version", bom.version);
+ masterUpdateParam.Add("@isdefaultbom", bom.isdefaultbom);
+ masterUpdateParam.Add("@lm_user", us.usercode);
+ masterUpdateParam.Add("@lm_date", DateTime.Now);
+ conn.Execute(masterUpdateSql, masterUpdateParam, transaction);
+ // 鎵�鏈夋彃鍏ユ垚鍔燂紝鎻愪氦浜嬪姟
+ transaction.Commit();
+ //鏇存柊Bom灞傜骇
+ var bomdepthParam = new DynamicParameters();
+ bomdepthParam.Add("@bomId", bom.id);
+ bomdepthParam.Add("@isAllFlag", 1);
+ var dt = DapperHelper.selectProcedure("AA_SP_UpdateBomDepth", bomdepthParam);
+ mes.code = "200";
+ mes.count = 0;
+ mes.message = "淇敼鎿嶄綔鎴愬姛!";
+ mes.data = null;
+ //鍐欏叆鎿嶄綔璁板綍琛�
+ LogHelper.DbOperateLog(us.usercode, "淇敼", "淇敼浜嗙墿鏂欐竻鍗曪細" + bom.materiel_code + "锛岀増鏈彿涓�:" + bom.version, us.usertype);
+ }
+ }
+ catch (Exception e)
+ {
+ // 鎹曡幏寮傚父锛屽洖婊氫簨鍔�
+ transaction.Rollback();
+ mes.code = "300";
+ mes.count = 0;
+ mes.message = e.Message;
+ mes.data = null;
+ }
+ }
+ }
+ return mes;
+ }
+ #endregion
+
+ #region[鐗╂枡娓呭崟鍒犻櫎鎻愪氦-T+鐣呮嵎閫氭ā寮廬
+ public static ToMessage TBomDelete(BomDate bom, User us)
+ {
+ throw new NotImplementedException();
+ }
+ #endregion
+
+
#region[宸ュ崟浜у搧淇℃伅涓嬫媺妗嗘煡璇
public static ToMessage PartSelect()
{
diff --git a/VueWebCoreApi/DLL/DAL/ReportManagerDAL.cs b/VueWebCoreApi/DLL/DAL/ReportManagerDAL.cs
index 7a93986..f0c32de 100644
--- a/VueWebCoreApi/DLL/DAL/ReportManagerDAL.cs
+++ b/VueWebCoreApi/DLL/DAL/ReportManagerDAL.cs
@@ -72,11 +72,6 @@
dynamicParams.Add("@opendate", opendate + " 00:00:00");
dynamicParams.Add("@closedate", closedate + " 23:59:59");
}
- if (search == "")
- {
- search = "and 1=1 ";
- }
- search = search.Substring(3);//鎴彇绱㈠紩2鍚庨潰鐨勫瓧绗�
// --------------鏌ヨ鎸囧畾鏁版嵁--------------
var total = 0; //鎬绘潯鏁�
var sql = @"select top 100 percent AA.saleOrderCode,AA.m_po,AA.wkshp_code,AA.wkshp_name,AA.wo_code,AA.status,AA.lm_date,
@@ -99,7 +94,7 @@
left join TMateriel_Info P on W.materiel_code=p.partcode
left join TOrganization F on W.wkshp_code=F.torg_code
group by E.saleOrderCode,W.m_po,W.wo_code,W.wkshp_code,F.torg_name,W.status,W.lm_date,P.partcode,P.partname,P.partspec,W.plan_qty
- ) as AA where " + search;
+ ) as AA where AA.concat_name is not null " + search;
var data = DapperHelper.GetPageList<object>(sql, dynamicParams, prop, order, startNum, endNum, out total);
mes.code = "200";
mes.message = "鏌ヨ鎴愬姛!";
@@ -170,11 +165,6 @@
dynamicParams.Add("@opendate", opendate + " 00:00:00");
dynamicParams.Add("@closedate", closedate + " 23:59:59");
}
- if (search == "")
- {
- search = "and 1=1 ";
- }
- search = search.Substring(3);//鎴彇绱㈠紩2鍚庨潰鐨勫瓧绗�
// --------------鏌ヨ鎸囧畾鏁版嵁--------------
var total = 0; //鎬绘潯鏁�
@@ -200,7 +190,7 @@
left join TOrganization F on W.wkshp_code=F.torg_code
group by E.saleOrderCode,W.m_po,W.wo_code,W.wkshp_code,F.torg_name,W.status,W.lm_date,P.partcode,P.partname,P.partspec,W.plan_qty
) as AA
- where " + search;
+ where AA.concat_name is not null " + search;
DataTable data = DapperHelper.selectdata(sql, dynamicParams);
data.TableName = "Table"; //璁剧疆DataTable鐨勫悕绉�
string msg = DownLoad.DataTableToExcel(data, "鐢熶骇杩涘害鎶ヨ〃");
diff --git a/VueWebCoreApi/DLL/DAL/WorkOrderDAL.cs b/VueWebCoreApi/DLL/DAL/WorkOrderDAL.cs
index 48ae0ab..5478ff5 100644
--- a/VueWebCoreApi/DLL/DAL/WorkOrderDAL.cs
+++ b/VueWebCoreApi/DLL/DAL/WorkOrderDAL.cs
@@ -24,6 +24,7 @@
public static string strProcName = ""; //瀹氫箟鍏ㄥ眬sql鍙橀噺
public static List<SqlParameter> listStr = new List<SqlParameter>(); //瀹氫箟鍏ㄥ眬鍙傛暟闆嗗悎
public static SqlParameter[] parameters; //瀹氫箟鍏ㄥ眬SqlParameter鍙傛暟鏁扮粍
+ public static string sqlServerConnectString = AppSetting.GetAppSetting("DBServer");
#region[ERP璁㈠崟鏌ヨ]
@@ -808,7 +809,7 @@
}
}
//鑾峰彇宸ュ簭淇℃伅
- sql = @"select S.id,S.wo_code,S.seq,S.step_code,T.stepname,T.flwtype,S.stepprice,(isnull(S.good_qty,0)+isnull(S.ng_qty,0)+isnull(S.laborbad_qty,0)+isnull(S.materielbad_qty,0)) as produceq_qty,
+ sql = @"select S.id,S.wo_code,S.seq,S.step_code,T.stepname,T.flwtype,S.stepprice as unprice,(isnull(S.good_qty,0)+isnull(S.ng_qty,0)+isnull(S.laborbad_qty,0)+isnull(S.materielbad_qty,0)) as produceq_qty,
S.good_qty,S.ng_qty,S.laborbad_qty,S.materielbad_qty,(isnull(S.plan_qty,0)-(isnull(S.good_qty,0)+isnull(S.ng_qty,0)+isnull(S.laborbad_qty,0)+isnull(S.materielbad_qty,0))) as delive_qty,S.isbott,S.isend
from TK_Wrk_Step S
left join TStep T on S.step_code=T.stepcode
@@ -821,7 +822,7 @@
if (parents[i].flwtype == "Z")
{
//閫氳繃宸ヨ壓璺嚎宸ュ簭琛↖D鏌ユ壘瀵瑰簲璁惧淇℃伅
- sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as eqp_price,
+ sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as unprice,'Y' as enable,
(isnull(S.good_qty,0)+isnull(S.ng_qty,0)+isnull(S.laborbad_qty,0)+isnull(S.materielbad_qty,0)) as produceq_qty,
S.good_qty,S.ng_qty,S.laborbad_qty,S.materielbad_qty
from TK_Wrk_StepEqp S
@@ -834,7 +835,7 @@
else
{
//閫氳繃宸ヨ壓璺嚎宸ュ簭琛↖D鏌ユ壘瀵瑰簲澶栧崗渚涘簲鍟嗕俊鎭�
- sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as eqp_price,
+ sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as unprice,'Y' as enable,
(isnull(S.good_qty,0)+isnull(S.ng_qty,0)+isnull(S.laborbad_qty,0)+isnull(S.materielbad_qty,0)) as produceq_qty,
S.good_qty,S.ng_qty,S.laborbad_qty,S.materielbad_qty
from TK_Wrk_StepEqp S
@@ -872,216 +873,255 @@
string sql = "", route_code = "";
var dynamicParams = new DynamicParameters();
List<object> list = new List<object>();
- try
+ using (var conn = new SqlConnection(sqlServerConnectString))
{
- dynamic dynObj = JObject.Parse(us.mesSetting);
- bool route = dynObj.route;
- if (route) //宸ヨ壓璺嚎鐗�
+ conn.Open();
+ using (var transaction = conn.BeginTransaction())
{
- route_code = json.routecode;
- }
- else //宸ュ簭鐗�
- {
- route_code = null;
- }
- if (operType == "Add")
- {
- //鍐欏叆宸ュ崟琛�
- sql = @"insert into TK_Wrk_Man(wo_code,wotype,status,wkshp_code,plan_qty,lm_user,lm_date,materiel_code,route_code,sourceid,m_po,saleOrderDeliveryDate,plan_startdate,plan_enddate,piroque,isaps,data_sources,isstep)
+ try
+ {
+ dynamic dynObj = JObject.Parse(us.mesSetting);
+ bool route = dynObj.route;
+ if (route) //宸ヨ壓璺嚎鐗�
+ {
+ route_code = json.routecode;
+ }
+ else //宸ュ簭鐗�
+ {
+ route_code = null;
+ }
+ if (operType == "Add")
+ {
+ //鍐欏叆宸ュ崟琛�
+ sql = @"insert into TK_Wrk_Man(wo_code,wotype,status,wkshp_code,plan_qty,lm_user,lm_date,materiel_code,route_code,sourceid,m_po,saleOrderDeliveryDate,plan_startdate,plan_enddate,piroque,isaps,data_sources,isstep)
values(@wo_code,@wotype,@status,@wkshp_code,@plan_qty,@lm_user,@lm_date,@materiel_code,@route_code,@sourceid,@m_po,@saleOrderDeliveryDate,@plan_startdate,@plan_enddate,@orderlev,@isaps,@data_sources,@isstep)";
- list.Add(new
- {
- str = sql,
- parm = new
- {
- wo_code = json.wocode,
- wotype = json.wotype,
- status = json.wostatus,
- wkshp_code = json.wkshopcode,
- plan_qty = json.woqty,
- lm_user = us.usercode,
- lm_date = DateTime.Now.ToString(),
- materiel_code = json.partcode,
- route_code = route_code,
- sourceid = json.sourceid == "" ? null : json.sourceid, //鏃犳簮鍗曟椂璧嬪�糔ULL
- m_po = json.sourcewo,
- saleOrderDeliveryDate = json.deliverydate,
- plan_startdate = json.paystartdate,
- plan_enddate = json.payenddate,
- orderlev = "3",//浼樺厛绾э細鐗圭骇锛�1锛� 绱ф�ワ紙2锛� 姝e父锛�3锛�
- isaps = "N", //鏄惁鎺掍骇,榛樿N Y=鏄� N=鍚�
- data_sources = json.data_sources,
- isstep = json.isstep //鏄惁鍏宠仈宸ュ簭
- }
- });
- //鍐欏叆宸ュ簭浠诲姟琛�
- for (int i = 0; i < json.WorkListSub.Count; i++)
- {
- sql = @"insert into TK_Wrk_Step(wo_code,seq,step_code,route_code,stepprice,plan_qty,status,isbott,isend,lm_user,lm_date)
- values(@wo_code,@seq,@step_code,@route_code,@stepprice,@plan_qty,@status,@isbott,@isend,@lm_user,@lm_date)";
- list.Add(new
- {
- str = sql,
- parm = new
- {
- wo_code = json.wocode,
- seq = json.WorkListSub[i].stepseq,
- step_code = json.WorkListSub[i].stepcode,
- route_code = route_code,
- stepprice = json.WorkListSub[i].stepprice,
- plan_qty = json.woqty,
- status = json.wostatus,
- isbott = json.WorkListSub[i].isbott,
- isend = json.WorkListSub[i].isend,
- lm_user = us.usercode,
- lm_date = DateTime.Now.ToString()
- }
- });
- }
- bool aa = DapperHelper.DoTransaction(list);
- if (aa)
- {
- //鍐欏叆鎿嶄綔璁板綍琛�
- LogHelper.DbOperateLog(us.usercode, "鏂板", "鏂板浜嗗伐鍗�:" + json.wocode, us.usertype);
- mes.code = "200";
- mes.count = 0;
- mes.message = "MES宸ュ崟鏂板缓鎴愬姛!";
- mes.data = null;
- }
- else
- {
- mes.code = "300";
- mes.count = 0;
- mes.message = "MES宸ュ崟鏂板缓澶辫触!";
- mes.data = null;
- }
- }
- if (operType == "Update")
- {
- //淇敼宸ュ崟琛�
- sql = @"update TK_Wrk_Man set wotype=@wotype,wkshp_code=@wkshp_code,plan_qty=@plan_qty,lm_user=@lm_user,lm_date=@lm_date,
- materiel_code=@materiel_code,route_code=@route_code,sourceid=@sourceid,m_po=@m_po,saleOrderDeliveryDate=@saleOrderDeliveryDate,plan_startdate=@plan_startdate,plan_enddate=@plan_enddate,isstep=@isstep
- where wo_code=@wo_code";
- list.Add(new
- {
- str = sql,
- parm = new
- {
- wo_code = json.wocode,
- wotype = json.wotype,
- wkshp_code = json.wkshopcode,
- plan_qty = json.woqty,
- materiel_code = json.partcode,
- route_code = route_code,
- sourceid = json.sourceid == "" ? null : json.sourceid, //鏃犳簮鍗曟椂璧嬪�糔ULL
- m_po = json.sourcewo,
- saleOrderDeliveryDate = json.deliverydate,
- plan_startdate = json.paystartdate,
- plan_enddate = json.payenddate,
- lm_user = us.usercode,
- lm_date = DateTime.Now.ToString(),
- isstep = json.isstep //鏄惁鍏宠仈宸ュ簭
- }
- });
- //鍒犻櫎宸ュ崟宸ュ簭琛�
- sql = @"delete TK_Wrk_Step where wo_code=@wo_code";
- list.Add(new
- {
- str = sql,
- parm = new
- {
- wo_code = json.wocode
- }
- });
- //鍐欏叆宸ュ崟宸ュ簭琛�
- for (int i = 0; i < json.WorkListSub.Count; i++)
- {
- sql = @"insert into TK_Wrk_Step(wo_code,seq,step_code,route_code,stepprice,plan_qty,status,isbott,isend,lm_user,lm_date)
- values(@wo_code,@seq,@step_code,@route_code,@stepprice,@plan_qty,@status,@isbott,@isend,@lm_user,@lm_date)";
- list.Add(new
- {
- str = sql,
- parm = new
- {
- wo_code = json.wocode,
- seq = json.WorkListSub[i].stepseq,
- step_code = json.WorkListSub[i].stepcode,
- route_code = route_code,
- stepprice = json.WorkListSub[i].stepprice,
- plan_qty = json.woqty,
- status = json.wostatus,
- isbott = json.WorkListSub[i].isbott,
- isend = json.WorkListSub[i].isend,
- lm_user = us.usercode,
- lm_date = DateTime.Now.ToString()
- }
- });
- }
- //鍒ゆ柇婧愬ご鍗曟嵁鏄惁鏉ユ簮ERP
- if (json.data_sources == "ERP")
- {
- //鍒ゆ柇宸ュ崟淇敼鏁伴噺宸�兼槸鍚︿负0
- if (json.difference != "0")
- {
- string staus = "";
- //鏌ヨ璁㈠崟鎬绘暟,宸蹭笅杈炬暟閲�
- sql = @"select qty,relse_qty from TKimp_Ewo where id=@sourceid and wo=@sourcewo";
- dynamicParams.Add("@sourceid", json.sourceid);
- dynamicParams.Add("@sourcewo", json.sourcewo);
- var data0 = DapperHelper.selectdata(sql, dynamicParams);
- //褰撳墠宸ュ崟鍙慨鏀规暟閲�=璁㈠崟鏁伴噺-闈炲綋鍓嶅伐鍗曟�讳笅杈惧伐鍗曟暟閲�
- decimal qty = decimal.Parse(data0.Rows[0]["qty"].ToString());//璁㈠崟鎬绘暟
- decimal relse_qty = decimal.Parse(data0.Rows[0]["relse_qty"].ToString());//璁㈠崟宸蹭笅杈炬�绘暟
- relse_qty = relse_qty + decimal.Parse(json.difference);//鏂扮殑涓嬭揪鏁伴噺=鍘熷涓嬭揪鏁伴噺+宸��(姝h礋)
- if (qty == relse_qty)
- {
- staus = "CREATED"; //鍏ㄩ儴涓嬭揪
- }
- else
- {
- staus = "CREATING";//閮ㄥ垎涓嬭揪
- }
- //鏇存柊璁㈠崟琛ㄧ姸鎬併�佸凡涓嬭揪鏁伴噺
- sql = @"update TKimp_Ewo set status=@status,relse_qty=@relse_qty where id=@sourceid and wo=@sourcewo";
list.Add(new
{
str = sql,
parm = new
{
- status = staus,
- relse_qty = relse_qty,
- sourceid = json.sourceid,
- sourcewo = json.sourcewo
+ wo_code = json.wocode,
+ wotype = json.wotype,
+ status = json.wostatus,
+ wkshp_code = json.wkshopcode,
+ plan_qty = json.woqty,
+ lm_user = us.usercode,
+ lm_date = DateTime.Now.ToString(),
+ materiel_code = json.partcode,
+ route_code = route_code,
+ sourceid = json.sourceid == "" ? null : json.sourceid, //鏃犳簮鍗曟椂璧嬪�糔ULL
+ m_po = json.sourcewo,
+ saleOrderDeliveryDate = json.deliverydate,
+ plan_startdate = json.paystartdate,
+ plan_enddate = json.payenddate,
+ orderlev = "3",//浼樺厛绾э細鐗圭骇锛�1锛� 绱ф�ワ紙2锛� 姝e父锛�3锛�
+ isaps = "N", //鏄惁鎺掍骇,榛樿N Y=鏄� N=鍚�
+ data_sources = json.data_sources,
+ isstep = json.isstep //鏄惁鍏宠仈宸ュ簭
}
});
+ // 鍋囪浣犲凡缁忔湁浜嗘彃鍏ヤ富琛ㄥ拰瀛愯〃鐨凷QL璇彞
+ string workSql = @"insert into TK_Wrk_Man(wo_code,wotype,status,wkshp_code,plan_qty,lm_user,lm_date,materiel_code,route_code,sourceid,m_po,saleOrderDeliveryDate,plan_startdate,plan_enddate,piroque,isaps,data_sources,isstep)
+ values(@wo_code,@wotype,@status,@wkshp_code,@plan_qty,@lm_user,@lm_date,@materiel_code,@route_code,@sourceid,@m_po,@saleOrderDeliveryDate,@plan_startdate,@plan_enddate,@orderlev,@isaps,@data_sources,@isstep)";
+ string masterInsertSql = @"insert into TK_Wrk_Step(wo_code,seq,step_code,route_code,stepprice,plan_qty,status,isbott,isend,lm_user,lm_date)
+ values(@wo_code,@seq,@step_code,@route_code,@stepprice,@plan_qty,@status,@isbott,@isend,@lm_user,@lm_date); SELECT CAST(SCOPE_IDENTITY() AS INT)";
+ string detailInsertSql = @"insert into TK_Wrk_StepEqp(m_id,eqp_code,eqpprice)
+ values(@m_id,@eqp_code,@eqpprice)";
+
+ // 鎻掑叆宸ュ崟琛�
+ var workParam = new DynamicParameters();
+ workParam.Add("@wo_code", json.wocode);
+ workParam.Add("@wotype", json.wotype);
+ workParam.Add("@status", json.wostatus);
+ workParam.Add("@wkshp_code", json.wkshopcode);
+ workParam.Add("@plan_qty", json.woqty);
+ workParam.Add("@lm_user", us.usercode);
+ workParam.Add("@lm_date", DateTime.Now.ToString());
+ workParam.Add("@materiel_code", json.partcode);
+ workParam.Add("@route_code", route_code);
+ workParam.Add("@sourceid", json.sourceid == "" ? null : json.sourceid);
+ workParam.Add("@m_po", json.sourcewo);
+ workParam.Add("@saleOrderDeliveryDate", json.deliverydate);
+ workParam.Add("@plan_startdate", json.paystartdate);
+ workParam.Add("@plan_enddate", json.payenddate);
+ workParam.Add("@orderlev", "3");//浼樺厛绾э細鐗圭骇锛�1锛� 绱ф�ワ紙2锛� 姝e父锛�3锛�
+ workParam.Add("@isaps", "N");//鏄惁鎺掍骇,榛樿N Y=鏄� N=鍚�
+ workParam.Add("@data_sources", json.data_sources);
+ workParam.Add("@isstep", json.isstep);//鏄惁鍏宠仈宸ュ簭
+ conn.Execute(workSql, workParam, transaction);
+
+ //鍐欏叆宸ュ崟宸ュ簭琛�
+ for (int i = 0; i < json.WorkListSub.Count; i++)
+ {
+ // 鎻掑叆涓昏〃骞惰幏鍙栨柊鎻掑叆鐨処D
+ var masterParam = new DynamicParameters();
+ masterParam.Add("@wo_code", json.wocode);
+ masterParam.Add("@seq", json.WorkListSub[i].stepseq);
+ masterParam.Add("@step_code", json.WorkListSub[i].stepcode);
+ masterParam.Add("@route_code", route_code);
+ masterParam.Add("@stepprice", json.WorkListSub[i].unprice);
+ masterParam.Add("@plan_qty", json.woqty);
+ masterParam.Add("@status", json.wostatus);
+ masterParam.Add("@isbott", json.WorkListSub[i].isbott);
+ masterParam.Add("@isend", json.WorkListSub[i].isend);
+ masterParam.Add("@lm_user", us.usercode);
+ masterParam.Add("@lm_date", DateTime.Now.ToString());
+
+ int masterId = Convert.ToInt32(conn.ExecuteScalar(masterInsertSql, masterParam, transaction));
+
+ // 鍐欏叆宸ュ簭浠诲姟琛�
+ foreach (var detail in json.WorkListSub[i].WorkEqpListSub)
+ {
+ var detailParam = new DynamicParameters();
+ detailParam.Add("@m_id", masterId);
+ detailParam.Add("@eqp_code", detail.eqpcode);
+ detailParam.Add("@eqpprice", detail.unprice);
+ conn.Execute(detailInsertSql, detailParam, transaction);
+ }
+ }
+
+ // 鎵�鏈夋彃鍏ユ垚鍔燂紝鎻愪氦浜嬪姟
+ transaction.Commit();
+ mes.code = "200";
+ mes.count = 0;
+ mes.message = "MES宸ュ崟鏂板缓鎴愬姛!";
+ mes.data = null;
+ //鍐欏叆鎿嶄綔璁板綍琛�
+ LogHelper.DbOperateLog(us.usercode, "鏂板", "鏂板浜嗗伐鍗�:" + json.wocode, us.usertype);
+ }
+ if (operType == "Update")
+ {
+ //閫氳繃宸ュ崟鏌ユ壘宸ュ簭浠诲姟
+ sql = @"select * from TK_Wrk_Step where wo_code=@wo_code";
+ dynamicParams.Add("@wo_code", json.wocode);
+ var data = DapperHelper.selectdata(sql, dynamicParams);
+
+ // 鍋囪浣犲凡缁忔湁浜嗘彃鍏ヤ富琛ㄥ拰瀛愯〃鐨凷QL璇彞
+ string workSql = @"update TK_Wrk_Man set wotype=@wotype,wkshp_code=@wkshp_code,plan_qty=@plan_qty,lm_user=@lm_user,lm_date=@lm_date,
+ materiel_code=@materiel_code,route_code=@route_code,sourceid=@sourceid,m_po=@m_po,saleOrderDeliveryDate=@saleOrderDeliveryDate,plan_startdate=@plan_startdate,plan_enddate=@plan_enddate,isstep=@isstep
+ where wo_code=@wo_code";
+ string deleteWrkStepEqp = @"delete TK_Wrk_StepEqp where m_id=@m_id";
+ string deleteWrkStep = @"delete TK_Wrk_Step where wo_code=@wo_code";
+ string masterInsertSql = @"insert into TK_Wrk_Step(wo_code,seq,step_code,route_code,stepprice,plan_qty,status,isbott,isend,lm_user,lm_date)
+ values(@wo_code,@seq,@step_code,@route_code,@stepprice,@plan_qty,@status,@isbott,@isend,@lm_user,@lm_date); SELECT CAST(SCOPE_IDENTITY() AS INT)";
+ string detailInsertSql = @"insert into TK_Wrk_StepEqp(m_id,eqp_code,eqpprice)
+ values(@m_id,@eqp_code,@eqpprice)";
+ string EwoStatusSql = @"update TKimp_Ewo set status=@status,relse_qty=@relse_qty where id=@sourceid and wo=@sourcewo";
+
+ // 淇敼宸ュ崟琛�
+ var workParam = new DynamicParameters();
+ workParam.Add("@wo_code", json.wocode);
+ workParam.Add("@wotype", json.wotype);
+ workParam.Add("@wkshp_code", json.wkshopcode);
+ workParam.Add("@plan_qty", json.woqty);
+ workParam.Add("@lm_user", us.usercode);
+ workParam.Add("@lm_date", DateTime.Now.ToString());
+ workParam.Add("@materiel_code", json.partcode);
+ workParam.Add("@route_code", route_code);
+ workParam.Add("@sourceid", json.sourceid == "" ? null : json.sourceid);
+ workParam.Add("@m_po", json.sourcewo);
+ workParam.Add("@saleOrderDeliveryDate", json.deliverydate);
+ workParam.Add("@plan_startdate", json.paystartdate);
+ workParam.Add("@plan_enddate", json.payenddate);
+ workParam.Add("@isstep", json.isstep);//鏄惁鍏宠仈宸ュ簭
+ conn.Execute(workSql, workParam, transaction);
+
+ //鍒犻櫎宸ュ崟宸ュ簭璁惧琛�
+ for (int i = 0; i < data.Rows.Count; i++)
+ {
+ var wrkStepEqpParam = new DynamicParameters();
+ wrkStepEqpParam.Add("@m_id", data.Rows[i]["ID"].ToString());
+ conn.Execute(deleteWrkStepEqp, wrkStepEqpParam, transaction);
+ }
+
+
+ //鍒犻櫎宸ュ崟宸ュ簭琛�
+ var workStepParam = new DynamicParameters();
+ workStepParam.Add("@wo_code", json.wocode);
+ conn.Execute(deleteWrkStep, workStepParam, transaction);
+
+ //鍐欏叆宸ュ崟宸ュ簭琛�
+ for (int i = 0; i < json.WorkListSub.Count; i++)
+ {
+ // 鎻掑叆涓昏〃骞惰幏鍙栨柊鎻掑叆鐨処D
+ var masterParam = new DynamicParameters();
+ masterParam.Add("@wo_code", json.wocode);
+ masterParam.Add("@seq", json.WorkListSub[i].stepseq);
+ masterParam.Add("@step_code", json.WorkListSub[i].stepcode);
+ masterParam.Add("@route_code", route_code);
+ masterParam.Add("@stepprice", json.WorkListSub[i].unprice);
+ masterParam.Add("@plan_qty", json.woqty);
+ masterParam.Add("@status", json.wostatus);
+ masterParam.Add("@isbott", json.WorkListSub[i].isbott);
+ masterParam.Add("@isend", json.WorkListSub[i].isend);
+ masterParam.Add("@lm_user", us.usercode);
+ masterParam.Add("@lm_date", DateTime.Now.ToString());
+
+ int masterId = Convert.ToInt32(conn.ExecuteScalar(masterInsertSql, masterParam, transaction));
+
+ // 鍐欏叆宸ュ簭浠诲姟琛�
+ foreach (var detail in json.WorkListSub[i].WorkEqpListSub)
+ {
+ var detailParam = new DynamicParameters();
+ detailParam.Add("@m_id", masterId);
+ detailParam.Add("@eqp_code", detail.eqpcode);
+ detailParam.Add("@eqpprice", detail.unprice);
+ conn.Execute(detailInsertSql, detailParam, transaction);
+ }
+ }
+ //鍒ゆ柇婧愬ご鍗曟嵁鏄惁鏉ユ簮ERP
+ if (json.data_sources == "ERP")
+ {
+ //鍒ゆ柇宸ュ崟淇敼鏁伴噺宸�兼槸鍚︿负0
+ if (json.difference != "0")
+ {
+ string staus = "";
+ //鏌ヨ璁㈠崟鎬绘暟,宸蹭笅杈炬暟閲�
+ sql = @"select qty,relse_qty from TKimp_Ewo where id=@sourceid and wo=@sourcewo";
+ dynamicParams.Add("@sourceid", json.sourceid);
+ dynamicParams.Add("@sourcewo", json.sourcewo);
+ var data0 = DapperHelper.selectdata(sql, dynamicParams);
+ //褰撳墠宸ュ崟鍙慨鏀规暟閲�=璁㈠崟鏁伴噺-闈炲綋鍓嶅伐鍗曟�讳笅杈惧伐鍗曟暟閲�
+ decimal qty = decimal.Parse(data0.Rows[0]["qty"].ToString());//璁㈠崟鎬绘暟
+ decimal relse_qty = decimal.Parse(data0.Rows[0]["relse_qty"].ToString());//璁㈠崟宸蹭笅杈炬�绘暟
+ relse_qty = relse_qty + decimal.Parse(json.difference);//鏂扮殑涓嬭揪鏁伴噺=鍘熷涓嬭揪鏁伴噺+宸��(姝h礋)
+ if (qty == relse_qty)
+ {
+ staus = "CREATED"; //鍏ㄩ儴涓嬭揪
+ }
+ else
+ {
+ staus = "CREATING";//閮ㄥ垎涓嬭揪
+ }
+ //鏇存柊璁㈠崟琛ㄧ姸鎬併�佸凡涓嬭揪鏁伴噺
+ var EwoStatusParam = new DynamicParameters();
+ EwoStatusParam.Add("@status", staus);
+ EwoStatusParam.Add("@relse_qty", relse_qty);
+ EwoStatusParam.Add("@sourceid", json.sourceid);
+ EwoStatusParam.Add("@sourcewo", json.sourcewo);
+ conn.Execute(EwoStatusSql, EwoStatusParam, transaction);
+ }
+ }
+ // 鎵�鏈夋彃鍏ユ垚鍔燂紝鎻愪氦浜嬪姟
+ transaction.Commit();
+ mes.code = "200";
+ mes.count = 0;
+ mes.message = "淇敼鎿嶄綔鎴愬姛!";
+ mes.data = null;
+ //鍐欏叆鎿嶄綔璁板綍琛�
+ LogHelper.DbOperateLog(us.usercode, "淇敼", "淇敼浜嗗伐鍗�:" + json.wocode, us.usertype);
}
}
-
- bool aa = DapperHelper.DoTransaction(list);
- if (aa)
+ catch (Exception e)
{
- //鍐欏叆鎿嶄綔璁板綍琛�
- LogHelper.DbOperateLog(us.usercode, "淇敼", "淇敼浜嗗伐鍗�:" + json.wocode, us.usertype);
- mes.code = "200";
- mes.count = 0;
- mes.message = "淇敼鎿嶄綔鎴愬姛!";
- mes.data = null;
- }
- else
- {
+ // 鎹曡幏寮傚父锛屽洖婊氫簨鍔�
+ transaction.Rollback();
mes.code = "300";
mes.count = 0;
- mes.message = "淇敼鎿嶄綔澶辫触!";
+ mes.message = e.Message;
mes.data = null;
}
}
- }
- catch (Exception e)
- {
- mes.code = "300";
- mes.count = 0;
- mes.message = e.Message;
- mes.data = null;
}
return mes;
}
@@ -1121,6 +1161,15 @@
sql = @"update TKimp_Ewo set status='CREATING',relse_qty=relse_qty-@orderqty where wo=@m_po and id=@souceid";
list.Add(new { str = sql, parm = new { m_po = m_po, souceid = souceid, orderqty = decimal.Parse(orderqty) } });
}
+ }
+ //鍒犻櫎宸ュ崟宸ュ簭璁惧琛�
+ sql = @"select * from TK_Wrk_Step where wo_code=@wo_code";
+ dynamicParams.Add("@wo_code", wocode);
+ var data1 = DapperHelper.selectdata(sql, dynamicParams);
+ for (int i = 0; i < data1.Rows.Count; i++)
+ {
+ sql = @"delete TK_Wrk_StepEqp where m_id=@m_id";
+ list.Add(new { str = sql, parm = new { m_id = data1.Rows[i]["ID"].ToString() } });
}
//鍒犻櫎宸ュ崟宸ュ簭琛�
sql = @"delete TK_Wrk_Step where wo_code=@wocode";
@@ -1176,6 +1225,7 @@
var sql = "";
List<object> list = new List<object>();
var dynamicParams = new DynamicParameters();
+ List<WorkRouteStepEqp> parents = new List<WorkRouteStepEqp>();
try
{
dynamic dynObj = JObject.Parse(us.mesSetting);
@@ -1183,7 +1233,7 @@
if (route) //宸ヨ壓璺嚎鐗�
{
//MES宸ュ崟鏌ユ壘鍘嗗彶寮曠敤鏈�鏂板伐搴忎俊鎭�
- sql = @"select S.id,S.wo_code,S.seq,S.step_code,T.stepname,T.flwtype,S.stepprice,'0' as produceq_qty,
+ sql = @"select S.id,S.wo_code,S.seq,S.step_code,T.stepname,T.flwtype,S.stepprice as unprice,'0' as produceq_qty,
'0' as good_qty,'0' as ng_qty,'0' as laborbad_qty,'0' as materielbad_qty,'0' as delive_qty,isbott,isend
from TK_Wrk_Step S
inner join (
@@ -1197,14 +1247,14 @@
dynamicParams.Add("@wkshopcode", wkshopcode);
dynamicParams.Add("@partcode", partcode);
dynamicParams.Add("@routecode", routecode);
- var parents = DapperHelper.select<WorkRouteStepEqp>(sql, dynamicParams);
+ parents = DapperHelper.select<WorkRouteStepEqp>(sql, dynamicParams);
//鑾峰彇宸ュ簭瀵瑰簲璁惧淇℃伅
for (int i = 0; i < parents.Count; i++)
{
if (parents[i].flwtype == "Z")
{
//閫氳繃宸ヨ壓璺嚎宸ュ簭琛↖D鏌ユ壘瀵瑰簲璁惧淇℃伅
- sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as eqp_price,
+ sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as unprice,'Y' as enable,
(isnull(S.good_qty,0)+isnull(S.ng_qty,0)+isnull(S.laborbad_qty,0)+isnull(S.materielbad_qty,0)) as produceq_qty,
S.good_qty,S.ng_qty,S.laborbad_qty,S.materielbad_qty
from TK_Wrk_StepEqp S
@@ -1217,7 +1267,7 @@
else
{
//閫氳繃宸ヨ壓璺嚎宸ュ簭琛↖D鏌ユ壘瀵瑰簲澶栧崗渚涘簲鍟嗕俊鎭�
- sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as eqp_price,
+ sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as unprice,'Y' as enable,
(isnull(S.good_qty,0)+isnull(S.ng_qty,0)+isnull(S.laborbad_qty,0)+isnull(S.materielbad_qty,0)) as produceq_qty,
S.good_qty,S.ng_qty,S.laborbad_qty,S.materielbad_qty
from TK_Wrk_StepEqp S
@@ -1232,7 +1282,7 @@
else
{
//MES宸ュ崟鏌ユ壘鍘嗗彶寮曠敤鏈�鏂板伐搴忎俊鎭�
- sql = @"select S.id,S.wo_code,S.seq,S.step_code,T.stepname,T.flwtype,S.stepprice,'0' as produceq_qty,
+ sql = @"select S.id,S.wo_code,S.seq,S.step_code,T.stepname,T.flwtype,S.stepprice as unprice,'0' as produceq_qty,
'0' as good_qty,'0' as ng_qty,'0' as laborbad_qty,'0' as materielbad_qty,'0' as delive_qty,isbott,isend
from TK_Wrk_Step S
inner join (
@@ -1245,14 +1295,14 @@
order by S.seq";
dynamicParams.Add("@wkshopcode", wkshopcode);
dynamicParams.Add("@partcode", partcode);
- var parents = DapperHelper.select<WorkRouteStepEqp>(sql, dynamicParams);
+ parents = DapperHelper.select<WorkRouteStepEqp>(sql, dynamicParams);
//鑾峰彇宸ュ簭瀵瑰簲璁惧淇℃伅
for (int i = 0; i < parents.Count; i++)
{
if (parents[i].flwtype == "Z")
{
//閫氳繃宸ヨ壓璺嚎宸ュ簭琛↖D鏌ユ壘瀵瑰簲璁惧淇℃伅
- sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as eqp_price,
+ sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as unprice,'Y' as enable,
(isnull(S.good_qty,0)+isnull(S.ng_qty,0)+isnull(S.laborbad_qty,0)+isnull(S.materielbad_qty,0)) as produceq_qty,
S.good_qty,S.ng_qty,S.laborbad_qty,S.materielbad_qty
from TK_Wrk_StepEqp S
@@ -1265,7 +1315,7 @@
else
{
//閫氳繃宸ヨ壓璺嚎宸ュ簭琛↖D鏌ユ壘瀵瑰簲澶栧崗渚涘簲鍟嗕俊鎭�
- sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as eqp_price,
+ sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as unprice,'Y' as enable,
(isnull(S.good_qty,0)+isnull(S.ng_qty,0)+isnull(S.laborbad_qty,0)+isnull(S.materielbad_qty,0)) as produceq_qty,
S.good_qty,S.ng_qty,S.laborbad_qty,S.materielbad_qty
from TK_Wrk_StepEqp S
@@ -1277,11 +1327,9 @@
}
}
}
-
- var data = DapperHelper.selectdata(sql, dynamicParams);
mes.code = "200";
- mes.count = data.Rows.Count;
- mes.data = data;
+ mes.count = parents.Count;
+ mes.data = parents;
mes.message = "鏌ヨ鎴愬姛!";
}
catch (Exception e)
diff --git a/VueWebCoreApi/Models/Bom/BomDate.cs b/VueWebCoreApi/Models/Bom/BomDate.cs
new file mode 100644
index 0000000..b2a8558
--- /dev/null
+++ b/VueWebCoreApi/Models/Bom/BomDate.cs
@@ -0,0 +1,127 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace VueWebCoreApi.Models.Bom
+{
+ public class BomDate
+ {
+ /// <summary>
+ /// 鎺掑簭搴忓彿
+ /// </summary>
+ public string rowNum { get; set; }
+ /// <summary>
+ /// 涓婚敭ID
+ /// </summary>
+ public string id { get; set; }
+ /// <summary>
+ /// 鐖朵欢缂栫爜
+ /// </summary>
+ public string materiel_code { get; set; }
+ /// <summary>
+ /// 鐖朵欢鍚嶇О
+ /// </summary>
+ public string materiel_name { get; set; }
+ /// <summary>
+ /// 鐖朵欢瑙勬牸
+ /// </summary>
+ public string materiel_spec { get; set; }
+ /// <summary>
+ /// 瀛樿揣绫诲瀷缂栫爜
+ /// </summary>
+ public string materiel_typecode { get; set; }
+ /// <summary>
+ /// 瀛樿揣绫诲瀷鍚嶇О
+ /// </summary>
+ public string materiel_typename { get; set; }
+ /// <summary>
+ /// 璁¢噺鍗曚綅缂栫爜
+ /// </summary>
+ public string unitcode { get; set; }
+ /// <summary>
+ /// 璁¢噺鍗曚綅鍚嶇О
+ /// </summary>
+ public string unitname { get; set; }
+ /// <summary>
+ /// 鍩虹鐢ㄩ噺
+ /// </summary>
+ public string quantity { get; set; }
+ /// <summary>
+ /// 鍚敤鐘舵��:Y/N
+ /// </summary>
+ public string status { get; set; }
+ /// <summary>
+ /// 鍚敤鏃ユ湡
+ /// </summary>
+ public string startdate { get; set; }
+ /// <summary>
+ /// 鐗堟湰鍙�
+ /// </summary>
+ public string version { get; set; }
+ /// <summary>
+ /// 鏄惁榛樿BOM锛�0(鍚�)1(鏄�)
+ /// </summary>
+ public string isdefaultbom { get; set; }
+ /// <summary>
+ /// Bom灞傜骇
+ /// </summary>
+ public string bomdepth { get; set; }
+ /// <summary>
+ /// 鍒涘缓浜�
+ /// </summary>
+ public string lm_user { get; set; }
+ /// <summary>
+ /// 鍒涘缓鏃堕棿
+ /// </summary>
+ public string lm_date { get; set; }
+ public List<BomDateSub> children { get; set; }
+ }
+ public class BomDateSub
+ {
+ /// <summary>
+ /// 涓婚敭ID
+ /// </summary>
+ public string id { get; set; }
+ /// <summary>
+ /// 鐖朵欢ID
+ /// </summary>
+ public string m_id { get; set; }
+ /// <summary>
+ /// 瀛愪欢搴忓彿
+ /// </summary>
+ public string seq { get; set; }
+ /// <summary>
+ /// 瀛愪欢缂栫爜
+ /// </summary>
+ public string materiel_code { get; set; }
+ /// <summary>
+ /// 瀛愪欢鍚嶇О
+ /// </summary>
+ public string materiel_name { get; set; }
+ /// <summary>
+ /// 瀛愪欢瑙勬牸
+ /// </summary>
+ public string materiel_spec { get; set; }
+ /// <summary>
+ /// 璁¢噺鍗曚綅缂栫爜
+ /// </summary>
+ public string unitcode { get; set; }
+ /// <summary>
+ /// 鍩烘湰鐢ㄩ噺
+ /// </summary>
+ public string base_quantity { get; set; }
+ /// <summary>
+ /// 鎹熻�楃巼
+ /// </summary>
+ public string loss_quantity { get; set; }
+ /// <summary>
+ /// 瀹為檯鐢ㄩ噺
+ /// </summary>
+ public string total_quantity { get; set; }
+ /// <summary>
+ /// 瀛愪欢bomid(瀵瑰簲鑷繁鐨凚om涓昏〃id)
+ /// </summary>
+ public string idchildbom { get; set; }
+ }
+}
diff --git a/VueWebCoreApi/Models/MaterialCraftsSave.cs b/VueWebCoreApi/Models/MaterialCraftsSave.cs
index bb14314..a6d4eb5 100644
--- a/VueWebCoreApi/Models/MaterialCraftsSave.cs
+++ b/VueWebCoreApi/Models/MaterialCraftsSave.cs
@@ -64,6 +64,10 @@
/// </summary>
public string eqp_name { get; set; }
/// <summary>
+ /// 鍚敤鐘舵��:Y/N
+ /// </summary>
+ public string enable { get; set; }
+ /// <summary>
/// 璁惧鑺傛媿
/// </summary>
public string eqp_value { get; set; }
diff --git a/VueWebCoreApi/Models/WorkData/WorkList.cs b/VueWebCoreApi/Models/WorkData/WorkList.cs
index 8e0aefe..45d9f8a 100644
--- a/VueWebCoreApi/Models/WorkData/WorkList.cs
+++ b/VueWebCoreApi/Models/WorkData/WorkList.cs
@@ -32,6 +32,10 @@
/// </summary>
public string partcode { get; set; }
/// <summary>
+ /// Bomid
+ /// </summary>
+ public string bomid { get; set; }
+ /// <summary>
/// 宸ヨ壓璺嚎缂栫爜
/// </summary>
public string routecode { get; set; }
@@ -72,6 +76,10 @@
public class WorkListSub
{
/// <summary>
+ /// 宸ュ簭浠诲姟ID
+ /// </summary>
+ public string id { get; set; }
+ /// <summary>
/// 宸ュ簭搴忓彿
/// </summary>
public string stepseq { get; set; }
@@ -82,7 +90,7 @@
/// <summary>
/// 鐢熶骇鍗曚环
/// </summary>
- public string stepprice { get; set; }
+ public string unprice { get; set; }
/// <summary>
/// 鏄惁棣栭亾宸ュ簭
/// </summary>
@@ -91,5 +99,17 @@
/// 鏄惁鏈亾宸ュ簭
/// </summary>
public string isend { get; set; }
+ public List<WorkEqpListSub> WorkEqpListSub { get; set; }
+ }
+ public class WorkEqpListSub
+ {
+ /// <summary>
+ /// 璁惧缂栫爜
+ /// </summary>
+ public string eqpcode { get; set; }
+ /// <summary>
+ /// 鐢熶骇鍗曚环
+ /// </summary>
+ public string unprice { get; set; }
}
}
diff --git a/VueWebCoreApi/Models/WorkData/WorkRouteStepEqp.cs b/VueWebCoreApi/Models/WorkData/WorkRouteStepEqp.cs
index a921028..f1acfbc 100644
--- a/VueWebCoreApi/Models/WorkData/WorkRouteStepEqp.cs
+++ b/VueWebCoreApi/Models/WorkData/WorkRouteStepEqp.cs
@@ -34,7 +34,7 @@
/// <summary>
/// 宸ュ簭宸ヤ环
/// </summary>
- public string stepprice { get; set; }
+ public string unprice { get; set; }
/// <summary>
/// 宸茬敓浜ф暟閲�
/// </summary>
@@ -80,9 +80,13 @@
/// </summary>
public string eqp_name { get; set; }
/// <summary>
+ /// 鏄惁鍚敤:Y/N
+ /// </summary>
+ public string enable { get; set; }
+ /// <summary>
/// 璁惧宸ヤ环
/// </summary>
- public string eqp_price { get; set; }
+ public string unprice { get; set; }
/// <summary>
/// 鍚堟牸鏁伴噺
/// </summary>
diff --git a/VueWebCoreApi/Tools/DapperHelper.cs b/VueWebCoreApi/Tools/DapperHelper.cs
index ea6d910..5c9c07f 100644
--- a/VueWebCoreApi/Tools/DapperHelper.cs
+++ b/VueWebCoreApi/Tools/DapperHelper.cs
@@ -214,6 +214,42 @@
}
}
+ public static List<T> GetPageListData<T>(string sql, Object parm, string orderBy, string sort, int pageIndex, int pageSize, out int total)
+ {
+ List<T> list = null;
+ StringBuilder sb = new StringBuilder();
+ sb.AppendFormat("SELECT COUNT(1) FROM ({0}) AS Result;", sql);
+ sb.AppendFormat(@"SELECT *
+ FROM(SELECT *,ROW_NUMBER() OVER(ORDER BY {1} {2}) AS rowNum
+ FROM ({0}) AS Temp) AS Result
+ WHERE rowNum >= {3} AND rowNum <= {4}
+ ORDER BY {1} {2}", sql, orderBy, sort, pageIndex, pageSize); //skip, pageIndex * pageSize
+
+ using (IDbConnection conn = sqlConnection())
+ {
+ try
+ {
+ using (var reader = conn.QueryMultiple(sb.ToString(), parm))
+ {
+ total = reader.ReadFirst<int>();
+ list = reader.Read<T>().ToList();
+ }
+ }
+ catch (Exception ex)
+ {
+ //鍒涘缓鏃ュ織璁板綍缁勪欢瀹炰緥
+ LogHelper.WriteLog(ex);
+ throw ex;
+ }
+ finally
+ {
+ conn.Dispose();
+ conn.Close();
+ }
+
+ }
+ return list;
+ }
/// <summary>
/// dapper閫氱敤鍒嗛〉鍑芥暟
--
Gitblit v1.9.3