ComplaintDetectInfoServiceImpl.java 61 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209
  1. package com.iamberry.rst.service.fm;
  2. import com.github.pagehelper.PageHelper;
  3. import com.iamberry.rst.core.cm.CmRelation;
  4. import com.iamberry.rst.core.cm.CompanyInfo;
  5. import com.iamberry.rst.core.cm.ProcMethod;
  6. import com.iamberry.rst.core.cm.SalesOrderItem;
  7. import com.iamberry.rst.core.fm.*;
  8. import com.iamberry.rst.core.order.OrderWarehouse;
  9. import com.iamberry.rst.core.order.Product;
  10. import com.iamberry.rst.core.page.PageRequest;
  11. import com.iamberry.rst.core.page.PagedResult;
  12. import com.iamberry.rst.core.pts.Produce;
  13. import com.iamberry.rst.core.sys.Admin;
  14. import com.iamberry.rst.faces.cm.InventoryService;
  15. import com.iamberry.rst.faces.cm.SalesOrderService;
  16. import com.iamberry.rst.faces.fm.ComplaintDetectInfoService;
  17. import com.iamberry.rst.faces.sms.SmsService;
  18. import com.iamberry.rst.service.cm.mapper.*;
  19. import com.iamberry.rst.service.fm.mapper.ComplaintDetectInfoMapper;
  20. import com.iamberry.rst.service.fm.mapper.ComplaintMaintenanceInfoMapper;
  21. import com.iamberry.rst.service.fm.mapper.DetectCustmoerPhenomenonMapper;
  22. import com.iamberry.rst.service.fm.mapper.DetectTransportMapper;
  23. import com.iamberry.rst.service.product.mapper.ProductMapper;
  24. import com.iamberry.rst.service.pts.mapper.ProduceMapper;
  25. import com.iamberry.rst.service.sys.mapper.SysConfigMapper;
  26. import com.iamberry.rst.service.sys.mapper.SysMapper;
  27. import com.iamberry.rst.util.PageUtil;
  28. import com.iamberry.rst.util.SmsConfig;
  29. import com.iamberry.wechat.core.entity.AdminUtils;
  30. import com.iamberry.wechat.tools.DateTimeUtil;
  31. import com.iamberry.wechat.tools.ResponseJson;
  32. import com.iamberry.wechat.tools.ResultInfo;
  33. import org.slf4j.Logger;
  34. import org.slf4j.LoggerFactory;
  35. import org.springframework.beans.factory.annotation.Autowired;
  36. import org.springframework.stereotype.Service;
  37. import org.springframework.transaction.annotation.Isolation;
  38. import org.springframework.transaction.annotation.Transactional;
  39. import java.text.MessageFormat;
  40. import java.text.SimpleDateFormat;
  41. import java.util.*;
  42. @Service
  43. public class ComplaintDetectInfoServiceImpl implements ComplaintDetectInfoService {
  44. private Logger logger = LoggerFactory.getLogger(ComplaintDetectInfoServiceImpl.class);
  45. @Autowired
  46. private ComplaintDetectInfoMapper complaintDetectInfoMapper;
  47. @Autowired
  48. private CustomerInfoMapper customerInfoMapper;
  49. @Autowired
  50. private ProcMethodMapper procMethodMapper;
  51. @Autowired
  52. private SmsService smsService;
  53. @Autowired
  54. private SalesOrderService salesOrderService;
  55. @Autowired
  56. private InventoryService inventoryService;
  57. @Autowired
  58. private SysMapper sysMapper;
  59. @Autowired
  60. private MaintainPhenomenonMapper phenomenonMapper;
  61. @Autowired
  62. private CompanyInfoMapper companyInfoMapper;
  63. @Autowired
  64. private StoreInfoMapper storeInfoMapper;
  65. @Autowired
  66. private ProductMapper productMapper;
  67. @Autowired
  68. private ProduceMapper produceMapper;
  69. @Autowired
  70. private SysConfigMapper sysConfigMapper;
  71. @Autowired
  72. private DetectCustmoerPhenomenonMapper detectCustmoerPhenomenonMapper;
  73. @Autowired
  74. private DetectTransportMapper detectTransportMapper;
  75. private static final int MAX_MAINTAIN_PRICE = 500_00;
  76. @Override
  77. public ComplaintDetectInfo getDetectByMachine(String machine) {
  78. return complaintDetectInfoMapper.getDetectByMachine(machine);
  79. }
  80. @Override
  81. public ComplaintDetectInfo getDetectById(Integer detectId) {
  82. ComplaintDetectInfo res = complaintDetectInfoMapper.getDetectById(detectId);
  83. if (res == null) {
  84. return res;
  85. }
  86. if (res.getSalesmanAdminId() != null) {
  87. Admin temp = new Admin();
  88. temp.setAdminId(res.getSalesmanAdminId());
  89. res.setSalesmanAdminName(sysMapper.get(temp).getAdminName());
  90. }
  91. res.setPhenomena(complaintDetectInfoMapper.listDetectPhenomenon(detectId));
  92. res.setTransport(detectTransportMapper.get(detectId));
  93. return res;
  94. }
  95. @Override
  96. @Transactional
  97. public int updateDetectById(ComplaintDetectInfo record) {
  98. try {
  99. //删除旧检测项
  100. complaintDetectInfoMapper.detectDetectionItem(record.getDetectId());
  101. //删除旧维修配件项
  102. complaintDetectInfoMapper.detectMaterialItem(record.getDetectId());
  103. //封装检测信息
  104. //检测现象
  105. if(record.getConfigli1() != null) {
  106. if (record.getConfigli1().length > 0) {
  107. StringBuffer detectPhenomenon = new StringBuffer("");
  108. for (String configid : record.getConfigli1()) {
  109. detectPhenomenon.append(adddetectItem(configid, record.getDetectId()) + ";");
  110. }
  111. record.setDetectPhenomenon(detectPhenomenon.toString());
  112. }
  113. }else{
  114. record.setDetectPhenomenon("");
  115. }
  116. //故障原因
  117. if(record.getConfigli2() != null) {
  118. if (record.getConfigli2().length > 0) {
  119. StringBuffer detectFailureCause = new StringBuffer("");
  120. for (String configid : record.getConfigli2()) {
  121. detectFailureCause.append(adddetectItem(configid, record.getDetectId()) + ";");
  122. }
  123. record.setDetectFailureCause(detectFailureCause.toString());
  124. }
  125. }else{
  126. record.setDetectFailureCause("");
  127. }
  128. //判定结果
  129. if(record.getConfigli3() != null){
  130. if(record.getConfigli3().length > 0){
  131. StringBuffer detectResults = new StringBuffer("");
  132. for (String configid : record.getConfigli3()){
  133. detectResults.append(adddetectItem(configid,record.getDetectId())+";");
  134. }
  135. record.setDetectResults(detectResults.toString());
  136. }
  137. }else{
  138. record.setDetectResults("");
  139. }
  140. //故障指向
  141. if(record.getConfigli4() != null) {
  142. if (record.getConfigli4().length > 0) {
  143. StringBuffer detectPoint = new StringBuffer("");
  144. for (String configid : record.getConfigli4()) {
  145. detectPoint.append(adddetectItem(configid, record.getDetectId()) + ";");
  146. }
  147. record.setDetectPoint(detectPoint.toString());
  148. }
  149. }else{
  150. record.setDetectPoint("");
  151. }
  152. //原因分析
  153. if(record.getConfigli5() != null) {
  154. if (record.getConfigli5().length > 0) {
  155. StringBuffer detectNalysis = new StringBuffer("");
  156. for (String configid : record.getConfigli5()) {
  157. detectNalysis.append(adddetectItem(configid, record.getDetectId()) + ";");
  158. }
  159. record.setDetectNalysis(detectNalysis.toString());
  160. }
  161. }else{
  162. record.setDetectNalysis("");
  163. }
  164. //维修配件
  165. if(record.getConfigli6() != null) {
  166. if (record.getConfigli6().length > 0) {
  167. for (String configid : record.getConfigli6()) {
  168. MaterialNumberInfo materialNumberInfo = complaintDetectInfoMapper.getMaterialNumber(Integer.valueOf(configid));
  169. MaterialItem materialItem = new MaterialItem();
  170. materialItem.setDetectId(record.getDetectId());
  171. materialItem.setMaterialId(Integer.valueOf(configid));
  172. materialItem.setMaterialName(materialNumberInfo.getMaterialName());
  173. complaintDetectInfoMapper.addMaterialItem(materialItem);
  174. }
  175. }
  176. }
  177. }catch (Exception e){
  178. e.printStackTrace();
  179. throw new RuntimeException("修改检测失败");
  180. }
  181. return complaintDetectInfoMapper.updateDetectById(record);
  182. }
  183. @Override
  184. @Transactional
  185. public int updateDetectContent(ComplaintDetectInfo record) {
  186. complaintDetectInfoMapper.detectMaterialItem(record.getDetectId());
  187. try {
  188. //维修配件
  189. if(record.getConfigli6() != null) {
  190. if (record.getConfigli6().length > 0) {
  191. for (String configid : record.getConfigli6()) {
  192. MaterialNumberInfo materialNumberInfo = complaintDetectInfoMapper.getMaterialNumber(Integer.valueOf(configid));
  193. MaterialItem materialItem = new MaterialItem();
  194. materialItem.setDetectId(record.getDetectId());
  195. materialItem.setMaterialId(Integer.valueOf(configid));
  196. materialItem.setMaterialName(materialNumberInfo.getMaterialName());
  197. complaintDetectInfoMapper.addMaterialItem(materialItem);
  198. }
  199. }
  200. }
  201. //故障原因
  202. if(record.getConfigli2() != null) {
  203. if (record.getConfigli2().length > 0) {
  204. StringBuffer detectFailureCause = new StringBuffer("");
  205. for (String configid : record.getConfigli2()) {
  206. detectFailureCause.append(adddetectItem(configid, record.getDetectId()) + ";");
  207. }
  208. record.setDetectFailureCause(detectFailureCause.toString());
  209. }
  210. }
  211. //判定结果
  212. if(record.getConfigli3() != null){
  213. if(record.getConfigli3().length > 0){
  214. StringBuffer detectResults = new StringBuffer("");
  215. for (String configid : record.getConfigli3()){
  216. detectResults.append(adddetectItem(configid,record.getDetectId())+";");
  217. }
  218. record.setDetectResults(detectResults.toString());
  219. }
  220. }
  221. //故障指向
  222. if(record.getConfigli4() != null) {
  223. if (record.getConfigli4().length > 0) {
  224. StringBuffer detectPoint = new StringBuffer("");
  225. for (String configid : record.getConfigli4()) {
  226. detectPoint.append(adddetectItem(configid, record.getDetectId()) + ";");
  227. }
  228. record.setDetectPoint(detectPoint.toString());
  229. }
  230. }
  231. //原因分析
  232. if(record.getConfigli5() != null) {
  233. if (record.getConfigli5().length > 0) {
  234. StringBuffer detectNalysis = new StringBuffer("");
  235. for (String configid : record.getConfigli5()) {
  236. detectNalysis.append(adddetectItem(configid, record.getDetectId()) + ";");
  237. }
  238. record.setDetectNalysis(detectNalysis.toString());
  239. }
  240. }
  241. }catch (Exception e){
  242. e.printStackTrace();
  243. throw new RuntimeException("修改检测维修内容失败");
  244. }
  245. return complaintDetectInfoMapper.updateDetectById(record);
  246. }
  247. @Override
  248. @Transactional
  249. public int updateDetectQc(ComplaintDetectInfo record) {
  250. ComplaintDetectInfo comdi = complaintDetectInfoMapper.getDetectByIdFast(record.getDetectId());
  251. record.setDetectNumber(comdi.getDetectNumber());
  252. if(comdi == null){
  253. throw new RuntimeException("查询维修记录失败");
  254. }
  255. if(comdi.getMaintenanceResults() != null && comdi.getMaintenanceResults() == 1){
  256. throw new RuntimeException("该机器已通过QC检测");
  257. }
  258. Integer flag = 0;
  259. //添加日志
  260. QcInfo qcInfo = new QcInfo();
  261. qcInfo.setDetectId(record.getDetectId());
  262. qcInfo.setQcIsThrough(record.getMaintenanceResults());
  263. qcInfo.setQcInfoDesc(record.getQcDesc());
  264. flag = complaintDetectInfoMapper.addQcInfo(qcInfo);
  265. if(flag < 1){
  266. throw new RuntimeException("添加QC检测记录失败");
  267. }
  268. flag = complaintDetectInfoMapper.updateDetectById(record);
  269. if(flag < 1){
  270. throw new RuntimeException("修改QC检测状态");
  271. }
  272. if(record.getMaintenanceResults() == 1){
  273. //maintenanceResults
  274. //判断是否为维修
  275. ComplaintDetectInfo cdi = complaintDetectInfoMapper.getDetectById(record.getDetectId());
  276. Integer typeId = cdi.getProcTypeId();
  277. if(typeId == null){
  278. typeId = cdi.getTypeId();
  279. }
  280. if(typeId != null){
  281. if(typeId == 3){ //3: 维修
  282. //减去售后仓库不良品
  283. InventoryInfo inventoryInfo1 = new InventoryInfo();
  284. inventoryInfo1.setInventoryDefectiveProductNum(1);
  285. inventoryInfo1.setInventoryProductColorId(cdi.getProductColorId());
  286. inventoryInfo1.setWarehouseId(2);
  287. inventoryInfo1.setInventoryRecentRecord("维修机器完成,从售后不良品仓转入售后良品仓(维修ID:"+record.getDetectNumber()+")");
  288. inventoryService.minusInventory(inventoryInfo1);
  289. //增加售后仓库的良品
  290. InventoryInfo inventoryInfo2 = new InventoryInfo();
  291. inventoryInfo2.setInventoryGoodProductNum(1);
  292. inventoryInfo2.setInventoryProductColorId(cdi.getProductColorId());
  293. inventoryInfo2.setWarehouseId(2);
  294. inventoryInfo2.setInventoryRecentRecord("维修机器完成,从售后不良品仓转入售后良品仓(维修ID:"+record.getDetectNumber()+")");
  295. inventoryService.addInventory(inventoryInfo2);
  296. }else{ //退货等
  297. //减去售后仓库不良品
  298. InventoryInfo inventoryInfo1 = new InventoryInfo();
  299. inventoryInfo1.setInventoryDefectiveProductNum(1);
  300. inventoryInfo1.setInventoryProductColorId(cdi.getProductColorId());
  301. inventoryInfo1.setWarehouseId(2);
  302. inventoryInfo1.setInventoryRecentRecord("退货/换货,从售后不良品仓转入正常销售良品仓(维修ID:"+record.getDetectNumber()+")");
  303. inventoryService.minusInventory(inventoryInfo1);
  304. //增加销售仓库的良品
  305. InventoryInfo inventoryInfo2 = new InventoryInfo();
  306. inventoryInfo2.setInventoryGoodProductNum(1);
  307. inventoryInfo2.setInventoryProductColorId(cdi.getProductColorId());
  308. inventoryInfo2.setWarehouseId(2);
  309. inventoryInfo2.setInventoryRecentRecord("退货/换货,从售后不良品仓转入正常销售良品仓(维修ID:"+record.getDetectNumber()+")");
  310. inventoryService.addInventory(inventoryInfo2);
  311. }
  312. }
  313. }
  314. return flag;
  315. }
  316. @Override
  317. @Transactional(rollbackFor = {Exception.class}, isolation = Isolation.REPEATABLE_READ)
  318. public int updateDetectById(ComplaintDetectInfo record,String[] imgs) {
  319. //判断售后流程
  320. ProcMethod procMethod;
  321. Integer procTypeId;
  322. //判断是签收生成还是手动添加
  323. ComplaintDetectInfo complaintDetectInfo = complaintDetectInfoMapper.getDetectById(record.getDetectId());
  324. if(complaintDetectInfo.getDetectSource() == 2 || complaintDetectInfo.getDetectSource() == 3){
  325. //手动添加
  326. procMethod = procMethodMapper.getProcMethodById(complaintDetectInfo.getMethodId());
  327. }else{
  328. CmRelation cmRelation = new CmRelation();
  329. cmRelation.setCustomerId(record.getCustomerId());
  330. cmRelation = customerInfoMapper.getCmRelationInfo(cmRelation);
  331. procMethod = procMethodMapper.getProcMethodById(cmRelation.getProcMethodId());
  332. }
  333. if (procMethod != null) {
  334. procTypeId = procMethod.getProcTypeId();
  335. switch (procTypeId){
  336. case 3:
  337. //维修
  338. if(procMethod.getProcMethodIsCharge() == 0){
  339. //待定
  340. if(record.getIsMaintenance() == 1){
  341. //机器故障,待用户确认
  342. record.setDetectState(38);
  343. }else if(record.getIsMaintenance() == 2){
  344. //机器无故障,待用户确认
  345. record.setDetectState(37);
  346. }
  347. }else if(procMethod.getProcMethodIsCharge() == 1){
  348. //付费
  349. //待用户确认
  350. record.setDetectState(30);
  351. }else if(procMethod.getProcMethodIsCharge() == 2){
  352. //免费
  353. //待客服确认维修
  354. record.setDetectState(34);
  355. }
  356. if (complaintDetectInfo.getDetectIsMaintain() == null) {
  357. complaintDetectInfo.setDetectIsMaintain(1);
  358. }
  359. break;
  360. default:
  361. // 退货/换货
  362. String processingResults = "";
  363. String text = "";
  364. if(record.getDetectRenovation() == 1){
  365. // 是否可翻新 1可翻新 2不可翻新
  366. // 待翻新入库
  367. record.setDetectState(20);
  368. processingResults = "维修";
  369. }else if(record.getDetectRenovation() == 2){
  370. // 不能翻新,待报废
  371. record.setDetectState(22);
  372. processingResults = "报废";
  373. }
  374. // 查询维修编号
  375. ComplaintDetectInfo info = complaintDetectInfoMapper.getDetectById(record.getDetectId());
  376. // 客诉状态为换货或退货时完成检测需要短信通知维修人员
  377. if(procTypeId == 2){
  378. //换货
  379. text = MessageFormat.format(SmsConfig.CUSTOMER_EXCHANGE, info.getDetectNumber(),processingResults);
  380. }
  381. if(procTypeId == 4){
  382. //退货
  383. text = MessageFormat.format(SmsConfig.CUSTOMER_RETURN, info.getDetectNumber(),processingResults);
  384. }
  385. if(procTypeId == 2 || procTypeId == 4){
  386. String result = smsService.sendOtherCMS(SmsConfig.CUSTOMER_PHONE, text);
  387. logger.info("给 " + SmsConfig.CUSTOMER_PHONE + " 手机用户发送短信:" + text+"发送完成检测结果("+processingResults+"):"+result);
  388. }
  389. if (complaintDetectInfo.getDetectIsMaintain() == null) {
  390. complaintDetectInfo.setDetectIsMaintain(2);
  391. }
  392. }
  393. }
  394. Product product = productMapper.getProduce(complaintDetectInfo.getProductId());
  395. Produce temp = new Produce();
  396. if (product != null && product.getProduceId() != null && product.getProduceId() != null) {
  397. temp.setProduceId(product.getProduceId());
  398. temp = produceMapper.getProduceByPro(temp);
  399. if (temp == null) {
  400. throw new RuntimeException("销售产品未获取到对应的绑定生产产品");
  401. }
  402. } else {
  403. throw new RuntimeException("销售产品未获取到对应的绑定生产产品");
  404. }
  405. try {
  406. // 维修报价
  407. CompanyInfo companyInfo = null;
  408. if (record.getDetectPhenomenonIds() != null && record.getDetectPhenomenonIds().length >= 1) {
  409. // 是否维修,1表示判断维修、2表示判断翻新
  410. if (complaintDetectInfo.getDetectIsMaintain() == 1) {
  411. if (complaintDetectInfo.getStoreId() == null) {
  412. // 爱贝源客户
  413. companyInfo = companyInfoMapper.getCompanyInfoById(1);
  414. } else {
  415. // 其他客户
  416. companyInfo = companyInfoMapper.getCompanyInfoById(storeInfoMapper.getStoreInfoById(complaintDetectInfo.getStoreId()).getCompanyId());
  417. }
  418. Date createDate = DateTimeUtil.parse(record.getDetectProduction(), "yyyy-MM-dd");
  419. createDate = DateTimeUtil.addMonth(createDate, companyInfo.getCompanyMaintainMonth());
  420. createDate = DateTimeUtil.addMonth(createDate, companyInfo.getCompaynStorageMonth());
  421. if (createDate.getTime() >= complaintDetectInfo.getDetectCreateTime().getTime()
  422. && record.getIsMaintenance() == 1
  423. && record.getDeleteMaintainType() == 1) {
  424. // 质保期内、机器有故障,并且为质量问题导致的(免费维修)
  425. record.setDetectState(34);
  426. record.setDetectOffer(0);
  427. } else if (procMethod != null && procMethod.getProcMethodIsCharge() != null && procMethod.getProcMethodIsCharge() == 0) {
  428. // 此处为了兼容爱贝源的检测待定选项
  429. if(record.getIsMaintenance() == 1){
  430. // 机器故障,待用户确认
  431. if (createDate.getTime() >= complaintDetectInfo.getDetectCreateTime().getTime() && record.getDeleteMaintainType() == 1) {
  432. // 质保期内、机器有故障,并且为质量问题导致的(免费维修)
  433. record.setDetectState(34);
  434. record.setDetectOffer(0);
  435. } else {
  436. // 系统检测,若维修类型为同一个时,再次递增同类型的问题现象,不收取维修费用
  437. Map<Integer, Integer> maintainType = new HashMap<>(5);
  438. for (Integer id : record.getDetectPhenomenonIds()) {
  439. // 计算维修费用
  440. MaintainPhenomenon phenomenon = null;
  441. if (record.getDetectOffer() == null) {
  442. phenomenon = phenomenonMapper.get(id);
  443. record.setDetectOffer(phenomenon.getPhenomenonMaintainPrice());
  444. } else {
  445. phenomenon = phenomenonMapper.get(id);
  446. record.setDetectOffer(record.getDetectOffer() + phenomenon.getPhenomenonMaintainPrice());
  447. }
  448. // 保存问题类型出现的次数
  449. Integer val = maintainType.get(phenomenon.getTypeId());
  450. if (val == null) {
  451. maintainType.put(phenomenon.getTypeId(), 0);
  452. } else {
  453. maintainType.put(phenomenon.getTypeId(), val++);
  454. }
  455. }
  456. // 减去同类型问题现象的拆机费用
  457. maintainType.forEach((k, v) -> {
  458. record.setDetectOffer(record.getDetectOffer()-v*50_00);
  459. });
  460. // 系统设置最高的维修价格上限,当超过最高的维修上限时,使用最高的维修价格
  461. if (record.getDetectOffer() > MAX_MAINTAIN_PRICE) {
  462. record.setDetectOffer(MAX_MAINTAIN_PRICE);
  463. }
  464. record.setDetectState(30);
  465. }
  466. }else if(record.getIsMaintenance() == 2){
  467. // 机器无故障,待用户确认
  468. record.setDetectOffer(0);
  469. record.setDetectState(37);
  470. }
  471. } else {
  472. // 质保期外(付费维修) , 并且机器非检测待定的
  473. // 系统检测,若维修类型为同一个时,再次递增同类型的问题现象,不收取维修费用
  474. Map<Integer, Integer> maintainType = new HashMap<>(5);
  475. for (Integer id : record.getDetectPhenomenonIds()) {
  476. // 计算维修费用
  477. MaintainPhenomenon phenomenon = null;
  478. if (record.getDetectOffer() == null) {
  479. phenomenon = phenomenonMapper.get(id);
  480. record.setDetectOffer(phenomenon.getPhenomenonMaintainPrice());
  481. } else {
  482. phenomenon = phenomenonMapper.get(id);
  483. record.setDetectOffer(record.getDetectOffer() + phenomenon.getPhenomenonMaintainPrice());
  484. }
  485. // 保存问题类型出现的次数
  486. Integer val = maintainType.get(phenomenon.getTypeId());
  487. if (val == null) {
  488. maintainType.put(phenomenon.getTypeId(), 0);
  489. } else {
  490. maintainType.put(phenomenon.getTypeId(), val++);
  491. }
  492. }
  493. // 减去同类型问题现象的拆机费用
  494. maintainType.forEach((k, v) -> {
  495. record.setDetectOffer(record.getDetectOffer()-v*50_00);
  496. });
  497. // 系统设置最高的维修价格上限,当超过最高的维修上限时,使用最高的维修价格
  498. if (record.getDetectOffer() > MAX_MAINTAIN_PRICE) {
  499. record.setDetectOffer(MAX_MAINTAIN_PRICE);
  500. }
  501. record.setDetectState(30);
  502. }
  503. } else {
  504. if (record.getIsMaintenance() == 1) {
  505. // 无故障(付费翻新)
  506. if (record.getDeleteIsUse() == 1) {
  507. // 未过水(翻新)
  508. if (temp.getProduceIsW() == 1) {
  509. // W系列
  510. record.setDetectOffer(Integer.parseInt(sysConfigMapper.getSysConfig(12)));
  511. } else if (temp.getProduceIsW() == 2) {
  512. // S系列
  513. record.setDetectOffer(Integer.parseInt(sysConfigMapper.getSysConfig(14)));
  514. }
  515. } else {
  516. // 已过水(翻新)
  517. if (temp.getProduceIsW() == 1) {
  518. // W系列
  519. record.setDetectOffer(Integer.parseInt(sysConfigMapper.getSysConfig(11)));
  520. } else if (temp.getProduceIsW() == 2) {
  521. // S系列
  522. record.setDetectOffer(Integer.parseInt(sysConfigMapper.getSysConfig(13)));
  523. }
  524. }
  525. record.setDetectState(24);
  526. } else {
  527. // 有故障
  528. if (record.getDeleteMaintainType() == 1) {
  529. // 质量问题(获取当前客户录入日期和仓储期+售后期,对比机器生产日期)
  530. if (complaintDetectInfo.getStoreId() == null) {
  531. // 爱贝源客户
  532. companyInfo = companyInfoMapper.getCompanyInfoById(1);
  533. } else {
  534. // 其他客户
  535. companyInfo = companyInfoMapper.getCompanyInfoById(storeInfoMapper.getStoreInfoById(complaintDetectInfo.getStoreId()).getCompanyId());
  536. }
  537. Date createDate = DateTimeUtil.parse(record.getDetectProduction(), "yyyy-MM-dd");
  538. createDate = DateTimeUtil.addMonth(createDate, companyInfo.getCompanyAfterMonth());
  539. createDate = DateTimeUtil.addMonth(createDate, companyInfo.getCompaynStorageMonth());
  540. if (createDate.getTime() >= complaintDetectInfo.getDetectCreateTime().getTime()) {
  541. // 质保期内(免费换新)
  542. record.setDetectOffer(0);
  543. if (record.getDetectRenovation() == 1) {
  544. // 可以翻新
  545. record.setDetectState(20);
  546. } else {
  547. // 不可翻新
  548. record.setDetectState(22);
  549. }
  550. } else {
  551. // 质保期外
  552. if (record.getDeleteIsUse() == 1) {
  553. // 未过水(翻新)
  554. if (temp.getProduceIsW() == 1) {
  555. // W系列
  556. record.setDetectOffer(Integer.parseInt(sysConfigMapper.getSysConfig(12)));
  557. } else if (temp.getProduceIsW() == 2) {
  558. // S系列
  559. record.setDetectOffer(Integer.parseInt(sysConfigMapper.getSysConfig(14)));
  560. }
  561. } else {
  562. // 已过水(翻新)
  563. if (temp.getProduceIsW() == 1) {
  564. // W系列
  565. record.setDetectOffer(Integer.parseInt(sysConfigMapper.getSysConfig(11)));
  566. } else if (temp.getProduceIsW() == 2) {
  567. // S系列
  568. record.setDetectOffer(Integer.parseInt(sysConfigMapper.getSysConfig(13)));
  569. }
  570. }
  571. record.setDetectState(24);
  572. }
  573. } else {
  574. // 非质量问题导致
  575. if (record.getDeleteIsUse() == 1) {
  576. // 未过水(翻新)
  577. if (temp.getProduceIsW() == 1) {
  578. // W系列
  579. record.setDetectOffer(Integer.parseInt(sysConfigMapper.getSysConfig(12)));
  580. } else if (temp.getProduceIsW() == 2) {
  581. // S系列
  582. record.setDetectOffer(Integer.parseInt(sysConfigMapper.getSysConfig(14)));
  583. }
  584. } else {
  585. // 已过水(翻新)
  586. if (temp.getProduceIsW() == 1) {
  587. // W系列
  588. record.setDetectOffer(Integer.parseInt(sysConfigMapper.getSysConfig(11)));
  589. } else if (temp.getProduceIsW() == 2) {
  590. // S系列
  591. record.setDetectOffer(Integer.parseInt(sysConfigMapper.getSysConfig(13)));
  592. }
  593. }
  594. record.setDetectState(24);
  595. }
  596. }
  597. }
  598. // 录入检测现象
  599. StringBuilder detectPhenomenon = new StringBuilder();
  600. complaintDetectInfoMapper.delPhenomenon(complaintDetectInfo.getDetectId());
  601. for (Integer id : record.getDetectPhenomenonIds()) {
  602. DetectPhenomenon dp = new DetectPhenomenon();
  603. dp.setDetectId(record.getDetectId());
  604. dp.setPhenomenonId(id);
  605. dp.setDpName(phenomenonMapper.get(id).getPhenomenonName());
  606. detectPhenomenon.append(dp.getDpName()).append(";");
  607. complaintDetectInfoMapper.addPhenomenon(dp);
  608. }
  609. // 检测现象描述
  610. record.setDetectPhenomenon(detectPhenomenon.toString());
  611. }
  612. // 修改
  613. if(complaintDetectInfoMapper.updateDetectById(record) > 0){
  614. if(imgs != null){
  615. if(imgs.length > 0){
  616. for(String img : imgs){
  617. ComplaintDetectImg detectImg = new ComplaintDetectImg();
  618. detectImg.setDetectId(record.getDetectId());
  619. detectImg.setDetectImgUrl(img);
  620. complaintDetectInfoMapper.addDetectImg(detectImg);
  621. }
  622. }
  623. }
  624. }
  625. if(complaintDetectInfo.getDetectSource() == 2 || complaintDetectInfo.getDetectSource() == 3){
  626. // 给客户发送短信
  627. if (complaintDetectInfo.getAdminId() != null) {
  628. Admin admin = new Admin();
  629. admin.setAdminId(complaintDetectInfo.getAdminId());
  630. admin = sysMapper.get(admin);
  631. String result = smsService.sendOtherCMS(admin.getAdminTel(), "【优尼雅电子科技】尊敬的客户您好,您的机器" + complaintDetectInfo.getDetectNumber() + "已经检测完成,请登入我司系统确认处理机器的方案。");
  632. logger.info("给 " + admin.getAdminTel() + " 手机用户发送短信:通知客户选择处理方式:"+result+"维修id:"+record.getDetectId());
  633. }
  634. // 给业务员发短信
  635. if (complaintDetectInfo.getSalesmanAdminId() != null && companyInfo != null && companyInfo.getCompanyName() != null) {
  636. Admin admin = new Admin();
  637. admin.setAdminId(complaintDetectInfo.getSalesmanAdminId());
  638. admin = sysMapper.get(admin);
  639. String result = smsService.sendOtherCMS(admin.getAdminTel(), "【优尼雅电子科技】您客户 " + companyInfo.getCompanyName() + " 的机器" + complaintDetectInfo.getDetectNumber() + "已检测完成,请联系客户进入系统确认处理机器的方案。");
  640. logger.info("给 " + admin.getAdminTel() + " 手机用户发送短信:通知业务员选择处理方式:"+result+"维修id:"+record.getDetectId());
  641. }
  642. // 手动添加需要给业务员发送短信
  643. if(complaintDetectInfo.getDetectState() == 30 || complaintDetectInfo.getDetectState() == 34|| complaintDetectInfo.getDetectState() == 38 || complaintDetectInfo.getDetectState() == 37){
  644. if(complaintDetectInfo.getDetectTel() != null && !"".equals(complaintDetectInfo.getDetectTel()) && complaintDetectInfo.getSalesmanAdminId() != null){
  645. String text = MessageFormat.format(SmsConfig.NOTIFY_SALESMAN, complaintDetectInfo.getDetectName()+complaintDetectInfo.getDetectTel(), ResultInfo.DETECT_MSG+complaintDetectInfo.getDetectId());
  646. Admin admin = new Admin();
  647. admin.setAdminId(complaintDetectInfo.getSalesmanAdminId());
  648. admin = sysMapper.get(admin);
  649. String result = smsService.sendOtherCMS(admin.getAdminTel(), text);
  650. logger.info("给 " + complaintDetectInfo.getDetectTel() + " 手机用户发送短信:" + text+"发送通知业务员选择处理方式:"+result+"维修id:"+record.getDetectId());
  651. }
  652. }
  653. }
  654. }catch (Exception e){
  655. e.printStackTrace();
  656. throw new RuntimeException("完成检测失败");
  657. }
  658. return 1;
  659. }
  660. //添加检测项
  661. public String adddetectItem(String configid,Integer detectId){
  662. DetectionConfig config = complaintDetectInfoMapper.getDetectionConfig(Integer.valueOf(configid));
  663. DetectionItem item = new DetectionItem();
  664. item.setDetectId(detectId);
  665. item.setItemConfigId(config.getConfigId());
  666. item.setItemDetectContent(config.getConfigDetectContent());
  667. complaintDetectInfoMapper.insertItem(item);
  668. return config.getConfigDetectContent();
  669. }
  670. @Override
  671. public PagedResult<ComplaintDetectInfo> listComplaintDetect(PageRequest<ComplaintDetectInfo> pageRequest) {
  672. PageHelper.startPage(pageRequest.getPageNO(), pageRequest.getPageSize(), pageRequest.isPageTotal());
  673. List<ComplaintDetectInfo> detectList = complaintDetectInfoMapper.listComplaintDetect(pageRequest.getData());
  674. PagedResult<ComplaintDetectInfo> result = PageUtil.getPage(detectList);
  675. if (result.getDataList() != null && !result.getDataList().isEmpty()) {
  676. for (ComplaintDetectInfo detectInfo : result.getDataList()) {
  677. detectInfo.setTransport(detectTransportMapper.get(detectInfo.getDetectId()));
  678. }
  679. }
  680. return result;
  681. }
  682. @Override
  683. public PagedResult<ComplaintDetectInfo> listAfterSales(PageRequest<ComplaintDetectInfo> pageRequest) {
  684. PageHelper.startPage(pageRequest.getPageNO(), pageRequest.getPageSize(), pageRequest.isPageTotal());
  685. List<ComplaintDetectInfo> detectList = complaintDetectInfoMapper.listAfterSales(pageRequest.getData());
  686. PagedResult<ComplaintDetectInfo> result = PageUtil.getPage(detectList);
  687. if (result.getDataList() != null && !result.getDataList().isEmpty()) {
  688. for (ComplaintDetectInfo detectInfo : result.getDataList()) {
  689. detectInfo.setTransport(detectTransportMapper.get(detectInfo.getDetectId()));
  690. }
  691. }
  692. return result;
  693. }
  694. @Override
  695. @Transactional(rollbackFor = {Exception.class}, isolation = Isolation.REPEATABLE_READ)
  696. public int insert(ComplaintDetectInfo record) {
  697. // 判断是否有多个客户传递的问题现象
  698. if (record.getCustmoerPhenomena() != null && !record.getCustmoerPhenomena().isEmpty()) {
  699. record.setDetectCustmoerQuestion(null);
  700. for (DetectCustmoerPhenomenon custmoerPhenomenon : record.getCustmoerPhenomena()) {
  701. if (record.getDetectCustmoerQuestion() != null) {
  702. record.setDetectCustmoerQuestion(record.getDetectCustmoerQuestion() + custmoerPhenomenon.getDcpName() + ";");
  703. } else {
  704. record.setDetectCustmoerQuestion(custmoerPhenomenon.getDcpName() + ";");
  705. }
  706. }
  707. int res = complaintDetectInfoMapper.insert(record);
  708. // 添加问题现象
  709. for (DetectCustmoerPhenomenon custmoerPhenomenon : record.getCustmoerPhenomena()) {
  710. custmoerPhenomenon.setDetectId(record.getDetectId());
  711. detectCustmoerPhenomenonMapper.add(custmoerPhenomenon);
  712. }
  713. // 添加运输信息
  714. if (record.getTransport() == null) {
  715. DetectTransport transport = new DetectTransport();
  716. transport.setDetectId(record.getDetectId());
  717. detectTransportMapper.add(transport);
  718. } else {
  719. record.getTransport().setDetectId(record.getDetectId());
  720. detectTransportMapper.add(record.getTransport());
  721. }
  722. return res;
  723. }
  724. // 单个问题现象
  725. return complaintDetectInfoMapper.insert(record);
  726. }
  727. @Override
  728. public int deleteDetect(Integer detectId) {
  729. return complaintDetectInfoMapper.deleteDetect(detectId);
  730. }
  731. @Override
  732. public List<DetectionBasis> listDetectionBasis(DetectionBasis detectionBasis) {
  733. return complaintDetectInfoMapper.listDetectionBasis(detectionBasis);
  734. }
  735. @Override
  736. public int addDetectImg(ComplaintDetectImg complaintDetectImg) {
  737. return complaintDetectInfoMapper.addDetectImg(complaintDetectImg);
  738. }
  739. @Override
  740. public List<ComplaintDetectInfo> listComplaintDetect(ComplaintDetectInfo detectInfo) {
  741. List<ComplaintDetectInfo> res = complaintDetectInfoMapper.listComplaintDetect(detectInfo);
  742. if (res == null || res.isEmpty()) {
  743. return null;
  744. }
  745. res.forEach((d) -> {
  746. if (d != null && d.getDetectPhenomenonId() != null) {
  747. d.setPhenomen(phenomenonMapper.get(d.getDetectPhenomenonId()));
  748. }
  749. if (d != null && d.getSalesmanAdminId() != null) {
  750. Admin temp = new Admin();
  751. temp.setAdminId(d.getSalesmanAdminId());
  752. d.setSalesmanAdminName(sysMapper.get(temp).getAdminName());
  753. }
  754. });
  755. return res;
  756. }
  757. @Transactional
  758. @Override
  759. public boolean customerConfirm(ComplaintDetectInfo detectInfo,Admin admin) {
  760. ComplaintDetectInfo detect = complaintDetectInfoMapper.getDetectById(detectInfo.getDetectId());
  761. /*ProcMethod procMethod = procMethodMapper.getProcMethodById(detectInfo.getProcMethodId());*/
  762. //计算待维修完成时间
  763. Calendar date = Calendar.getInstance();
  764. date.setTime(new Date());
  765. boolean fl = false;
  766. for (int i = 1 ; i <= 5; i++){
  767. date.set(Calendar.DATE, date.get(Calendar.DATE) + i);
  768. int week = date.get(Calendar.DAY_OF_WEEK);//1--7的值,对应:星期日,星期一,星期二,星期三....星期六
  769. if(week == 1){
  770. fl = true;
  771. }
  772. date.set(Calendar.DATE, date.get(Calendar.DATE) - i);
  773. }
  774. if(fl){
  775. date.set(Calendar.DATE, date.get(Calendar.DATE) + 6);
  776. }else{
  777. date.set(Calendar.DATE, date.get(Calendar.DATE) + 5);
  778. }
  779. /*switch (detectInfo.getDetectState()){
  780. case 30:
  781. if(detectInfo.getDetectProcessingResults() == 1){//付费维修
  782. detectInfo.setDetectState(31);//同意付费维修
  783. detectInfo.setCompleteCutTime(date.getTime());
  784. }
  785. if(detectInfo.getDetectProcessingResults() == 3 || detectInfo.getDetectProcessingResults() == 4){//退货、换货
  786. if(detect.getDetectRenovation() == 1){
  787. detectInfo.setDetectState(20);//待翻新
  788. }else{
  789. detectInfo.setDetectState(22);//待报废
  790. }
  791. }
  792. if(detectInfo.getDetectProcessingResults() == 5){//原机退回
  793. detectInfo.setDetectState(33);//
  794. }
  795. break;
  796. case 34:
  797. if(detectInfo.getDetectProcessingResults() == null || detectInfo.getDetectProcessingResults() == 2 ){//免费维修
  798. detectInfo.setDetectState(35);
  799. detectInfo.setCompleteCutTime(date.getTime());
  800. }
  801. if(detectInfo.getDetectProcessingResults() == 5){//原机退回
  802. detectInfo.setDetectState(33);
  803. }
  804. break;
  805. case 37:
  806. if(detectInfo.getDetectProcessingResults() == 1){//付费维修
  807. detectInfo.setDetectState(31);//同意付费维修
  808. detectInfo.setCompleteCutTime(date.getTime());
  809. }
  810. if(detectInfo.getDetectProcessingResults() == 2){//免费维修
  811. detectInfo.setDetectState(35);//同意免费维修
  812. detectInfo.setCompleteCutTime(date.getTime());
  813. }
  814. if(detectInfo.getDetectProcessingResults() == 3 || detectInfo.getDetectProcessingResults() == 4){//退货、换货
  815. if(detect.getDetectRenovation() == 1){
  816. detectInfo.setDetectState(20);//待翻新
  817. }else{
  818. detectInfo.setDetectState(22);//待报废
  819. }
  820. }
  821. if(detectInfo.getDetectProcessingResults() == 5){//原机退回
  822. detectInfo.setDetectState(39);//原机退回
  823. }
  824. break;
  825. case 38:
  826. if(detectInfo.getDetectProcessingResults() == 1){//付费维修
  827. detectInfo.setDetectState(31);//同意付费维修
  828. detectInfo.setCompleteCutTime(date.getTime());
  829. }
  830. if(detectInfo.getDetectProcessingResults() == 2){//免费维修
  831. detectInfo.setDetectState(35);//同意免费维修
  832. detectInfo.setCompleteCutTime(date.getTime());
  833. }
  834. if(detectInfo.getDetectProcessingResults() == 3 || detectInfo.getDetectProcessingResults() == 4){//退货、换货
  835. if(detect.getDetectRenovation() == 1){
  836. detectInfo.setDetectState(20);//待翻新
  837. }else{
  838. detectInfo.setDetectState(22);//待报废
  839. }
  840. }
  841. if(detectInfo.getDetectProcessingResults() == 5){//原机退回
  842. detectInfo.setDetectState(37);//原机退回
  843. }
  844. break;
  845. }*/
  846. try {
  847. if(complaintDetectInfoMapper.updateDetectById(detectInfo) > 0){
  848. if(detectInfo.getProcMethodId() != null && !"".equals(detectInfo.getProcMethodId())){
  849. CmRelation cmRelation = new CmRelation();
  850. cmRelation.setCustomerId(detectInfo.getCustomerId());
  851. cmRelation.setProcMethodId(detectInfo.getProcMethodId());
  852. if(customerInfoMapper.updateCmRelationProcMethod(cmRelation) > 0){
  853. return true;
  854. }
  855. }
  856. //添加客服操作记录
  857. TreatmentRecordLog log = new TreatmentRecordLog();
  858. log.setDetectId(detectInfo.getDetectId());
  859. log.setRecordAdminId(admin.getAdminId());
  860. log.setRecordDesc(detectInfo.getDetectCustomerDesc());
  861. if (detectInfo.getDetectState() == 25) {
  862. log.setRecordProcessingResults(6);
  863. } else if (detectInfo.getDetectState() == 27) {
  864. log.setRecordProcessingResults(5);
  865. } else if (detectInfo.getDetectState() == 31) {
  866. log.setRecordProcessingResults(1);
  867. } else if (detectInfo.getDetectState() == 33) {
  868. log.setRecordProcessingResults(6);
  869. }
  870. complaintDetectInfoMapper.addTreatmentRecordLog(log);
  871. //发送确认短信
  872. //发送确认短信
  873. if (detectInfo.getDetectState() != null) {
  874. String msg = null;
  875. switch (detect.getDetectState()) {
  876. case 31: msg="【优尼雅电子科技】客户已确认" + detect.getDetectNumber() + "维修,请立即开始维修处理。";break;
  877. case 33: msg="【优尼雅电子科技】客户确认" + detect.getDetectNumber() + "机器不维修(原机退回给客户),请联系业务员,并请业务员联系客户,将此机器寄回。";break;
  878. case 25: msg="【优尼雅电子科技】客户确认" + detect.getDetectNumber() + "机器不翻新(原机退回给客户),请联系业务员,并请业务员联系客户,将此机器寄回。";break;
  879. case 27: msg="【优尼雅电子科技】客户已确认" + detect.getDetectNumber() + "翻新,请立即开始翻新处理。";break;
  880. default: break;
  881. }
  882. if (msg != null) {
  883. smsService.sendOtherCMS(SmsConfig.CUSTOMER_PHONE, msg);
  884. }
  885. }
  886. /* String results = "";
  887. switch (detectInfo.getDetectProcessingResults()){
  888. case 1:
  889. results = "付费维修";
  890. break;
  891. case 2:
  892. results = "免费维修";
  893. break;
  894. case 3:
  895. results = "退货";
  896. break;
  897. case 4:
  898. results = "换货";
  899. break;
  900. case 5:
  901. results = "原机退回";
  902. break;
  903. }
  904. String text = MessageFormat.format(SmsConfig.CUSTOMER_CONFIRM, detect.getDetectNumber(),results);
  905. String result = smsService.sendOtherCMS(SmsConfig.CUSTOMER_PHONE, text);
  906. logger.info("给 " + SmsConfig.CUSTOMER_PHONE + " 手机用户发送短信:" + text+"发送结果:"+result);*/
  907. return true;
  908. }
  909. }catch (Exception e){
  910. e.printStackTrace();
  911. throw new RuntimeException("确认处理失败");
  912. }
  913. return false;
  914. }
  915. @Transactional(rollbackFor = {RuntimeException.class})
  916. @Override
  917. public boolean salesmanConfirm(ComplaintDetectInfo detectInfo) {
  918. ComplaintDetectInfo detect = complaintDetectInfoMapper.getDetectById(detectInfo.getDetectId());
  919. if(detect.getDetectState() != 30 && detect.getDetectState() != 24 && detect.getDetectState() != 34 && detect.getDetectState() != 38 && detect.getDetectState() != 37){
  920. return false;
  921. }
  922. //计算待维修完成时间
  923. Calendar date = Calendar.getInstance();
  924. date.setTime(new Date());
  925. boolean fl = false;
  926. for (int i = 1 ; i <= 5; i++){
  927. date.set(Calendar.DATE, date.get(Calendar.DATE) + i);
  928. int week = date.get(Calendar.DAY_OF_WEEK);//1--7的值,对应:星期日,星期一,星期二,星期三....星期六
  929. if(week == 1){
  930. fl = true;
  931. }
  932. date.set(Calendar.DATE, date.get(Calendar.DATE) - i);
  933. }
  934. if(fl){
  935. date.set(Calendar.DATE, date.get(Calendar.DATE) + 6);
  936. }else{
  937. date.set(Calendar.DATE, date.get(Calendar.DATE) + 5);
  938. }
  939. if (detectInfo.getDetectProcessingResults() != null) {
  940. if(detectInfo.getDetectProcessingResults() == 1){
  941. //付费维修
  942. detectInfo.setDetectState(31);//同意付费维修
  943. detectInfo.setCompleteCutTime(date.getTime());
  944. }else if(detectInfo.getDetectProcessingResults() == 2){
  945. //免费维修
  946. detectInfo.setDetectState(35);//同意付费维修
  947. detectInfo.setCompleteCutTime(date.getTime());
  948. }
  949. if(detectInfo.getDetectProcessingResults() == 3 || detectInfo.getDetectProcessingResults() == 4){
  950. //退货、换货
  951. if(detect.getDetectRenovation() == 1){
  952. //待翻新
  953. detectInfo.setDetectState(20);
  954. }else{
  955. //待报废
  956. detectInfo.setDetectState(22);
  957. }
  958. }
  959. if(detectInfo.getDetectProcessingResults() == 5){
  960. //原机退回
  961. detectInfo.setDetectState(33);
  962. }
  963. }
  964. try {
  965. if(complaintDetectInfoMapper.updateDetectById(detectInfo) > 0){
  966. //添加业务员操作记录
  967. if(detect.getSalesmanAdminId() != null){
  968. TreatmentRecordLog log = new TreatmentRecordLog();
  969. log.setDetectId(detectInfo.getDetectId());
  970. log.setRecordAdminId(detect.getSalesmanAdminId());
  971. log.setRecordDesc(detect.getDetectCustomerDesc());
  972. log.setRecordProcessingResults(detectInfo.getDetectProcessingResults());
  973. complaintDetectInfoMapper.addTreatmentRecordLog(log);
  974. }
  975. //发送确认短信
  976. if (detectInfo.getDetectState() != null) {
  977. String msg = null;
  978. switch (detect.getDetectState()) {
  979. case 31: msg="【优尼雅电子科技】客户已确认" + detect.getDetectNumber() + "维修,请立即开始维修处理。";break;
  980. case 33: msg="【优尼雅电子科技】客户确认" + detect.getDetectNumber() + "机器不维修(原机退回给客户),请联系业务员,并请业务员联系客户,将此机器寄回。";break;
  981. case 25: msg="【优尼雅电子科技】客户确认" + detect.getDetectNumber() + "机器不翻新(原机退回给客户),请联系业务员,并请业务员联系客户,将此机器寄回。";break;
  982. case 27: msg="【优尼雅电子科技】客户已确认" + detect.getDetectNumber() + "翻新,请立即开始翻新处理。";break;
  983. default: break;
  984. }
  985. if (msg != null) {
  986. smsService.sendOtherCMS(SmsConfig.CUSTOMER_PHONE, msg);
  987. }
  988. }
  989. return true;
  990. }
  991. }catch (Exception e){
  992. e.printStackTrace();
  993. throw new RuntimeException("确认处理失败");
  994. }
  995. return false;
  996. }
  997. @Override
  998. public List<ComplaintDetectImg> listDetectImg(Integer detectId) {
  999. return complaintDetectInfoMapper.listDetectImg(detectId);
  1000. }
  1001. @Override
  1002. public Integer getDetectNum() {
  1003. return complaintDetectInfoMapper.getDetectNum();
  1004. }
  1005. @Override
  1006. public List<MaterialNumberInfo> listMaterialNumber() {
  1007. return complaintDetectInfoMapper.listMaterialNumber();
  1008. }
  1009. @Override
  1010. public List<DetectionConfig> listDetectionConfig(Integer configType) {
  1011. return complaintDetectInfoMapper.listDetectionConfig(configType);
  1012. }
  1013. @Override
  1014. public DetectionConfig getDetectionConfig(Integer configId) {
  1015. return complaintDetectInfoMapper.getDetectionConfig(configId);
  1016. }
  1017. @Override
  1018. public Integer insertItem(DetectionItem detectionItem) {
  1019. return complaintDetectInfoMapper.insertItem(detectionItem);
  1020. }
  1021. @Override
  1022. public List<DetectionItem> listDetectionItem(DetectionItem detectionItem) {
  1023. return complaintDetectInfoMapper.listDetectionItem(detectionItem);
  1024. }
  1025. @Override
  1026. public Integer detectDetectionItem(Integer detectId) {
  1027. return complaintDetectInfoMapper.detectDetectionItem(detectId);
  1028. }
  1029. @Override
  1030. public MaterialNumberInfo getMaterialNumber(Integer materialId) {
  1031. return complaintDetectInfoMapper.getMaterialNumber(materialId);
  1032. }
  1033. @Override
  1034. public Integer addMaterialItem(MaterialItem materialItem) {
  1035. return complaintDetectInfoMapper.addMaterialItem(materialItem);
  1036. }
  1037. @Override
  1038. public List<MaterialItem> listMaterialItem(Integer detectId) {
  1039. return complaintDetectInfoMapper.listMaterialItem(detectId);
  1040. }
  1041. @Override
  1042. public Integer detectMaterialItem(Integer detectId) {
  1043. return complaintDetectInfoMapper.detectMaterialItem(detectId);
  1044. }
  1045. @Override
  1046. public Integer addQcInfo(QcInfo qcInfo) {
  1047. return complaintDetectInfoMapper.addQcInfo(qcInfo);
  1048. }
  1049. @Override
  1050. public List<QcInfo> listQcInfo(Integer detectId) {
  1051. return complaintDetectInfoMapper.listQcInfo(detectId);
  1052. }
  1053. @Override
  1054. public Integer addTreatmentRecordLog(TreatmentRecordLog treatmentRecordLog) {
  1055. return complaintDetectInfoMapper.addTreatmentRecordLog(treatmentRecordLog);
  1056. }
  1057. @Override
  1058. public List<TreatmentRecordLog> listTreatmentRecordLog(Integer detectId) {
  1059. return complaintDetectInfoMapper.listTreatmentRecordLog(detectId);
  1060. }
  1061. @Override
  1062. public ComplaintAfterSalesNum getCustomerDetectNum(ComplaintDetectInfo detect) {
  1063. return complaintDetectInfoMapper.getCustomerDetectNum(detect);
  1064. }
  1065. @Override
  1066. @Transactional
  1067. public Integer updatePrint(ComplaintDetectInfo detectInfo) {
  1068. ComplaintDetectInfo cdi = complaintDetectInfoMapper.getDetectByIdFast(detectInfo.getDetectId());
  1069. if(cdi == null){
  1070. return 0;
  1071. }
  1072. detectInfo.setDetectNumber(cdi.getDetectNumber());
  1073. Integer flag = complaintDetectInfoMapper.updateDetectById(detectInfo);
  1074. if(flag < 1){
  1075. return flag;
  1076. }
  1077. if(detectInfo.getDetectState() != null && detectInfo.getDetectState() != 0){
  1078. if(!Objects.equals(cdi.getDetectState(), detectInfo.getDetectState())){ //修改状态时判断状态,来调整库存
  1079. switch (detectInfo.getDetectState()){ //detectState
  1080. case 23: //报废完成-减少不良品数量
  1081. InventoryInfo inventoryInfo2 = new InventoryInfo();
  1082. inventoryInfo2.setInventoryDefectiveProductNum(1);
  1083. inventoryInfo2.setInventoryProductColorId(cdi.getProductColorId());
  1084. inventoryInfo2.setWarehouseId(2);
  1085. inventoryInfo2.setInventoryRecentRecord("产品报废(维修ID:"+detectInfo.getDetectNumber()+")");
  1086. flag = inventoryService.minusInventory(inventoryInfo2);
  1087. if(flag < 1){
  1088. throw new RuntimeException("签收失败,更新库存失败。");
  1089. }
  1090. break;
  1091. default:
  1092. break;
  1093. }
  1094. }
  1095. }
  1096. return flag;
  1097. }
  1098. @Override
  1099. public List<ComplaintDetectInfo> listDetectByCustomerId(Integer customerId) {
  1100. return complaintDetectInfoMapper.listDetectByCustomerId(customerId);
  1101. }
  1102. @Override
  1103. public List<ComplaintDetectInfo> listComplaintDetectBySalesId(String detectSalesId) {
  1104. return complaintDetectInfoMapper.listComplaintDetectBySalesId(detectSalesId);
  1105. }
  1106. @Override
  1107. public ComplaintAfterSalesNum getDetectCount() {
  1108. return complaintDetectInfoMapper.getDetectCount();
  1109. }
  1110. @Override
  1111. public List<ComplaintDetectInfo> listMaintenanceCutNotice() {
  1112. return complaintDetectInfoMapper.listMaintenanceCutNotice();
  1113. }
  1114. @Override
  1115. public List<ComplaintDetectInfo> listCompleteCutNotice() {
  1116. return complaintDetectInfoMapper.listCompleteCutNotice();
  1117. }
  1118. @Override
  1119. public Integer perfectDetect(ComplaintDetectInfo detectInfo) {
  1120. return complaintDetectInfoMapper.updateDetectById(detectInfo);
  1121. }
  1122. @Override
  1123. public Integer addConfig(DetectionConfig detectionConfig) {
  1124. return complaintDetectInfoMapper.addConfig(detectionConfig);
  1125. }
  1126. @Override
  1127. public Integer addMaterial(MaterialNumberInfo materialNumberInfo) {
  1128. return complaintDetectInfoMapper.addMaterial(materialNumberInfo);
  1129. }
  1130. @Override
  1131. public List<MaintainPhenomenon> listPhenomenon(Integer typeId) {
  1132. MaintainPhenomenon maintainPhenomenon = new MaintainPhenomenon();
  1133. maintainPhenomenon.setTypeId(typeId);
  1134. return phenomenonMapper.list(maintainPhenomenon);
  1135. }
  1136. @Override
  1137. public int editTransport(DetectTransport detectTransport) {
  1138. return detectTransportMapper.edit(detectTransport);
  1139. }
  1140. @Override
  1141. public MaintainPhenomenon getPhenomenon(Integer id) {
  1142. return phenomenonMapper.get(id);
  1143. }
  1144. }