ComplaintSignclosedInfoServiceImpl.java 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768
  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. // 仓库电话
  311. String tel = "18574702550";
  312. String text = MessageFormat.format(SmsConfig.CUSTOMER_CONTACT, sigInfo.getSignclosedLogisticsNumber(),number);
  313. String result = smsService.sendOtherCMS(tel, text);
  314. logger.info("给 " + tel + " 手机用户发送短信:" + text+"发送关联客诉通知维修人员:"+result);
  315. }
  316. } catch (Exception e) {
  317. throw new RuntimeException("------------生成检测信息出错------------");
  318. }
  319. }
  320. }
  321. }
  322. }
  323. }
  324. }
  325. }
  326. return 1;
  327. }
  328. /**
  329. * 根据签收id生成维修信息
  330. * @param signclosedId 签收id detectState 状态
  331. * @return
  332. */
  333. public void addDet(Integer signclosedId,Integer detectState){
  334. ComplaintSignclosedInfo sigInfo = complaintSignclosedInfoMapper.getSignclosedById(signclosedId);
  335. //判断是否需要生成维修记录
  336. if(sigInfo.getSignclosedProductInfoList().size() > 0) {
  337. for (SignclosedProductInfo productInfo : sigInfo.getSignclosedProductInfoList()) {
  338. ProductColor productColor = productMapper.getProduceColor(productInfo.getSignclosedProductColor());
  339. Product product = productMapper.getProduce(productColor.getColorProductId());
  340. if(product.getProductIsDetection() != null){
  341. if (product.getProductIsDetection() == 1) {
  342. for (int j = 0; j < productInfo.getProductNum(); j++) {
  343. //添加待检测信息
  344. //查询签收信息
  345. ComplaintDetectInfo detectInfo = new ComplaintDetectInfo();
  346. //生成维修编号
  347. String number = detectNumber();
  348. detectInfo.setDetectNumber(number);
  349. detectInfo.setProductId(productColor.getColorProductId());
  350. detectInfo.setProductColorId(productInfo.getSignclosedProductColor());
  351. detectInfo.setDetectProductNumber(product.getProductNumber());
  352. detectInfo.setDetectState(detectState);
  353. detectInfo.setCustomerId(sigInfo.getSignclosedCustomerId());
  354. detectInfo.setIsMaintenance(0);
  355. detectInfo.setDetectRenovation(0);
  356. detectInfo.setDetectProcessingResults(0);
  357. detectInfo.setSignclosedId(sigInfo.getSignclosedId());
  358. if(detectState != 40){
  359. detectInfo.setDetectSource(1);
  360. Calendar date = Calendar.getInstance();
  361. date.setTime(new Date());
  362. boolean fl = false;
  363. for (int i = 1 ; i <= 3; i++){
  364. date.set(Calendar.DATE, date.get(Calendar.DATE) + i);
  365. int week = date.get(Calendar.DAY_OF_WEEK);//1--7的值,对应:星期日,星期一,星期二,星期三....星期六
  366. if(week == 1){
  367. fl = true;
  368. }
  369. date.set(Calendar.DATE, date.get(Calendar.DATE) - i);
  370. }
  371. if(fl){
  372. date.set(Calendar.DATE, date.get(Calendar.DATE) + 4);
  373. }else{
  374. date.set(Calendar.DATE, date.get(Calendar.DATE) + 3);
  375. }
  376. detectInfo.setMaintenanceCutTime(date.getTime());
  377. }else{
  378. detectInfo.setDetectSource(2);
  379. }
  380. try {
  381. complaintDetectInfoMapper.insert(detectInfo);
  382. } catch (Exception e) {
  383. throw new RuntimeException("------------生成检测信息出错------------");
  384. }
  385. }
  386. }
  387. }
  388. }
  389. }
  390. }
  391. /**
  392. * 生成维修编号
  393. * @return
  394. */
  395. public String detectNumber(){
  396. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
  397. String year = sdf.format(new Date());
  398. String detectNum = RedisUtils.get("detect_"+year);
  399. Integer detectNumber;
  400. if(detectNum == null){
  401. //查询当前月份所有维修机器
  402. Integer num = complaintDetectInfoMapper.getDetectNum();
  403. RedisUtils.put("detect_"+year,num);/*
  404. RedisUtils.expire(SC_DETECT+year,new Date(System.currentTimeMillis() + 2678400000L));*/
  405. detectNumber = num;
  406. }else{
  407. detectNumber =Integer.parseInt(detectNum)+ 1;
  408. RedisUtils.put("detect_"+year,detectNumber);
  409. }
  410. switch (detectNumber.toString().length()){
  411. case 1:
  412. detectNum = "000"+detectNumber;
  413. break;
  414. case 2:
  415. detectNum = "00"+detectNumber;
  416. break;
  417. case 3:
  418. detectNum = "0"+detectNumber;
  419. break;
  420. case 4:
  421. detectNum = detectNumber.toString();
  422. break;
  423. }
  424. return year+detectNum;
  425. }
  426. @Override
  427. public List<SignclosedProductInfo> listSignclosedById(Integer signclosedId) {
  428. return complaintSignclosedInfoMapper.listSignclosedById(signclosedId);
  429. }
  430. @Override
  431. public Integer insertImg(ComplaintSignclosedImg complaintSignclosedImg) {
  432. return complaintSignclosedInfoMapper.insertImg(complaintSignclosedImg);
  433. }
  434. @Override
  435. public List<ComplaintSignclosedImg> listSignclosedImgById(Integer signclosedId) {
  436. return complaintSignclosedInfoMapper.listSignclosedImgById(signclosedId);
  437. }
  438. @Override
  439. public Integer delSignclosedImg(Integer signclosedId) {
  440. return complaintSignclosedInfoMapper.delSignclosedImg(signclosedId);
  441. }
  442. @Override
  443. public Integer delSignclosedBySendbackId(Integer sendbackId) {
  444. return complaintSignclosedInfoMapper.delSignclosedBySendbackId(sendbackId);
  445. }
  446. @Override
  447. public Integer getSignclosedDay(ComplaintSignclosedInfo complaintSignclosedInfo) {
  448. return complaintSignclosedInfoMapper.getSignclosedDay(complaintSignclosedInfo);
  449. }
  450. @Override
  451. @Transactional
  452. public Integer updateSignclosedByYny(ComplaintSignclosedInfo record) {
  453. int num = complaintSignclosedInfoMapper.updateSignclosedById(record);
  454. if(num > 0){
  455. try {
  456. ComplaintSignclosedInfo signclosedInfo = complaintSignclosedInfoMapper.getSignclosedById(record.getSignclosedId());
  457. //新增维修记录
  458. if(signclosedInfo != null && signclosedInfo.getSignclosedProductInfoList().size() > 0){
  459. for (SignclosedProductInfo productInfo : signclosedInfo.getSignclosedProductInfoList()){
  460. Product product = productMapper.getProduce(productInfo.getSignclosedProductId());
  461. if (product.getProductIsDetection() == 1) {
  462. ComplaintDetectInfo info = new ComplaintDetectInfo();
  463. //生成维修编号
  464. String number = detectNumber();
  465. info.setDetectNumber(number);
  466. info.setDetectState(40);
  467. info.setDetectSource(2);
  468. info.setProductId(productInfo.getSignclosedProductId());
  469. info.setProductColorId(productInfo.getSignclosedProductColor());
  470. info.setSignclosedId(record.getSignclosedId());
  471. complaintDetectInfoMapper.insert(info);
  472. }
  473. }
  474. }
  475. }catch (Exception e){
  476. e.printStackTrace();
  477. throw new RuntimeException("------------改为优尼雅客户生成检测信息出错------------");
  478. }
  479. }else{
  480. return num;
  481. }
  482. return 1;
  483. }
  484. @Override
  485. public List<SignclosedProductInfo> listSignclosedProductById(Integer customerId) {
  486. return complaintSignclosedInfoMapper.listSignclosedProductById(customerId);
  487. }
  488. @Transactional
  489. @Override
  490. public Integer delSignclosedById(Integer signclosedId) {
  491. List<SignclosedProductInfo> signclosedProductInfoList = complaintSignclosedInfoMapper.listSignclosedById(signclosedId);
  492. for (SignclosedProductInfo spi:signclosedProductInfoList) {
  493. //增加售后仓库的良品
  494. InventoryInfo inventoryInfo2 = new InventoryInfo();
  495. inventoryInfo2.setInventoryProductColorId(spi.getSignclosedProductColor());
  496. inventoryInfo2.setInventoryDefectiveProductNum(spi.getProductNum());
  497. inventoryInfo2.setInventoryProductBar(spi.getColorBar());
  498. inventoryInfo2.setWarehouseId(2);
  499. inventoryInfo2.setLogType(3); //售后签收,都是次品
  500. inventoryInfo2.setInventoryRecentRecord("售后删除签收产品(签收ID:"+spi.getSignclosedId()+")");
  501. int flag = inventoryService.minusInventory(inventoryInfo2);
  502. if(flag < 1){
  503. throw new RuntimeException("删除签收失败,更新库存失败。");
  504. }
  505. }
  506. return complaintSignclosedInfoMapper.delSignclosedById(signclosedId);
  507. }
  508. @Override
  509. public Integer getCompleteSent(ComplaintSignclosedInfo complaintSignclosedInfo) {
  510. return complaintSignclosedInfoMapper.getCompleteSent(complaintSignclosedInfo);
  511. }
  512. // private Integer addSifnclosed(Map<String,Integer> Map,Integer signclosedId) {
  513. // Integer msg = 0;
  514. // for (Map.Entry<String, Integer> entry : Map.entrySet()) {
  515. // AwaitingSignclosedProductInfo awaitingSignclosedInfo = new AwaitingSignclosedProductInfo();
  516. // //根据颜色id获取产品信息获取产品信息
  517. // Product product = productMapper.getProductById(Integer.valueOf(entry.getKey()));
  518. // if (product == null) {
  519. // return 0;
  520. // }
  521. // awaitingSignclosedInfo.setSignclosedId(signclosedId);
  522. // awaitingSignclosedInfo.setProductName(product.getProductName());
  523. // awaitingSignclosedInfo.setProductNum(entry.getValue());
  524. // awaitingSignclosedInfo.setSignclosedProductType(1);
  525. // awaitingSignclosedInfo.setSignclosedProductId(product.getProductId());
  526. // awaitingSignclosedInfo.setSignclosedProductColor(Integer.valueOf(entry.getKey()));
  527. // awaitingSignclosedInfo.setSignclosedCreateTime(new Date());
  528. // msg = awaitingSignclosedProductMapper.insert(awaitingSignclosedInfo);
  529. //
  530. // }
  531. // return msg;
  532. // }
  533. @Override
  534. public ComplaintSignclosedInfo getSignclosedById(Integer signclosedId) {
  535. return complaintSignclosedInfoMapper.getSignclosedById(signclosedId);
  536. }
  537. @Transactional
  538. @Override
  539. public boolean updateSignclosedById(ComplaintSignclosedInfo record,
  540. Map<String,Integer> alreadyColorMap,
  541. Map<String,String[]> machineNumberMap,
  542. Map<String,Integer> alreadyFittingsMap) {
  543. boolean msg = true;
  544. int num = complaintSignclosedInfoMapper.updateSignclosedById(record);
  545. if(num < 1){
  546. msg = false;
  547. }else{
  548. if(alreadyColorMap != null || alreadyColorMap.size() != 0){
  549. for (Map.Entry<String,Integer> entry : alreadyColorMap.entrySet()) {
  550. int i = 0;
  551. SignclosedProductInfo signclosedProductInfo = new SignclosedProductInfo();
  552. //根据颜色id获取产品信息获取产品信息
  553. Product product = productMapper.getProductById(Integer.valueOf(entry.getKey()));
  554. if(product == null){
  555. return false;
  556. }
  557. for (int j = 0;j<entry.getValue();j++){
  558. signclosedProductInfo.setSignclosedId(record.getSignclosedId());
  559. signclosedProductInfo.setProductName(product.getProductName());
  560. signclosedProductInfo.setProductNum(1);
  561. signclosedProductInfo.setSignclosedProductType(1);
  562. signclosedProductInfo.setSignclosedProductId(product.getProductId());
  563. signclosedProductInfo.setSignclosedProductColor(Integer.valueOf(entry.getKey()));
  564. signclosedProductInfo.setSignclosedCreateTime(new Date());
  565. complaintSignclosedProductInfoMapper.insert(signclosedProductInfo);
  566. i++;
  567. }
  568. }
  569. }
  570. }
  571. return msg;
  572. }
  573. @Transactional
  574. @Override
  575. public boolean updateSignclosedById(ComplaintSignclosedInfo record, String orderItemString, String[] componentsImgs) {
  576. boolean msg = true;
  577. int num = complaintSignclosedInfoMapper.updateSignclosedById(record);
  578. if(num < 1){
  579. msg = false;
  580. }else{
  581. //删除待收货产品
  582. complaintSignclosedProductInfoMapper.delSignclosedProduct(record.getSignclosedId());
  583. //删除签收图片
  584. complaintSignclosedInfoMapper.delSignclosedImg(record.getSignclosedId());
  585. //拼接产品名称
  586. StringBuffer puoductbuffer = new StringBuffer("");
  587. if(orderItemString != null){
  588. JSONArray jsonArray = JSONArray.fromObject(orderItemString);
  589. List<SalesOrderItem> salesOrderItemList = (List) JSONArray.toCollection(jsonArray, SalesOrderItem.class);
  590. for (SalesOrderItem salesOrderItem:salesOrderItemList) {
  591. if(salesOrderItem.getItemNum() > 0 && salesOrderItem.getItemColorId() > 0){
  592. int i = 0;
  593. SignclosedProductInfo signclosedProductInfo = new SignclosedProductInfo();
  594. //根据颜色id获取产品信息获取产品信息
  595. ProductColor productColor = productMapper.getProduceColor(salesOrderItem.getItemColorId());
  596. Product product = productMapper.getProduce(productColor.getColorProductId());
  597. if(productColor == null){
  598. msg = false;
  599. }
  600. signclosedProductInfo.setSignclosedId(record.getSignclosedId());
  601. signclosedProductInfo.setProductName(productColor.getProductName());
  602. signclosedProductInfo.setProductNum(1);
  603. signclosedProductInfo.setSignclosedProductType(1);
  604. signclosedProductInfo.setSignclosedProductId(productColor.getColorProductId());
  605. signclosedProductInfo.setSignclosedProductColor(salesOrderItem.getItemColorId());
  606. signclosedProductInfo.setSignclosedCreateTime(new Date());
  607. signclosedProductInfo.setSignclosedState(2);
  608. try {
  609. complaintSignclosedProductInfoMapper.insert(signclosedProductInfo);
  610. }catch (Exception e){
  611. throw new RuntimeException("------------生成签收产品出错------------");
  612. }
  613. puoductbuffer.append(productColor.getProductName() + "("+productColor.getColorName()+")*1");
  614. }
  615. }
  616. }
  617. //添加签收图片
  618. if(componentsImgs != null){
  619. if(componentsImgs.length > 0){
  620. for(String componentsImg : componentsImgs){
  621. ComplaintSignclosedImg complaintSignclosedImg = new ComplaintSignclosedImg();
  622. complaintSignclosedImg.setImgUrl(componentsImg);
  623. complaintSignclosedImg.setSignclosedId(record.getSignclosedId());
  624. complaintSignclosedInfoMapper.insertImg(complaintSignclosedImg);
  625. }
  626. }
  627. }
  628. //同步客诉寄回状态和物流信息
  629. ComplaintSignclosedInfo signclosedInfo = complaintSignclosedInfoMapper.getSignclosedById(record.getSignclosedId());
  630. //调快递查询接口获取签收时间
  631. LogisticsInfo log = new LogisticsInfo();
  632. log.setLogisticsRstCode(signclosedInfo.getSignclosedLogistics());
  633. List<LogisticsInfo> listlog = logisticsInfoService.getLogisticsInfoList(log);
  634. /*Date signTime = kuaidi100.selectCourierSignTime(listlog.get(0),signclosedInfo.getSignclosedLogisticsNumber());*/
  635. SendbackInfo sendbackInfo = new SendbackInfo();
  636. sendbackInfo.setSendbackId(signclosedInfo.getSendbackId());
  637. sendbackInfo.setSendbackStatus(3);
  638. sendbackInfo.setSendbackLogisticsCompany(signclosedInfo.getSignclosedLogistics());
  639. sendbackInfo.setSendbackLogisticsNo(signclosedInfo.getSignclosedLogisticsNumber());
  640. /*if (signTime != null) {
  641. sendbackInfo.setSendbackSignTime(signTime);
  642. }else{
  643. sendbackInfo.setSendbackSignTime(new Date());
  644. }*/
  645. sendbackInfo.setSendbackSignTime(new Date());
  646. if(record.getSendbackIsUse() != null){
  647. sendbackInfo.setSendbackIsUse(record.getSendbackIsUse());
  648. if(record.getSendbackIsUse() == 1){
  649. puoductbuffer.append(",状态:未使用");
  650. }else if(record.getSendbackIsUse() == 2){
  651. puoductbuffer.append(",状态:已使用");
  652. }
  653. }
  654. if(record.getSignclosedDesc() != null && !record.getSignclosedDesc().equals("")){
  655. puoductbuffer.append(",备注:"+record.getSignclosedDesc());
  656. }
  657. customerInfoMapper.updateSendbackInfo(sendbackInfo);
  658. SendbackInfo sendback = customerInfoMapper.getSendbackInfo(signclosedInfo.getSendbackId());
  659. if(sendback.getSendbackNoticeCustomer()!= null && sendback.getSendbackNoticeCustomer() == 1){
  660. Admin admin = new Admin();
  661. admin.setAdminId(sendback.getSendbackPresaleAdminId());
  662. admin = sysMapper.getAdminInfo(admin);
  663. String con = SmsConfig.SIGNCLOSED_NOTICE_CUSTOMERN;
  664. List<SalesOrder> listSalesOrder = salesOrderMapper.listSalesOrderbyCustomerId(signclosedInfo.getSignclosedCustomerId());
  665. String text = MessageFormat.format(con, listSalesOrder.get(0).getSalesOrderId(),signclosedInfo.getSignclosedLogisticsNumber(),puoductbuffer);
  666. smsService.sendOtherCMS(admin.getAdminTel(), text);
  667. }
  668. Integer flag = 0;
  669. // 代签收 - > 已签收 需要入库到售后仓库
  670. List<SignclosedProductInfo> signclosedProductInfoList = complaintSignclosedProductInfoMapper.listSignclosedById(record.getSignclosedId());
  671. for (SignclosedProductInfo spi:signclosedProductInfoList) {
  672. //增加售后仓库的良品
  673. InventoryInfo inventoryInfo2 = new InventoryInfo();
  674. inventoryInfo2.setInventoryDefectiveProductNum(spi.getProductNum());
  675. inventoryInfo2.setInventoryProductBar(spi.getColorBar());
  676. inventoryInfo2.setWarehouseId(record.getWarehouseId());
  677. //售后签收,都是次品
  678. inventoryInfo2.setLogType(3);
  679. inventoryInfo2.setInventoryRecentRecord("售后签收产品(签收ID:"+spi.getSignclosedId()+")");
  680. flag = inventoryService.addInventory(inventoryInfo2);
  681. if(flag < 1){
  682. throw new RuntimeException("签收失败,更新库存失败。");
  683. }
  684. }
  685. }
  686. //关联客诉/判断是否生成客诉信息
  687. try {
  688. addDet(record.getSignclosedId(),1);
  689. }catch (Exception e){
  690. throw new RuntimeException("------------关联客诉出错------------");
  691. }
  692. return msg;
  693. }
  694. @Override
  695. public Integer updateSignclosedById(ComplaintSignclosedInfo record) {
  696. return complaintSignclosedInfoMapper.updateSignclosedById(record);
  697. }
  698. @Override
  699. public Integer updateSignclosedByCustomerId(ComplaintSignclosedInfo record) {
  700. return complaintSignclosedInfoMapper.updateSignclosedByCustomerId(record);
  701. }
  702. @Override
  703. public PagedResult<ComplaintSignclosedInfo> listSignclosed(PageRequest<ComplaintSignclosedInfo> pageRequest) {
  704. if (pageRequest.getData() == null) {
  705. pageRequest.setData(new ComplaintSignclosedInfo());
  706. }
  707. // 计算起始数据
  708. pageRequest.getData().setOffset((pageRequest.getPageNO()-1)*pageRequest.getPageSize());
  709. pageRequest.getData().setPageNum(pageRequest.getPageSize());
  710. // 执行查询
  711. List<ComplaintSignclosedInfo> signclosedList = complaintSignclosedInfoMapper.listSignclosed(pageRequest.getData());
  712. // 查询分页数据
  713. int total = complaintSignclosedInfoMapper.countSigncoled(pageRequest.getData());
  714. // 返回指定数据
  715. PagedResult<ComplaintSignclosedInfo> result = new PagedResult<ComplaintSignclosedInfo>();
  716. result.setPageNo(pageRequest.getPageNO());
  717. result.setPageSize(pageRequest.getPageSize());
  718. result.setDataList(signclosedList);
  719. int temp = total/pageRequest.getPageSize();
  720. result.setTotal(total == 0 ? 0 : (total%pageRequest.getPageSize()==0?temp:temp+1));
  721. return result;
  722. }
  723. @Override
  724. public List<ComplaintSignclosedInfo> listSignclosed(ComplaintSignclosedInfo complaintSignclosedInfo) {
  725. return complaintSignclosedInfoMapper.listSignclosed(complaintSignclosedInfo);
  726. }
  727. }