OrderServiceImpl.java 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package com.dderp.business.service.flycat;
  2. import com.dderp.common.api.NoSqlKeysService;
  3. import com.dderp.common.api.flycat.OrderService;
  4. import com.dderp.common.base.BaseService;
  5. import com.dderp.common.datas.RedisKeys;
  6. import com.dderp.common.entity.base.InvokeCallParams;
  7. import com.dderp.common.entity.base.InvokeCallResult;
  8. import com.dderp.common.entity.site.ERPTokenUser;
  9. import com.dySweetFishPlugin.redis.RedisService;
  10. import com.sweetfish.service.Local;
  11. import com.sweetfish.service.RetResult;
  12. import com.sweetfish.util.AnyValue;
  13. import com.sweetfish.util.AutoLoad;
  14. import com.sweetfish.util.ResourceType;
  15. import org.apache.commons.lang3.StringUtils;
  16. import javax.annotation.Resource;
  17. import java.time.Duration;
  18. import java.time.LocalDateTime;
  19. import java.time.LocalTime;
  20. @AutoLoad(false)
  21. @Local
  22. @ResourceType(OrderService.class)
  23. public class OrderServiceImpl extends BaseService implements OrderService {
  24. @Resource
  25. RedisService redisService;
  26. @Resource
  27. NoSqlKeysService keysService;
  28. @Override
  29. public void init(AnyValue config) {
  30. super.init(config);
  31. }
  32. @Override
  33. public void destroy(AnyValue config) {
  34. super.destroy(config);
  35. }
  36. @Override
  37. public void start(AnyValue config) {
  38. super.start(config);
  39. }
  40. /**
  41. * 获取订单流水号
  42. * 每个门店每个订单平台每天的流水号,从1开始,零点归1
  43. *
  44. * @param idShop 门店id
  45. * @param idPlatform 订单平台id
  46. * @param supplierCode 分表
  47. */
  48. public long getOrderSequence(long idShop, long idPlatform, long supplierCode) {
  49. String key = keysService.getRedisKey(RedisKeys.KEY_ORDER_SHOP_SEQUENCE, supplierCode, true) +
  50. idShop + ":" + idPlatform;
  51. long orderSequence = redisService.incr(key);
  52. if (orderSequence == 1) {
  53. //让redis自动过期,不要自己写线程清零
  54. //如果是新的一天,设置键的过期时间为到自然日零点的剩余时间
  55. LocalDateTime now = LocalDateTime.now();
  56. LocalDateTime tomorrowMidnight = LocalDateTime.of(now.toLocalDate().plusDays(1), LocalTime.MIDNIGHT);
  57. Duration duration = Duration.between(now, tomorrowMidnight);
  58. redisService.expire(key, (int) duration.getSeconds());
  59. }
  60. return orderSequence;
  61. }
  62. public RetResult<InvokeCallResult> callOrder(InvokeCallParams source, ERPTokenUser currentUser, String dataSourceId, long supplierCode) {
  63. if (source == null) {
  64. return RetResult.<InvokeCallResult>errorT().retinfo("无效的参数信息");
  65. }
  66. if (StringUtils.isEmpty(source.getBusinessMethod())) {
  67. return RetResult.<InvokeCallResult>errorT().retinfo("无效的参数方法[businessMethod]信息");
  68. }
  69. source.setCurrentUser(currentUser);
  70. source.setDataSourceId(dataSourceId);
  71. source.setSupplierCode(supplierCode);
  72. return callScript(source.getBusinessMethod(), source, currentUser, dataSourceId, supplierCode);
  73. }
  74. }