MachineServiceImpl.java 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723
  1. package com.iamberry.rent.service.machine;
  2. import java.util.Date;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import java.util.Map;
  6. import com.iamberry.rent.face.efast.EfastRentService;
  7. import com.iamberry.wechat.core.entity.rent.*;
  8. import org.apache.commons.lang.ObjectUtils;
  9. import org.apache.commons.lang3.StringUtils;
  10. import org.slf4j.Logger;
  11. import org.slf4j.LoggerFactory;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.scheduling.annotation.Scheduled;
  14. import org.springframework.stereotype.Service;
  15. import com.iamberry.exception.ServiceException;
  16. import com.iamberry.rent.face.machine.MachineService;
  17. import com.iamberry.rent.face.rebate.OrderRebateService;
  18. import com.iamberry.rent.service.machine.mapper.MachineMapper;
  19. import com.iamberry.rent.service.order.mapper.RentOrderMapper;
  20. import com.iamberry.rent.service.order.mapper.ServiceCouponMapper;
  21. import com.iamberry.rent.service.rebate.mapper.OrderRebateMapper;
  22. import com.iamberry.wechat.core.entity.ResultMsg;
  23. import com.iamberry.wechat.core.entity.member.Member;
  24. import com.iamberry.wechat.core.entity.pay.PayResult;
  25. import com.iamberry.wechat.face.member.MemberService;
  26. import com.iamberry.wechat.face.pay.PayService;
  27. import com.iamberry.wechat.face.wechat.ConfigService;
  28. import com.iamberry.wechat.iot.WechatIotUtils;
  29. import com.iamberry.wechat.tools.DateTimeUtil;
  30. import com.iamberry.wechat.tools.NameUtils;
  31. import com.iamberry.wechat.tools.OrderNOUtil;
  32. import com.iamberry.wechat.tools.ResponseJson;
  33. import com.iamberry.wechat.tools.ResultInfo;
  34. import net.sf.json.JSONObject;
  35. /**
  36. * 机器业务实现类
  37. * @company 深圳爱贝源科技有限公司
  38. * @website www.iamberry.com
  39. * @author 献
  40. * @tel 18271840547
  41. * @date 2017年3月9日
  42. */
  43. @Service
  44. public class MachineServiceImpl implements MachineService {
  45. @Autowired
  46. private MachineMapper machineMapper;
  47. @Autowired
  48. private RentOrderMapper rentOrderMapper;
  49. @Autowired
  50. private ConfigService configService;
  51. private static final Logger LOGGER = LoggerFactory.getLogger(MachineService.class);
  52. @Autowired
  53. private ServiceCouponMapper couponMapper;
  54. @Autowired
  55. private PayService payService;
  56. @Autowired
  57. private OrderRebateService orderRebateService;
  58. @Autowired
  59. private OrderRebateMapper orderRebateMapper;
  60. @Autowired
  61. private MemberService memberService;
  62. @Autowired
  63. private EfastRentService efastRentService;
  64. @Override
  65. public int initBefore(MachineInfo machineInfo) throws ServiceException {
  66. // TODO Auto-generated method stub
  67. if (machineInfo == null || machineInfo.getMachineDeviceId() == null
  68. || machineInfo.getMachineOpenid() == null) {
  69. return 0;
  70. }
  71. // 激活时间
  72. Date nowDate = new Date();
  73. // 查询机器信息 , 只有没有激活的机器才能绑定
  74. String openid = machineInfo.getMachineOpenid();
  75. machineInfo.setMachineOpenid(null);
  76. List<MachineInfo> infos = machineMapper.list(machineInfo);
  77. if (infos == null || infos.isEmpty()) {
  78. LOGGER.error("{'errorCode':{}, 'msg':'机器信息不存在,请管理员审核!', 'deviceid':'{}'}", 500, machineInfo.getMachineDeviceId());
  79. return 0;
  80. }
  81. MachineInfo temp = infos.get(0);
  82. if (temp.getMachineInitState() != 2) {
  83. return 500; // 已经激活的机器不能做激活使用,留待优化:查询续费记录中没有下发成功的命令,如果存在,则下发续费指令
  84. }
  85. // 激活
  86. machineInfo.setMachineOpenid(openid);
  87. List<RentOrderItem> list = rentOrderMapper.listInitCode(machineInfo.getMachineOpenid()); // 自己拥有订单
  88. RentOrderItem item = null;
  89. if (list != null && !list.isEmpty()) {
  90. item = list.get(0); // 从订单中选择第一个做激活使用
  91. } else {
  92. item = rentOrderMapper.getWaitInit(machineInfo.getMachineOpenid()); // 别人分享的订单
  93. }
  94. if (item == null) {
  95. return 0;
  96. }
  97. // 修改订单激活码状态
  98. item.setItemInitCodeOldState(1);
  99. item.setItemCodeState(2);
  100. Integer res = rentOrderMapper.update(item);
  101. if (res == null || res <= 0) {
  102. LOGGER.error("{'method':'{}', 'deviceId':'{}', 'openid':'{}', 'itemId':{}}",
  103. "修改订单项中状态失败", machineInfo.getMachineDeviceId(), machineInfo.getMachineOpenid(), item.getItemId());
  104. return 0;
  105. }
  106. // 准备命令
  107. // 计算下发的小时数:结束时间 - 当前时间 / 1000 = x 秒 / 60 = y 分 / 60 = z 小时
  108. long hour = (DateTimeUtil.addMonth(item.getItemUseYears()).getTime() - nowDate.getTime()) / 1000 / 60 / 60;
  109. String hourStr = WechatIotUtils.align(Long.toString(hour)); // 补0
  110. String waterNum = WechatIotUtils.align(item.getItemMachineNum().toString()); // 补0
  111. String message = String.format(WechatIotUtils.INIT_MACHINE_COMMAND, hourStr, waterNum);
  112. // 封装数据 & 修改机器的状态 说明:通过行级锁保证正确性,一旦A 修改 deviceid='ABC'的记录后,那么后来者在A未提交事务之前,无法修改ABC记录,需要等待A将事务提交,释放行级锁
  113. temp.setMachineSurplusWater(item.getItemMachineNum());
  114. temp.setMachineTotalWater(item.getItemMachineNum());
  115. temp.setMachineStopDate(DateTimeUtil.addMonth(item.getItemUseYears()));
  116. temp.setMachineConnectState(1); // 修改机器的状态为已连接
  117. temp.setMachineInitState(3); // 激活中
  118. temp.setMachineActivationTime(nowDate);//激活时间
  119. temp.setMachineState(1); // 修改为正常使用
  120. temp.setMachineOrderId(list.get(0).getItemOrderId());
  121. temp.setMachineOpenid(openid);
  122. temp.setMachineInitCode(list.get(0).getItemInitCode());
  123. temp.setMachineNextCommand(message);
  124. res = machineMapper.update(temp);
  125. if (res == null || res <= 0) {
  126. LOGGER.error("{'method':'{}', 'deviceId':'{}', 'openid':'{}', 'itemId':{}}",
  127. "修改机器信息失败", machineInfo.getMachineDeviceId(), machineInfo.getMachineOpenid(), item.getItemId());
  128. throw new ServiceException(500, "修改机器信息失败!");
  129. }
  130. // 发送消息 : 注意,此处存在待优化的逻辑,在事务中使用HTTP,导致行锁长时间的被当前事务持有,其他事务必须等待
  131. // JSONObject json = WechatIotUtils.send(configService.getAccessToken(), message,
  132. // machineInfo.getMachineDeviceId(), machineInfo.getMachineOpenid(), "gh_2674097b2442");
  133. // if (json == null || json.toString().indexOf("errcode") != -1) {
  134. // LOGGER.error("{'method':{}, 'msg':{}}", "发送激活信息失败", json.toString());
  135. // throw new ServiceException(500, "激活命令下发成功,请重试!");
  136. // }
  137. // if (json.getInt("ret") != 0) {
  138. // LOGGER.error("{'method':{}, 'msg':{}}", "发送激活信息失败", json.toString());
  139. // throw new ServiceException(500, "激活命令下发失败,请重试!");
  140. // }
  141. // LOGGER.info("{'deviceId':'{}', 'method':'INIT_SEND_SUCCESS', 'send_msg':'{}'}", machineInfo.getMachineDeviceId(), json.toString());
  142. return 1;
  143. }
  144. @Override
  145. public int init(String openid, String deviceId) throws ServiceException {
  146. // TODO Auto-generated method stub
  147. // 抽象机器
  148. MachineInfo machineInfo = new MachineInfo();
  149. machineInfo.setMachineOpenid(openid);
  150. machineInfo.setMachineDeviceId(deviceId);
  151. // 查询机器是否存在
  152. List<MachineInfo> list = machineMapper.list(machineInfo);
  153. if (list.size() != 1) {
  154. return 0;
  155. }
  156. // 判断激活还是续费
  157. if (list.get(0).getMachineInitState() != 3 || list.get(0).getMachineInitState() == 1) {
  158. // 续费
  159. LOGGER.info(deviceId + ",续费流程");
  160. return rechargeAfter(openid, deviceId);
  161. }
  162. // 激活
  163. // 查询激活订单是否存在
  164. RentOrder orderIdByInitCode = rentOrderMapper.getOrderIdByInitCode(list.get(0).getMachineInitCode());
  165. if (orderIdByInitCode == null || StringUtils.isEmpty(orderIdByInitCode.getRentOrderId())) {
  166. return 0;
  167. }
  168. // 修改机器状态
  169. machineInfo.setMachineInitState(1); // 已激活
  170. machineInfo.setMachineNextCommand(""); // 清空命令
  171. Integer res = machineMapper.update(machineInfo);
  172. if (res == null || res <= 0) {
  173. LOGGER.error("{'method':'{}', 'deviceId':'{}', 'openid':'{}', 'orderId':{}}",
  174. "修改机器信息失败", machineInfo.getMachineDeviceId(), machineInfo.getMachineOpenid(), orderIdByInitCode);
  175. return 0;
  176. }
  177. // 成功 & 触发返利 !!! 注意,此处触发返利的订单所属人,非当前激活订单用户
  178. if (!orderRebateService.saveRentOrderRebate(orderIdByInitCode.getRentOrderId(), orderIdByInitCode.getRentOpenid())) {
  179. throw new ServiceException(501, "init - 触发返利任务失败!");
  180. }
  181. return 1;
  182. }
  183. @Override
  184. public List<MachineInfo> list(MachineInfo info) {
  185. // TODO Auto-generated method stub
  186. return machineMapper.list(info);
  187. }
  188. @Override
  189. public Integer syncMachine(MachineInfo info) {
  190. // TODO Auto-generated method stub
  191. int state = info.getMachineState();
  192. info.setMachineState(null);
  193. List<MachineInfo> infos = machineMapper.list(info);
  194. if (infos == null || infos.size() != 1) {
  195. return 0;
  196. }
  197. // TDS
  198. if (info.getMachineTDS() <= -1) {
  199. info.setMachineTDS(null);
  200. }
  201. //计算剩余水量
  202. int surplusWater = infos.get(0).getMachineTotalWater() - info.getMachineHaveWater();
  203. // 不能修改机器所属人
  204. info.setMachineOpenid(null);
  205. info.setMachineState(state);
  206. info.setMachineId(infos.get(0).getMachineId());
  207. info.setMachineSurplusWater(surplusWater);
  208. info.setMachineConnectState(1);
  209. return machineMapper.update(info);
  210. }
  211. @Override
  212. public ResponseJson listServiceCoupon(String openId, String machineId) {
  213. ResponseJson rj = new ResponseJson();
  214. rj.setResultCode(200);
  215. rj.setReturnCode(500);
  216. rj.setResultMsg("参数有误!该机器不可以续费!");
  217. if(StringUtils.isEmpty(machineId)){
  218. return rj;
  219. }
  220. //服务费抵扣券下拉框
  221. ServiceCouponInfo couponInfo = new ServiceCouponInfo();
  222. couponInfo.setServiceStatus(1); // 未使用的
  223. couponInfo.setServiceOpenId(openId);
  224. List<ServiceCouponInfo> couponList = couponMapper.list(couponInfo);
  225. //机器信息
  226. MachineInfo mac = new MachineInfo();
  227. mac.setMachineOpenid(openId);
  228. mac.setMachineId(Integer.parseInt(machineId));
  229. List<MachineInfo> list = machineMapper.list(mac);
  230. if(list == null || list.size() != 1){
  231. return rj;
  232. }
  233. rj.setResultMsg("SUCCESS");
  234. rj.setReturnCode(200);
  235. rj.addResponseKeyValue("couponList", couponList);
  236. rj.addResponseKeyValue("machine", list.get(0));
  237. return rj;
  238. }
  239. @Override
  240. public ResponseJson requestPay(MachineRecharge machineRecharge, Integer couponId) {
  241. // TODO Auto-generated method stub
  242. // 校验机器的状态
  243. MachineInfo info = new MachineInfo();
  244. info.setMachineId(machineRecharge.getRechargeMachineId());
  245. info.setMachineOpenid(machineRecharge.getRechargeOpenId());
  246. List<MachineInfo> infos = machineMapper.list(info);
  247. if (infos == null || infos.size() != 1) {
  248. // 没有找到机器
  249. return new ResponseJson(200, "NOT_FOUND", 404);
  250. }
  251. // 只有已激活 & 已连接的机器才能续费
  252. info = infos.get(0);
  253. if (info.getMachineConnectState() != 1 || info.getMachineInitState() != 1) {
  254. return new ResponseJson(200, "MACHINE_STATE_ERROR", 500);
  255. }
  256. // 拼装参数
  257. int discount = 0;
  258. ServiceCouponInfo couponInfo = null;
  259. if (couponId != null && couponId != 0) {
  260. couponInfo = new ServiceCouponInfo();
  261. couponInfo.setServiceId(couponId);
  262. couponInfo.setServiceStatus(1); // 未使用的
  263. couponInfo.setServiceOpenId(machineRecharge.getRechargeOpenId());
  264. List<ServiceCouponInfo> couponInfos = couponMapper.list(couponInfo);
  265. if (couponInfos != null && !couponInfos.isEmpty()) {
  266. couponInfo = couponInfos.get(0);
  267. discount = couponInfo.getServiceMoney();
  268. couponInfo.setServiceStatus(2);
  269. couponMapper.update(couponInfo); //改為已使用
  270. }
  271. }
  272. if (couponInfo == null) {
  273. machineRecharge.setRechargeCouponId(0);
  274. } else {
  275. machineRecharge.setRechargeCouponId(couponId);
  276. }
  277. // 保存数据库
  278. String orderId = "XF001" + OrderNOUtil.createOrderCode(info.getMachineId());
  279. machineRecharge.setRechargeOrderId(orderId);
  280. RentTypeInfo rentTypeInfo = getRentType(machineRecharge.getRechargeDuration());
  281. machineRecharge.setRechargeWater(rentTypeInfo.getTypeWaterNum()); // 充值水量
  282. machineRecharge.setRechargeAmount(rentTypeInfo.getTypeServiceMoney() - discount); // 充值金额,单位为分
  283. machineRecharge.setRechargeDuration(rentTypeInfo.getTypeDuration()); // 充值时长
  284. machineRecharge.setRechargeMessageState(0);
  285. machineRecharge.setRechargeState(0);
  286. machineRecharge.setRechargeEndTime(DateTimeUtil.addMonth(info.getMachineStopDate(), machineRecharge.getRechargeDuration()));
  287. Integer res = machineMapper.addRecharge(machineRecharge);
  288. if (res == null || res <= 0) {
  289. return new ResponseJson(200, "SERVER_ERROR", 500);
  290. }
  291. // 请求预支付id
  292. PayResult payResult = payService.requestPay(machineRecharge.getRechargeOpenId(),
  293. orderId,
  294. rentTypeInfo.getTypeServiceMoney() - discount,
  295. "【租赁】美国watero净饮水一体机!", NameUtils.getConfig("WECHAT_RENT_RECHARGE_BACK"));
  296. if (payResult.isPaySuccess()) {
  297. // 修改抵扣券为已使用
  298. return new ResponseJson(200, "SUCCESS", 200).addResponseKeyValue(orderId)
  299. .addResponseKeyValue("wechat_pay_id", payResult.getPayData());
  300. } else {
  301. return new ResponseJson(200, "REQUEST_PAY_ERROR", 501);
  302. }
  303. }
  304. /**
  305. * 根据年限查看对应的充值信息
  306. * 2017年3月28日
  307. * @author muzx
  308. * @param years 充值年数
  309. * @return
  310. */
  311. private RentTypeInfo getRentType(int years){
  312. RentTypeInfo rentType = new RentTypeInfo();
  313. rentType.setTypeId(years);
  314. rentType = orderRebateMapper.getRebateType(rentType);
  315. return rentType;
  316. }
  317. @Override
  318. public ResponseJson rechargeOrderIdPay(String orderId) {
  319. // TODO Auto-generated method stub
  320. MachineRecharge machineRecharge = new MachineRecharge();
  321. machineRecharge.setRechargeOrderId(orderId);
  322. machineRecharge.setRechargeState(0);
  323. List<MachineRecharge> listRecharge = machineMapper.listRecharge(machineRecharge);
  324. if (listRecharge == null || listRecharge.isEmpty() || listRecharge.size() != 1) {
  325. return new ResponseJson(200, "NOT_FOUND", 404);
  326. }
  327. // 请求预支付id
  328. PayResult payResult = payService.requestPay(listRecharge.get(0).getRechargeOpenId(), orderId,
  329. listRecharge.get(0).getRechargeAmount(),
  330. "【租赁】美国watero净饮水一体机!", NameUtils.getConfig("WECHAT_RENT_RECHARGE_BACK"));
  331. if (payResult.isPaySuccess()) {
  332. return new ResponseJson(200, "SUCCESS", 200).addResponseKeyValue(orderId)
  333. .addResponseKeyValue("wechat_pay_id", payResult.getPayData());
  334. } else {
  335. return new ResponseJson(200, "REQUEST_PAY_ERROR", 501).addResponseKeyValue(payResult.getPayData());
  336. }
  337. }
  338. @Override
  339. public Integer rechargeOrderPayCallback(String orderId, String transactionId) {
  340. // TODO Auto-generated method stub
  341. // 校验续费记录是否存在
  342. MachineRecharge machineRecharge = new MachineRecharge();
  343. machineRecharge.setRechargeOrderId(orderId);
  344. machineRecharge.setRechargeState(0);
  345. List<MachineRecharge> listRecharge = machineMapper.listRecharge(machineRecharge);
  346. if (listRecharge == null || listRecharge.isEmpty() || listRecharge.size() != 1) {
  347. return 3;
  348. }
  349. machineRecharge.setRechargeId(listRecharge.get(0).getRechargeId());
  350. // 修改服务券状态
  351. Integer couponId = listRecharge.get(0).getRechargeCouponId();
  352. if (couponId != 0) {
  353. ServiceCouponInfo info = new ServiceCouponInfo();
  354. info.setServiceId(couponId);
  355. info.setServiceStatus(3);
  356. couponMapper.update(info);
  357. }
  358. // 查询机器信息
  359. MachineInfo info = new MachineInfo();
  360. info.setMachineId(listRecharge.get(0).getRechargeMachineId());
  361. List<MachineInfo> list = machineMapper.list(info);
  362. if (list == null || list.size() != 1) {
  363. return 2;
  364. }
  365. // 计算下发的小时数:结束时间 - 当前时间 / 1000 = x 秒 / 60 = y 分 / 60 = z 小时z
  366. long hour = (DateTimeUtil.addMonth(listRecharge.get(0).getRechargeDuration()).getTime() - new Date().getTime()) / 1000 / 60 / 60;
  367. // 发送续费消息 : 注意,此处存在待优化的逻辑,在事务中使用HTTP,导致行锁长时间的被当前事务持有,其他事务必须等待
  368. // 补0
  369. info = list.get(0);
  370. String hourStr = WechatIotUtils.align(Long.toString(hour));
  371. String waterNum = WechatIotUtils.align(String.valueOf(info.getMachineSurplusWater() + listRecharge.get(0).getRechargeWater()));
  372. String message = String.format(WechatIotUtils.INIT_MACHINE_COMMAND, hourStr, waterNum);
  373. /* JSONObject json = WechatIotUtils.send(configService.getAccessToken(), message,
  374. list.get(0).getMachineDeviceId(), list.get(0).getMachineOpenid(), "gh_2674097b2442");
  375. if (json == null || json.toString().indexOf("errcode") != -1) {
  376. LOGGER.error("{'method':{}, 'msg':{}}", "发送激活信息失败", json.toString());
  377. machineRecharge.setRechargeMessageState(2);
  378. } else {
  379. machineRecharge.setRechargeMessageState(1);
  380. }*/
  381. // 修改机器信息
  382. info.setMachineStopDate(listRecharge.get(0).getRechargeEndTime());
  383. info.setMachineSurplusWater(info.getMachineSurplusWater() + listRecharge.get(0).getRechargeWater());
  384. info.setMachineTotalWater(listRecharge.get(0).getRechargeWater() + info.getMachineSurplusWater());
  385. info.setMachineState(1);
  386. info.setMachineNextCommand(message); // 保存指令
  387. Integer res = machineMapper.update(info);
  388. if (res == null || res <= 0) {
  389. throw new IllegalArgumentException();
  390. }
  391. // 修改续费订单的状态:待确认下发命令 & 支付成功
  392. machineRecharge.setRechargeMessageState(2);
  393. machineRecharge.setRechargeState(1);
  394. machineRecharge.setRechargePayTime(new Date());
  395. machineRecharge.setRechargeWxOrderId(transactionId);
  396. res = machineMapper.updateRecharge(machineRecharge);
  397. return res;
  398. }
  399. /**
  400. * 续费以后 - 接受到续费成功命令后修改
  401. * @param openid
  402. * @throws ServiceException
  403. * @author 献
  404. * @Time 2017年4月5日
  405. */
  406. public int rechargeAfter(String openid, String deviceId) throws ServiceException {
  407. // 查询机器信息
  408. MachineInfo info = new MachineInfo();
  409. info.setMachineDeviceId(deviceId);
  410. // info = machineMapper.list(info).get(0);
  411. if (machineMapper.list(info) == null) {
  412. return 0;
  413. }
  414. // 查询续费记录 : 查询所有支付成功,并且消息下发失败的
  415. MachineRecharge machineRecharge = new MachineRecharge();
  416. machineRecharge.setRechargeOpenId(openid);
  417. machineRecharge.setRechargeState(1);
  418. machineRecharge.setRechargeMessageState(2);
  419. machineRecharge.setRechargeMachineId(info.getMachineId());
  420. List<MachineRecharge> listRecharge = machineMapper.listRecharge(machineRecharge);
  421. if (listRecharge == null || listRecharge.isEmpty()) {
  422. return 0;
  423. }
  424. // 修改续费订单的状态
  425. for (MachineRecharge machineRecharge2 : listRecharge) {
  426. machineRecharge = new MachineRecharge();
  427. machineRecharge.setRechargeId(machineRecharge2.getRechargeId());
  428. machineRecharge.setRechargeMessageState(1);
  429. machineRecharge.setRechargePayTime(new Date());
  430. machineRecharge.setRechargeWxOrderId(machineRecharge2.getRechargeWxOrderId());
  431. machineRecharge.setRechargeState(1);
  432. machineMapper.updateRecharge(machineRecharge);
  433. }
  434. // 修改机器中的 下一条指令
  435. info.setMachineNextCommand("");
  436. machineMapper.update(info);
  437. return 1;
  438. }
  439. @Override
  440. public List<MachineRecharge> listRecharge(Integer machineId) {
  441. // TODO Auto-generated method stub
  442. MachineRecharge machineRecharge = new MachineRecharge();
  443. machineRecharge.setRechargeMachineId(machineId);
  444. machineRecharge.setRechargeState(1);
  445. return machineMapper.listRecharge(machineRecharge);
  446. }
  447. @Override
  448. public List<MachineInfo> selectEquipmentList(MachineInfo machineInfo) {
  449. // TODO Auto-generated method stub
  450. return machineMapper.selectEquipmentList(machineInfo);
  451. }
  452. @Override
  453. public Integer selectEquipmentCount(MachineInfo machineInfo) {
  454. // TODO Auto-generated method stub
  455. return machineMapper.selectEquipmentCount(machineInfo);
  456. }
  457. @Override
  458. public Integer add(MachineInfo info) {
  459. // TODO Auto-generated method stub
  460. return machineMapper.add(info);
  461. }
  462. @Override
  463. public MachineRecharge getRechargeByIdOrOrderId(MachineRecharge recharge) {
  464. // TODO Auto-generated method stub
  465. return machineMapper.getRechargeByIdOrOrderId(recharge);
  466. }
  467. @Override
  468. public ResultMsg presentMachine(String orderItemId, String openId) {
  469. ResultMsg rm = new ResultMsg();
  470. rm.setMessage(ResultInfo.ERRORCODE);
  471. rm.setStatus(false);
  472. if(StringUtils.isEmpty(orderItemId)){
  473. rm.setMessage("请选择正确的机器!");
  474. return rm;
  475. }
  476. RentOrderItem item = new RentOrderItem();
  477. item.setItemId(Integer.parseInt(orderItemId));
  478. item = rentOrderMapper.getOrderItemByInitCode(item);
  479. if(item == null || item.getItemProductType() != 1){
  480. rm.setMessage("该机器不可以送人!");
  481. return rm;
  482. }
  483. if(StringUtils.isEmpty(item.getItemInitCode()) || item.getItemCodeState() != 1){
  484. rm.setMessage("该激活码已经被激活,不可以送人!");
  485. return rm;
  486. }
  487. MachineShare machineShare = new MachineShare();
  488. machineShare.setShareOpenId(openId);
  489. machineShare.setShareTime(new Date());
  490. machineShare.setShareCode(item.getItemInitCode());
  491. if(machineMapper.insertMachineShare(machineShare) != null){
  492. rm.setStatus(true);
  493. rm.setResultCode(ResultInfo.SUCCESSCODE);
  494. rm.setMessage("");
  495. rm.setData(machineShare.getShareId());
  496. }else{
  497. rm.setMessage("赠送失败!请确认后重试!");
  498. }
  499. return rm;
  500. }
  501. @Override
  502. public ResultMsg receiveMachine(String shareId, String openId) {
  503. ResultMsg rm = new ResultMsg();
  504. rm.setMessage(ResultInfo.ERRORCODE);
  505. rm.setResultCode("500");
  506. rm.setStatus(false);
  507. if(StringUtils.isEmpty(shareId)){
  508. rm.setMessage("分享有误!请联系分享用户重新分享!");
  509. return rm;
  510. }
  511. MachineShare machineShare = machineMapper.getMachineShareById(shareId);
  512. if(machineShare == null){
  513. rm.setMessage("分享有误!请联系分享您的用户重新分享!");
  514. return rm;
  515. }
  516. Member member = memberService.getMemberByUserOpenId(machineShare.getShareOpenId());
  517. Map<String, Object> map = new HashMap<String, Object>();
  518. map.put("userName", member.getUserNickname());
  519. map.put("userHead", member.getUserHead());
  520. map.put("userDate", DateTimeUtil.format(machineShare.getShareTime()));
  521. map.put("isUsed", "0");
  522. rm.setData(map);
  523. rm.setResultCode("200");
  524. if(StringUtils.isNotEmpty(machineShare.getShareReOpenid())){
  525. rm.setMessage("这台净水机已经被人领取。");
  526. if(ObjectUtils.equals(machineShare.getShareReOpenid(), openId)){
  527. map.put("isUsed", "1");
  528. }else{
  529. map.put("isUsed", "2");
  530. }
  531. }
  532. if(ObjectUtils.equals(machineShare.getShareOpenId(), openId)){
  533. rm.setResultCode("201");
  534. }else{
  535. if(StringUtils.isEmpty(machineShare.getShareReOpenid())){
  536. machineShare.setShareReOpenid(openId);
  537. machineShare.setShareBindTime(new Date());
  538. if(machineMapper.updateMachineShare(machineShare) > 0){
  539. rm.setStatus(true);
  540. rm.setMessage("");
  541. }else{
  542. rm.setMessage("领取机器失败,请联系分享您的用户重新分享!");
  543. }
  544. }
  545. }
  546. return rm;
  547. }
  548. @Override
  549. public int bindMachineToOpenId(String device_id, String openId) {
  550. // TODO Auto-generated method stub
  551. MachineInfo info = new MachineInfo();
  552. info.setMachineDeviceId(device_id);
  553. info.setMachineOpenid(openId);
  554. Integer res = machineMapper.update(info);
  555. return res == null ? 0 : res;
  556. }
  557. @Override
  558. public MachineInfo selectMachineById(MachineInfo machineInfo) {
  559. // TODO Auto-generated method stub
  560. return machineMapper.selectMachineById(machineInfo);
  561. }
  562. @Override
  563. public List<MachineShare> listMachineShareAdmin(MachineShare machineShare) {
  564. // TODO Auto-generated method stub
  565. machineShare.getPage().initRecordBegin();
  566. return machineMapper.listMachineShareAdmin(machineShare);
  567. }
  568. @Override
  569. public int countMachineShare(MachineShare machineShare) {
  570. // TODO Auto-generated method stub
  571. return machineMapper.countMachineShare(machineShare);
  572. }
  573. /*@Override
  574. @Scheduled(cron = "0/10 * * * * ?")//每10秒执行一次*/
  575. public synchronized void handlerNextCommand() {
  576. // TODO Auto-generated method stub
  577. List<MachineInfo> listNextCommandMachine = machineMapper.listNextCommandMachine();
  578. for (MachineInfo machineInfo : listNextCommandMachine) {
  579. // 第一条消息总是改变数据方向:Server
  580. String accessToken = configService.getAccessToken();
  581. WechatIotUtils.send(accessToken, "*setDir0#", machineInfo.getMachineDeviceId(), machineInfo.getMachineOpenid(), "gh_2674097b2442");
  582. // 接着发送正式的命令
  583. JSONObject json = WechatIotUtils.send(accessToken, machineInfo.getMachineNextCommand(),
  584. machineInfo.getMachineDeviceId(), machineInfo.getMachineOpenid(), "gh_2674097b2442");
  585. if (json == null || json.toString().contains("errcode")) {
  586. LOGGER.error("{'method':'{}', 'msg':'{}'}", "发送激活信息失败", json.toString());
  587. } else {
  588. LOGGER.info("{'device_id':'{}', 'msg':'{}'}", machineInfo.getMachineDeviceId(), "发送激活信息成功");
  589. }
  590. }
  591. }
  592. @Override
  593. public Integer update(MachineInfo info) {
  594. // TODO Auto-generated method stub
  595. return machineMapper.update(info);
  596. }
  597. @Override
  598. public List<RentChangeLogs> listSelectChangeLogs(
  599. RentChangeLogs rentChangeLogs) {
  600. // TODO Auto-generated method stub
  601. return machineMapper.listSelectChangeLogs(rentChangeLogs);
  602. }
  603. @Override
  604. public Integer saveChangeLogs(List<RentChangeLogs> list, RentOrder rentOrder) throws Exception {
  605. // TODO Auto-generated method stub
  606. int id = 0;
  607. if (list != null && list.size() > 0) {
  608. //循环插入更换滤芯表中,返回id并推送到百胜系统
  609. for (RentChangeLogs rentChangeLogs : list) {
  610. int colorId = 0;
  611. switch (rentChangeLogs.getLogsFilterType().intValue()) {
  612. case 1:colorId = 7;break;
  613. case 2:colorId = 8;break;
  614. case 3:colorId = 8;break;
  615. case 4:colorId = 8;break;
  616. default:colorId = 7;break;
  617. }
  618. id = machineMapper.insertFilterLogs(rentChangeLogs);
  619. if (id > 0) {
  620. efastRentService.sendRentFilter(rentChangeLogs.getLogsAddressInfo(),"RF00000000"+id,colorId,
  621. rentChangeLogs.getLogsAddressName(),rentChangeLogs.getLogsAddressTel(),rentOrder.getRentOpenid());
  622. }
  623. }
  624. }
  625. return id;
  626. }
  627. @Override
  628. public List<RentChangeLogs> listChangeFilterLogs(
  629. RentChangeLogs rentChangeLogs) {
  630. // TODO Auto-generated method stub
  631. return machineMapper.listChangeFilterLogs(rentChangeLogs);
  632. }
  633. @Override
  634. public Integer getChangeFilterCount(RentChangeLogs rentChangeLogs) {
  635. // TODO Auto-generated method stub
  636. int count = machineMapper.getChangeFilterCount(rentChangeLogs);
  637. int pageCount = count % rentChangeLogs.getPage().getPageSize() == 0 ? count/rentChangeLogs.getPage().getPageSize():(count/rentChangeLogs.getPage().getPageSize()) + 1;
  638. return pageCount;
  639. }
  640. @Override
  641. public Integer addCompeteWater(CompeteWaterInfo competeWaterInfo) {
  642. return machineMapper.addCompeteWater(competeWaterInfo);
  643. }
  644. @Override
  645. public CompeteWaterInfo selectCompeteWater(String shareId) {
  646. return machineMapper.selectCompeteWater(shareId);
  647. }
  648. @Override
  649. public boolean updateChangeLogsById(RentChangeLogs rentChangeLogs) {
  650. int num = machineMapper.updateChangeLogsById(rentChangeLogs);
  651. if (num > 0) {
  652. return true;
  653. } else {
  654. return false;
  655. }
  656. }
  657. }