|
@@ -5,15 +5,15 @@ import com.alibaba.fastjson.JSONObject;
|
|
import com.miaxis.common.config.WxpayConfig;
|
|
import com.miaxis.common.config.WxpayConfig;
|
|
import com.miaxis.common.constant.Constants;
|
|
import com.miaxis.common.constant.Constants;
|
|
import com.miaxis.common.core.domain.Response;
|
|
import com.miaxis.common.core.domain.Response;
|
|
|
|
+import com.miaxis.common.core.domain.entity.UserInfo;
|
|
import com.miaxis.common.exception.CustomException;
|
|
import com.miaxis.common.exception.CustomException;
|
|
import com.miaxis.common.utils.AesUtil;
|
|
import com.miaxis.common.utils.AesUtil;
|
|
|
|
+import com.miaxis.common.utils.SecurityUtils;
|
|
import com.miaxis.feign.dto.FilmDTO;
|
|
import com.miaxis.feign.dto.FilmDTO;
|
|
import com.miaxis.film.domain.FilmOrder;
|
|
import com.miaxis.film.domain.FilmOrder;
|
|
-import com.miaxis.film.dto.FilmOrderCreateDTO;
|
|
|
|
-import com.miaxis.film.dto.FilmOrderJsonData;
|
|
|
|
-import com.miaxis.film.dto.FilmOrderNotifyDTO;
|
|
|
|
-import com.miaxis.film.dto.FilmWxpayDTO;
|
|
|
|
|
|
+import com.miaxis.film.dto.*;
|
|
import com.miaxis.film.service.IFilmOrderService;
|
|
import com.miaxis.film.service.IFilmOrderService;
|
|
|
|
+import com.miaxis.film.service.IRefundRecordService;
|
|
import io.swagger.annotations.Api;
|
|
import io.swagger.annotations.Api;
|
|
import io.swagger.annotations.ApiModelProperty;
|
|
import io.swagger.annotations.ApiModelProperty;
|
|
import io.swagger.annotations.ApiOperation;
|
|
import io.swagger.annotations.ApiOperation;
|
|
@@ -37,6 +37,8 @@ import java.time.ZoneId;
|
|
import java.time.ZonedDateTime;
|
|
import java.time.ZonedDateTime;
|
|
import java.util.Locale;
|
|
import java.util.Locale;
|
|
|
|
|
|
|
|
+import static com.miaxis.common.utils.OrderCodeFactory.getOrderCode;
|
|
|
|
+
|
|
@RestController
|
|
@RestController
|
|
@RequiredArgsConstructor
|
|
@RequiredArgsConstructor
|
|
@RequestMapping(Constants.OPEN_PREFIX+"/film/notify")
|
|
@RequestMapping(Constants.OPEN_PREFIX+"/film/notify")
|
|
@@ -55,6 +57,10 @@ public class NotifyController {
|
|
@Autowired
|
|
@Autowired
|
|
private ThreadPoolTaskExecutor threadPoolTaskExecutor;
|
|
private ThreadPoolTaskExecutor threadPoolTaskExecutor;
|
|
|
|
|
|
|
|
+ @Autowired
|
|
|
|
+ private IRefundRecordService refundRecordService;
|
|
|
|
+
|
|
|
|
+
|
|
@Value("${film.notifyUrl}")
|
|
@Value("${film.notifyUrl}")
|
|
private String notifyUrl ;
|
|
private String notifyUrl ;
|
|
|
|
|
|
@@ -63,7 +69,7 @@ public class NotifyController {
|
|
*/
|
|
*/
|
|
@PostMapping(value = "/wxpay")
|
|
@PostMapping(value = "/wxpay")
|
|
@ApiOperation("微信支付回调")
|
|
@ApiOperation("微信支付回调")
|
|
- public WxNotifyReturnDTO wxpayNotify(@RequestBody FilmWxpayDTO filmWxpayDTO,HttpServletRequest request) throws GeneralSecurityException, IOException {
|
|
|
|
|
|
+ public WxNotifyReturnDTO wxpayNotify(@RequestBody FilmWxpayDTO filmWxpayDTO, HttpServletRequest request) throws GeneralSecurityException, IOException {
|
|
AesUtil aesUtil = new AesUtil(wxpayConfig.getV3key().getBytes());
|
|
AesUtil aesUtil = new AesUtil(wxpayConfig.getV3key().getBytes());
|
|
FilmWxpayDTO.WxpaySource wxpaySource = filmWxpayDTO.getResource();
|
|
FilmWxpayDTO.WxpaySource wxpaySource = filmWxpayDTO.getResource();
|
|
String resourceString = aesUtil.decryptToString(wxpaySource.getAssociated_data().getBytes(), wxpaySource.getNonce().getBytes(), wxpaySource.getCiphertext());
|
|
String resourceString = aesUtil.decryptToString(wxpaySource.getAssociated_data().getBytes(), wxpaySource.getNonce().getBytes(), wxpaySource.getCiphertext());
|
|
@@ -108,9 +114,28 @@ public class NotifyController {
|
|
}
|
|
}
|
|
filmOrderJsonData.setFilmOrderNotifyDTO(dbFilmOrderNotifyDTO);
|
|
filmOrderJsonData.setFilmOrderNotifyDTO(dbFilmOrderNotifyDTO);
|
|
filmOrder.setOrderDataJson(JSONObject.toJSONString(filmOrderJsonData));
|
|
filmOrder.setOrderDataJson(JSONObject.toJSONString(filmOrderJsonData));
|
|
|
|
+ UserInfo student = SecurityUtils.getLoginUser().getStudent();
|
|
|
|
+ Long id = student.getId();
|
|
|
|
+ String refundCode = getOrderCode(id);
|
|
|
|
+ //如果回调回来的订单关闭,则调用退款
|
|
|
|
+ if ("ORDER_CLOSE".equals(filmOrderNotifyDTO.getEventName())){
|
|
|
|
+ threadPoolTaskExecutor.execute(new Runnable() {
|
|
|
|
+ @Override
|
|
|
|
+ public void run() {
|
|
|
|
+ try {
|
|
|
|
+ refundRecordService.refund(filmOrder,refundCode);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.info(e.getMessage());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ filmOrder.setOutRefundNo(refundCode);
|
|
filmOrderService.updateById(filmOrder);
|
|
filmOrderService.updateById(filmOrder);
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
FilmNotifyReturnDTO filmNotifyReturnDTO = new FilmNotifyReturnDTO();
|
|
FilmNotifyReturnDTO filmNotifyReturnDTO = new FilmNotifyReturnDTO();
|
|
filmNotifyReturnDTO.setCode("200");
|
|
filmNotifyReturnDTO.setCode("200");
|
|
filmNotifyReturnDTO.setMessage("请求成功");
|
|
filmNotifyReturnDTO.setMessage("请求成功");
|
|
@@ -215,11 +240,8 @@ public class NotifyController {
|
|
|
|
|
|
filmOrderService.updateById(filmOrder);
|
|
filmOrderService.updateById(filmOrder);
|
|
}
|
|
}
|
|
- @Data
|
|
|
|
- public class WxNotifyReturnDTO {
|
|
|
|
- String code;
|
|
|
|
- String message;
|
|
|
|
- }
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
|
|
@Data
|
|
@Data
|
|
public class FilmNotifyReturnDTO {
|
|
public class FilmNotifyReturnDTO {
|