GetLogoData.ashx 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. <%@ WebHandler Language="C#" Class="GetLogoData" %>
  2. using System;
  3. using System.Data;
  4. using System.Linq;
  5. using System.Web;
  6. using System.Web.SessionState;
  7. using System.Web.Configuration;
  8. using System.Collections;
  9. using System.Collections.Generic;
  10. using System.Collections.Specialized;
  11. using System.Configuration;
  12. using Newtonsoft.Json;
  13. using Newtonsoft.Json.Linq;
  14. using Curtain.DataAccess;
  15. using Curtain.Log;
  16. using DK.XuWei.WebMes;
  17. /// <summary>
  18. /// 获取 当前产品的可变商标
  19. /// xuwei 2020-06-11
  20. /// </summary>
  21. public class GetLogoData : IHttpHandler, IReadOnlySessionState
  22. {
  23. public void ProcessRequest(HttpContext context)
  24. {
  25. using (IDataAccess conn = DataAccess.Create())
  26. {
  27. DataTable planData = conn.ExecuteDatatable(@"
  28. SELECT PP.GOODSID,PP.LOGOID,PP.QUANTITY,GDD.MATERIALCODE,PP.BEGINTIME,PP.ENDTIME
  29. FROM TP_PM_PRODUCTION_PLAN PP
  30. LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDD ON PP.GOODSID = GDD.GOODSID
  31. WHERE GDD.BARCODE = @BARCODE@
  32. AND PP.BEGINTIME <= SYSDATE
  33. AND PP.VALUEFLAG = 1
  34. AND PP.CONTROLRANGE = 1
  35. AND PP.ENDTIME > SYSDATE ",
  36. new CDAParameter("BARCODE", context.Request["barCode"])
  37. );
  38. if (planData != null && planData.Rows.Count > 0)
  39. {
  40. DataTable planFlag = conn.ExecuteDatatable(@"
  41. SELECT PLANFLAG FROM TP_MST_User WHERE USERID = @USERID@ ",
  42. new CDAParameter("USERID", HttpContext.Current.Session["userid"])
  43. );
  44. if (planFlag != null && planFlag.Rows.Count > 0 && planFlag.Rows[0]["PLANFLAG"].ToString() == "0")
  45. {
  46. //低级权限
  47. DataTable plansTable = conn.ExecuteDatatable(@"
  48. SELECT l.logoid AS id
  49. ,CASE
  50. WHEN linshi.residuequantity IS NOT NULL THEN
  51. l.logoname || '[' || t2.materialcode || ']' || ' 剩余[' || linshi.residuequantity || ']'
  52. ELSE
  53. l.logoname || '[' || t2.materialcode || ']'
  54. END AS NAME
  55. ,t2.materialcode
  56. ,nvl(gdd.valueflag, '0') AS iscurrentlogo
  57. ,1 AS ISCONTROL
  58. FROM tp_mst_logo l
  59. INNER JOIN (SELECT DISTINCT t.goodsid,t.logoid,t.materialcode
  60. FROM (SELECT g.goodsid,g.logoid,g.materialcode
  61. FROM tp_mst_goods g
  62. UNION ALL
  63. SELECT s.goodsid,s.logoid,s.materialcode
  64. FROM tp_mst_goodslogosap s) t
  65. WHERE EXISTS (SELECT 1 FROM tp_pm_groutingdailydetail g
  66. WHERE g.goodsid = t.goodsid AND g.barcode = @BARCODE@)) t2 ON t2.logoid = l.logoid
  67. LEFT JOIN tp_pm_groutingdailydetail gdd ON gdd.logoid = l.logoid
  68. AND gdd.barcode = @BARCODE@
  69. RIGHT JOIN (
  70. SELECT case when t.goodsid is null then tt.goodsid else t.goodsid end as goodsid
  71. ,case when t.logoid is null then tt.logoid else t.logoid end as logoid
  72. ,case when t.changenum is null then sum(0) else SUM(t.changenum) end as changenum
  73. ,tt.quantity
  74. ,case when t.changenum is null then tt.quantity else tt.quantity - SUM(t.changenum) end as residuequantity
  75. FROM (
  76. --在装配环节变更数量
  77. SELECT ip.goodsid,ip.logoid,COUNT(distinct l.barcode) changenum
  78. FROM tp_pm_logochangedrecord l
  79. right JOIN tp_pm_groutingdailydetail ip ON l.barcode = ip.barcode
  80. LEFT JOIN tp_pc_procedure p ON l.procedureid = p.procedureid
  81. LEFT JOIN (SELECT pp.goodsid,pp.logoid,pp.quantity,gdd.materialcode,pp.begintime ,pp.endtime
  82. FROM tp_pm_production_plan pp
  83. LEFT JOIN tp_pm_groutingdailydetail gdd ON pp.goodsid = gdd.goodsid
  84. WHERE gdd.barcode = @BARCODE@
  85. AND pp.begintime <= SYSDATE
  86. AND pp.endtime > SYSDATE and pp.valueflag = 1 AND pp.CONTROLRANGE = 1) plans ON plans.goodsid = ip.goodsid AND plans.logoid = ip.logoid
  87. WHERE l.createtime >= plans.begintime
  88. AND l.createtime < plans.endtime
  89. AND ip.goodsid = @GOODSID@
  90. and ip.logoid = l.newlogoid
  91. AND l.oldlogoid <> l.newlogoid
  92. AND p.modeltype = '-5'
  93. AND p.procedureid not in(126,152)
  94. AND NOT EXISTS (SELECT s.barcode FROM tp_pm_scrapproduct s
  95. WHERE s.barcode = l.barcode AND s.valueflag = 1 AND s.createtime >= l.createtime)
  96. GROUP BY ip.goodsid,ip.logoid
  97. UNION ALL
  98. --生产数据该产品商标在装配环节保存的数量(装配环节没有变更商标)
  99. SELECT pd.goodsid ,pd.logoid ,COUNT(distinct pd.barcode) changenum
  100. FROM tp_pm_productiondata pd
  101. LEFT JOIN tp_pc_procedure p ON pd.procedureid = p.procedureid
  102. left join (SELECT pp.goodsid,pp.logoid,pp.quantity,gdd.materialcode,pp.begintime ,pp.endtime
  103. FROM tp_pm_production_plan pp
  104. LEFT JOIN tp_pm_groutingdailydetail gdd ON pp.goodsid = gdd.goodsid
  105. WHERE gdd.barcode = @BARCODE@
  106. AND pp.begintime <= SYSDATE
  107. AND pp.endtime > SYSDATE AND pp.CONTROLRANGE = 1 AND pp.VALUEFLAG = 1 ) plans1 on plans1.goodsid = pd.goodsid and plans1.logoid = pd.logoid
  108. WHERE pd.createtime >= plans1.begintime
  109. and pd.createtime < plans1.endtime
  110. and pd.valueflag = 1
  111. and p.modeltype = '-5'
  112. and p.procedureid not in(126,152)
  113. AND NOT EXISTS (SELECT s.barcode
  114. FROM tp_pm_logochangedrecord s
  115. LEFT JOIN tp_pc_procedure p ON s.procedureid = p.procedureid
  116. WHERE s.barcode = pd.barcode
  117. AND p.modeltype = '-5'
  118. and p.procedureid not in(126,152)
  119. --AND s.oldlogoid = pd.logoid
  120. AND s.oldlogoid <> s.newlogoid)
  121. GROUP BY pd.goodsid,pd.logoid) t
  122. RIGHT JOIN (SELECT pp.goodsid,pp.logoid,pp.quantity
  123. FROM tp_pm_production_plan pp
  124. LEFT JOIN tp_pm_groutingdailydetail gdd ON pp.goodsid = gdd.goodsid
  125. WHERE gdd.barcode = @BARCODE@
  126. AND pp.begintime <= SYSDATE
  127. AND pp.endtime > SYSDATE
  128. and pp.valueflag = 1 AND pp.CONTROLRANGE = 1) tt
  129. ON t.logoid = tt.logoid
  130. GROUP BY t.goodsid,tt.goodsid,t.logoid,tt.logoid,tt.quantity ,t.changenum
  131. ) linshi ON linshi.logoid = l.logoid
  132. WHERE l.valueflag = '1' AND l.accountid = @ACCOUNTID@
  133. ORDER BY l.displayno",
  134. new CDAParameter("BARCODE", context.Request["barCode"]),
  135. new CDAParameter("ACCOUNTID", HttpContext.Current.Session["accountId"]),
  136. new CDAParameter("GOODSID", planData.Rows[0]["GOODSID"].ToString())
  137. );
  138. context.Response.Write(new JsonResult() { success = true, message = "操作成功!", rows = plansTable }.ToJson());
  139. }
  140. else
  141. {
  142. DataTable plansTable = conn.ExecuteDatatable(@"
  143. SELECT l.logoid AS id
  144. ,CASE
  145. WHEN linshi.residuequantity IS NOT NULL THEN
  146. l.logoname || '[' || t2.materialcode || ']' || ' 剩余[' || linshi.residuequantity || ']'
  147. ELSE
  148. l.logoname || '[' || t2.materialcode || ']'
  149. END AS NAME
  150. ,t2.materialcode
  151. ,nvl(gdd.valueflag, '0') AS iscurrentlogo
  152. ,0 AS ISCONTROL
  153. FROM tp_mst_logo l
  154. INNER JOIN (SELECT DISTINCT t.goodsid,t.logoid,t.materialcode
  155. FROM (SELECT g.goodsid,g.logoid,g.materialcode
  156. FROM tp_mst_goods g
  157. UNION ALL
  158. SELECT s.goodsid,s.logoid,s.materialcode
  159. FROM tp_mst_goodslogosap s) t
  160. WHERE EXISTS (SELECT 1 FROM tp_pm_groutingdailydetail g
  161. WHERE g.goodsid = t.goodsid AND g.barcode = @BARCODE@)) t2 ON t2.logoid = l.logoid
  162. LEFT JOIN tp_pm_groutingdailydetail gdd ON gdd.logoid = l.logoid
  163. AND gdd.barcode = @BARCODE@
  164. LEFT JOIN (
  165. SELECT case when t.goodsid is null then tt.goodsid else t.goodsid end as goodsid
  166. ,case when t.logoid is null then tt.logoid else t.logoid end as logoid
  167. ,case when t.changenum is null then sum(0) else SUM(t.changenum) end as changenum
  168. ,tt.quantity
  169. ,case when t.changenum is null then tt.quantity else tt.quantity - SUM(t.changenum) end as residuequantity
  170. FROM (SELECT ip.goodsid,ip.logoid,COUNT(distinct l.barcode) changenum
  171. FROM tp_pm_logochangedrecord l
  172. right JOIN tp_pm_groutingdailydetail ip ON l.barcode = ip.barcode
  173. LEFT JOIN tp_pc_procedure p ON l.procedureid = p.procedureid
  174. LEFT JOIN (SELECT pp.goodsid,pp.logoid,pp.quantity,gdd.materialcode,pp.begintime ,pp.endtime
  175. FROM tp_pm_production_plan pp
  176. LEFT JOIN tp_pm_groutingdailydetail gdd ON pp.goodsid = gdd.goodsid
  177. WHERE gdd.barcode = @BARCODE@
  178. AND pp.begintime <= SYSDATE
  179. AND pp.endtime > SYSDATE and pp.valueflag = 1 AND pp.CONTROLRANGE = 1) plans ON plans.goodsid = ip.goodsid AND plans.logoid = ip.logoid
  180. WHERE l.createtime >= plans.begintime
  181. AND l.createtime < plans.endtime
  182. AND ip.goodsid = @GOODSID@
  183. and ip.logoid = l.newlogoid
  184. AND l.oldlogoid <> l.newlogoid
  185. AND p.modeltype = '-5'
  186. AND p.procedureid not in(126,152)
  187. AND NOT EXISTS (SELECT s.barcode FROM tp_pm_scrapproduct s
  188. WHERE s.barcode = l.barcode AND s.valueflag = 1 AND s.createtime >= l.createtime)
  189. GROUP BY ip.goodsid,ip.logoid
  190. UNION ALL
  191. --生产数据该产品商标在装配环节保存的数量(装配环节没有变更商标)
  192. SELECT pd.goodsid ,pd.logoid ,COUNT(distinct pd.barcode) changenum
  193. FROM tp_pm_productiondata pd
  194. LEFT JOIN tp_pc_procedure p ON pd.procedureid = p.procedureid
  195. left join (SELECT pp.goodsid,pp.logoid,pp.quantity,gdd.materialcode,pp.begintime ,pp.endtime
  196. FROM tp_pm_production_plan pp
  197. LEFT JOIN tp_pm_groutingdailydetail gdd ON pp.goodsid = gdd.goodsid
  198. WHERE gdd.barcode = @BARCODE@
  199. AND pp.begintime <= SYSDATE
  200. AND pp.endtime > SYSDATE AND pp.CONTROLRANGE = 1 AND pp.VALUEFLAG = 1 ) plans1 on plans1.goodsid = pd.goodsid and plans1.logoid = pd.logoid
  201. WHERE pd.createtime >= plans1.begintime
  202. and pd.createtime < plans1.endtime
  203. and pd.valueflag = 1
  204. and p.modeltype = '-5'
  205. and p.procedureid not in(126,152)
  206. AND NOT EXISTS (SELECT s.barcode
  207. FROM tp_pm_logochangedrecord s
  208. LEFT JOIN tp_pc_procedure p ON s.procedureid = p.procedureid
  209. WHERE s.barcode = pd.barcode
  210. AND p.modeltype = '-5'
  211. and p.procedureid not in(126,152)
  212. --AND s.oldlogoid = pd.logoid
  213. AND s.oldlogoid <> s.newlogoid)
  214. GROUP BY pd.goodsid,pd.logoid) t
  215. RIGHT JOIN (SELECT pp.goodsid,pp.logoid,pp.quantity
  216. FROM tp_pm_production_plan pp
  217. LEFT JOIN tp_pm_groutingdailydetail gdd ON pp.goodsid = gdd.goodsid
  218. WHERE gdd.barcode = @BARCODE@
  219. AND pp.begintime <= SYSDATE
  220. AND pp.endtime > SYSDATE
  221. and pp.valueflag = 1 AND pp.CONTROLRANGE = 1) tt
  222. ON t.logoid = tt.logoid
  223. GROUP BY t.goodsid,tt.goodsid,t.logoid,tt.logoid,tt.quantity ,t.changenum
  224. ) linshi ON linshi.logoid = l.logoid
  225. WHERE l.valueflag = '1' AND l.accountid = @ACCOUNTID@
  226. ORDER BY l.displayno",
  227. new CDAParameter("BARCODE", context.Request["barCode"]),
  228. new CDAParameter("ACCOUNTID", HttpContext.Current.Session["accountId"]),
  229. new CDAParameter("GOODSID", planData.Rows[0]["GOODSID"].ToString())
  230. );
  231. context.Response.Write(new JsonResult() { success = true, message = "操作成功!", rows = plansTable }.ToJson());
  232. }
  233. }
  234. else
  235. {
  236. DataTable dtLogo = conn.ExecuteDatatable(@"
  237. SELECT L.LOGOID AS ID,
  238. L.LOGONAME || '[' || T2.MATERIALCODE || ']' AS NAME,
  239. T2.MATERIALCODE,
  240. NVL(GDD.VALUEFLAG, '0') AS ISCURRENTLOGO
  241. ,0 AS ISCONTROL
  242. FROM TP_MST_LOGO L
  243. INNER JOIN (SELECT DISTINCT T.GOODSID,
  244. T.LOGOID,
  245. T.MATERIALCODE
  246. FROM (SELECT G.GOODSID,
  247. G.LOGOID,
  248. G.MATERIALCODE
  249. FROM TP_MST_GOODS G
  250. UNION ALL
  251. SELECT S.GOODSID,
  252. S.LOGOID,
  253. S.MATERIALCODE
  254. FROM TP_MST_GOODSLOGOSAP S) T
  255. WHERE EXISTS (SELECT 1
  256. FROM TP_PM_GROUTINGDAILYDETAIL G
  257. WHERE G.GOODSID = T.GOODSID
  258. AND G.BARCODE = @BARCODE@)) T2
  259. ON T2.LOGOID = L.LOGOID
  260. LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDD
  261. ON GDD.LOGOID = L.LOGOID
  262. AND GDD.BARCODE = @BARCODE@
  263. WHERE L.VALUEFLAG = '1'
  264. AND L.ACCOUNTID = @ACCOUNTID@
  265. ORDER BY L.DISPLAYNO ",
  266. new CDAParameter("BARCODE", context.Request["barCode"]),
  267. new CDAParameter("ACCOUNTID", HttpContext.Current.Session["accountId"])
  268. );
  269. context.Response.Write(new JsonResult() { success = true, message = "操作成功!", rows = dtLogo }.ToJson());
  270. }
  271. }
  272. }
  273. public bool IsReusable
  274. {
  275. get
  276. {
  277. return false;
  278. }
  279. }
  280. }