足力健后端,使用.netcore版本,合并1个项目使用

AfterSaleController.cs 37KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966
  1. /* =============================================
  2. -- Author: <Author,,zhangkun>
  3. -- Create date: <Create Date,,20200713>
  4. -- Description: <Description,,订单售后操作)>
  5. -- ============================================*/
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Common;
  9. using System.Common.Helpers;
  10. using System.Data;
  11. using System.IRepositories;
  12. using System.Linq;
  13. using System.Linq.Expressions;
  14. using System.Model;
  15. using System.Repositories;
  16. using System.Security.Claims;
  17. using System.Threading.Tasks;
  18. using System.Utility.Http;
  19. using Microsoft.AspNetCore.Mvc;
  20. using Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure;
  21. using Microsoft.Extensions.Configuration;
  22. using SqlSugar;
  23. using TVShoppingCallCenter_ZLJ.Models.Inputs;
  24. using Utility;
  25. namespace TVShoppingCallCenter_ZLJ.Controllers.Order
  26. {
  27. [Route("api/[controller]")]
  28. public class AfterSaleController : BaseController
  29. {
  30. private readonly IBus_OrderDetailRepository bus_OrderDetailRepository;
  31. private readonly IBus_OrderRepository bus_OrderRepository;
  32. private readonly OrderController orderController;
  33. private readonly IBus_ProductRepository bus_productRepository;
  34. private readonly ICus_VipInfoRepository cus_vip_infoRepository;
  35. private readonly IBus_OrderMergeRepository busOrderMergeRepository;
  36. private readonly ICus_ScoreSetRepository cus_score_setRepository;
  37. private readonly IBus_AfterSaleRepository busAfterSaleRepository;
  38. public AfterSaleController(ICus_ScoreSetRepository _cus_score_setRepository, IBus_OrderMergeRepository _busOrderMergeRepository, IBus_OrderRepository _bus_OrderRepository, IBus_OrderDetailRepository _bus_OrderDetailRepository, OrderController _orderController, IBus_ProductRepository _productRepository, ICus_VipInfoRepository _cus_vip_infoRepository, IBus_AfterSaleRepository _busAfterSaleRepository)
  39. {
  40. bus_OrderDetailRepository = _bus_OrderDetailRepository;
  41. bus_OrderRepository = _bus_OrderRepository;
  42. orderController = _orderController;
  43. bus_productRepository = _productRepository;
  44. cus_vip_infoRepository = _cus_vip_infoRepository;
  45. busOrderMergeRepository = _busOrderMergeRepository;
  46. cus_score_setRepository = _cus_score_setRepository;
  47. busAfterSaleRepository = _busAfterSaleRepository;
  48. }
  49. #region 销售操作
  50. /// <summary>
  51. /// 销售申请售后
  52. /// </summary>
  53. /// <param name="input"></param>
  54. /// <returns></returns>
  55. [HttpPost("addaftersalexs")]
  56. public async Task<IActionResult> AddAfterSaleXS(AfterSaleInput input)
  57. {
  58. try
  59. {
  60. #region 验证参数 必填项
  61. if (string.IsNullOrEmpty(input.F_OrderId))
  62. return Error("请选择订单");
  63. if (input.F_Type <= 0)
  64. return Error("申请类型不符合售后");
  65. #endregion
  66. #region 验证逻辑
  67. if (input.F_Type == 1)
  68. { }
  69. else if (input.F_Type == 2)
  70. { }
  71. else if (input.F_Type == 3)
  72. { }
  73. else if (input.F_Type == 4)
  74. { }
  75. #endregion
  76. T_Bus_Order modeOrder = await bus_OrderRepository.GetSingle(q => q.F_Id == input.F_OrderId);
  77. if (modeOrder == null)
  78. {
  79. return Error("订单不存在");
  80. }
  81. else if (modeOrder.F_Status == -1)
  82. {
  83. //物流状态0 未发出 1物流运送中2签收3改代收4拒收
  84. return Error("状态不符合售后");
  85. }
  86. T_Bus_AfterSale modelAfterSale = new T_Bus_AfterSale();
  87. modelAfterSale.F_AddTime = DateTime.Now;
  88. modelAfterSale.F_CheckTimeXS = DateTime.Now;
  89. modelAfterSale.F_CheckStateXS = input.F_CheckStateXS;
  90. modelAfterSale.F_CheckUserXS = UserLogin.UserId.ObjToInt();
  91. modelAfterSale.F_CheckUserNameXS = UserLogin.UserName;
  92. modelAfterSale.F_DetailList = input.F_DetailList;
  93. modelAfterSale.F_Type = input.F_Type;
  94. modelAfterSale.F_Money = input.F_Money;
  95. modelAfterSale.F_OrderId = input.F_OrderId;
  96. modelAfterSale.F_AboutOrderId = "";
  97. modelAfterSale.F_Id = Guid.NewGuid().ToString().Replace("-", "");
  98. //modelAfterSale.F_OurTrackingNo = input.F_OurTrackingNo;
  99. //modelAfterSale.F_OurTrackDes = input.F_OurTrackDes;
  100. //modelAfterSale.F_TrackingNo = input.F_TrackingNo;
  101. //modelAfterSale.F_TrackDes = input.F_TrackDes;
  102. if (!string.IsNullOrEmpty(input.F_Remark))
  103. modelAfterSale.F_Remark = " 销售:" + input.F_Remark;
  104. if (await busAfterSaleRepository.AddReturnCount(modelAfterSale))
  105. {
  106. if (input.F_State == 0)
  107. return Success("售后申请已保存");
  108. else if (input.F_State == 1)
  109. { return Success("售后申请已提交审核"); }
  110. }
  111. return Error("申请失败,请重试!");
  112. }
  113. catch (Exception ex)
  114. { return Error(ex.Message); }
  115. }
  116. /// <summary>
  117. /// 销售编辑售后
  118. /// </summary>
  119. /// <param name="input"></param>
  120. /// <returns></returns>
  121. [HttpPost("editaftersalexs")]
  122. public async Task<IActionResult> EditAfterSaleXS(AfterSaleInput input)
  123. {
  124. try
  125. {
  126. #region 验证参数 必填项
  127. if (string.IsNullOrEmpty(input.F_Id))
  128. return Error("参数缺失Id");
  129. if (string.IsNullOrEmpty(input.F_OrderId))
  130. return Error("请选择订单");
  131. if (input.F_Type <= 0)
  132. return Error("申请类型不符合售后");
  133. #endregion
  134. #region 验证逻辑
  135. if (input.F_Type == 1)
  136. { }
  137. else if (input.F_Type == 2)
  138. { }
  139. else if (input.F_Type == 3)
  140. { }
  141. else if (input.F_Type == 4)
  142. { }
  143. #endregion
  144. T_Bus_AfterSale modelAfterSale = await busAfterSaleRepository.GetSingle(q => q.F_Id == input.F_Id);
  145. if (modelAfterSale.F_CheckStateSH == 1 && modelAfterSale.F_CheckStateXS == 1)
  146. {
  147. return Error("双审核通过不能编辑");
  148. }
  149. modelAfterSale.F_CheckTimeXS = DateTime.Now;
  150. modelAfterSale.F_CheckStateXS = input.F_CheckStateXS;
  151. modelAfterSale.F_CheckUserXS = UserLogin.UserId.ObjToInt();
  152. modelAfterSale.F_CheckUserNameXS = UserLogin.UserName;
  153. modelAfterSale.F_DetailList = input.F_DetailList;
  154. modelAfterSale.F_Type = input.F_Type;
  155. modelAfterSale.F_Money = input.F_Money;
  156. modelAfterSale.F_CheckStateSH = 0;//需要售后重新审核
  157. //modelAfterSale.F_OurTrackingNo = input.F_OurTrackingNo;
  158. //modelAfterSale.F_OurTrackDes = input.F_OurTrackDes;
  159. //modelAfterSale.F_TrackingNo = input.F_TrackingNo;
  160. //modelAfterSale.F_TrackDes = input.F_TrackDes;
  161. if (!string.IsNullOrEmpty(input.F_Remark))
  162. modelAfterSale.F_Remark = modelAfterSale.F_Remark + "\\r\\n 销售:" + input.F_Remark;
  163. if (await busAfterSaleRepository.AddReturnCount(modelAfterSale))
  164. {
  165. if (input.F_State == 0)
  166. return Success("售后申请已保存");
  167. else if (input.F_State == 1)
  168. { return Success("售后申请已提交审核"); }
  169. }
  170. return Error("申请失败,请重试!");
  171. }
  172. catch (Exception ex)
  173. { return Error(ex.Message); }
  174. }
  175. /// <summary>
  176. /// 销售删除
  177. /// </summary>
  178. /// <param name="input"></param>
  179. /// <returns></returns>
  180. [HttpPost("deleteaftersalexs")]
  181. public async Task<IActionResult> DeleteAfterSaleXS(string ids)
  182. {
  183. try
  184. {
  185. if (string.IsNullOrEmpty(ids))
  186. {
  187. return Error("参数缺失:" + ids);
  188. }
  189. string[] idlist = ids.Split(',');
  190. if (await busAfterSaleRepository.Delete(q => idlist.Contains(q.F_Id) && new[] { 0, 2 }.Contains(q.F_CheckStateXS)))
  191. {
  192. return Success("删除成功/已审核通过不能删除");
  193. }
  194. return Error("删除失败,请重试!");
  195. }
  196. catch (Exception ex)
  197. { return Error(ex.Message); }
  198. }
  199. /// <summary>
  200. /// 根据分页获取列表
  201. /// </summary>
  202. /// <param name="input"></param>
  203. /// <returns></returns>
  204. [HttpPost("getaftersalebypagexs")]
  205. public async Task<IActionResult> GetAfterSaleByPageXS(AfterSaleInput input)
  206. {
  207. #region 拼接条件
  208. Expression<Func<T_Bus_AfterSale, bool>> eq = a => a.F_CheckUserXS == UserLogin.UserId.ObjToInt();
  209. if (input.F_CheckStateXS > -1)
  210. {
  211. eq = eq.And(a => a.F_CheckStateXS == input.F_CheckStateXS);
  212. }
  213. if (input.F_CheckStateSH > -1)
  214. {
  215. eq = eq.And(a => a.F_CheckStateSH == input.F_CheckStateSH);
  216. }
  217. if (input.F_Type > -1)
  218. {
  219. eq = eq.And(a => a.F_Type == input.F_Type);
  220. }
  221. if (!string.IsNullOrEmpty(input.F_Id))
  222. {
  223. eq = eq.And(a => a.F_Id == input.F_Id);
  224. }
  225. if (input.F_State >= -1)
  226. {
  227. eq = eq.And(a => a.F_State == input.F_State);
  228. }
  229. #endregion
  230. RefAsync<int> count = 0;
  231. PageData<T_Bus_AfterSale> list = await busAfterSaleRepository.GetListByPage(eq, new MyPageModel() { PageIndex = input.pageindex, PageSize = input.pagesize, PageCount = count }, " F_AddTime DESC");
  232. return Success("成功", list);
  233. }
  234. #endregion
  235. #region 售后操作
  236. /// <summary>
  237. /// 销售申请售后
  238. /// </summary>
  239. /// <param name="input"></param>
  240. /// <returns></returns>
  241. [HttpPost("addaftersalesh")]
  242. public async Task<IActionResult> AddAfterSaleSH(AfterSaleInput input)
  243. {
  244. try
  245. {
  246. #region 验证参数 必填项
  247. if (string.IsNullOrEmpty(input.F_OrderId))
  248. return Error("请选择订单");
  249. if (input.F_Type <= 0)
  250. return Error("申请类型不符合售后");
  251. #endregion
  252. T_Bus_Order modeOrder = await bus_OrderRepository.GetSingle(q => q.F_Id == input.F_OrderId);
  253. if (modeOrder == null)
  254. {
  255. return Error("订单不存在");
  256. }
  257. else if (modeOrder.F_Status == -1)
  258. {
  259. //物流状态0 未发出 1物流运送中2签收3改代收4拒收
  260. return Error("状态不符合售后");
  261. }
  262. T_Bus_AfterSale modelAfterSale = new T_Bus_AfterSale();
  263. modelAfterSale.F_AddTime = DateTime.Now;
  264. modelAfterSale.F_CheckTimeSH = DateTime.Now;
  265. modelAfterSale.F_CheckStateSH = input.F_State;
  266. modelAfterSale.F_CheckUserSH = UserLogin.UserId.ObjToInt();
  267. modelAfterSale.F_CheckUserNameSH = UserLogin.UserName;
  268. modelAfterSale.F_CheckUserXS = modeOrder.F_AddUser;
  269. modelAfterSale.F_DetailList = input.F_DetailList;
  270. modelAfterSale.F_OldDetailList = input.F_OldDetailList;
  271. modelAfterSale.F_Type = input.F_Type;
  272. modelAfterSale.F_Money = input.F_Money;
  273. modelAfterSale.F_OrderId = input.F_OrderId;
  274. modelAfterSale.F_AboutOrderId = "";
  275. modelAfterSale.F_Id = Guid.NewGuid().ToString().Replace("-", "");
  276. modelAfterSale.F_TrackingNo = input.F_TrackingNo;
  277. modelAfterSale.F_TrackDes = input.F_TrackDes;
  278. if (!string.IsNullOrEmpty(input.F_Remark))
  279. modelAfterSale.F_Remark = " 售后:" + input.F_Remark;
  280. List<T_Bus_OrderDetail> modelOldDetailList = new List<T_Bus_OrderDetail>();
  281. //更新售后流程的退货商品
  282. if (string.IsNullOrEmpty(modelAfterSale.F_OldDetailList))
  283. {
  284. #region 退回商品展示
  285. foreach (string product in modelAfterSale.F_OldDetailList.Split('|'))
  286. {
  287. string productid = product.Split(',')[0];
  288. T_Bus_OrderDetail modelDetail = await bus_OrderDetailRepository.GetSingle(q => q.F_OrderId == modeOrder.F_Id && q.F_ProductId == productid);
  289. if (modelDetail.F_State >= 1)
  290. {
  291. return Error("此商品已参加售后:" + modelDetail.F_ProductName);
  292. }
  293. modelDetail.F_State = 1;
  294. modelOldDetailList.Add(modelDetail);
  295. }
  296. #endregion
  297. }
  298. if (input.F_Type == 4)
  299. {
  300. if (input.F_CheckStateSH == 1)
  301. {
  302. modelAfterSale.F_AboutOrderId = "BJ" + UserLogin.UserId + "T" + DateTimeConvert.ToTimetag(DateTime.Now);
  303. string addResult = await AddOrder(modelAfterSale, modeOrder);
  304. if (addResult != "1")
  305. {
  306. return Error("订单无法创建:" + addResult);
  307. }
  308. }
  309. }
  310. else if (input.F_Type == 2 || input.F_Type == 3)
  311. {
  312. }
  313. else if (input.F_Type == 1)
  314. {
  315. }
  316. if (modelOldDetailList != null && modelOldDetailList.Count > 0)
  317. {
  318. //批量更新状态 为售后中
  319. await bus_OrderDetailRepository.UpdateList(modelOldDetailList);
  320. }
  321. if (await busAfterSaleRepository.AddReturnCount(modelAfterSale))
  322. {
  323. if (input.F_CheckStateSH == 0)
  324. return Success("售后已保存");
  325. else if (input.F_CheckStateSH == 1)
  326. { return Success("售后已提交"); }
  327. }
  328. return Error("申请失败,请重试!");
  329. }
  330. catch (Exception ex)
  331. { return Error(ex.Message); }
  332. }
  333. /// <summary>
  334. /// 销售编辑售后
  335. /// </summary>
  336. /// <param name="input"></param>
  337. /// <returns></returns>
  338. [HttpPost("editaftersalesh")]
  339. public async Task<IActionResult> EditAfterSaleSH(AfterSaleInput input)
  340. {
  341. try
  342. {
  343. #region 验证参数 必填项
  344. if (string.IsNullOrEmpty(input.F_OrderId))
  345. return Error("请选择订单");
  346. if (string.IsNullOrEmpty(input.F_Id))
  347. return Error("请选择售后单");
  348. if (input.F_Type <= 0)
  349. return Error("申请类型不符合售后");
  350. #endregion
  351. T_Bus_Order modeOrder = await bus_OrderRepository.GetSingle(q => q.F_Id == input.F_OrderId);
  352. if (modeOrder == null)
  353. {
  354. return Error("订单不存在");
  355. }
  356. else if (modeOrder.F_Status == -1)
  357. {
  358. //物流状态0 未发出 1物流运送中2签收3改代收4拒收
  359. return Error("订单状态不符合售后");
  360. }
  361. T_Bus_AfterSale modelAfterSale = await busAfterSaleRepository.GetSingle(q => q.F_Id == input.F_Id);
  362. if (modelAfterSale.F_CheckStateSH == 1)
  363. {
  364. return Error("不能重复审核提交");
  365. }
  366. modelAfterSale.F_CheckTimeSH = DateTime.Now;
  367. modelAfterSale.F_CheckStateSH = input.F_State;
  368. modelAfterSale.F_CheckUserSH = UserLogin.UserId.ObjToInt();
  369. modelAfterSale.F_CheckUserNameSH = UserLogin.UserName;
  370. modelAfterSale.F_CheckUserXS = modeOrder.F_AddUser;
  371. modelAfterSale.F_DetailList = input.F_DetailList;
  372. modelAfterSale.F_Type = input.F_Type;
  373. modelAfterSale.F_Money = input.F_Money;
  374. modelAfterSale.F_OrderId = input.F_OrderId;
  375. modelAfterSale.F_AboutOrderId = "";
  376. modelAfterSale.F_Id = Guid.NewGuid().ToString().Replace("-", "");
  377. modelAfterSale.F_TrackingNo = input.F_TrackingNo;
  378. modelAfterSale.F_TrackDes = input.F_TrackDes;
  379. if (!string.IsNullOrEmpty(input.F_Remark))
  380. modelAfterSale.F_Remark = " 售后:" + input.F_Remark;
  381. if (modelAfterSale.F_Type == 4)
  382. {
  383. if (modelAfterSale.F_CheckStateSH == 1)
  384. {
  385. modelAfterSale.F_AboutOrderId = "BJ" + UserLogin.UserId + "T" + DateTimeConvert.ToTimetag(DateTime.Now);
  386. string addResult = await AddOrder(modelAfterSale, modeOrder);
  387. if (addResult != "1")
  388. {
  389. return Error("订单无法创建:" + addResult);
  390. }
  391. }
  392. }
  393. if (await busAfterSaleRepository.AddReturnCount(modelAfterSale))
  394. {
  395. if (input.F_CheckStateSH == 0)
  396. return Success("售后已保存");
  397. else if (input.F_CheckStateSH == 1)
  398. { return Success("售后已提交"); }
  399. }
  400. return Error("申请失败,请重试!");
  401. }
  402. catch (Exception ex)
  403. { return Error(ex.Message); }
  404. }
  405. /// <summary>
  406. /// 售后删除
  407. /// </summary>
  408. /// <param name="input"></param>
  409. /// <returns></returns>
  410. [HttpPost("deleteaftersalesh")]
  411. public async Task<IActionResult> DeleteAfterSaleSH(string ids)
  412. {
  413. try
  414. {
  415. if (string.IsNullOrEmpty(ids))
  416. {
  417. return Error("参数缺失:" + ids);
  418. }
  419. string[] idlist = ids.Split(',');
  420. if (await busAfterSaleRepository.Delete(q => idlist.Contains(q.F_Id) && new[] { 0, 2 }.Contains(q.F_CheckStateSH)))
  421. {
  422. return Success("删除成功");
  423. }
  424. return Error("删除失败,请重试!已审核通过不能删除");
  425. }
  426. catch (Exception ex)
  427. { return Error(ex.Message); }
  428. }
  429. /// <summary>
  430. /// 根据分页获取列表
  431. /// </summary>
  432. /// <param name="input"></param>
  433. /// <returns></returns>
  434. [HttpPost("getaftersalebypagesh")]
  435. public async Task<IActionResult> GetAfterSaleByPageSH(AfterSaleInput input)
  436. {
  437. #region 拼接条件
  438. Expression<Func<T_Bus_AfterSale, bool>> eq = a => a.F_CheckUserSH == UserLogin.UserId.ObjToInt();
  439. //if (input.F_CheckStateXS > -2)
  440. //{
  441. // eq = eq.And(a => a.F_CheckStateXS == input.F_CheckStateXS);
  442. //}
  443. if (input.F_CheckStateSH > -2)
  444. {
  445. eq = eq.And(a => a.F_CheckStateSH == input.F_CheckStateSH);
  446. }
  447. if (input.F_Type > 0)
  448. {
  449. eq = eq.And(a => a.F_Type == input.F_Type);
  450. }
  451. if (!string.IsNullOrEmpty(input.F_Id))
  452. {
  453. eq = eq.And(a => a.F_Id == input.F_Id);
  454. }
  455. if (input.F_State > -2)
  456. {
  457. eq = eq.And(a => a.F_State == input.F_State);
  458. }
  459. #endregion
  460. RefAsync<int> count = 0;
  461. PageData<T_Bus_AfterSale> list = await busAfterSaleRepository.GetListByPage(eq, new MyPageModel() { PageIndex = input.pageindex, PageSize = input.pagesize, PageCount = count }, " F_AddTime DESC");
  462. return Success("成功", list);
  463. }
  464. #endregion
  465. #region 仓库操作
  466. /// <summary>
  467. /// 更新状态
  468. /// </summary>
  469. /// <param name="input"></param>
  470. /// <returns></returns>
  471. [HttpPost("updatestatekg")]
  472. public async Task<IActionResult> UpdateState(AfterSaleInput input)
  473. {
  474. try
  475. {
  476. #region 验证参数 必填项
  477. if (string.IsNullOrEmpty(input.F_Id))
  478. return Error("请选择售后单");
  479. #endregion
  480. T_Bus_AfterSale modelAfterSale = await busAfterSaleRepository.GetSingle(q => q.F_Id == input.F_Id);
  481. T_Bus_Order modeOrder = await bus_OrderRepository.GetSingle(q => q.F_Id == modelAfterSale.F_OrderId);
  482. if (modeOrder == null)
  483. {
  484. return Error("订单不存在");
  485. }
  486. if (modelAfterSale.F_CheckStateKG == 1 || modelAfterSale.F_CheckStateKG == 2)
  487. {
  488. //1收到货(根据状态自动创建订单)2货物不符3未收到货
  489. return Error("不能重复审核提交");
  490. }
  491. modelAfterSale.F_CheckStateKG = input.F_State;
  492. modelAfterSale.F_CheckTimeKG = DateTime.Now;
  493. modelAfterSale.F_CheckUserKG = UserLogin.UserId.ObjToInt();
  494. modelAfterSale.F_CheckUserNameKG = UserLogin.UserName;
  495. modelAfterSale.F_CheckUserXS = modeOrder.F_AddUser;
  496. List<T_Bus_OrderDetail> modelOldDetailList = new List<T_Bus_OrderDetail>();
  497. //1收到货(根据状态自动创建订单)2货物不符3未收到货
  498. if (modelAfterSale.F_CheckStateKG == 1)
  499. {
  500. #region 更新用户快递商品
  501. if (string.IsNullOrEmpty(modelAfterSale.F_OldDetailList))
  502. {
  503. foreach (string product in modelAfterSale.F_DetailList.Split('|'))
  504. {
  505. string productid = product.Split(',')[0];
  506. T_Bus_OrderDetail modelDetail = await bus_OrderDetailRepository.GetSingle(q => q.F_OrderId == modeOrder.F_Id && q.F_ProductId == productid);
  507. if (modelDetail.F_State == 2)
  508. {
  509. return Error("此商品已参加过售后:" + modelDetail.F_ProductName);
  510. }
  511. modelDetail.F_State = 2;
  512. modelOldDetailList.Add(modelDetail);
  513. }
  514. }
  515. #endregion
  516. if (modelAfterSale.F_Type == 4)
  517. {
  518. modelAfterSale.F_State = 1;
  519. }
  520. else if (modelAfterSale.F_Type == 2 || modelAfterSale.F_Type == 3)
  521. {
  522. }
  523. else if (modelAfterSale.F_Type == 1)
  524. {
  525. modelAfterSale.F_AboutOrderId = "BJ" + UserLogin.UserId + "T" + DateTimeConvert.ToTimetag(DateTime.Now);
  526. string addResult = await AddOrder(modelAfterSale, modeOrder);
  527. if (addResult != "1")
  528. {
  529. return Error("订单无法创建:" + addResult);
  530. }
  531. modelAfterSale.F_State = 1;
  532. }
  533. }
  534. else if (modelAfterSale.F_CheckStateKG == 2)
  535. {
  536. //时间长自动作废
  537. //如果没有对发货 货物不符则标记为无效
  538. #region 更新用户快递商品
  539. if (modelAfterSale.F_Type != 1)
  540. {
  541. if (string.IsNullOrEmpty(modelAfterSale.F_OldDetailList))
  542. {
  543. foreach (string product in modelAfterSale.F_DetailList.Split('|'))
  544. {
  545. string productid = product.Split(',')[0];
  546. T_Bus_OrderDetail modelDetail = await bus_OrderDetailRepository.GetSingle(q => q.F_OrderId == modeOrder.F_Id && q.F_ProductId == productid);
  547. if (modelDetail.F_State == 2)
  548. {
  549. return Error("此商品已参加过售后:" + modelDetail.F_ProductName);
  550. }
  551. modelDetail.F_State = 0;
  552. modelOldDetailList.Add(modelDetail);
  553. }
  554. }
  555. }
  556. #endregion
  557. }
  558. else if (modelAfterSale.F_CheckStateKG == 3)
  559. { //时间长自动作废
  560. //如果没有对发货 未收到货则标记为无效
  561. }
  562. if (modelOldDetailList != null && modelOldDetailList.Count > 0)
  563. {
  564. //批量更新状态 为已售后
  565. await bus_OrderDetailRepository.UpdateList(modelOldDetailList);
  566. }
  567. if (await busAfterSaleRepository.AddReturnCount(modelAfterSale))
  568. {
  569. if (input.F_CheckStateSH == 0)
  570. return Success("售后已保存");
  571. else if (input.F_CheckStateSH == 1)
  572. { return Success("售后已提交"); }
  573. }
  574. return Error("申请失败,请重试!");
  575. }
  576. catch (Exception ex)
  577. { return Error(ex.Message); }
  578. }
  579. /// <summary>
  580. /// 根据分页获取列表(库管)
  581. /// </summary>
  582. /// <param name="input"></param>
  583. /// <returns></returns>
  584. [HttpPost("getaftersalebypagekg")]
  585. public async Task<IActionResult> GetAfterSaleByPageKG(AfterSaleInput input)
  586. {
  587. #region 拼接条件
  588. Expression<Func<T_Bus_AfterSale, bool>> eq = a => a.F_CheckStateSH == 1;
  589. if (input.F_CheckStateKG > -2)
  590. {
  591. if (input.F_CheckStateKG > 0)
  592. {
  593. eq = eq.And(a => a.F_CheckUserKG == UserLogin.UserId.ObjToInt());
  594. }
  595. eq = eq.And(a => a.F_CheckStateKG == input.F_CheckStateKG);
  596. }
  597. if (input.F_Type > 0)
  598. {
  599. eq = eq.And(a => a.F_Type == input.F_Type);
  600. }
  601. if (!string.IsNullOrEmpty(input.F_Id))
  602. {
  603. eq = eq.And(a => a.F_Id == input.F_Id);
  604. }
  605. if (input.F_State > -2)
  606. {
  607. eq = eq.And(a => a.F_State == input.F_State);
  608. }
  609. #endregion
  610. RefAsync<int> count = 0;
  611. PageData<T_Bus_AfterSale> list = await busAfterSaleRepository.GetListByPage(eq, new MyPageModel() { PageIndex = input.pageindex, PageSize = input.pagesize, PageCount = count }, " F_AddTime DESC");
  612. return Success("成功", list);
  613. }
  614. #endregion
  615. #region 方法
  616. /// <summary>
  617. /// 仓库确认后创建订单 对发货直接创建订单
  618. /// </summary>
  619. /// <param name="newOrderlist">12,3|</param>
  620. /// <param name="OldModelOrder"></param>
  621. /// <param name="money"></param>
  622. /// <returns></returns>
  623. private async Task<string> AddOrder(T_Bus_AfterSale ModelAfterSale, T_Bus_Order OldModelOrder)
  624. {
  625. try
  626. {
  627. string newOrderlist = ModelAfterSale.F_DetailList;
  628. T_Bus_Order modelOrder = OldModelOrder;
  629. #region 订单属性
  630. //必填
  631. modelOrder.F_Type = "售后订单";
  632. modelOrder.F_Id = ModelAfterSale.F_AboutOrderId;
  633. //选填 快递属性
  634. modelOrder.F_ExpressFee = 0;
  635. //modelOrder.F_Stock = input.F_Stock;
  636. modelOrder.F_Remark = "售后订单";
  637. modelOrder.F_RealPrice = 0.00M;
  638. modelOrder.F_UseScore = 0.00M;
  639. //选填 关联属性
  640. modelOrder.F_State = 0;
  641. modelOrder.F_Status = 0;
  642. //必须属性 系统生成
  643. modelOrder.F_AddTime = DateTime.Now;
  644. modelOrder.F_AddUser = UserLogin.UserId.ObjToInt();
  645. modelOrder.F_AddUserName = UserLogin.UserName;
  646. modelOrder.F_Belong = OldModelOrder.F_Belong;
  647. modelOrder.F_BelongName = OldModelOrder.F_BelongName;
  648. #endregion
  649. //计算属性 商品计算
  650. decimal totle = 0.00M;
  651. List<T_Bus_OrderDetail> modelDetailList = new List<T_Bus_OrderDetail>();
  652. #region 订单详情列表核算
  653. if (string.IsNullOrEmpty(newOrderlist))
  654. {
  655. int n = 1;
  656. #region 商品核算
  657. foreach (string product in newOrderlist.Split('|'))
  658. {
  659. string productid = product.Split(',')[0];
  660. int Count = product.Split(',')[1].ObjToInt();
  661. T_Bus_Product modelProduct = await bus_productRepository.GetSingle(b => b.F_ProductId == productid);
  662. if (modelProduct == null)
  663. return "商品不存在:" + productid;
  664. T_Bus_OrderDetail modelDetail = new T_Bus_OrderDetail();
  665. modelDetail.F_ProductName = modelProduct.F_ProductName;
  666. modelDetail.F_ProductId = modelProduct.F_ProductId;
  667. modelDetail.F_Id = Guid.NewGuid().ToString().Replace("-", "");
  668. modelDetail.F_OrderId = modelOrder.F_Id;
  669. modelDetail.F_Count = Count;
  670. modelDetail.F_Price = modelProduct.F_MemberPrice;
  671. modelDetail.F_DealPrice = modelProduct.F_MemberPrice;
  672. modelDetail.F_Remark = "售后订单:";
  673. modelDetail.F_Sort = n;
  674. modelDetail.F_AddTime = DateTime.Now;
  675. modelDetail.F_AddUser = modelOrder.F_AddUser;
  676. modelDetail.F_AddUserName = modelOrder.F_AddUserName;
  677. modelDetail.F_TotlePrice = modelDetail.F_DealPrice * modelDetail.F_Count;
  678. modelDetail.F_Activity = 0;
  679. modelDetailList.Add(modelDetail);
  680. totle += modelDetail.F_TotlePrice;
  681. n++;
  682. }
  683. #endregion
  684. modelOrder.F_TotlePrice = totle;
  685. modelOrder.F_ActivityMoney = 0.00M;
  686. modelOrder.F_UseActivity = "";
  687. }
  688. else
  689. {
  690. return "0";
  691. }
  692. #endregion
  693. #region 直接提交 锁库存log 锁积分log
  694. modelOrder.F_FlowNum = Guid.NewGuid().ToString().Replace("-", "");
  695. string strStock = await orderController.ChangeStockOne(modelOrder, 1, modelDetailList);
  696. if (strStock != "1")
  697. { modelOrder.F_State = 0; }
  698. else
  699. { modelOrder.F_SubmitTime = DateTime.Now; }
  700. #endregion
  701. //计算结果 积分有规则
  702. modelOrder.F_ShouldPrice = ModelAfterSale.F_Money;
  703. modelOrder.F_RealPrice = 0.00M;
  704. if (await bus_OrderRepository.AddReturnCount(modelOrder))
  705. {
  706. if (await bus_OrderDetailRepository.AddMany(modelDetailList))
  707. return "1";
  708. else
  709. return "订单添加失败,请重试!";
  710. }
  711. else
  712. {
  713. return "订单添加失败,请重试!";
  714. }
  715. }
  716. catch (Exception ex)
  717. { return ex.Message; }
  718. }
  719. /// <summary>
  720. /// 获取未售后的订单详情
  721. /// </summary>
  722. /// <param name="input"></param>
  723. /// <returns></returns>
  724. [HttpPost("getorderdetail")]
  725. public async Task<IActionResult> GetOrderDetail(string orderid)
  726. {
  727. if (string.IsNullOrEmpty(orderid))
  728. return Error("请输入订单号");
  729. T_Bus_Order modelOrder = await bus_OrderRepository.GetSingle(q => q.F_Id == orderid);
  730. OrderInput modelreturn = new OrderInput();
  731. if (modelOrder != null)
  732. {
  733. modelreturn.F_ADFrom = modelOrder.F_ADFrom;
  734. modelreturn.F_Type = modelOrder.F_Type;
  735. modelreturn.F_Id = modelOrder.F_Id;
  736. modelreturn.F_Customer = modelOrder.F_Customer;
  737. modelreturn.F_CustomerPhone = modelOrder.F_CustomerPhone;
  738. //选填 快递属性
  739. modelreturn.F_TrackingNo = modelOrder.F_TrackingNo;
  740. modelreturn.F_Addressee = modelOrder.F_Addressee;
  741. modelreturn.F_AddPhone = modelOrder.F_AddPhone;
  742. modelreturn.F_AddProvince = modelOrder.F_AddProvince;
  743. modelreturn.F_AddCity = modelOrder.F_AddCity;
  744. modelreturn.F_AddArea = modelOrder.F_AddArea;
  745. modelreturn.F_AddTown = modelOrder.F_AddTown;
  746. modelreturn.F_AddDes = modelOrder.F_AddDes;
  747. modelreturn.F_Address = modelOrder.F_Address;
  748. modelreturn.F_PostalCode = modelOrder.F_PostalCode;
  749. modelreturn.F_Express = modelOrder.F_Express;
  750. modelreturn.F_PayType = modelOrder.F_PayType;
  751. modelreturn.F_PayState = modelOrder.F_PayState;
  752. modelreturn.F_Stock = modelOrder.F_Stock;
  753. modelreturn.F_Remark = modelOrder.F_Remark;
  754. modelreturn.F_RealPrice = modelOrder.F_RealPrice;
  755. //选填 关联属性
  756. modelreturn.F_VipId = modelOrder.F_VipId;
  757. modelreturn.F_UseScore = modelOrder.F_UseScore;
  758. modelreturn.F_Score = modelOrder.F_Score;
  759. modelreturn.F_State = modelOrder.F_State;
  760. modelreturn.F_Status = modelOrder.F_Status;
  761. //必须属性 系统生成
  762. modelreturn.F_AddTime = modelOrder.F_AddTime;
  763. modelreturn.F_AddUser = modelOrder.F_AddUser;
  764. modelreturn.F_AddUserName = modelOrder.F_AddUserName;
  765. modelreturn.F_TotlePrice = modelOrder.F_TotlePrice;
  766. modelreturn.F_ShouldPrice = modelOrder.F_ShouldPrice;
  767. modelreturn.F_ActivityMoney = modelOrder.F_ActivityMoney;
  768. modelreturn.F_UseActivity = modelOrder.F_UseActivity;
  769. List<OrderDetailInput> modeldetailreturn = new List<OrderDetailInput>();
  770. List<T_Bus_OrderDetail> detaillist = await bus_OrderDetailRepository.GetListALL(q => q.F_OrderId == modelOrder.F_Id, o => o.F_Sort, OrderByType.Asc);
  771. if (detaillist != null)
  772. {
  773. foreach (T_Bus_OrderDetail m in detaillist)
  774. {
  775. OrderDetailInput model = new OrderDetailInput();
  776. model.F_ProductName = m.F_ProductName;
  777. model.F_ProductId = m.F_ProductId;
  778. model.F_Id = m.F_Id;
  779. model.F_OrderId = m.F_OrderId;
  780. model.F_Count = m.F_Count;
  781. model.F_Price = m.F_Price;
  782. model.F_DealPrice = m.F_DealPrice;
  783. model.F_Sort = m.F_Sort;
  784. model.F_AddTime = m.F_AddTime;
  785. model.F_Remark = m.F_Remark;
  786. model.F_AddUser = m.F_AddUser;
  787. model.F_AddUserName = m.F_ProductName;
  788. model.F_TotlePrice = m.F_TotlePrice;
  789. model.F_Activity = m.F_Activity;
  790. modeldetailreturn.Add(model);
  791. }
  792. }
  793. modelreturn.OrderDetailList = modeldetailreturn;
  794. modelreturn.UseActList = null;
  795. }
  796. return Success("成功", modelreturn);
  797. }
  798. #endregion
  799. }
  800. }