提交 bc10d1af 作者: zhenjie

Merge branch 'develop' of ssh://git.mmcuav.cn:8222/iuav/oms into develop

...@@ -14,4 +14,4 @@ patches: ...@@ -14,4 +14,4 @@ patches:
images: images:
- name: REGISTRY/NAMESPACE/IMAGE:TAG - name: REGISTRY/NAMESPACE/IMAGE:TAG
newName: mmc-registry.cn-shenzhen.cr.aliyuncs.com/sharefly-dev/oms newName: mmc-registry.cn-shenzhen.cr.aliyuncs.com/sharefly-dev/oms
newTag: ba3cce6ae5618ef5eb4bb5a8bafda73e554e5a64 newTag: 7aeb9cc607869c3c6d3e2b8ea1a5232143038393
...@@ -6,6 +6,7 @@ import com.mmc.oms.controller.BaseController; ...@@ -6,6 +6,7 @@ import com.mmc.oms.controller.BaseController;
import com.mmc.oms.dao.demand.DemandReleaseOrderDao; import com.mmc.oms.dao.demand.DemandReleaseOrderDao;
import com.mmc.oms.entity.demand.GetOrderNumberDO; import com.mmc.oms.entity.demand.GetOrderNumberDO;
import com.mmc.oms.entity.demand.GetOrderNumberDTO; import com.mmc.oms.entity.demand.GetOrderNumberDTO;
import com.mmc.oms.entity.demand.ServiceRequirementsDO;
import com.mmc.oms.model.vo.demand.CommonPaymentVO; import com.mmc.oms.model.vo.demand.CommonPaymentVO;
import com.mmc.oms.model.vo.demand.UserPayInfoVO; import com.mmc.oms.model.vo.demand.UserPayInfoVO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -57,6 +58,10 @@ public class NotRepeatSubmitConfig extends BaseController { ...@@ -57,6 +58,10 @@ public class NotRepeatSubmitConfig extends BaseController {
@Value("${payment.url}") @Value("${payment.url}")
private String paymentApp; private String paymentApp;
@Value("${ims.url}")
private String imsApp;
@Pointcut("@within(notRepeatSubmit)||@annotation(notRepeatSubmit)") @Pointcut("@within(notRepeatSubmit)||@annotation(notRepeatSubmit)")
public void pointcut(NotRepeatSubmit notRepeatSubmit) { public void pointcut(NotRepeatSubmit notRepeatSubmit) {
...@@ -83,19 +88,27 @@ public class NotRepeatSubmitConfig extends BaseController { ...@@ -83,19 +88,27 @@ public class NotRepeatSubmitConfig extends BaseController {
log.info(map+""); log.info(map+"");
CommonPaymentVO commonPaymentsVO = (CommonPaymentVO) map.get("commonPaymentVO"); CommonPaymentVO commonPaymentsVO = (CommonPaymentVO) map.get("commonPaymentVO");
String json1 = stringRedisTemplate.opsForValue().get(commonPaymentsVO.getOrderNumber()); String json1 = stringRedisTemplate.opsForValue().get(commonPaymentsVO.getOrderNumber());
GetOrderNumberDTO getOrderNumberDTO1= JSONObject.parseObject(json1, GetOrderNumberDTO.class);
Integer requirementsInfoId = getOrderNumberDTO1.getRequirementsInfoId();
String accountUriLockKey=null; String accountUriLockKey=null;
Integer requirementsInfoId=null;
if (json1!=null){
GetOrderNumberDTO getOrderNumberDTO1= JSONObject.parseObject(json1, GetOrderNumberDTO.class);
requirementsInfoId = getOrderNumberDTO1.getRequirementsInfoId();
ServiceRequirementsDO rep = repertory(requirementsInfoId,request);
Integer repertory2 = rep.getRepertory();
if (repertory2<=0){
return ResultBody.error("需求已被人抢走");
}
if (requirementsInfoId!=null && repertory2!=0){
accountUriLockKey=requirementsInfoId +repertory2+ "-" + request.getServletPath();
}
}
if (requirementsInfoId!=null){ if (requirementsInfoId!=null){
accountUriLockKey = requirementsInfoId + "-" + request.getServletPath(); accountUriLockKey = requirementsInfoId + "-" + request.getServletPath();
}else { }else {
accountUriLockKey = userAccountId + "-" + request.getServletPath(); accountUriLockKey = userAccountId + "-" + request.getServletPath();
} }
// 设置锁定资源名称,accountUriLock改为userid+uri作为标识,作为测试写死 // 设置锁定资源名称,accountUriLock改为userid+uri作为标识,作为测试写死
// String accountUriLockKey = "accountUriLock"; // String accountUriLockKey = "accountUriLock";
RLock accountUriLock = redissonClient.getLock(accountUriLockKey); RLock accountUriLock = redissonClient.getLock(accountUriLockKey);
boolean tryLock; boolean tryLock;
...@@ -103,14 +116,19 @@ public class NotRepeatSubmitConfig extends BaseController { ...@@ -103,14 +116,19 @@ public class NotRepeatSubmitConfig extends BaseController {
Method method = signature.getMethod(); Method method = signature.getMethod();
String name = method.getDeclaringClass().getName(); String name = method.getDeclaringClass().getName();
String[] parameterNames = signature.getParameterNames(); String[] parameterNames = signature.getParameterNames();
//尝试获取分布式锁 //尝试获取分布式锁
//-1为永久 leaseTime 最多等待几秒 上锁以后leaseTime秒自动解锁 //-1为永久 leaseTime 最多等待几秒 上锁以后leaseTime秒自动解锁
tryLock = accountUriLock.tryLock(-1, leaseTime, TimeUnit.MILLISECONDS); tryLock = accountUriLock.tryLock(-1, leaseTime, TimeUnit.MILLISECONDS);
log.info("tryLock:" + tryLock); log.info("tryLock:" + tryLock);
if (tryLock) { if (tryLock) {
try { try {
if (requirementsInfoId!=null){
ServiceRequirementsDO repertory = repertory(requirementsInfoId,request);
Integer repertory1 = repertory.getRepertory();
if (repertory1<=0){
return ResultBody.error("需求已被人抢走");
}
}
String orderNumber = commonPaymentsVO.getOrderNumber(); String orderNumber = commonPaymentsVO.getOrderNumber();
String json = stringRedisTemplate.opsForValue().get(orderNumber); String json = stringRedisTemplate.opsForValue().get(orderNumber);
GetOrderNumberDTO getOrderNumberDTO = JSONObject.parseObject(json, GetOrderNumberDTO.class); GetOrderNumberDTO getOrderNumberDTO = JSONObject.parseObject(json, GetOrderNumberDTO.class);
...@@ -166,5 +184,23 @@ public class NotRepeatSubmitConfig extends BaseController { ...@@ -166,5 +184,23 @@ public class NotRepeatSubmitConfig extends BaseController {
return body; return body;
} }
/**
* 通过订单编号查看是否支付成功
*
* @param requirementsInfoId
* @return
*/
public ServiceRequirementsDO repertory(Integer requirementsInfoId, HttpServletRequest request) {
String token = request.getHeader("token");
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.add("token", token);
HttpEntity<String> entity = new HttpEntity<>(JSONObject.toJSONString(requirementsInfoId), headers);
ResponseEntity<ServiceRequirementsDO> exchange = restTemplate.exchange(imsApp + "requirements/repertory?requirementsInfoId=" + requirementsInfoId, HttpMethod.GET, entity, ServiceRequirementsDO.class);
ServiceRequirementsDO body = exchange.getBody();
return body;
}
} }
package com.mmc.oms.entity.demand;
import java.math.BigDecimal;
/**
* @Author small
* @Date 2023/9/7 15:54
* @Version 1.0
*/
public enum OrderLevelEnum {
//普通订单
REGULAR_ORDER("REGULAR_ORDER", new BigDecimal(0)),
//紧急订单
RUSH_ORDER("RUSH_ORDER", new BigDecimal(100)),
//置顶订单
TOP_ORDER("TOP_ORDER", new BigDecimal(300));
private String key;
private BigDecimal value;
private OrderLevelEnum(String key, BigDecimal value) {
this.key = key;
this.value = value;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public BigDecimal getValue() {
return value;
}
public void setValue(BigDecimal value) {
this.value = value;
}
public static OrderLevelEnum match(String key) {
OrderLevelEnum result = null;
for (OrderLevelEnum s : values()) {
if (s.getKey() == key) {
result = s;
break;
}
}
return result;
}
public static OrderLevelEnum catchMessage(BigDecimal value) {
OrderLevelEnum result = null;
for (OrderLevelEnum s : values()) {
if (s.getValue().equals(value)) {
result = s;
break;
}
}
return result;
}
}
package com.mmc.oms.entity.demand;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mmc.oms.common.publicinterface.Insert;
import com.mmc.oms.common.publicinterface.Update;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Author small
* @Date 2023/9/7 15:50
* @Version 1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ServiceRequirementsDO {
private static final long serialVersionUID = -447951390213113317L;
@ApiModelProperty(value = "id")
@NotNull(message = "id不能为空", groups = {Update.class})
private Integer id;
@ApiModelProperty(value = "id")
@NotBlank(message = "服务类型id不能为空", groups = {Insert.class, Update.class})
private Integer serviceId;
@ApiModelProperty(value = "飞行日期——任务开始时间", example = "2023-07-25", required = true)
@NotNull(message = "任务开始时间不能为空", groups = {Insert.class, Update.class})
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date taskStartTime;
@ApiModelProperty(value = "飞行日期——任务结束时间", example = "2023-07-26", required = true)
@NotNull(message = "任务开始时间不能为空", groups = {Insert.class, Update.class})
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date taskEndTime;
@ApiModelProperty(value = "飞行位置——任务地址", example = "广东省深圳市", required = true)
@NotBlank(message = "任务地址不能为空", groups = {Insert.class, Update.class})
private String taskAddress;
@ApiModelProperty(value = "飞行位置——任务经度", example = "23.344324", required = true)
@NotNull(message = "任务经度不能为空", groups = {Insert.class, Update.class})
private Double longitude;
@ApiModelProperty(value = "飞行位置——任务纬度", example = "44.344324", required = true)
@NotNull(message = "任务纬度不能为空", groups = {Insert.class, Update.class})
private Double latitude;
@ApiModelProperty(value = "需求描述", example = "描述一下", required = true)
@NotNull(message = "需求描述不能为空", groups = {Insert.class})
@Length(max = 300, message = "字符过长")
private String requireDescription;
@ApiModelProperty(value = "订单金额", example = "订单金额", required = true)
@NotNull(message = "订单金额", groups = {Insert.class})
private BigDecimal orderAmount;
@ApiModelProperty(value = "飞手保险", example = "飞手保险", required = true)
@NotNull(message = "飞手保险", groups = {Insert.class})
private String insurance;
@ApiModelProperty(value = "订单级别", example = "订单级别", required = true)
@NotNull(message = "订单级别", groups = {Insert.class})
private OrderLevelEnum orderLevelEnum;
@ApiModelProperty(value = "后台获取token里面的用户id", hidden = true)
private Integer userAccountId;
@ApiModelProperty(value = "发布者姓名", example = "张三")
private String publishName;
@ApiModelProperty(value = "发布者电话", example = "1892994543", required = true)
@NotNull(message = "发布者电话不能为空", groups = {Insert.class})
private String publishPhone;
@ApiModelProperty(value = "发布者订单编号")
private String publisherNumber;
@ApiModelProperty(value = "0普通 100急单 300置顶")
private BigDecimal orderLevelAmount;
@ApiModelProperty(value = "订单级别 REGULAR_ORDER,RUSH_ORDER,TOP_ORDER")
private String orderLevel;
@ApiModelProperty(value = "总金额", example = "100", required = true)
@NotNull(message = "总金额", groups = {Insert.class})
private BigDecimal totalAmount;
@ApiModelProperty(value = "云享金", example = "10")
private BigDecimal cashAmount;
@ApiModelProperty(value = "佣金", example = "10")
private BigDecimal salaryAmount;
@ApiModelProperty(value = "微信金额", example = "10")
private BigDecimal weChat;
@ApiModelProperty(value = "微信支付订单编号", example = "R202308191657303116170")
private String wechatPayOrderNumber;
private Integer repertory;
@ApiModelProperty(value = "支付方式,云享金:1,佣金:2,微信支付:3", example = "1,2,3")
private String paymentType;
@ApiModelProperty(value = "地区编码")
private String adcode;
@ApiModelProperty(value = "置顶/加急 佣金支付多少", example = "100")
private BigDecimal levelSalaryAmount;
@ApiModelProperty(value = "置顶/加急 微信支付多少", example = "100")
private BigDecimal levelWeChatAmount;
@ApiModelProperty(value = "置顶/加急 云享金支付多少", example = "100")
private BigDecimal levelCashAmount;
@ApiModelProperty(value = "openid")
private String openid;
@ApiModelProperty(value = "服务名称")
private String serviceName;
}
...@@ -14,6 +14,7 @@ import com.mmc.oms.dao.uav.UavOrderDao; ...@@ -14,6 +14,7 @@ import com.mmc.oms.dao.uav.UavOrderDao;
import com.mmc.oms.entity.demand.DemandReleaseOrderDO; import com.mmc.oms.entity.demand.DemandReleaseOrderDO;
import com.mmc.oms.entity.demand.GetOrderNumberDO; import com.mmc.oms.entity.demand.GetOrderNumberDO;
import com.mmc.oms.entity.demand.GetOrderNumberDTO; import com.mmc.oms.entity.demand.GetOrderNumberDTO;
import com.mmc.oms.entity.demand.ServiceRequirementsDO;
import com.mmc.oms.entity.topup.TopUpOrderDO; import com.mmc.oms.entity.topup.TopUpOrderDO;
import com.mmc.oms.entity.uav.UavOrderDO; import com.mmc.oms.entity.uav.UavOrderDO;
import com.mmc.oms.enums.UavOrderStatus; import com.mmc.oms.enums.UavOrderStatus;
...@@ -41,6 +42,7 @@ import java.math.BigInteger; ...@@ -41,6 +42,7 @@ import java.math.BigInteger;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.concurrent.TimeUnit;
/** /**
* @Author small * @Author small
...@@ -67,6 +69,9 @@ public class DemandReleaseOrderServiceImpl implements DemandReleaseOrderService ...@@ -67,6 +69,9 @@ public class DemandReleaseOrderServiceImpl implements DemandReleaseOrderService
@Value("${payment.url}") @Value("${payment.url}")
private String paymentUrl; private String paymentUrl;
@Value("${ims.url}")
private String imsApp;
@Autowired @Autowired
private StringRedisTemplate stringRedisTemplate; private StringRedisTemplate stringRedisTemplate;
...@@ -94,7 +99,7 @@ public class DemandReleaseOrderServiceImpl implements DemandReleaseOrderService ...@@ -94,7 +99,7 @@ public class DemandReleaseOrderServiceImpl implements DemandReleaseOrderService
return orderPost(commonPaymentVO, token); return orderPost(commonPaymentVO, token);
case "4": case "4":
//发布服务需求支付 //发布服务需求支付
return publishServicePay(commonPaymentVO, token, userAccountId); return publishServicePay(commonPaymentVO, token, userAccountId,request);
case "5": case "5":
return topUpOrder(commonPaymentVO, token, userAccountId); return topUpOrder(commonPaymentVO, token, userAccountId);
default: default:
...@@ -156,9 +161,14 @@ public class DemandReleaseOrderServiceImpl implements DemandReleaseOrderService ...@@ -156,9 +161,14 @@ public class DemandReleaseOrderServiceImpl implements DemandReleaseOrderService
* @param userAccountId * @param userAccountId
* @return * @return
*/ */
private ResultBody publishServicePay(CommonPaymentVO commonPaymentVO, String token,Integer userAccountId) { private ResultBody publishServicePay(CommonPaymentVO commonPaymentVO, String token,Integer userAccountId, HttpServletRequest request) {
if ("4".equals(commonPaymentVO.getOrderPort().toString())){ if ("4".equals(commonPaymentVO.getOrderPort().toString())){
try {
TimeUnit.MINUTES.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
String orderNumber = commonPaymentVO.getOrderNumber(); String orderNumber = commonPaymentVO.getOrderNumber();
String json = stringRedisTemplate.opsForValue().get(orderNumber); String json = stringRedisTemplate.opsForValue().get(orderNumber);
GetOrderNumberDTO getOrderNumberDTO = JSONObject.parseObject(json, GetOrderNumberDTO.class); GetOrderNumberDTO getOrderNumberDTO = JSONObject.parseObject(json, GetOrderNumberDTO.class);
...@@ -168,6 +178,11 @@ public class DemandReleaseOrderServiceImpl implements DemandReleaseOrderService ...@@ -168,6 +178,11 @@ public class DemandReleaseOrderServiceImpl implements DemandReleaseOrderService
if (i!=0){ if (i!=0){
return ResultBody.error("当前需求已有人支付"); return ResultBody.error("当前需求已有人支付");
} }
ServiceRequirementsDO repertory = repertory(getOrderNumberDO.getRequirementsInfoId(), request);
Integer repertory1 = repertory.getRepertory();
if (repertory1<=0){
return ResultBody.error("需求已被人抢走");
}
} }
releaseOrderDao.insertService(getOrderNumberDO); releaseOrderDao.insertService(getOrderNumberDO);
BigDecimal paramMoney = getOrderNumberDO.getWeChatPay(); BigDecimal paramMoney = getOrderNumberDO.getWeChatPay();
...@@ -256,4 +271,23 @@ public class DemandReleaseOrderServiceImpl implements DemandReleaseOrderService ...@@ -256,4 +271,23 @@ public class DemandReleaseOrderServiceImpl implements DemandReleaseOrderService
} }
return ResultBody.success(map); return ResultBody.success(map);
} }
/**
* 查看是否支付成功
*
* @param requirementsInfoId
* @return
*/
public ServiceRequirementsDO repertory(Integer requirementsInfoId, HttpServletRequest request) {
String token = request.getHeader("token");
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.add("token", token);
HttpEntity<String> entity = new HttpEntity<>(JSONObject.toJSONString(requirementsInfoId), headers);
ResponseEntity<ServiceRequirementsDO> exchange = restTemplate.exchange(imsApp + "requirements/repertory?requirementsInfoId=" + requirementsInfoId, HttpMethod.GET, entity, ServiceRequirementsDO.class);
ServiceRequirementsDO body = exchange.getBody();
return body;
}
} }
...@@ -67,5 +67,8 @@ payment: ...@@ -67,5 +67,8 @@ payment:
pms: pms:
url: https://test.iuav.shop/pms/ url: https://test.iuav.shop/pms/
ims:
url: https://test.iuav.shop/release/
...@@ -7,8 +7,9 @@ spring: ...@@ -7,8 +7,9 @@ spring:
password: IUAV_DEV@2023&MYSQL password: IUAV_DEV@2023&MYSQL
redis: redis:
database: 1 database: 1
host: 127.0.0.1 host: r-wz9ke310fs684hacn1pd.redis.rds.aliyuncs.com
port: 6379 port: 6379
password: MMC@2022&REDIS
jedis: jedis:
pool: pool:
max-active: 2 max-active: 2
...@@ -57,5 +58,7 @@ payment: ...@@ -57,5 +58,7 @@ payment:
pms: pms:
url: http://localhost:8099/pms/ url: http://localhost:8099/pms/
ims:
url: http://localhost:10001/release/
...@@ -66,3 +66,5 @@ payment: ...@@ -66,3 +66,5 @@ payment:
pms: pms:
url: https://www.iuav.shop/pms/ url: https://www.iuav.shop/pms/
ims:
url: https://www.iuav.shop/release/
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论