ComplaintSignclosedInfoServiceImpl.java 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751
  1. package com.iamberry.rst.service.fm;
  2. import com.auth0.jwt.internal.org.apache.commons.lang3.StringUtils;
  3. import com.github.pagehelper.PageHelper;
  4. import com.iamberry.redis.RedisUtils;
  5. import com.iamberry.rst.core.cm.*;
  6. import com.iamberry.rst.core.fm.*;
  7. import com.iamberry.rst.core.order.Product;
  8. import com.iamberry.rst.core.order.ProductColor;
  9. import com.iamberry.rst.core.page.PageRequest;
  10. import com.iamberry.rst.core.page.PagedResult;
  11. import com.iamberry.rst.core.sys.Admin;
  12. import com.iamberry.rst.core.tools.KuaiDi100;
  13. import com.iamberry.rst.core.tools.LogisticsInfo;
  14. import com.iamberry.rst.faces.cm.InventoryService;
  15. import com.iamberry.rst.faces.fm.ComplaintSignclosedInfoService;
  16. import com.iamberry.rst.faces.order.LogisticsInfoService;
  17. import com.iamberry.rst.faces.sms.SmsService;
  18. import com.iamberry.rst.service.cm.mapper.*;
  19. import com.iamberry.rst.service.fm.mapper.*;
  20. import com.iamberry.rst.service.product.mapper.ProductMapper;
  21. import com.iamberry.rst.service.sys.mapper.SysMapper;
  22. import com.iamberry.rst.util.PageUtil;
  23. import com.iamberry.rst.util.ProduceNoUtil;
  24. import com.iamberry.rst.util.SmsConfig;
  25. import com.iamberry.wechat.tools.NameUtils;
  26. import net.sf.json.JSONArray;
  27. import net.sf.json.JSONObject;
  28. import org.slf4j.Logger;
  29. import org.slf4j.LoggerFactory;
  30. import org.springframework.beans.factory.annotation.Autowired;
  31. import org.springframework.stereotype.Service;
  32. import org.springframework.transaction.annotation.Isolation;
  33. import org.springframework.transaction.annotation.Transactional;
  34. import java.text.MessageFormat;
  35. import java.text.SimpleDateFormat;
  36. import java.util.*;
  37. @Service
  38. public class ComplaintSignclosedInfoServiceImpl implements ComplaintSignclosedInfoService {
  39. private Logger logger = LoggerFactory.getLogger(ComplaintSignclosedInfoServiceImpl.class);
  40. @Autowired
  41. private ComplaintSignclosedInfoMapper complaintSignclosedInfoMapper;
  42. @Autowired
  43. private ProductMapper productMapper;
  44. @Autowired
  45. private AwaitingSignclosedProductMapper awaitingSignclosedProductMapper;
  46. @Autowired
  47. private ComplaintSignclosedProductInfoMapper complaintSignclosedProductInfoMapper;
  48. @Autowired
  49. private ComplaintDetectInfoMapper complaintDetectInfoMapper;
  50. @Autowired
  51. private CustomerInfoMapper customerInfoMapper;
  52. @Autowired
  53. private InventoryMapper inventoryMapper;
  54. @Autowired
  55. private InventoryLogMapper inventoryLogMapper;
  56. @Autowired
  57. private SmsService smsService;
  58. @Autowired
  59. private InventoryService inventoryService;
  60. @Autowired
  61. private SysMapper sysMapper;
  62. @Autowired
  63. private SalesOrderMapper salesOrderMapper;
  64. @Autowired
  65. private KuaiDi100 kuaidi100;
  66. @Autowired
  67. private LogisticsInfoService logisticsInfoService;
  68. @Override
  69. @Transactional(rollbackFor = {Exception.class}, isolation = Isolation.REPEATABLE_READ)
  70. public Integer insert(ComplaintSignclosedInfo record, String orderItemString, String[] componentsImgs) {
  71. Integer msg = 0;
  72. int num = 0;
  73. Integer signclosedId = null;
  74. Integer flag = 0;
  75. List<ComplaintSignclosedInfo> sinfoList = new ArrayList<>();
  76. //查询是否已存在相同单号
  77. if(record.getSignclosedLogisticsNumber() != null){
  78. ComplaintSignclosedInfo info = new ComplaintSignclosedInfo();
  79. //判断是否是京东
  80. if (record.getSignclosedLogisticsNumber().contains("-")){
  81. //截取-前的内容搜索一次
  82. info.setSignclosedLogisticsNumber(StringUtils.substringBefore(record.getSignclosedLogisticsNumber(), "-"));
  83. sinfoList = complaintSignclosedInfoMapper.listSignclosed(info);
  84. if(sinfoList.size() <= 0){
  85. //如果没有搜索到数据,则用完整单号搜索
  86. info.setSignclosedLogisticsNumber(record.getSignclosedLogisticsNumber());
  87. sinfoList = complaintSignclosedInfoMapper.listSignclosed(info);
  88. }
  89. }else{
  90. info.setSignclosedLogisticsNumber(record.getSignclosedLogisticsNumber());
  91. sinfoList = complaintSignclosedInfoMapper.listSignclosed(info);
  92. }
  93. if(sinfoList.size() <= 0){
  94. num = complaintSignclosedInfoMapper.insert(record);
  95. //添加成功
  96. msg = 1;
  97. signclosedId = record.getSignclosedId();
  98. }else{
  99. //将签收记录改为已签收
  100. ComplaintSignclosedInfo complaintSignclosedInfo = sinfoList.get(0);
  101. if(complaintSignclosedInfo.getSignclosedIsReceiving() == 1){
  102. complaintSignclosedInfo.setSignclosedIsReceiving(2);
  103. complaintSignclosedInfo.setSignclosedDate(new Date());
  104. complaintSignclosedInfoMapper.updateSignclosedById(complaintSignclosedInfo);
  105. //已存在相同单号的签收信息并修改状态为已签收
  106. msg = 3;
  107. signclosedId = complaintSignclosedInfo.getSignclosedId();
  108. }else{
  109. //已存在相同单号的已签收信息
  110. msg = 4;
  111. }
  112. }
  113. }
  114. if(num > 0){
  115. if(orderItemString != null){
  116. JSONArray jsonArray = JSONArray.fromObject(orderItemString);
  117. List<SalesOrderItem> salesOrderItemList = (List) JSONArray.toCollection(jsonArray, SalesOrderItem.class);
  118. for (SalesOrderItem salesOrderItem:salesOrderItemList) {
  119. if(salesOrderItem.getItemNum() > 0 && salesOrderItem.getItemColorId() > 0){
  120. int i = 0;
  121. SignclosedProductInfo signclosedProductInfo = new SignclosedProductInfo();
  122. //根据颜色id获取产品信息获取产品信息
  123. ProductColor productColor = productMapper.getProduceColor(salesOrderItem.getItemColorId());
  124. if(productColor == null){
  125. msg = 2;
  126. }
  127. if(salesOrderItem.getItemNum() != null && salesOrderItem.getItemNum() != 0){
  128. signclosedProductInfo.setSignclosedId(record.getSignclosedId());
  129. signclosedProductInfo.setProductName(productColor.getProductName());
  130. signclosedProductInfo.setProductNum(salesOrderItem.getItemNum());
  131. signclosedProductInfo.setSignclosedProductType(1);
  132. signclosedProductInfo.setSignclosedProductId(productColor.getColorProductId());
  133. signclosedProductInfo.setSignclosedProductColor(salesOrderItem.getItemColorId());
  134. signclosedProductInfo.setSignclosedCreateTime(new Date());
  135. signclosedProductInfo.setSignclosedState(2);
  136. complaintSignclosedProductInfoMapper.insert(signclosedProductInfo);
  137. }
  138. }
  139. }
  140. }
  141. //添加签收图片
  142. if(componentsImgs != null) {
  143. if (componentsImgs.length > 0) {
  144. for (String componentsImg : componentsImgs) {
  145. ComplaintSignclosedImg complaintSignclosedImg = new ComplaintSignclosedImg();
  146. complaintSignclosedImg.setImgUrl(componentsImg);
  147. complaintSignclosedImg.setSignclosedId(record.getSignclosedId());
  148. complaintSignclosedInfoMapper.insertImg(complaintSignclosedImg);
  149. }
  150. }
  151. }
  152. //没有匹配上并且销售公司为‘优尼雅’,‘上朵’时不展示到待联系列表,并且生成维修信息,状态为‘待完善客户信息’
  153. if(sinfoList.size() <= 0){
  154. if(record.getSignclosedCompanyId() == 3 || record.getSignclosedCompanyId() == 4){
  155. addDet(signclosedId,40);
  156. }
  157. }
  158. //关联客诉/判断是否关联客诉信息
  159. try {
  160. addDetect(record,2);
  161. }catch (Exception e){
  162. throw new RuntimeException("------------关联客诉出错------------");
  163. }
  164. }
  165. // 代签收 - > 已签收 需要入库到售后仓库
  166. if(msg==1 || msg == 3){
  167. List<SignclosedProductInfo> signclosedProductInfoList = complaintSignclosedProductInfoMapper.listSignclosedById(signclosedId);
  168. for (SignclosedProductInfo spi:signclosedProductInfoList) {
  169. //增加售后仓库的良品
  170. InventoryInfo inventoryInfo2 = new InventoryInfo();
  171. inventoryInfo2.setInventoryDefectiveProductNum(spi.getProductNum());
  172. inventoryInfo2.setInventoryProductBar(spi.getColorBar());
  173. inventoryInfo2.setWarehouseId(record.getWarehouseId());
  174. inventoryInfo2.setLogType(3); //售后签收,都是次品
  175. inventoryInfo2.setInventoryRecentRecord("售后签收产品(签收ID:"+spi.getSignclosedId()+")");
  176. flag = inventoryService.addInventory(inventoryInfo2);
  177. if(flag < 1){
  178. throw new RuntimeException("签收失败,更新库存失败。");
  179. }
  180. }
  181. }
  182. return msg;
  183. }
  184. /**
  185. * 关联客诉
  186. * @param record
  187. * type 1新增签收 2客服关联客诉
  188. * @return
  189. */
  190. @Override
  191. public int addDetect(ComplaintSignclosedInfo record,Integer type){
  192. CustomerInfo customerInfo = new CustomerInfo();
  193. List<CustomerInfo> listCustomer = new ArrayList<>();
  194. if(record.getSignclosedCustomerId() != null){
  195. customerInfo.setCustomerId(record.getSignclosedCustomerId());
  196. listCustomer = customerInfoMapper.listCustomer(customerInfo);
  197. }else if(record.getSignclosedLogisticsNumber() != null){
  198. //判断是否是京东
  199. if (record.getSignclosedLogisticsNumber().contains("-")){
  200. //截取-前的内容搜索一次
  201. customerInfo.setSendLogisticsNo(StringUtils.substringBefore(record.getSignclosedLogisticsNumber(), "-"));
  202. listCustomer = customerInfoMapper.listCustomer(customerInfo);
  203. if(listCustomer.size() <= 0){
  204. //如果没有搜索到数据,则用完整单号搜索
  205. customerInfo.setSendLogisticsNo(record.getSignclosedLogisticsNumber());
  206. listCustomer = customerInfoMapper.listCustomer(customerInfo);
  207. }
  208. }else{
  209. customerInfo.setSendLogisticsNo(record.getSignclosedLogisticsNumber());
  210. listCustomer = customerInfoMapper.listCustomer(customerInfo);
  211. }
  212. }
  213. ComplaintSignclosedInfo sigInfo = complaintSignclosedInfoMapper.getSignclosedById(record.getSignclosedId());
  214. boolean m = false;
  215. if(listCustomer.size() > 0){
  216. customerInfo = listCustomer.get(0);
  217. ComplaintSignclosedInfo signclosedInfo = new ComplaintSignclosedInfo();
  218. if(customerInfo.getSendbackInfoList().size()>0){
  219. for (SendbackInfo info : customerInfo.getSendbackInfoList()){
  220. if(info.getSendbackLogisticsNo() != null){
  221. if(info.getSendbackLogisticsNo().equals(sigInfo.getSignclosedLogisticsNumber())){
  222. m = true;
  223. //修改该寄回信息为已签收
  224. info.setSendbackStatus(3);
  225. customerInfoMapper.updateSendbackInfo(info);
  226. //同步寄回id到签收信息
  227. record.setSendbackId(info.getSendbackId());
  228. complaintSignclosedInfoMapper.updateSignclosedById(record);
  229. }
  230. }
  231. }
  232. }
  233. SendbackInfo info = new SendbackInfo();
  234. if(!m || customerInfo.getSendbackInfoList().size() == 0){
  235. info.setSendbackStatus(3);
  236. info.setSendbackLogisticsCompany(sigInfo.getSignclosedLogistics());
  237. info.setSendbackLogisticsNo(sigInfo.getSignclosedLogisticsNumber());
  238. info.setSendbackName(sigInfo.getSignclosedSendName());
  239. info.setSendbackTel(sigInfo.getSignclosedSendTel());
  240. info.setRelationId(customerInfo.getRelationId());
  241. info.setSendbackSignTime(sigInfo.getSignclosedDate());
  242. List<SendbackItem> list = new ArrayList<>();
  243. if(customerInfoMapper.addSendbackInfo(info) > 0){
  244. //添加寄回产品项
  245. for(SignclosedProductInfo productInfo : sigInfo.getSignclosedProductInfoList()){
  246. SendbackItem sendbackItem = new SendbackItem();
  247. sendbackItem.setSendbackId(info.getSendbackId());
  248. sendbackItem.setSendbackColorId(productInfo.getSignclosedProductColor());
  249. sendbackItem.setSendbackProductId(productInfo.getSignclosedProductId());
  250. sendbackItem.setSendbackProdcueNumber(productInfo.getProductNum());
  251. list.add(sendbackItem);
  252. }
  253. customerInfoMapper.addSendbackItemList(list);
  254. }
  255. }
  256. //同步寄回id到签收信息
  257. signclosedInfo.setSendbackId(info.getSendbackId());
  258. signclosedInfo.setSignclosedCustomerId(customerInfo.getCustomerId());
  259. signclosedInfo.setSignclosedId(record.getSignclosedId());
  260. Integer msg = complaintSignclosedInfoMapper.updateSignclosedById(signclosedInfo);
  261. if(msg == 1){
  262. ComplaintSignclosedInfo infos = complaintSignclosedInfoMapper.getSignclosedById(record.getSignclosedId());
  263. //判断是否需要生成维修记录
  264. if(infos.getSignclosedProductInfoList().size() > 0) {
  265. for (SignclosedProductInfo productInfo : infos.getSignclosedProductInfoList()) {
  266. ProductColor productColor = productMapper.getProduceColor(productInfo.getSignclosedProductColor());
  267. Product product = productMapper.getProduce(productColor.getColorProductId());
  268. if(product.getProductIsDetection() != null){
  269. if (product.getProductIsDetection() == 1) {
  270. for (int j = 0; j < productInfo.getProductNum(); j++) {
  271. //添加待检测信息
  272. //查询签收信息
  273. ComplaintDetectInfo detectInfo = new ComplaintDetectInfo();
  274. //生成维修编号
  275. String number = detectNumber();
  276. detectInfo.setDetectNumber(number);
  277. detectInfo.setProductId(productColor.getColorProductId());
  278. detectInfo.setProductColorId(productInfo.getSignclosedProductColor());
  279. detectInfo.setDetectProductNumber(product.getProductNumber());
  280. detectInfo.setDetectState(1);
  281. detectInfo.setCustomerId(infos.getSignclosedCustomerId());
  282. detectInfo.setIsMaintenance(0);
  283. detectInfo.setDetectRenovation(0);
  284. detectInfo.setDetectProcessingResults(0);
  285. detectInfo.setSignclosedId(infos.getSignclosedId());
  286. detectInfo.setDetectSource(1);
  287. Calendar date = Calendar.getInstance();
  288. date.setTime(new Date());
  289. boolean fl = false;
  290. for (int i = 1 ; i <= 3; i++){
  291. date.set(Calendar.DATE, date.get(Calendar.DATE) + i);
  292. //1--7的值,对应:星期日,星期一,星期二,星期三....星期六
  293. int week = date.get(Calendar.DAY_OF_WEEK);
  294. if(week == 1){
  295. fl = true;
  296. }
  297. date.set(Calendar.DATE, date.get(Calendar.DATE) - i);
  298. }
  299. if(fl){
  300. date.set(Calendar.DATE, date.get(Calendar.DATE) + 4);
  301. }else{
  302. date.set(Calendar.DATE, date.get(Calendar.DATE) + 3);
  303. }
  304. detectInfo.setMaintenanceCutTime(date.getTime());
  305. try {
  306. complaintDetectInfoMapper.insert(detectInfo);
  307. if(type == 1){
  308. //客服关联客诉才发送通知短信
  309. //发送短信通知维修检测人员
  310. String text = MessageFormat.format(SmsConfig.CUSTOMER_CONTACT, sigInfo.getSignclosedLogisticsNumber(),number);
  311. String result = smsService.sendOtherCMS(SmsConfig.CUSTOMER_PHONE, text);
  312. logger.info("给 " + SmsConfig.CUSTOMER_PHONE + " 手机用户发送短信:" + text+"发送关联客诉通知维修人员:"+result);
  313. }
  314. } catch (Exception e) {
  315. throw new RuntimeException("------------生成检测信息出错------------");
  316. }
  317. }
  318. }
  319. }
  320. }
  321. }
  322. }
  323. }
  324. return 1;
  325. }
  326. /**
  327. * 根据签收id生成维修信息
  328. * @param signclosedId 签收id detectState 状态
  329. * @return
  330. */
  331. public void addDet(Integer signclosedId,Integer detectState){
  332. ComplaintSignclosedInfo sigInfo = complaintSignclosedInfoMapper.getSignclosedById(signclosedId);
  333. //判断是否需要生成维修记录
  334. if(sigInfo.getSignclosedProductInfoList().size() > 0) {
  335. for (SignclosedProductInfo productInfo : sigInfo.getSignclosedProductInfoList()) {
  336. ProductColor productColor = productMapper.getProduceColor(productInfo.getSignclosedProductColor());
  337. Product product = productMapper.getProduce(productColor.getColorProductId());
  338. if(product.getProductIsDetection() != null){
  339. if (product.getProductIsDetection() == 1) {
  340. for (int j = 0; j < productInfo.getProductNum(); j++) {
  341. //添加待检测信息
  342. //查询签收信息
  343. ComplaintDetectInfo detectInfo = new ComplaintDetectInfo();
  344. //生成维修编号
  345. String number = detectNumber();
  346. detectInfo.setDetectNumber(number);
  347. detectInfo.setProductId(productColor.getColorProductId());
  348. detectInfo.setProductColorId(productInfo.getSignclosedProductColor());
  349. detectInfo.setDetectProductNumber(product.getProductNumber());
  350. detectInfo.setDetectState(detectState);
  351. detectInfo.setCustomerId(sigInfo.getSignclosedCustomerId());
  352. detectInfo.setIsMaintenance(0);
  353. detectInfo.setDetectRenovation(0);
  354. detectInfo.setDetectProcessingResults(0);
  355. detectInfo.setSignclosedId(sigInfo.getSignclosedId());
  356. if(detectState != 40){
  357. detectInfo.setDetectSource(1);
  358. Calendar date = Calendar.getInstance();
  359. date.setTime(new Date());
  360. boolean fl = false;
  361. for (int i = 1 ; i <= 3; i++){
  362. date.set(Calendar.DATE, date.get(Calendar.DATE) + i);
  363. int week = date.get(Calendar.DAY_OF_WEEK);//1--7的值,对应:星期日,星期一,星期二,星期三....星期六
  364. if(week == 1){
  365. fl = true;
  366. }
  367. date.set(Calendar.DATE, date.get(Calendar.DATE) - i);
  368. }
  369. if(fl){
  370. date.set(Calendar.DATE, date.get(Calendar.DATE) + 4);
  371. }else{
  372. date.set(Calendar.DATE, date.get(Calendar.DATE) + 3);
  373. }
  374. detectInfo.setMaintenanceCutTime(date.getTime());
  375. }else{
  376. detectInfo.setDetectSource(2);
  377. }
  378. try {
  379. complaintDetectInfoMapper.insert(detectInfo);
  380. } catch (Exception e) {
  381. throw new RuntimeException("------------生成检测信息出错------------");
  382. }
  383. }
  384. }
  385. }
  386. }
  387. }
  388. }
  389. /**
  390. * 生成维修编号
  391. * @return
  392. */
  393. public String detectNumber(){
  394. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
  395. String year = sdf.format(new Date());
  396. String detectNum = RedisUtils.get("detect_"+year);
  397. Integer detectNumber;
  398. if(detectNum == null){
  399. //查询当前月份所有维修机器
  400. Integer num = complaintDetectInfoMapper.getDetectNum();
  401. RedisUtils.put("detect_"+year,num);/*
  402. RedisUtils.expire(SC_DETECT+year,new Date(System.currentTimeMillis() + 2678400000L));*/
  403. detectNumber = num;
  404. }else{
  405. detectNumber =Integer.parseInt(detectNum)+ 1;
  406. RedisUtils.put("detect_"+year,detectNumber);
  407. }
  408. switch (detectNumber.toString().length()){
  409. case 1:
  410. detectNum = "000"+detectNumber;
  411. break;
  412. case 2:
  413. detectNum = "00"+detectNumber;
  414. break;
  415. case 3:
  416. detectNum = "0"+detectNumber;
  417. break;
  418. case 4:
  419. detectNum = detectNumber.toString();
  420. break;
  421. }
  422. return year+detectNum;
  423. }
  424. @Override
  425. public List<SignclosedProductInfo> listSignclosedById(Integer signclosedId) {
  426. return complaintSignclosedInfoMapper.listSignclosedById(signclosedId);
  427. }
  428. @Override
  429. public Integer insertImg(ComplaintSignclosedImg complaintSignclosedImg) {
  430. return complaintSignclosedInfoMapper.insertImg(complaintSignclosedImg);
  431. }
  432. @Override
  433. public List<ComplaintSignclosedImg> listSignclosedImgById(Integer signclosedId) {
  434. return complaintSignclosedInfoMapper.listSignclosedImgById(signclosedId);
  435. }
  436. @Override
  437. public Integer delSignclosedImg(Integer signclosedId) {
  438. return complaintSignclosedInfoMapper.delSignclosedImg(signclosedId);
  439. }
  440. @Override
  441. public Integer delSignclosedBySendbackId(Integer sendbackId) {
  442. return complaintSignclosedInfoMapper.delSignclosedBySendbackId(sendbackId);
  443. }
  444. @Override
  445. public Integer getSignclosedDay(ComplaintSignclosedInfo complaintSignclosedInfo) {
  446. return complaintSignclosedInfoMapper.getSignclosedDay(complaintSignclosedInfo);
  447. }
  448. @Override
  449. @Transactional
  450. public Integer updateSignclosedByYny(ComplaintSignclosedInfo record) {
  451. int num = complaintSignclosedInfoMapper.updateSignclosedById(record);
  452. if(num > 0){
  453. try {
  454. ComplaintSignclosedInfo signclosedInfo = complaintSignclosedInfoMapper.getSignclosedById(record.getSignclosedId());
  455. //新增维修记录
  456. if(signclosedInfo != null && signclosedInfo.getSignclosedProductInfoList().size() > 0){
  457. for (SignclosedProductInfo productInfo : signclosedInfo.getSignclosedProductInfoList()){
  458. Product product = productMapper.getProduce(productInfo.getSignclosedProductId());
  459. if (product.getProductIsDetection() == 1) {
  460. ComplaintDetectInfo info = new ComplaintDetectInfo();
  461. //生成维修编号
  462. String number = detectNumber();
  463. info.setDetectNumber(number);
  464. info.setDetectState(40);
  465. info.setDetectSource(2);
  466. info.setProductId(productInfo.getSignclosedProductId());
  467. info.setProductColorId(productInfo.getSignclosedProductColor());
  468. info.setSignclosedId(record.getSignclosedId());
  469. complaintDetectInfoMapper.insert(info);
  470. }
  471. }
  472. }
  473. }catch (Exception e){
  474. e.printStackTrace();
  475. throw new RuntimeException("------------改为优尼雅客户生成检测信息出错------------");
  476. }
  477. }else{
  478. return num;
  479. }
  480. return 1;
  481. }
  482. @Override
  483. public List<SignclosedProductInfo> listSignclosedProductById(Integer customerId) {
  484. return complaintSignclosedInfoMapper.listSignclosedProductById(customerId);
  485. }
  486. @Transactional
  487. @Override
  488. public Integer delSignclosedById(Integer signclosedId) {
  489. List<SignclosedProductInfo> signclosedProductInfoList = complaintSignclosedInfoMapper.listSignclosedById(signclosedId);
  490. for (SignclosedProductInfo spi:signclosedProductInfoList) {
  491. //增加售后仓库的良品
  492. InventoryInfo inventoryInfo2 = new InventoryInfo();
  493. inventoryInfo2.setInventoryProductColorId(spi.getSignclosedProductColor());
  494. inventoryInfo2.setInventoryDefectiveProductNum(spi.getProductNum());
  495. inventoryInfo2.setInventoryProductBar(spi.getColorBar());
  496. inventoryInfo2.setWarehouseId(2);
  497. inventoryInfo2.setLogType(3); //售后签收,都是次品
  498. inventoryInfo2.setInventoryRecentRecord("售后删除签收产品(签收ID:"+spi.getSignclosedId()+")");
  499. int flag = inventoryService.minusInventory(inventoryInfo2);
  500. if(flag < 1){
  501. throw new RuntimeException("删除签收失败,更新库存失败。");
  502. }
  503. }
  504. return complaintSignclosedInfoMapper.delSignclosedById(signclosedId);
  505. }
  506. @Override
  507. public Integer getCompleteSent(ComplaintSignclosedInfo complaintSignclosedInfo) {
  508. return complaintSignclosedInfoMapper.getCompleteSent(complaintSignclosedInfo);
  509. }
  510. // private Integer addSifnclosed(Map<String,Integer> Map,Integer signclosedId) {
  511. // Integer msg = 0;
  512. // for (Map.Entry<String, Integer> entry : Map.entrySet()) {
  513. // AwaitingSignclosedProductInfo awaitingSignclosedInfo = new AwaitingSignclosedProductInfo();
  514. // //根据颜色id获取产品信息获取产品信息
  515. // Product product = productMapper.getProductById(Integer.valueOf(entry.getKey()));
  516. // if (product == null) {
  517. // return 0;
  518. // }
  519. // awaitingSignclosedInfo.setSignclosedId(signclosedId);
  520. // awaitingSignclosedInfo.setProductName(product.getProductName());
  521. // awaitingSignclosedInfo.setProductNum(entry.getValue());
  522. // awaitingSignclosedInfo.setSignclosedProductType(1);
  523. // awaitingSignclosedInfo.setSignclosedProductId(product.getProductId());
  524. // awaitingSignclosedInfo.setSignclosedProductColor(Integer.valueOf(entry.getKey()));
  525. // awaitingSignclosedInfo.setSignclosedCreateTime(new Date());
  526. // msg = awaitingSignclosedProductMapper.insert(awaitingSignclosedInfo);
  527. //
  528. // }
  529. // return msg;
  530. // }
  531. @Override
  532. public ComplaintSignclosedInfo getSignclosedById(Integer signclosedId) {
  533. return complaintSignclosedInfoMapper.getSignclosedById(signclosedId);
  534. }
  535. @Transactional
  536. @Override
  537. public boolean updateSignclosedById(ComplaintSignclosedInfo record,
  538. Map<String,Integer> alreadyColorMap,
  539. Map<String,String[]> machineNumberMap,
  540. Map<String,Integer> alreadyFittingsMap) {
  541. boolean msg = true;
  542. int num = complaintSignclosedInfoMapper.updateSignclosedById(record);
  543. if(num < 1){
  544. msg = false;
  545. }else{
  546. if(alreadyColorMap != null || alreadyColorMap.size() != 0){
  547. for (Map.Entry<String,Integer> entry : alreadyColorMap.entrySet()) {
  548. int i = 0;
  549. SignclosedProductInfo signclosedProductInfo = new SignclosedProductInfo();
  550. //根据颜色id获取产品信息获取产品信息
  551. Product product = productMapper.getProductById(Integer.valueOf(entry.getKey()));
  552. if(product == null){
  553. return false;
  554. }
  555. for (int j = 0;j<entry.getValue();j++){
  556. signclosedProductInfo.setSignclosedId(record.getSignclosedId());
  557. signclosedProductInfo.setProductName(product.getProductName());
  558. signclosedProductInfo.setProductNum(1);
  559. signclosedProductInfo.setSignclosedProductType(1);
  560. signclosedProductInfo.setSignclosedProductId(product.getProductId());
  561. signclosedProductInfo.setSignclosedProductColor(Integer.valueOf(entry.getKey()));
  562. signclosedProductInfo.setSignclosedCreateTime(new Date());
  563. complaintSignclosedProductInfoMapper.insert(signclosedProductInfo);
  564. i++;
  565. }
  566. }
  567. }
  568. }
  569. return msg;
  570. }
  571. @Transactional
  572. @Override
  573. public boolean updateSignclosedById(ComplaintSignclosedInfo record, String orderItemString, String[] componentsImgs) {
  574. boolean msg = true;
  575. int num = complaintSignclosedInfoMapper.updateSignclosedById(record);
  576. if(num < 1){
  577. msg = false;
  578. }else{
  579. //删除待收货产品
  580. complaintSignclosedProductInfoMapper.delSignclosedProduct(record.getSignclosedId());
  581. //删除签收图片
  582. complaintSignclosedInfoMapper.delSignclosedImg(record.getSignclosedId());
  583. //拼接产品名称
  584. StringBuffer puoductbuffer = new StringBuffer("");
  585. if(orderItemString != null){
  586. JSONArray jsonArray = JSONArray.fromObject(orderItemString);
  587. List<SalesOrderItem> salesOrderItemList = (List) JSONArray.toCollection(jsonArray, SalesOrderItem.class);
  588. for (SalesOrderItem salesOrderItem:salesOrderItemList) {
  589. if(salesOrderItem.getItemNum() > 0 && salesOrderItem.getItemColorId() > 0){
  590. int i = 0;
  591. SignclosedProductInfo signclosedProductInfo = new SignclosedProductInfo();
  592. //根据颜色id获取产品信息获取产品信息
  593. ProductColor productColor = productMapper.getProduceColor(salesOrderItem.getItemColorId());
  594. Product product = productMapper.getProduce(productColor.getColorProductId());
  595. if(productColor == null){
  596. msg = false;
  597. }
  598. signclosedProductInfo.setSignclosedId(record.getSignclosedId());
  599. signclosedProductInfo.setProductName(productColor.getProductName());
  600. signclosedProductInfo.setProductNum(1);
  601. signclosedProductInfo.setSignclosedProductType(1);
  602. signclosedProductInfo.setSignclosedProductId(productColor.getColorProductId());
  603. signclosedProductInfo.setSignclosedProductColor(salesOrderItem.getItemColorId());
  604. signclosedProductInfo.setSignclosedCreateTime(new Date());
  605. signclosedProductInfo.setSignclosedState(2);
  606. try {
  607. complaintSignclosedProductInfoMapper.insert(signclosedProductInfo);
  608. }catch (Exception e){
  609. throw new RuntimeException("------------生成签收产品出错------------");
  610. }
  611. puoductbuffer.append(productColor.getProductName() + "("+productColor.getColorName()+")*1");
  612. }
  613. }
  614. }
  615. //添加签收图片
  616. if(componentsImgs != null){
  617. if(componentsImgs.length > 0){
  618. for(String componentsImg : componentsImgs){
  619. ComplaintSignclosedImg complaintSignclosedImg = new ComplaintSignclosedImg();
  620. complaintSignclosedImg.setImgUrl(componentsImg);
  621. complaintSignclosedImg.setSignclosedId(record.getSignclosedId());
  622. complaintSignclosedInfoMapper.insertImg(complaintSignclosedImg);
  623. }
  624. }
  625. }
  626. //同步客诉寄回状态和物流信息
  627. ComplaintSignclosedInfo signclosedInfo = complaintSignclosedInfoMapper.getSignclosedById(record.getSignclosedId());
  628. //调快递查询接口获取签收时间
  629. LogisticsInfo log = new LogisticsInfo();
  630. log.setLogisticsRstCode(signclosedInfo.getSignclosedLogistics());
  631. List<LogisticsInfo> listlog = logisticsInfoService.getLogisticsInfoList(log);
  632. /*Date signTime = kuaidi100.selectCourierSignTime(listlog.get(0),signclosedInfo.getSignclosedLogisticsNumber());*/
  633. SendbackInfo sendbackInfo = new SendbackInfo();
  634. sendbackInfo.setSendbackId(signclosedInfo.getSendbackId());
  635. sendbackInfo.setSendbackStatus(3);
  636. sendbackInfo.setSendbackLogisticsCompany(signclosedInfo.getSignclosedLogistics());
  637. sendbackInfo.setSendbackLogisticsNo(signclosedInfo.getSignclosedLogisticsNumber());
  638. /*if (signTime != null) {
  639. sendbackInfo.setSendbackSignTime(signTime);
  640. }else{
  641. sendbackInfo.setSendbackSignTime(new Date());
  642. }*/
  643. sendbackInfo.setSendbackSignTime(new Date());
  644. if(record.getSendbackIsUse() != null){
  645. sendbackInfo.setSendbackIsUse(record.getSendbackIsUse());
  646. if(record.getSendbackIsUse() == 1){
  647. puoductbuffer.append(",状态:未使用");
  648. }else if(record.getSendbackIsUse() == 2){
  649. puoductbuffer.append(",状态:已使用");
  650. }
  651. }
  652. if(record.getSignclosedDesc() != null && !record.getSignclosedDesc().equals("")){
  653. puoductbuffer.append(",备注:"+record.getSignclosedDesc());
  654. }
  655. customerInfoMapper.updateSendbackInfo(sendbackInfo);
  656. SendbackInfo sendback = customerInfoMapper.getSendbackInfo(signclosedInfo.getSendbackId());
  657. if(sendback.getSendbackNoticeCustomer()!= null && sendback.getSendbackNoticeCustomer() == 1){
  658. Admin admin = new Admin();
  659. admin.setAdminId(sendback.getSendbackPresaleAdminId());
  660. admin = sysMapper.getAdminInfo(admin);
  661. String con = SmsConfig.SIGNCLOSED_NOTICE_CUSTOMERN;
  662. List<SalesOrder> listSalesOrder = salesOrderMapper.listSalesOrderbyCustomerId(signclosedInfo.getSignclosedCustomerId());
  663. String text = MessageFormat.format(con, listSalesOrder.get(0).getSalesOrderId(),signclosedInfo.getSignclosedLogisticsNumber(),puoductbuffer);
  664. smsService.sendOtherCMS(admin.getAdminTel(), text);
  665. }
  666. Integer flag = 0;
  667. // 代签收 - > 已签收 需要入库到售后仓库
  668. List<SignclosedProductInfo> signclosedProductInfoList = complaintSignclosedProductInfoMapper.listSignclosedById(record.getSignclosedId());
  669. for (SignclosedProductInfo spi:signclosedProductInfoList) {
  670. //增加售后仓库的良品
  671. InventoryInfo inventoryInfo2 = new InventoryInfo();
  672. inventoryInfo2.setInventoryDefectiveProductNum(spi.getProductNum());
  673. inventoryInfo2.setInventoryProductBar(spi.getColorBar());
  674. inventoryInfo2.setWarehouseId(record.getWarehouseId());
  675. //售后签收,都是次品
  676. inventoryInfo2.setLogType(3);
  677. inventoryInfo2.setInventoryRecentRecord("售后签收产品(签收ID:"+spi.getSignclosedId()+")");
  678. flag = inventoryService.addInventory(inventoryInfo2);
  679. if(flag < 1){
  680. throw new RuntimeException("签收失败,更新库存失败。");
  681. }
  682. }
  683. }
  684. //关联客诉/判断是否生成客诉信息
  685. try {
  686. addDet(record.getSignclosedId(),1);
  687. }catch (Exception e){
  688. throw new RuntimeException("------------关联客诉出错------------");
  689. }
  690. return msg;
  691. }
  692. @Override
  693. public Integer updateSignclosedById(ComplaintSignclosedInfo record) {
  694. return complaintSignclosedInfoMapper.updateSignclosedById(record);
  695. }
  696. @Override
  697. public Integer updateSignclosedByCustomerId(ComplaintSignclosedInfo record) {
  698. return complaintSignclosedInfoMapper.updateSignclosedByCustomerId(record);
  699. }
  700. @Override
  701. public PagedResult<ComplaintSignclosedInfo> listSignclosed(PageRequest<ComplaintSignclosedInfo> pageRequest) {
  702. PageHelper.startPage(pageRequest.getPageNO(), pageRequest.getPageSize(), pageRequest.isPageTotal());
  703. List<ComplaintSignclosedInfo> signclosedList = complaintSignclosedInfoMapper.listSignclosed(pageRequest.getData());
  704. return PageUtil.getPage(signclosedList);
  705. }
  706. @Override
  707. public List<ComplaintSignclosedInfo> listSignclosed(ComplaintSignclosedInfo complaintSignclosedInfo) {
  708. return complaintSignclosedInfoMapper.listSignclosed(complaintSignclosedInfo);
  709. }
  710. }