Browse Source

核价后台:1、修复床垫报价主副规格查询逻辑
2、主副规格的垫层的规格尺寸要按比例缩放
3、主副规格的垫层,如果是需要调整物料就显示
4、主副规格,自动计算弹簧排列数逻辑新增:若是多区床网,取第一个弹簧计算
5、新增修改密码接口
6、核价物料新增字段:是否属于主副规格调整物料
7、更新查询物料历史报价逻辑
8、床垫清单,产品配置,垫层的床网信息固定带出包边海绵,改成按床网实际带出

chen_yjin 1 tuần trước cách đây
mục cha
commit
50e8e0a6c9

+ 46 - 0
JLHHJSvr/Com/ChangePassword.cs

@@ -0,0 +1,46 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using LJLib.Net.SPI.Com;
+using Microsoft.SqlServer.Server;
+
+namespace JLHHJSvr.Com
+{
+    /// <summary>
+    /// 修改密码
+    /// </summary>
+    public sealed class ChangePasswordRequest : ILJRequest<ChangePasswordResponse>
+    {
+        /// <summary>
+        /// 登录后,获得token
+        /// </summary>
+        public string account { get; set; }
+        /// <summary>
+        /// 需要修改的userid
+        /// </summary>
+        public string userid { get; set; }
+        /// <summary>
+        /// 旧密码
+        /// </summary>
+        public string oldpassword { get; set; }
+
+        /// <summary>
+        /// 新密码
+        /// </summary>
+        public string newpassword { get; set; }
+
+        public override string GetApiName()
+        {
+            return "ChangePassword";
+        }
+
+    }
+
+    /// <summary>
+    /// 修改成功则ErrMsg为null,否则ErrMsg保存错误信息
+    /// </summary>
+    public sealed class ChangePasswordResponse : LJResponse
+    {
+    }
+}

+ 4 - 4
JLHHJSvr/Com/GetMattressSubspecs.cs

@@ -22,14 +22,14 @@ namespace JLHHJSvr.Com
         /// <summary>
         /// 副规格列表
         /// </summary>
-        public List<u_mattress_mx_subspecs> mattresses { get; set; }
+        public List<u_mattress> mattresses { get; set; }
         /// <summary>
-        /// 弹簧排列列表
+        /// 床网列表弹簧排列列表
         /// </summary>
-        public List<u_mattress_mx_subspecs> springlist { get; set; }
+        public List<u_mattress_mx_mtrl> bednetMxs { get; set; }
         /// <summary>
         /// 垫层物料
         /// </summary>
-        public List<u_mattress_mx_subspecs> mtrllist { get; set; }
+        public List<u_mattress_mx_mtrl> mtrllist { get; set; }
     }
 }

+ 2 - 2
JLHHJSvr/Com/GetMtrlDefList.cs

@@ -17,8 +17,8 @@ namespace JLHHJSvr.Com
         public string token { get; set; }
         public List<int> mtrltypeids { get; set; }
         public int? pricelistid { get; set; }
-        public int pagesize { get; set; }
-        public int pageindex { get; set; }
+        public int pageSize { get; set; }
+        public int pageNum { get; set; }
     }
 
     public sealed class GetMtrlDefListResponse : LJResponse

+ 4 - 0
JLHHJSvr/Com/Model/u_mattress_mx_mtrl.cs

@@ -67,6 +67,10 @@ namespace JLHHJSvr.Com.Model
         public decimal? dannum4_rate { get; set; }
         public decimal? spring_qty_width { get; set; }
         public decimal? spring_qty_length { get; set; }
+        /// <summary>
+        /// 物料表-是否主副规格调整物料
+        /// </summary>
+        public int? if_subspecs { get; set; }
         #endregion
     }
 }

+ 5 - 1
JLHHJSvr/Com/Model/u_mtrl_price.cs

@@ -95,8 +95,12 @@ namespace JLHHJSvr.Com.Model
         public string qty_formula { get; set; }
         public int? pricelistid { get; set; }
         /// <summary>
-        /// 
+        /// 床垫清单展开类型
         /// </summary>
         public int? if_interface_num { get; set; }
+        /// <summary>
+        /// 需要主副规格调整的物料
+        /// </summary>
+        public int? if_subspecs { get; set; }
     }
 }

+ 2 - 1
JLHHJSvr/Com/SaveMattress.cs

@@ -4,6 +4,7 @@ using System.Linq;
 using System.Text;
 using JLHHJSvr.Com.Model;
 using LJLib.Net.SPI.Com;
+using Newtonsoft.Json.Linq;
 
 namespace JLHHJSvr.Com
 {
@@ -28,7 +29,7 @@ namespace JLHHJSvr.Com
         /// <summary>
         /// 副规格列表
         /// </summary>
-        public List<u_mattress> subspecs { get; set; }
+        public List<JObject> subspecs { get; set; }
         /// <summary>
         /// 特殊工艺列表
         /// </summary>

+ 0 - 1
JLHHJSvr/DataStore/web_mattress.xml

@@ -132,7 +132,6 @@
 		mattressid DESC
 	</orderstr>
 	<displayfields>
-		<field field="pid" compute="getrow()">序</field>
 		<field field="mattresscode">报价唯一码</field>
 		<field field="xd_flag" datatype="checkbox">下单</field>
 		<field field="js1_flag" datatype="checkbox">产品补充审核</field>

+ 0 - 1
JLHHJSvr/DataStore/web_mattress_interfacelist.xml

@@ -105,7 +105,6 @@ SELECT u_mattress.mattressid
   </where>
   <orderstr>mattressid DESC</orderstr>
   <displayfields>
-    <field field="pid" compute="getrow()">序</field>
     <field field="yw_flag" datatype="checkbox">业务审核</field>
     <field field="js1_flag" datatype="checkbox">产品补充审核</field>
     <field field="js2_flag" datatype="checkbox">清单补充审核</field>

+ 1 - 0
JLHHJSvr/DataStore/web_mattress_mx.xml

@@ -26,6 +26,7 @@
 			CASE when u_mattress_formula.if_mtrl > 1 THEN '+' ELSE '' END as addmx,
 			CASE when u_mattress_formula.if_mtrl > 1 THEN '-' ELSE '' END as delmx,
 			u_mtrl_price.name,
+			u_mtrl_price.if_subspecs,
 			ISNULL(u_mtrltype.dannum1_rate, 0) AS dannum1_rate,
 			ISNULL(u_mtrltype.dannum2_rate, 0) AS dannum2_rate,
 			ISNULL(u_mtrltype.dannum3_rate, 0) AS dannum3_rate,

+ 1 - 0
JLHHJSvr/DataStore/web_mtrl_choose.xml

@@ -11,6 +11,7 @@
 		u_mtrl_price.cloth_width,
 		u_mtrl_price.if_inputqty,
 		u_mtrl_price.if_areaprice,
+		u_mtrl_price.if_subspecs,
 		u_mtrl_price.thickness,
 		u_mtrl_price.dscrp,
 		u_mtrl_price.createtime,

+ 104 - 0
JLHHJSvr/Excutor/ChangePasswordExcutor.cs

@@ -0,0 +1,104 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Data.SqlClient;
+using System.Linq;
+using System.Text;
+using JLHHJSvr.BLL;
+using JLHHJSvr.Com;
+using JLHHJSvr.Com.Model;
+using JLHHJSvr.DBA.DBModle;
+using JLHHJSvr.LJException;
+using LJLib.DAL.SQL;
+using LJLib.Net.SPI.Server;
+using LJLib.Tools.DEncrypt;
+using LJLib.Tools.Encry;
+
+namespace JLHHJSvr.Excutor
+{
+    internal sealed class ChangePasswordExcutor : ExcutorBase<ChangePasswordRequest, ChangePasswordResponse>
+    {
+        protected override void ExcuteInternal(ChangePasswordRequest request, object state, ChangePasswordResponse rslt)
+        {
+            //if (string.IsNullOrEmpty(request.newpassword))
+            //{
+            //    rslt.ErrMsg = "新密码不能为空";
+            //    return;
+            //}
+
+            psw_bczh3 pswhelper = new psw_bczh3();
+
+            using (var con = new SqlConnection(GlobalVar.ConnectionString))
+            using (var cmd = con.CreateCommand())
+            {
+
+                con.Open();
+                var sys_power_key = "123457851239866";
+
+                cmd.CommandText =
+                    @"select psw from u_user_jlhprice where userid = @userid";
+                cmd.Parameters.Clear();
+                cmd.Parameters.AddWithValue("@userid", request.userid);
+                using (var reader = cmd.ExecuteReader())
+                {
+                    if (reader.Read())
+                    {
+                        var psw = Convert.ToString(reader["psw"]).Trim();
+
+
+                        if (pswhelper.GetEntrypt(request.oldpassword, 0, sys_power_key) != psw)  //BC493812B6664BECBF44C21C3BB043C4
+                        {
+                            rslt.ErrMsg = "当前密码错误";
+                            return;
+                        }
+                    }
+                    else
+                    {
+                        rslt.ErrMsg = "用户名不存在或密码错误";
+                        return;
+                    }
+                }
+
+                //if (!UserHelper.CheckL1LoginPasswordStrength(option707, request.newpassword))
+                //{
+                //    string pswErr = string.Empty;
+                //    switch (option707)
+                //    {
+                //        case 3:
+                //            pswErr = "数字字母加特殊符号混合(至少8位长度校验)";
+                //            break;
+                //        case 2:
+                //            pswErr = "数字字母混合(至少6位长度校验)";
+                //            break;
+                //        case 1:
+                //            pswErr = "纯数字(至少6位长度校验)";
+                //            break;
+                //    }
+                //    rslt.ErrMsg = $"新密码强度不匹配,匹配规则:{pswErr}";
+                //    return;
+                //}
+
+                cmd.Transaction = cmd.Connection.BeginTransaction(IsolationLevel.ReadUncommitted);
+                var pswd1 = pswhelper.GetEntrypt(request.newpassword, 0, sys_power_key);
+
+                cmd.CommandText = @"update u_user_jlhprice 
+                                    set psw = @psw
+                                    where userid = @userid";
+                cmd.Parameters.Clear();
+                cmd.Parameters.AddWithValue("@userid", request.userid);
+                cmd.Parameters.AddWithValue("@psw", pswd1);
+
+                if (cmd.ExecuteNonQuery() == 1)
+                {
+                    cmd.Transaction.Commit();
+                }
+                else
+                {
+                    cmd.Transaction.Rollback();
+                    rslt.ErrMsg = "修改失败,修改数量不为1";
+                }
+
+            }
+        }
+    }
+}

+ 7 - 1
JLHHJSvr/Excutor/GetComputeSpringExcutor.cs

@@ -74,6 +74,7 @@ namespace JLHHJSvr.Excutor
 
                 var helper = HelperBase.GetHelper<BedNetHelper>(cmd, new HelperBase.Context() { tokendata = tokendata });
                 var _bednet = request.bednet;
+                var springList = new List<u_bednetmx_spring>();
 
                 if (request.bednet.bednetid > 0 && request.bednetMx == null)
                 {
@@ -81,6 +82,11 @@ namespace JLHHJSvr.Excutor
                     _bednet = helper.GetBedNet(request.bednet.bednetid.Value);
                     _bednet.pricelistid = request.bednet.pricelistid;
                     request.bednetMx = helper.GetBedNetMxList(request.bednet.bednetid.Value);
+
+                    if (request.bednetMx[0].if_part.Value > 0)
+                    {
+                        springList = helper.GetBedNetSpringList(request.bednet.bednetid.Value);
+                    }
                 }
 
                 // 初始化属性
@@ -96,7 +102,7 @@ namespace JLHHJSvr.Excutor
                     _bednet.mattress_width = request.bednet.mattress_width;
                     _bednet.mattress_length = request.bednet.mattress_length;
 
-                    helper.CalCulateSpringQty(_bednet, request.bednetMx);
+                    helper.CalCulateSpringQty(_bednet, request.bednetMx, springList);
                 }
                 catch (Exception e)
                 {

+ 2 - 0
JLHHJSvr/Excutor/GetERPMtrldefListExcutor.cs

@@ -111,6 +111,8 @@ namespace JLHHJSvr.Excutor
                         parameters.Add("pagesize", request.pagesize);
                     }
                 }
+                // 已终审
+                parameters.Add("flag", 2);
 
                 int total = 0;
                 var resultList = erpHelper.GetERPList<erp_mtrldef>("GetL1Mtrldef", ref total, parameters);

+ 8 - 0
JLHHJSvr/Excutor/GetMattressInterfaceListExcutor.cs

@@ -99,6 +99,9 @@ namespace JLHHJSvr.Excutor
                             mattressname = Convert.ToString(reader["mattressname"]),
                             mattresscode = Convert.ToString(reader["mattresscode"]),
                             mattressrelcode = Convert.ToString(reader["mattressrelcode"]),
+                            mattress_width = Convert.ToInt32(reader["mattress_width"]),
+                            mattress_length = Convert.ToInt32(reader["mattress_length"]),
+                            mattress_height = Convert.ToInt32(reader["mattress_height"]),
                             erp_configcodetype = Convert.ToInt32(reader["erp_configcodetype"]),
                             erp_mtrltypeid = Convert.ToInt32(reader["erp_mtrltypeid"]),
                             erp_mtrlcode = Convert.ToString(reader["erp_mtrlcode"]),
@@ -157,6 +160,11 @@ namespace JLHHJSvr.Excutor
                             }
                         }
                     }
+
+                    if (rslt.mattress.erp_mtrlunit == "")
+                    {
+                        rslt.mattress.erp_mtrlunit = "张";
+                    }
                 }
 
                 var interfaceHelper = HelperBase.GetHelper<InterfaceHelper>(cmd, new HelperBase.Context() { tokendata = tokendata });

+ 9 - 12
JLHHJSvr/Excutor/GetMattressSubspecsExcutor.cs

@@ -49,25 +49,22 @@ namespace JLHHJSvr.Excutor
 
                     if (subspecsList.Count > 0)
                     {
-                        foreach(var mattrss in subspecsList)
+                        rslt.bednetMxs = new List<u_mattress_mx_mtrl>();
+                        rslt.mtrllist = new List<u_mattress_mx_mtrl>();
+
+                        foreach (var mattrss in subspecsList)
                         {
-                            var _res = new u_mattress_mx_subspecs()
-                            {
-                                mattressid = mattrss.mattressid,
-                                mattress_width = mattrss.mattress_width,
-                                mattress_length = mattrss.mattress_length,
-                                //mattress_height = 
-                            };
                             //获取弹簧排列
-                            List<u_mattress_mx_mtrl> springList = helper.GetMattressSubspecsBednet(mattrss.mattressid);
+                            List<u_mattress_mx_mtrl> bednetmxList = helper.GetMattressSubspecsBednet(mattrss.mattressid);
+                            rslt.bednetMxs = rslt.bednetMxs.Concat(bednetmxList).ToList();
 
                             //判断是否有主副规格调整物料
-
+                            List<u_mattress_mx_mtrl> mtrlList = helper.GetMattressMxSubspecsMtrl(mattrss.mattressid);
+                            rslt.mtrllist = rslt.mtrllist.Concat(mtrlList).ToList();
                         }
                     }
 
-                    //rslt.mattressMx = result;
-
+                    rslt.mattresses = subspecsList;
                 }
             }
         }

+ 50 - 47
JLHHJSvr/Excutor/GetMtrlDefListExcutor.cs

@@ -52,6 +52,7 @@ namespace JLHHJSvr.Excutor
 		                            ,u_mtrl_price.lastdate AS lastdate
 		                            ,u_mtrl_price.handtype AS handtype
 		                            ,u_mtrl_price_pricelist.pricelistid
+                                    ,u_mtrl_price.if_subspecs
 	                            FROM u_mtrl_price
 	                            INNER JOIN u_mtrl_price_pricelist ON u_mtrl_price.mtrlid = u_mtrl_price_pricelist.mtrlid";
                 var list = new List<u_mtrl_price>();
@@ -69,17 +70,17 @@ namespace JLHHJSvr.Excutor
                     whereList.Add($"u_mtrl_price.mtrltype IN {ListEx.getString(request.mtrltypeids)}");
                 }
 
-                var outputFields = "mtrlid,mtrltype,name,priceunit,shrinkage,gram_weight,cloth_width,if_inputqty,if_areaprice,createtime,createby,price,thickness,dscrp,erp_mtrlid,fjcnt,isuse,lastdate,handtype,pricelistid";
-                DbSqlHelper.SelectJoin(cmd, selectStr, ListEx.GetWhereStr(whereList), parms, "mtrlid", outputFields, request.pageindex, request.pagesize, list);
+                var outputFields = "mtrlid,mtrltype,name,priceunit,shrinkage,gram_weight,cloth_width,if_inputqty,if_areaprice,createtime,createby,price,thickness,dscrp,erp_mtrlid,fjcnt,isuse,lastdate,handtype,pricelistid,if_subspecs";
+                DbSqlHelper.SelectJoin(cmd, selectStr, ListEx.GetWhereStr(whereList), parms, "mtrlid", outputFields, request.pageNum, request.pageSize, list);
 
                 // 
                 var selectCntStr = @"SELECT COUNT(0) FROM u_mtrl_price INNER JOIN u_mtrl_price_pricelist ON u_mtrl_price.mtrlid = u_mtrl_price_pricelist.mtrlid";
                 if (whereList.Any())
                 {
-                    selectCntStr += "WHERE ";
+                    selectCntStr += " WHERE ";
                     selectCntStr += ListEx.GetWhereStr(whereList);
                 }
-                cmd.CommandText = selectStr;
+                cmd.CommandText = selectCntStr;
                 cmd.Parameters.Clear();
                 foreach (var item in parms)
                 {
@@ -88,49 +89,49 @@ namespace JLHHJSvr.Excutor
                 var totalcnt = Convert.ToInt32(cmd.ExecuteScalar());
                 rslt.totalcnt += totalcnt;
 
-                selectStr = @"SELECT u_mtrl_price.mtrlid
-									,u_mtrl_price.mtrltype
-									,u_mtrl_price.name
-									,u_mtrl_price.priceunit
-									,u_mtrl_price.shrinkage
-									,u_mtrl_price.gram_weight
-									,u_mtrl_price.cloth_width
-									,u_mtrl_price.if_inputqty
-									,u_mtrl_price.if_areaprice
-									,u_mtrl_price.createtime
-									,u_mtrl_price.createby
-									,0 AS price
-									,u_mtrl_price.thickness
-									,u_mtrl_price.dscrp
-									,erp_mtrlid
-									,u_mtrl_price.fjcnt AS fjcnt
-									,u_mtrl_price.isuse AS isuse
-									,u_mtrl_price.lastdate AS lastdate
-									,u_mtrl_price.handtype AS handtype
-									,0 AS pricelistid
-								FROM u_mtrl_price";
-
-                whereList.Clear();
-                parms.Clear();
-                if (request.pricelistid != null && request.pricelistid > 0)
-                {
-                    whereList.Add(@"u_mtrl_price.mtrlid NOT IN (
-											SELECT mtrlid
-											FROM u_mtrl_price_pricelist
-											WHERE pricelistid = @pricelistid
-											)");
-                    parms.Add("@pricelistid", request.pricelistid);
-                }
-
-                if (request.mtrltypeids != null && request.mtrltypeids.Any())
-                {
-                    whereList.Add($"u_mtrl_price.mtrltype IN {ListEx.getString(request.mtrltypeids)}");
-                }
-
-                DbSqlHelper.SelectJoin(cmd, selectStr, ListEx.GetWhereStr(whereList), parms, "mtrlid", outputFields, request.pageindex, request.pagesize, list);
-
-                totalcnt = DbSqlHelper.SelectCount(cmd, "u_mtrl_price", ListEx.GetWhereStr(whereList), parms);
-                rslt.totalcnt += totalcnt;
+        //        selectStr = @"SELECT u_mtrl_price.mtrlid
+								//	,u_mtrl_price.mtrltype
+								//	,u_mtrl_price.name
+								//	,u_mtrl_price.priceunit
+								//	,u_mtrl_price.shrinkage
+								//	,u_mtrl_price.gram_weight
+								//	,u_mtrl_price.cloth_width
+								//	,u_mtrl_price.if_inputqty
+								//	,u_mtrl_price.if_areaprice
+								//	,u_mtrl_price.createtime
+								//	,u_mtrl_price.createby
+								//	,0 AS price
+								//	,u_mtrl_price.thickness
+								//	,u_mtrl_price.dscrp
+								//	,erp_mtrlid
+								//	,u_mtrl_price.fjcnt AS fjcnt
+								//	,u_mtrl_price.isuse AS isuse
+								//	,u_mtrl_price.lastdate AS lastdate
+								//	,u_mtrl_price.handtype AS handtype
+								//	,0 AS pricelistid
+								//FROM u_mtrl_price";
+
+        //        whereList.Clear();
+        //        parms.Clear();
+        //        if (request.pricelistid != null && request.pricelistid > 0)
+        //        {
+        //            whereList.Add(@"u_mtrl_price.mtrlid NOT IN (
+								//			SELECT mtrlid
+								//			FROM u_mtrl_price_pricelist
+								//			WHERE pricelistid = @pricelistid
+								//			)");
+        //            parms.Add("@pricelistid", request.pricelistid);
+        //        }
+
+        //        if (request.mtrltypeids != null && request.mtrltypeids.Any())
+        //        {
+        //            whereList.Add($"u_mtrl_price.mtrltype IN {ListEx.getString(request.mtrltypeids)}");
+        //        }
+
+        //        DbSqlHelper.SelectJoin(cmd, selectStr, ListEx.GetWhereStr(whereList), parms, "mtrlid", outputFields, request.pageindex, request.pagesize, list);
+
+        //        totalcnt = DbSqlHelper.SelectCount(cmd, "u_mtrl_price", ListEx.GetWhereStr(whereList), parms);
+        //        rslt.totalcnt += totalcnt;
 
                 var mtrlids = new List<int>();
                 foreach(var mtrl in list)
@@ -169,6 +170,8 @@ namespace JLHHJSvr.Excutor
                 }
 
                 rslt.list = list;
+                rslt.pageindex = request.pageNum;
+                rslt.pagesize = request.pageSize;
             }
         }
     }

+ 20 - 1
JLHHJSvr/Excutor/JLH_FetchPriceExcutor.cs

@@ -24,7 +24,25 @@ namespace JLHHJSvr.Excutor
 
                 rslt.list = new List<u_configure_codemx>();
 
-                cmd.CommandText = "SELECT '' AS mtrlcode, 123 AS price";
+                cmd.CommandText = @"SELECT 
+                            MAX(
+								CASE WHEN u_mattress_interface_qd.erp_mtrlid > 0 and u_mattress_interface_qd.actual_useqty > 0
+								THEN u_mattress_mx_mtrl.costamt / u_mattress_interface_qd.actual_useqty
+								ELSE 0 END
+							) AS price 
+                            ,u_mattress_interface_qd.mtrlid, u_mattress_interface_qd.erp_mtrlid
+                            from u_mattress_interface_qd
+                            inner  join u_mattress_mx_mtrl on u_mattress_mx_mtrl.mattressid = u_mattress_interface_qd.mattressid
+													and u_mattress_mx_mtrl.mtrlid = u_mattress_interface_qd.mtrlid
+							where 
+							u_mattress_interface_qd.mattressid = 17493977
+							and 
+							u_mattress_interface_qd.erp_mtrlid  > 0
+							and u_mattress_interface_qd.actual_useqty > 0
+							and u_mattress_interface_qd.mtrlid > 0
+							
+							GROUP BY u_mattress_interface_qd.mtrlid, u_mattress_interface_qd.erp_mtrlid
+							";
                 cmd.Parameters.Clear();
 
                 using (var reader = cmd.ExecuteReader())
@@ -38,6 +56,7 @@ namespace JLHHJSvr.Excutor
                         });
                     }
                 }
+
             }
         }
     }

+ 43 - 22
JLHHJSvr/Excutor/SaveMattressExcutor.cs

@@ -85,7 +85,8 @@ namespace JLHHJSvr.Excutor
 
                         if (subspecsList.Count > 0)
                         {
-                            foreach(var submx in subspecsList)
+
+                            foreach (var submx in subspecsList)
                             {
                                 // 删除副规格特殊工艺表
                                 cmd.CommandText = @"DELETE u_mattress_mx_extra WHERE mattressid = @mattressid";
@@ -110,7 +111,7 @@ namespace JLHHJSvr.Excutor
                         if (request.subspecs != null && request.subspecs.Count > 0)
                         {
                             // 排序:宽、长,从小到大
-                            var _subspecs = request.subspecs.OrderBy(o => o.mattress_width).ThenBy(o => o.mattress_length).ToList();
+                            var _subspecs = request.subspecs.OrderBy(o => o["mattress_width"]).ThenBy(o => o["mattress_length"]).ToList();
                             // 副规格
                             foreach (var submx in _subspecs)
                             {
@@ -118,13 +119,15 @@ namespace JLHHJSvr.Excutor
                                 _mattress.parentid = request.mattress.mattressid;
                                 _mattress.mattressid = 0;
                                 _mattress.mattresscode = "";
-                                _mattress.mattress_width = submx.mattress_width;
-                                _mattress.mattress_length = submx.mattress_length;
-                                _mattress.mattress_height = submx.mattress_height;
+                                _mattress.mattress_width = Convert.ToInt32(submx["mattress_width"]);
+                                _mattress.mattress_length = Convert.ToInt32(submx["mattress_length"]);
+                                _mattress.mattress_height = Convert.ToInt32(submx["mattress_height"]);
 
                                 var _mattressMx = new List<u_mattress_mx_mtrl>();
                                 if (request.mattressMx != null && request.mattressMx.Any())
                                 {
+                                    var bednetIndex = 0; // 床网索引
+                                    var ifSubspecsIndex = 0; // 垫层主副规格物料索引
                                     foreach (var itemMx in request.mattressMx)
                                     {
                                         var item = ObjectHelper.DeepCopy(itemMx);
@@ -135,16 +138,20 @@ namespace JLHHJSvr.Excutor
                                         #region 副规格床网自动匹配/新增逻辑
                                         if (item.formulatype == 99 && item.mtrlid > 0)
                                         {
+                                            bednetIndex++;
                                             var oBednet = new u_bednet();
                                             var _bednet = helperBednet.GetBedNet(item.mtrlid.Value);
                                             var _bednetMx = helperBednet.GetBedNetMxList(item.mtrlid.Value);
                                             var _bednetSpring = helperBednet.GetBedNetSpringList(item.mtrlid.Value);
 
-                                            _bednet.mattress_width = submx.mattress_width - (request.mattress.mattress_width - _bednet.mattress_width);
-                                            _bednet.mattress_length = submx.mattress_length - (request.mattress.mattress_length - _bednet.mattress_length);
+                                            _bednet.mattress_width = Convert.ToInt32(submx["mattress_width"]) - (request.mattress.mattress_width - _bednet.mattress_width);
+                                            _bednet.mattress_length = Convert.ToInt32(submx["mattress_length"]) - (request.mattress.mattress_length - _bednet.mattress_length);
 
                                             if (_bednetMx.Count > 0)
                                             {
+                                                var _spring_qty_width = Convert.ToInt32(submx["spring_qty_width_" + bednetIndex]);
+                                                var _spring_qty_length = Convert.ToInt32(submx["spring_qty_length_" + bednetIndex]);
+
                                                 cmd.CommandText = @"SELECT TOP 1 u_bednet.bednetid
                                                                             ,u_bednet_type.typename
                                                                             ,bednetcode
@@ -173,8 +180,8 @@ namespace JLHHJSvr.Excutor
                                                 cmd.Parameters.AddWithValue("@mattress_length", _bednet.mattress_length);
                                                 cmd.Parameters.AddWithValue("@bednet_height", _bednetMx[0].bednet_height);
                                                 cmd.Parameters.AddWithValue("@springid", _bednetMx[0].springid);
-                                                cmd.Parameters.AddWithValue("@spring_qty_width", submx.spring_qty_width);
-                                                cmd.Parameters.AddWithValue("@spring_qty_length", submx.spring_qty_length);
+                                                cmd.Parameters.AddWithValue("@spring_qty_width", _spring_qty_width);
+                                                cmd.Parameters.AddWithValue("@spring_qty_length", _spring_qty_length);
                                                 cmd.Parameters.AddWithValue("@if_side_iron", _bednetMx[0].if_side_iron);
                                                 cmd.Parameters.AddWithValue("@side_iron_qty", _bednetMx[0].side_iron_qty);
                                                 cmd.Parameters.AddWithValue("@fabrics2_mtrlid", _bednetMx[0].fabrics2_mtrlid);
@@ -200,22 +207,13 @@ namespace JLHHJSvr.Excutor
                                             if (oBednet.bednetid == null)
                                             {
                                                 oBednet = _bednet;
-                                                _bednetMx[0].spring_qty_width = submx.spring_qty_width;
-                                                _bednetMx[0].spring_qty_length = submx.spring_qty_length;
+                                                _bednetMx[0].spring_qty_width = Convert.ToInt32(submx["spring_qty_width_" + bednetIndex]);
+                                                _bednetMx[0].spring_qty_length = Convert.ToInt32(submx["spring_qty_length_" + bednetIndex]);
 
                                                 oBednet.bednetid = 0;
 
-                                                //// 袋装网,多个分区时,重新分配弹簧
-                                                //if (_bednetMx[0].if_part == 1 && _bednetSpring.Count > 0)
-                                                //{
-                                                //    var bednetArea = helperBednet.GetBedNetArea(Convert.ToInt32(oBednet.duo_qv_str));
-
-                                                //    foreach (var _spr in _bednetSpring)
-                                                //    {
-                                                //        _spr.spring_qty_width = submx.spring_qty_width;
-                                                //        //_spr.spring_qty_length = 
-                                                //    }
-                                                //}
+                                                // 袋装网,多个分区时,重新分配弹簧
+                                                helperBednet.GetSpringListQty(oBednet, _bednetMx[0], ref _bednetSpring);
 
                                                 helperBednet.SaveBedNet(oBednet, _bednetMx, _bednetSpring);
                                             }
@@ -238,6 +236,29 @@ namespace JLHHJSvr.Excutor
                                         }
                                         #endregion
 
+                                        #region 垫层改动逻辑
+                                        if (item.formulatype == 1 && item.mtrlid > 0 )
+                                        {
+                                            // 规格长/宽,按比例缩放
+                                            if (item.mattress_width > 0)
+                                            {
+                                                item.mattress_width = (int)Math.Floor((decimal)item.mattress_width * (Convert.ToDecimal(submx["mattress_width"]) / (decimal)request.mattress.mattress_width));
+                                            }
+                                            if (item.mattress_length > 0)
+                                            {
+                                                item.mattress_length = (int)Math.Floor((decimal)item.mattress_length * (Convert.ToDecimal(submx["mattress_length"]) / (decimal)request.mattress.mattress_length));
+                                            }
+
+                                            // 副规格-垫层物料替换
+                                            if (item.if_subspecs == 1)
+                                            {
+                                                ifSubspecsIndex++;
+                                                item.mtrlid = Convert.ToInt32(submx["cushions_subspecs_" + ifSubspecsIndex]);
+                                            }
+
+                                        }
+                                        #endregion
+
                                         _mattressMx.Add(item);
                                     }
                                 }

+ 2 - 2
JLHHJSvr/Excutor/SaveMtrlDefExcutor.cs

@@ -55,7 +55,7 @@ namespace JLHHJSvr.Excutor
                             request.mtrl.createtime = dtNow;
                             request.mtrl.createby = tokendata.username;
 
-                            var fields = @"mtrlid,mtrltype,name,priceunit,shrinkage,gram_weight,cloth_width,if_inputqty,if_areaprice,createtime,createby,thickness,dscrp,erp_mtrlid,fjcnt,isuse,handtype,lastdate,erp_mtrlengname";
+                            var fields = @"mtrlid,mtrltype,name,priceunit,shrinkage,gram_weight,cloth_width,if_inputqty,if_areaprice,createtime,createby,thickness,dscrp,erp_mtrlid,fjcnt,isuse,handtype,lastdate,erp_mtrlengname,if_subspecs";
                             DbSqlHelper.Insert(cmd, "u_mtrl_price", null, request.mtrl, fields);
 
                             var fields2 = @"mtrlid,pricelistid,price,pricetype,price_formula,qty_formula";
@@ -74,7 +74,7 @@ namespace JLHHJSvr.Excutor
                         else
                         {
                             //修改
-                            var fields = @"mtrltype,name,priceunit,shrinkage,gram_weight,cloth_width,if_inputqty,if_areaprice,thickness,dscrp,erp_mtrlid,fjcnt,isuse,handtype,lastdate,erp_mtrlengname";
+                            var fields = @"mtrltype,name,priceunit,shrinkage,gram_weight,cloth_width,if_inputqty,if_areaprice,thickness,dscrp,erp_mtrlid,fjcnt,isuse,handtype,lastdate,erp_mtrlengname,if_subspecs";
                             DbSqlHelper.Update(cmd, "u_mtrl_price", null, request.mtrl, "mtrlid", fields);
 
                             var fields2 = @"price,pricetype,price_formula,qty_formula";

+ 1 - 0
JLHHJSvr/GlobalVar/GlobalVar.cs

@@ -130,6 +130,7 @@ namespace JLHHJSvr
                 excutorManager = new ExcutorManager();
                 // excutorManager.AddMap("HelloWord", typeof(HelloWordRequest), new HelloWordExcutor());
                 excutorManager.AddMap("Login", typeof(LoginRequest), new LoginExcutor());//登陆
+                excutorManager.AddMap("ChangePassword", typeof(ChangePasswordRequest), new ChangePasswordExcutor());
                 excutorManager.AddMap("GetSysUserFileString", typeof(GetSysUserFileStringRequest), new GetSysUserFileStringExcutor());
                 excutorManager.AddMap("SetSysUserFileString", typeof(SetSysUserFileStringRequest), new SetSysUserFileStringExcutor());
                 excutorManager.AddMap("CommonDynamicSelect", typeof(CommonDynamicSelectRequest), new CommonDynamicSelectExcutor());

+ 85 - 3
JLHHJSvr/Helper/BedNetHelper.cs

@@ -2045,15 +2045,91 @@ namespace JLHHJSvr.Helper
             return springList;
         }
 
+        /// <summary>
+        /// 获取床网分区系数
+        /// </summary>
+        /// <param name="areaid"></param>
+        /// <returns></returns>
         public u_bednet_area GetBedNetArea(int areaid)
         {
-            var outputFields = @"u_bednet_area.areaid, u_bednet_area.areaname, u_bednet_area.area_1, u_bednet_area.area_2, u_bednet_area.area_3, u_bednet_area.area_4, u_bednet_area.area_5, u_bednet_area.area_6, u_bednet_area.area_7, u_bednet_area.area_8, u_bednet_area.area_9, u_bednet_area.area_10, u_bednet_area.area_11, u_bednet_area.area_12, u_bednet_area.area_13, u_bednet_area.area_14, u_bednet_area.area_15";
+            var outputFields = @"u_bednet_area.areaid, u_bednet_area.areaname, u_bednet_area.area_1, u_bednet_area.area_2, u_bednet_area.area_3, u_bednet_area.area_4, u_bednet_area.area_5, u_bednet_area.area_6, u_bednet_area.area_7, u_bednet_area.area_8, u_bednet_area.area_9, u_bednet_area.area_10, u_bednet_area.area_11, u_bednet_area.area_12, u_bednet_area.area_13, u_bednet_area.area_14, u_bednet_area.area_15
+                                ,u_bednet_area.sponge_1 ,u_bednet_area.sponge_2 ,u_bednet_area.sponge_3 ,u_bednet_area.sponge_4 ,u_bednet_area.sponge_5 ,u_bednet_area.sponge_6 ,u_bednet_area.sponge_7 ,u_bednet_area.sponge_8 ,u_bednet_area.sponge_9 ,u_bednet_area.sponge_10 ,u_bednet_area.sponge_11 ,u_bednet_area.sponge_12 ,u_bednet_area.sponge_13 ,u_bednet_area.sponge_14 ,u_bednet_area.sponge_15";
             var bedentArea = new u_bednet_area() { areaid = areaid };
             DbSqlHelper.SelectOne(cmd, bedentArea, outputFields);
 
             return bedentArea;
         }
 
+        /// <summary>
+        /// 计算分配弹簧分区
+        /// </summary>
+        /// <param name="areaid"></param>
+        public void GetSpringListQty(u_bednet bednet, u_bednetmx bednetMx, ref List<u_bednetmx_spring> springList)
+        {
+
+            if (bednetMx.if_part == 1 && springList.Count > 0)
+            {
+                var bednetArea = GetBedNetArea(Convert.ToInt32(bednet.duo_qv_str));
+                var attrKey = "area_";
+
+
+                if (bednet.sponge_mtrlid > 0)
+                {
+                    // 有包边读取另外的配置
+                    attrKey = "sponge_";
+                }
+
+                var bednetAreaDic = ToDictionary(bednetArea);
+
+                var rateList = GetDuoquVal(bednetAreaDic);
+
+
+                foreach (var _spr in springList)
+                {
+                    _spr.spring_qty_width = bednetMx.spring_qty_width;
+                    //_spr.spring_qty_length = 
+                }
+            }
+        }
+
+        public Dictionary<string, object> ToDictionary(object obj)
+        {
+            var result = new Dictionary<string, object>();
+            if (obj == null) return result;
+
+            foreach (var prop in obj.GetType().GetProperties())
+            {
+                result[prop.Name] = prop.GetValue(obj);
+            }
+
+            return result;
+        }
+        public List<decimal> GetDuoquVal(Dictionary<string, object> item, string attr = "area_")
+        {
+            var arr = new List<decimal>();
+
+            foreach (var key in item.Keys)
+            {
+                if (key.Contains(attr))
+                {
+                    // 尝试将值转换为 double
+                    if (decimal.TryParse(item[key]?.ToString(), out decimal value))
+                    {
+                        arr.Add(value);
+                    }
+                }
+            }
+
+            // 忽略数组末尾连续的 0
+            int i = arr.Count - 1;
+            while (arr[i] == 0)
+            {
+                i--;
+            }
+
+            return arr.Take(i + 1).ToList();
+        }
+
         public List<u_bednetmx_mtrl> GetBedNetMxMtrlList(int bednetid)
         {
             var mxList = new List<u_bednetmx_mtrl>();
@@ -2771,7 +2847,7 @@ namespace JLHHJSvr.Helper
             return spring.name;
         }
 
-        public void CalCulateSpringQty(u_bednet bednet, List<u_bednetmx> mxlist)
+        public void CalCulateSpringQty(u_bednet bednet, List<u_bednetmx> mxlist, List<u_bednetmx_spring> springList)
         {
 
             // 默认方法
@@ -2782,7 +2858,13 @@ namespace JLHHJSvr.Helper
 
             foreach (var mx in mxlist)
             {
-                var spring = new u_spring() { springid = mx.springid };
+                var _springid = mx.springid;
+                if (mx.if_part.Value == 1 && springList.Count > 0)
+                {
+                    //多区
+                    _springid = springList[0].springid;
+                }
+                var spring = new u_spring() { springid = _springid };
                 DbSqlHelper.SelectOne(cmd, spring, "line_diameter,gram_weight,height,center_diameter,caliber,cyclenum,roll_width,roll_length,arrangement_width,arrangement_height");
 
                 // 处理相同公式部分

+ 16 - 3
JLHHJSvr/Helper/InterfaceHelper.cs

@@ -786,9 +786,11 @@ namespace JLHHJSvr.Helper
         {
             var name_arr = new string[5];
             int bednetid = 0;
+            int spongeMtrlid = 0; // 是否有海绵包边物料
 
-            cmd.CommandText = @"SELECT u_bednetmx.bednet_height,u_bednetmx.bednetid
+            cmd.CommandText = @"SELECT u_bednetmx.bednet_height,u_bednetmx.bednetid,u_bednet.sponge_mtrlid
                                 FROM u_bednetmx
+								LEFT OUTER JOIN u_bednet ON u_bednet.bednetid = u_bednetmx.bednetid
                                 INNER JOIN (
 	                                SELECT mtrlid
 	                                FROM u_mattress_mx_mtrl
@@ -804,7 +806,11 @@ namespace JLHHJSvr.Helper
                 while (reader.Read())
                 {
                     decimal height = Convert.ToDecimal(reader["bednet_height"]);
-                    if (height == mx.thickness) bednetid = Convert.ToInt32(reader["bednetid"]);
+                    if (height == mx.thickness)
+                    {
+                        bednetid = Convert.ToInt32(reader["bednetid"]);
+                        spongeMtrlid = Convert.ToInt32(reader["sponge_mtrlid"]);
+                    }
                 }
             }
 
@@ -846,7 +852,8 @@ namespace JLHHJSvr.Helper
             }
 
             interfaceList.Add(InserMattressInterfacePz("垫层", $"{chastr}-床网{count}生产说明", 1, new string[] { "" }));
-            interfaceList.Add(InserMattressInterfacePz("垫层", $"{chastr}-床网{count}包边海绵条", 1, new string[] { "" }));
+
+            if (spongeMtrlid > 0) interfaceList.Add(InserMattressInterfacePz("垫层", $"{chastr}-床网{count}包边海绵条", 1, new string[] { "" }));
         }
         /// <summary>
         /// 网面布料 / 打底无纺布 / 毡类 / 顶布 / 垫层
@@ -946,6 +953,12 @@ namespace JLHHJSvr.Helper
                 {
                     int cnt = Convert.ToInt32(Math.Abs(mx.qty.Value));
 
+
+                    var mtrldef = new u_mtrl_price() { mtrlid = mx.mtrlid };
+                    if (DbSqlHelper.SelectOne(cmd, mtrldef, "erp_mtrlid") == 1)
+                    {
+                        mx.erp_mtrlid = mtrldef.erp_mtrlid;
+                    }
                     // 处理特殊辅料
                     if (specialSet.Contains(mx.mtrlname))
                     {

+ 49 - 4
JLHHJSvr/Helper/MattressHelper.cs

@@ -1803,9 +1803,10 @@ namespace JLHHJSvr.Helper
         public List<u_mattress> GetMattressSubspecs(int mattressid)
         {
             var list = new List<u_mattress>();
-            var outputFields = @"mattressid,mattress_width,mattress_length,mattress_height,parentid";
+            var outputFields = @"mattressid,mattresscode,mattress_width,mattress_length,mattress_height,parentid";
             var selectStr = @"SELECT 
 		                            mattressid,
+		                            mattresscode,
 		                            mattress_width,
 		                            mattress_length,
 		                            mattress_height,
@@ -1813,7 +1814,9 @@ namespace JLHHJSvr.Helper
                                 FROM u_mattress
                                 ";
             var whereList = new List<string>();
-            whereList.Add("u_mattress.parentid = @mattressid");
+            whereList.Add(@"u_mattress.parentid = @mattressid OR  parentid = (
+                SELECT parentid FROM u_mattress WHERE mattressid = @mattressid and parentid > 0
+            )");
 
             DbSqlHelper.SelectJoin(cmd, selectStr, ListEx.GetWhereStr(whereList), new Dictionary<string, object>() { { "@mattressid", mattressid } }, "mattressid", outputFields, 0, 0, list);
 
@@ -1827,8 +1830,10 @@ namespace JLHHJSvr.Helper
         public List<u_mattress_mx_mtrl> GetMattressSubspecsBednet(int mattressid)
         {
             var list = new List<u_mattress_mx_mtrl>();
-            var outputFields = @"mtrlid,spring_qty_width,spring_qty_length";
+            var outputFields = @"mattressid,mtrlid,spring_qty_width,spring_qty_length";
             var selectStr = @"SELECT
+                                u_mattress_mx_mtrl.mattressid,
+                                u_mattress_mx_mtrl.mattressmxid,
 				                u_mattress_mx_mtrl.mtrlid,
 				                ISNULL(u_bednetmx.spring_qty_width, 0) AS spring_qty_width,
 				                ISNULL(u_bednetmx.spring_qty_length, 0) AS spring_qty_length
@@ -1837,7 +1842,47 @@ namespace JLHHJSvr.Helper
 			                LEFT OUTER JOIN u_bednetmx on u_bednetmx.bednetid = u_mattress_mx_mtrl.mtrlid
                                 ";
             var whereList = new List<string>();
-            whereList.Add("u_mattress_mx_mtrl.formulatype = 99");
+            whereList.Add("u_mattress_formula.formulatype = 99");
+            whereList.Add("u_mattress_mx_mtrl.mattressid = @mattressid");
+
+            DbSqlHelper.SelectJoin(cmd, selectStr, ListEx.GetWhereStr(whereList), new Dictionary<string, object>() { { "@mattressid", mattressid } }, "mattressmxid", outputFields, 0, 0, list);
+
+            return list;
+        }
+        /// <summary>
+        /// 获取床垫明细中,垫层出现的主副规格调整物料
+        /// </summary>
+        /// <param name="mattressid"></param>
+        /// <returns></returns>
+        public List<u_mattress_mx_mtrl> GetMattressMxSubspecsMtrl(int mattressid)
+        {
+            var list = new List<u_mattress_mx_mtrl>();
+            var outputFields = @"mattressid,mtrlid,chastr,formulakind,mtrlname";
+            var selectStr = @"SELECT
+                                u_mattress_mx_mtrl.mattressid,
+                                u_mattress_mx_mtrl.mattressmxid,
+				                u_mattress_mx_mtrl.mtrlid,
+				                u_mattress_mx_mtrl.chastr,
+				                u_mattress_formula.formulakind,
+                                vv_mtrl_price.mtrlname
+			                FROM u_mattress_mx_mtrl
+			                LEFT JOIN u_mattress_formula On u_mattress_formula.formulaid = u_mattress_mx_mtrl.formulaid
+			                LEFT OUTER JOIN u_mtrl_price on u_mtrl_price.mtrlid = u_mattress_mx_mtrl.mtrlid
+		                    Left OUTER JOIN (
+			                    select
+				                    mtrlid,
+				                    name as mtrlname
+			                    from u_mtrl_price
+			                    union all
+				                    select top 1
+				                    0 as mtrlid,
+				                    ' ' as mtrlname
+				                    from u_user_jlhprice
+		                    ) AS vv_mtrl_price on vv_mtrl_price.mtrlid = u_mattress_mx_mtrl.mtrlid
+                                ";
+            var whereList = new List<string>();
+            whereList.Add("u_mattress_formula.formulatype = 1");
+            whereList.Add("u_mtrl_price.if_subspecs = 1");
             whereList.Add("u_mattress_mx_mtrl.mattressid = @mattressid");
 
             DbSqlHelper.SelectJoin(cmd, selectStr, ListEx.GetWhereStr(whereList), new Dictionary<string, object>() { { "@mattressid", mattressid } }, "mattressmxid", outputFields, 0, 0, list);

+ 2 - 0
JLHHJSvr/JLHHJSvr.csproj

@@ -104,6 +104,7 @@
     <Compile Include="Com\DeleteMattressExtra.cs" />
     <Compile Include="Com\GetMattressSubspecs.cs" />
     <Compile Include="Com\JLH_FetchPrice.cs" />
+    <Compile Include="Com\ChangePassword.cs" />
     <Compile Include="Com\Model\replacement_bednet.cs" />
     <Compile Include="Com\FormulaCheck.cs" />
     <Compile Include="Com\GetFormulaVarList.cs" />
@@ -302,6 +303,7 @@
     <Compile Include="Excutor\GetFormulaVarListExcutor.cs" />
     <Compile Include="Excutor\GetMattressSubspecsExcutor.cs" />
     <Compile Include="Excutor\JLH_FetchPriceExcutor.cs" />
+    <Compile Include="Excutor\ChangePasswordExcutor.cs" />
     <Compile Include="Excutor\SaveMattressExtraTypeExcutor.cs" />
     <Compile Include="Excutor\SaveMattressExtraExcutor.cs" />
     <Compile Include="Excutor\UnLockUserExcutor.cs" />