SupplyPushController.cs 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562
  1. using JCSoft.WX.Framework.Api;
  2. using Microsoft.AspNetCore.Mvc;
  3. using Microsoft.AspNetCore.Http;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Threading.Tasks;
  8. using Common.Wechat;
  9. using Common;
  10. using System.Data;
  11. using ZcPeng.PublicLibrary;
  12. using CoreEntity.Entity;
  13. using Common.Model;
  14. using Newtonsoft.Json.Converters;
  15. using Newtonsoft.Json;
  16. using CoreEntity.DAL;
  17. using System.Data.SqlClient;
  18. using PublicLibrary.Model;
  19. using Microsoft.Extensions.Caching.Memory;
  20. using System.Globalization;
  21. using SupplierWeb.Codes.mvc;
  22. namespace SupplierWeb.Controllers
  23. {
  24. [Route("web/supplypush")]
  25. public class SupplyPushController : BaseController
  26. {
  27. public SupplyPushController(IMemoryCache cache, IApiClient client) : base(cache, client)
  28. {
  29. }
  30. ////根据采购计划-批量提交供货情况:添加提交状态 时间后 状态设置1
  31. [AuthPermission]
  32. [HttpPost, Route("editfeedback")]
  33. public JsonResult EditFeedback(string Id,
  34. PushFeedback[] pfbs,
  35. [FromBody]dynamic data)
  36. {
  37. string userids;
  38. userids = getStaff("userid");
  39. //判断参数是否合法
  40. if (string.IsNullOrEmpty(userids))
  41. {
  42. return Json(new
  43. {
  44. success = 0,
  45. msg="timeout 登陆超时",
  46. timeout =1
  47. });
  48. }
  49. int PushAccountId = Convert.ToInt32(userids);
  50. if (data != null)
  51. {
  52. //Newtonsoft.Json.Linq.JArray
  53. Id = data.Id;
  54. pfbs = data.pfbs.ToObject<PushFeedback[]>();
  55. }
  56. string PushRecordId = Id;
  57. PushRecord rec = PushRecordDAL.GetRecord(Id);
  58. if (rec != null && rec.State == 1)
  59. return Json(new
  60. {
  61. success = 0,
  62. msg = "已经提交过!"
  63. });
  64. List<DataAccessCommand> list = new List<DataAccessCommand>();
  65. //int successAll = 1;
  66. #region 更新记录状态
  67. string commandTextStateR = "UPDATE " + Config.TablePrefix + "PushRecord " +
  68. " SET SubmitTime = @SubmitTime, " +
  69. " SubmitPerson = @SubmitPerson, " +
  70. " State = 1 " +
  71. " WHERE Id = @PushRecordId " +
  72. " and PushAccountId = @PushAccountId " +
  73. " and (state IS NULL or state = 0)" +
  74. " and Id = @Id "
  75. ;
  76. //string resultStateR;
  77. //准备参数
  78. List<List<Object>> parametersStateR = new List<List<Object>>();
  79. parametersStateR.Add(new List<Object>() { "SubmitTime", DateTime.Now });
  80. parametersStateR.Add(new List<Object>() { "SubmitPerson", PushAccountId });
  81. parametersStateR.Add(new List<Object>() { "PushRecordId", PushRecordId });
  82. parametersStateR.Add(new List<Object>() { "PushAccountId", PushAccountId });
  83. parametersStateR.Add(new List<Object>() { "Id", Id });
  84. List<SqlParameter> parametersStateR1 = DataAccess.ToParameters(parametersStateR);
  85. list.Add(new DataAccessCommand(commandTextStateR, parametersStateR1, CommandType.Text, true));
  86. //int successStateR = DataAccess.ExecuteCommand(commandTextStateR, parametersStateR1, out resultStateR);
  87. //if (((string)resultStateR).StartsWith("在执行数据操作时发生错误"))
  88. //{
  89. // successAll = 0;
  90. //}
  91. #endregion
  92. string resultState;
  93. #region 更新记录状态
  94. foreach (PushFeedback pfb in pfbs) {
  95. int state = 1;
  96. if(pfb.StoreGapNum == 0)
  97. {
  98. //string contactid = "";
  99. //if (pfb.ContactId.Split("_").Length > 0)
  100. // contactid = pfb.ContactId.Split("_")[0];
  101. //ContactDAL.UpdatePushContactState(pfb.GoodsId, contactid, pfb.SuppliersId.Trim(), "N");
  102. }
  103. if (pfb.StoreGapNum < pfb.PurchaseTotalNum)
  104. {
  105. state = 2;
  106. }
  107. string commandTextState = "UPDATE " + Config.TablePrefix + "PushFeedBack " +
  108. " SET " +
  109. " StoreGapNum = @StoreGapNum, " +
  110. " Feedback = @Feedback, " +
  111. " SubmitTime = @SubmitTime, " +
  112. " SubmitPerson = @SubmitPerson, " +
  113. " State = " + state +","+
  114. " IsCancel = 0 " +
  115. " WHERE PushRecordId = @PushRecordId " +
  116. " and Id = @PushFeedbackId "+
  117. " and PushAccountId = @PushAccountId "+
  118. " and (state IS NULL or state = 0 or state in(5,6))"
  119. ;
  120. //准备参数
  121. List<List<Object>> parametersState = new List<List<Object>>();
  122. parametersState.Add(new List<Object>() { "StoreGapNum", pfb.StoreGapNum });
  123. parametersState.Add(new List<Object>() { "Feedback", pfb.Feedback });
  124. parametersState.Add(new List<Object>() { "SubmitTime", DateTime.Now });
  125. parametersState.Add(new List<Object>() { "SubmitPerson", PushAccountId });
  126. parametersState.Add(new List<Object>() { "PushRecordId", PushRecordId });
  127. parametersState.Add(new List<Object>() { "PushFeedbackId", pfb.Id });
  128. parametersState.Add(new List<Object>() { "PushAccountId", pfb.PushAccountId });
  129. List<SqlParameter> parametersState1 = DataAccess.ToParameters(parametersState);
  130. list.Add(new DataAccessCommand(commandTextState, parametersState1, CommandType.Text, true));
  131. //int successState = DataAccess.ExecuteCommand(commandTextState, parametersState1, out resultState);
  132. //if (((string)resultState).StartsWith("在执行数据操作时发生错误"))
  133. //{
  134. // successAll = 0;
  135. //}
  136. }
  137. #endregion
  138. bool successAll = DataAccess.ExecuteBatchCommands(list, out resultState);
  139. return Json(new
  140. {
  141. success = successAll,
  142. msg = resultState,
  143. });
  144. }
  145. ///供应商业务员二次确认:生成采购订单 开发票
  146. ///1 供应商业务员确认(数量提交确认) 2 供应商业务员取消 3 采购员确认(生成计划)
  147. ///4 供应商业务员确认(二次确认 开票 生成采购订单)
  148. ///如果修改了数据(设置状态为2 按钮显示:修改并提交) 需要重新提交
  149. [AuthPermission]
  150. [HttpPost, Route("confirmfeedback/{staffId}/{State:int}")]
  151. public JsonResult ConfirmFeedback(string Id,
  152. Int32 State,
  153. PushFeedbackExt[] pfbs,
  154. string staffId,
  155. [FromBody]dynamic data)
  156. {
  157. string userids;
  158. string LoginAccountId = userids = getStaff("userid");
  159. //判断参数是否合法
  160. if (string.IsNullOrEmpty(userids))
  161. {
  162. return Json(new
  163. {
  164. success = 0,
  165. msg = "登陆超时",
  166. timeout = 1
  167. });
  168. }
  169. Int32 PushAccountId = Convert.ToInt32(userids);
  170. if (data != null)
  171. {
  172. //Newtonsoft.Json.Linq.JArray
  173. Id = data.Id;
  174. pfbs = data.pfbs ==null?new PushFeedbackExt[] { } : data.pfbs.ToObject<PushFeedbackExt[]>();
  175. }
  176. PushRecord rec = PushRecordDAL.GetRecord(Id);
  177. if (rec != null && rec.HasOrder == 1)
  178. return Json(new
  179. {
  180. success = 0,
  181. msg = "已经全部生成采购订单!"
  182. });
  183. //List<PushFeedbackExt> listAll = PushFeedBackDAL.GetFeedbacks(Id, " and PushAccountId = "+ PushAccountId);
  184. List<PushFeedbackExt> list = PushFeedBackDAL.GetFeedbacks(Id, " and state in (3,2) and PushAccountId = "+ PushAccountId);
  185. Dictionary<string, List<PushFeedbackExt>> groups = new Dictionary<string, List<PushFeedbackExt>>();
  186. foreach (PushFeedbackExt fb in list)
  187. {
  188. //初始化requestDate
  189. foreach(PushFeedbackExt fb0 in pfbs)
  190. {
  191. if (fb0.Id.Equals(fb.Id))
  192. {
  193. //fb.StoreGapNum = fb0.StoreGapNum;
  194. //fb.Feedback = fb0.Feedback;
  195. fb.ReceiptMd = fb0.ReceiptMd;
  196. fb.RequestDate = fb0.RequestDate;
  197. }
  198. }
  199. //第一次初始化对方业务员(不是销售代表)id
  200. if (string.IsNullOrEmpty(fb.OppContId))
  201. {
  202. var c = ContactDAL.getOppContactor(fb.BusinessId);
  203. fb.OppContId = c!=null?c.ContactId:"";
  204. }
  205. //if (fb.StoreGapNum > 0) {
  206. ContactDoc cd = ContactDAL.getContactor(fb.ContactId);
  207. string SuppliersId = fb.SuppliersId;
  208. if (cd != null)
  209. SuppliersId = cd.BusinessId;
  210. fb.SuppliersId = SuppliersId;
  211. fb.BusinessId = SuppliersId;
  212. var accountSuppliers = fb.PushAccountId + "_" + fb.SuppliersId;
  213. if (groups.ContainsKey(accountSuppliers))
  214. {
  215. List<PushFeedbackExt> to;
  216. groups.TryGetValue(accountSuppliers, out to);
  217. to.Add(fb);
  218. groups.Remove(accountSuppliers);
  219. groups.Add(accountSuppliers, to);
  220. }
  221. else
  222. {
  223. List<PushFeedbackExt> to = new List<PushFeedbackExt>();
  224. to.Add(fb);
  225. groups.Add(accountSuppliers, to);
  226. }
  227. //}
  228. }
  229. //List<Object> result = new List<object>();
  230. List<DataAccessCommand> listcmd = new List<DataAccessCommand>();
  231. foreach (string groupkey in groups.Keys)
  232. {
  233. IDictionary<string, Object> dic = new Dictionary<string, Object>();
  234. List<PushFeedbackExt> to;
  235. groups.TryGetValue(groupkey, out to);
  236. PushFeedbackExt fb0 = to.ToArray()[0];//根据第一条明细找到 当前业务员,供应商的采购计划
  237. bool hasPlan = false;
  238. foreach (PushFeedbackExt feedback in to)
  239. {
  240. if (feedback.StoreGapNum > 0)
  241. hasPlan = true;
  242. }
  243. PurPlanMT PlanMT = null;
  244. //string StaffDocId = PlanMT.SaleManId;
  245. //待更新状态
  246. Int32 OrderBillNo = 0;
  247. Int32 OrderBillCodeNo = 0;
  248. if (State == 4 )//生成采购订单
  249. {
  250. //查询 plan
  251. #region 获取 plan
  252. if (!hasPlan)
  253. {
  254. continue;
  255. }
  256. var planlist = PurPlanDAL.GetPlanMT(Id, fb0.Id.ToString(), PushAccountId, fb0.SuppliersId).ToArray();
  257. PlanMT = planlist[0];
  258. //string reqdate = PlanMT.EndDate;
  259. decimal PrepayAmt = PlanMT.PrepayAmt;
  260. string IsPrepay = PlanMT.IsPrepay;
  261. #endregion
  262. #region 更新 plan 增加要求日期 发货方式
  263. string commandTextRecord = "UPDATE PurPlanMT " +
  264. " SET " +
  265. " ReceiptMd = @ReceiptMd, " +
  266. " EndDate = @EndDate " +
  267. " WHERE PushRecordId= @RecordId" +
  268. " and SuppliersId= @SuppliersId" +
  269. " and BillState= 0" +
  270. " and PurObj = @PurObj ";
  271. //string resultPlan;
  272. //准备参数
  273. List<List<Object>> parametersRecord = new List<List<Object>>();
  274. parametersRecord.Add(new List<Object>() { "ReceiptMd", fb0.ReceiptMd });
  275. parametersRecord.Add(new List<Object>() { "EndDate", fb0.RequestDate.ToString("yyyy-MM-dd") });
  276. parametersRecord.Add(new List<Object>() { "RecordId", fb0.PushRecordId });
  277. parametersRecord.Add(new List<Object>() { "SuppliersId", fb0.SuppliersId });
  278. parametersRecord.Add(new List<Object>() { "PurObj", PushAccountId });
  279. List<SqlParameter> parametersRecord1 = DataAccess.ToParameters(parametersRecord);
  280. listcmd.Add(new DataAccessCommand(commandTextRecord, parametersRecord1));
  281. //int successPlan = DataAccess.ExecuteCommand(commandTextRecord, parametersRecord1, out resultPlan);
  282. //result.Add(successPlan);
  283. //result.Add(resultPlan);
  284. #endregion
  285. dic = PurOrderDAL.AddOrder(PushAccountId.ToString(),
  286. PlanMT.BillNo.ToString()
  287. , fb0.EntId, fb0.ReceiptMd, PlanMT.CentPayMd
  288. , PlanMT.OrgId, PlanMT.DeptId
  289. , "", fb0.Remark
  290. , fb0.GoodsId, fb0.SuppliersId
  291. , fb0.BusinessId, fb0.BusinessCode
  292. , PlanMT.SaleManId
  293. , fb0.RequestDate.ToString("yyyy-MM-dd")
  294. , fb0.ContactId
  295. , out OrderBillNo
  296. , out OrderBillCodeNo
  297. , PrepayAmt
  298. , IsPrepay
  299. , fb0.OppContId
  300. , listcmd);
  301. //result.Add(dic);
  302. if (OrderBillNo == 0|| OrderBillCodeNo == 0)
  303. {
  304. return Json(new
  305. {
  306. success = 0,
  307. result = (OrderBillNo == 0)?"获取billno自增失败": "获取OrderBillCodeNo自增失败",
  308. //successTemp = successTemp
  309. });
  310. }
  311. //Object successRecord;
  312. //dic.TryGetValue("successRecord", out successRecord);
  313. //if ((int)successRecord == 0) successTemp = 0;
  314. }
  315. else if(State == 2 )
  316. {
  317. if(PurPlanDAL.GetPlanMT(Id,"", PushAccountId, fb0.SuppliersId).Count > 0)
  318. {
  319. var deleteSuccess = PurPlanDAL.UpdatePlanDelete(fb0.SuppliersId, Id, PushAccountId, listcmd);
  320. }
  321. //if ((int)deleteSuccess == 0) successTemp = 0;
  322. }
  323. int index = 1;
  324. //string fieldTime = string.Empty;
  325. //string fieldPerson = string.Empty;
  326. //string fieldFilter = string.Empty;
  327. foreach (PushFeedbackExt feedback in to)
  328. {
  329. if (State == 2)//修改数据
  330. {
  331. //fieldIsComplete = ",IsComplete = 0 ";
  332. //state = 2;
  333. //fieldFilter = " AND ((State = 0 OR State IS NULL) OR State in(5,6,3)) " +
  334. // " AND PushAccountId=" + PushAccountId;
  335. #region 更新记录状态
  336. //string resultState;
  337. foreach (PushFeedbackExt pfb in pfbs)
  338. {
  339. if (pfb.Id.Equals(feedback.Id)) {
  340. //如果推送数量是0, 推送状态保持为推送 选下一个人
  341. string contactid = pfb.ContactId;
  342. if (pfb.StoreGapNum == 0)
  343. {
  344. //ContactDAL.UpdatePushContactState(pfb.GoodsId, contactid, pfb.SuppliersId.Trim(), "Y",listcmd);//生成计划时设置推送状态 Y 这里不需要
  345. }
  346. else
  347. {//不为0 推送状态设N 生成订单算在途
  348. ContactDAL.UpdatePushContactState(pfb.GoodsId, contactid, pfb.SuppliersId.Trim(), "N", listcmd);
  349. }
  350. int state_pfb = 1;
  351. if (pfb.StoreGapNum < pfb.PurchaseTotalNum)
  352. {
  353. state_pfb = 2;
  354. }
  355. if(pfb.StoreGapNum == 0 && feedback.StoreGapNum == 0)//本来没有货不用改
  356. { }
  357. else {
  358. string commandTextState = "UPDATE " + Config.TablePrefix + "PushFeedBack " +
  359. " SET " +
  360. " IsComplete = 0, " +
  361. " StoreGapNum = @StoreGapNum, " +
  362. " Feedback = @Feedback, " +
  363. " SubmitTime = @SubmitTime, " +
  364. " SubmitPerson = @SubmitPerson, " +
  365. " State = " + state_pfb +
  366. " WHERE PushRecordId = @PushRecordId " +
  367. " and Id = @PushFeedbackId " +
  368. " and PushAccountId = @PushAccountId " +
  369. " and (state in(3,2))"
  370. ;
  371. //准备参数
  372. List<List<Object>> parametersState = new List<List<Object>>();
  373. parametersState.Add(new List<Object>() { "StoreGapNum", pfb.StoreGapNum });
  374. parametersState.Add(new List<Object>() { "Feedback", pfb.Feedback });
  375. parametersState.Add(new List<Object>() { "SubmitTime", DateTime.Now });
  376. parametersState.Add(new List<Object>() { "SubmitPerson", PushAccountId });
  377. parametersState.Add(new List<Object>() { "PushRecordId", pfb.PushRecordId });
  378. parametersState.Add(new List<Object>() { "PushFeedbackId", pfb.Id });
  379. parametersState.Add(new List<Object>() { "PushAccountId", pfb.PushAccountId });
  380. List<SqlParameter> parametersState1 = DataAccess.ToParameters(parametersState);
  381. listcmd.Add(new DataAccessCommand(commandTextState, parametersState1, CommandType.Text, true));
  382. //int successState = DataAccess.ExecuteCommand(commandTextState, parametersState1, out resultState);
  383. //if (((string)resultState).StartsWith("在执行数据操作时发生错误"))
  384. //{
  385. // successAll = 0;
  386. //}
  387. }
  388. }
  389. }
  390. #endregion
  391. }
  392. //#endregion
  393. //else
  394. //if (State == 1)//提交供货数量信息
  395. //{
  396. // fieldTime = "SubmitTime";
  397. // fieldPerson = "SubmitPerson";
  398. // state = 1;
  399. // fieldFilter = " AND (State = 0 OR State IS NULL OR State in(5,6) )";
  400. //}
  401. else
  402. if (State == 4)//生成采购订单
  403. {
  404. string contactid = feedback.ContactId.Trim();
  405. //生成订单计算在途了推送状态全部设置为N
  406. ContactDAL.UpdatePushContactState(feedback.GoodsId, contactid, feedback.SuppliersId.Trim(), "N",listcmd);
  407. #region
  408. if (feedback.State == 3 ) {
  409. PurPlanDT plandt = PurPlanDAL.GetPlanDT(PlanMT.BillNo, feedback.Id.ToString()).ToArray()[0];
  410. //Object successo;
  411. //dic.TryGetValue("successRecord", out successo);
  412. //if ((int)successo > 0)
  413. //{
  414. IDictionary<string, Object> dicODAdd = PurOrderDAL.AddOrderDT(OrderBillNo, index,
  415. PlanMT.BillNo, plandt.BillSn, PlanMT.BillCode,
  416. feedback.GoodsId, feedback.GoodsSpec, feedback.StoreGapNum,
  417. feedback.ActPrice,
  418. feedback.PurPrice,
  419. feedback.Remark,
  420. PlanMT.EntId, PlanMT.OrgId,
  421. feedback.BusinessId, feedback.BusinessCode,
  422. feedback.SuppliersId,
  423. feedback.PurchaseTotalNum,
  424. plandt.SafeDays
  425. , PlanMT.SaleManId
  426. , listcmd);
  427. //result.Add(dicODAdd);
  428. //Object successRecord;
  429. //dicODAdd.TryGetValue("successRecord", out successRecord);
  430. //if ((int)successRecord > 0)
  431. //{
  432. //增加更新hasOrder状态 和feedback记录的状态state
  433. int successOState = PurOrderDAL.UpdateOrderState(feedback.Id.ToString(), Id,PushAccountId,listcmd);
  434. //result.Add(successOState);
  435. }
  436. }
  437. #endregion
  438. index += 1;
  439. }
  440. }
  441. if (State == 4)
  442. {
  443. var tostate = 4;
  444. #region 更新
  445. string commandText = "UPDATE " + Config.TablePrefix + "PushRecord " +
  446. " SET " +
  447. "ConfirmOrderTime = @ConfirmOrderTime, " +
  448. " ConfirmOrderPerson = @ConfirmOrderPerson, " +
  449. " HasOrder = 1, " +
  450. " State = @state " +
  451. " WHERE id= @Id " +
  452. " AND State = 3 " +
  453. " AND PushAccountId=" + PushAccountId;
  454. ;
  455. //string resultUp;
  456. //准备参数
  457. List<List<Object>> parameters = new List<List<Object>>();
  458. parameters.Add(new List<Object>() { "ConfirmOrderTime", DateTime.Now });
  459. parameters.Add(new List<Object>() { "ConfirmOrderPerson", PushAccountId });
  460. parameters.Add(new List<Object>() { "state", tostate });
  461. parameters.Add(new List<Object>() { "Id", Id });
  462. List<SqlParameter> parameters1 = DataAccess.ToParameters(parameters);
  463. listcmd.Add(new DataAccessCommand(commandText, parameters1));
  464. //int success = DataAccess.ExecuteCommand(commandText, parameters1, out resultUp);
  465. //result.Add(success);
  466. //result.Add(resultUp);
  467. #endregion
  468. }
  469. if (State == 2)
  470. {
  471. var tostate = 2;
  472. #region 更新记录
  473. string commandTextFeed = "UPDATE " + Config.TablePrefix + "PushRecord " +
  474. " SET " +
  475. "IsComplete = 0, " +
  476. " State = @state" +
  477. " WHERE Id= @Id " +
  478. " AND ((State = 0 OR State IS NULL) OR State in(5,6,3,2)) " +
  479. " AND PushAccountId=" + PushAccountId;
  480. //string resultFeed;
  481. //准备参数
  482. List<List<Object>> parametersFeed = new List<List<Object>>();
  483. parametersFeed.Add(new List<Object>() { "state", tostate });
  484. parametersFeed.Add(new List<Object>() { "Id", Id });
  485. List<SqlParameter> parametersFeed1 = DataAccess.ToParameters(parametersFeed);
  486. listcmd.Add(new DataAccessCommand(commandTextFeed, parametersFeed1));
  487. //int successFeed = DataAccess.ExecuteCommand(commandTextFeed, parametersFeed1, out resultFeed);
  488. //result.Add(successFeed);
  489. //result.Add(resultFeed);
  490. #endregion
  491. }
  492. string resultstr;
  493. bool success = DataAccess.ExecuteBatchCommands(listcmd,out resultstr);
  494. return Json(new
  495. {
  496. success = success,
  497. result = resultstr,
  498. //successTemp = successTemp
  499. });
  500. }
  501. }
  502. }