1.api应用
@Slf4j
@RestController
@RequestMapping("/client/coupon")
public class CouponController {
@Resource
CouponFeign couponFeign;
/**
* 保存优惠券
*/
@PostMapping("/saveCoupon")
public Result<Boolean> saveCoupon(@RequestBody SaveCouponRequest saveCouponRequest) {
return couponFeign.saveCoupon(saveCouponRequest);
}
/**
* 列表查询
*/
@PostMapping("/queryCoupon")
public Result<PageInfo<QueryCouponResponse>> queryCoupon(@RequestBody QueryCouponRequest queryCouponRequest ) {
return couponFeign.queryCoupon(queryCouponRequest);
}
@PostMapping("/queryCouponList/export")
public Result queryListExport(@RequestBody QueryCouponRequest queryCouponRequest){
return couponFeign.queryCouponListExcel(queryCouponRequest);
}
}
2.业务应用
@FeignClient(value = PLATFORM_CLIENT)
public interface CouponFeign {
/**
* 保存优惠券
* @param saveCouponRequest
* @return
*/
@PostMapping("coupon/saveCoupon")
Result<Boolean> saveCoupon(SaveCouponRequest saveCouponRequest);
/**
* 查询优惠券
* @param queryCouponRequest
* @return
*/
@PostMapping("coupon/queryCoupon")
Result<PageInfo<QueryCouponResponse>> queryCoupon(QueryCouponRequest queryCouponRequest);
/**
* 导出优惠券
* @param queryCouponRequest
* @return
*/
@PostMapping("coupon/queryCouponList/export")
Result queryCouponListExcel(@RequestBody QueryCouponRequest queryCouponRequest );
}
3.feign实现类
@Slf4j
@RestController
public class CouponFeignImpl implements CouponFeign {
@Resource
CouponService couponService;
@Override
public Result<Boolean> saveCoupon(@RequestBody SaveCouponRequest saveCouponRequest) {
return couponService.issueCoupon(saveCouponRequest);
}
@Override
public Result<PageInfo<QueryCouponResponse>> queryCoupon(@RequestBody QueryCouponRequest queryCouponRequest) {
return couponService.queryCoupon(queryCouponRequest);
}
@Override
public Result queryCouponListExcel(@RequestBody QueryCouponRequest queryCouponRequest){
return couponService.exportCouponListExcel(queryCouponRequest);
}
}
4.业务逻辑
public interface CouponService {
/**
* 下发优惠券
* @param saveCouponRequest
* @return
*/
Result<Boolean> issueCoupon(SaveCouponRequest saveCouponRequest);
/**
* 查询优惠券
* @param queryCouponRequest
* @return
*/
Result<PageInfo<QueryCouponResponse>> queryCoupon(QueryCouponRequest queryCouponRequest);
/**
* 导出查询结果
* @param queryCouponRequest
* @return
*/
Result exportCouponListExcel(QueryCouponRequest queryCouponRequest);
}
4.业务逻辑实现
@Service
@Slf4j
public class CouponServiceImpl implements CouponService {
@Value(value = "${issue.coupon.url:http://10.172.48.7:40822//promotioncenter/coupon/pickup/smile}")
private String url;
@Autowired
IThemisCouponsService iThemisCouponsService;
@Value("${themis.coupon.id:775522539331077886}")
String couponId;
@Resource
ThemisCouponsMapper themisCouponsMapper;
@Resource
private ReportExportService reportExportService;
@Override
public Result<Boolean> issueCoupon(@RequestBody SaveCouponRequest saveCouponRequest) {
ThemisCoupons coupons = new ThemisCoupons();
coupons.setCouponStatus(1);
coupons.setBillCode(saveCouponRequest.getBillCode());
coupons.setCreateTime(new Date());
coupons.setMobilePhone(saveCouponRequest.getMobilePhone());
coupons.setOperatorId(saveCouponRequest.getLoginUserId());
coupons.setOperatorOrgid(saveCouponRequest.getLoginSiteId());
coupons.setRemarks(saveCouponRequest.getRemarks());
log.info("save coupons{}", coupons);
boolean result = iThemisCouponsService.save(coupons);
if (result) {
IssueCouponReq issueCouponReq = IssueCouponReq.builder()
.appKey("CustomerService")
.data(IssueCouponReq.IssueCouponData.builder()
.mobilePhone(saveCouponRequest.getMobilePhone())
.businessId("CustomerService ")
.businessSystemId("expressBusiness")
.couponList(Collections.singletonList(
IssueCouponReq.Coupons.builder()
.couponId(couponId)
.qty(1)
.build()
))
.build())
.operator(String.valueOf(saveCouponRequest.getLoginUserId()))
.operatorOrgId("")
.operatorOrgType("")
.build();
String req = JacksonUtil.object2Json(issueCouponReq);
log.info("issue coupon request param:{}", req);
try {
String doPost = OkHttp3Util.doPost(url, req);
log.info("issue coupon response param:{}", doPost);
IssueCouponResp resp = JSON.parseObject(doPost, IssueCouponResp.class);
if (resp != null && "200".equals(resp.getCode())) {
ThemisCoupons coup = new ThemisCoupons();
coup.setCouponId(resp.getData().get(0).getId());
iThemisCouponsService.update(coup, new UpdateWrapper<ThemisCoupons>().eq("id", coupons.getId()));
return Result.success();
} else {
LambdaUpdateWrapper<ThemisCoupons> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.eq(ThemisCoupons::getId, coupons.getId())
.set(ThemisCoupons::getCouponStatus, 0);
iThemisCouponsService.update(lambdaUpdateWrapper);
return Result.fail("优惠券发放失败");
}
} catch (Exception e) {
log.error("issue coupon failed", e);
LambdaUpdateWrapper<ThemisCoupons> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.eq(ThemisCoupons::getId, coupons.getId())
.set(ThemisCoupons::getCouponStatus, 0);
iThemisCouponsService.update(lambdaUpdateWrapper);
return Result.fail("优惠券发放失败");
}
} else {
return Result.fail("优惠券发放失败,请重试");
}
}
@Override
public Result<PageInfo<QueryCouponResponse>> queryCoupon(@RequestBody QueryCouponRequest queryCouponRequest) {
List<QueryCouponResponse> couponResponses = null;
Page<Object> page = PageHelper.startPage(queryCouponRequest.getPageNum(), queryCouponRequest.getPageSize());
couponResponses = themisCouponsMapper.queryCouponList(queryCouponRequest);
log.info("query list nums:{}", couponResponses.size());
for (QueryCouponResponse couponResponse:couponResponses){
couponResponse.setCouponStatusName(CoupouStatus.getValueByCode(couponResponse.getCouponStatus()));
}
PageInfo<QueryCouponResponse> pageInfo = new PageInfo<>();
pageInfo.setListInfo(couponResponses);
pageInfo.setTotal(page.getTotal());
return Result.success(pageInfo);
}
@Override
public Result exportCouponListExcel( QueryCouponRequest queryCouponRequest){
ExportTaskDto exportTaskDto = ExportTaskBuilder.create()
.userId(queryCouponRequest.getLoginUserId())
.userName(queryCouponRequest.getLoginUserName())
.taskSource("PC")
.taskBelong("配置管理-优惠券导出")
.fileName("优惠券导出")
.clazz(QueryCouponListExcel.class)
.condition(queryCouponRequest.toString())
.build();
return reportExportService.asyncExport(exportTaskDto, (pageNo, pageSize) -> queryCouponListExcels( queryCouponRequest));
}
public Page<QueryCouponListExcel> queryCouponListExcels(QueryCouponRequest request){
List<QueryCouponResponse> couponResponses = themisCouponsMapper.queryCouponList(request);
List<QueryCouponListExcel> excelList = new ArrayList<>();
for (QueryCouponResponse couponResponse : couponResponses){
QueryCouponListExcel queryCouponListExcel = convertToQueryWarnListExcel(couponResponse);
excelList.add(queryCouponListExcel);
}
Page<QueryCouponListExcel> queryCouponListExcel = new Page<>();
queryCouponListExcel.setTotal(couponResponses.size());
queryCouponListExcel.addAll(excelList);
return queryCouponListExcel;
}
public QueryCouponListExcel convertToQueryWarnListExcel(QueryCouponResponse queryCouponResponse){
QueryCouponListExcel queryCouponListExcel = new QueryCouponListExcel();
queryCouponListExcel.setMobilePhone(queryCouponResponse.getMobilePhone());
queryCouponListExcel.setCouponStatusName(CoupouStatus.getValueByCode(queryCouponResponse.getCouponStatus()));
queryCouponListExcel.setRemarks(queryCouponResponse.getRemarks());
queryCouponListExcel.setCreateTime(queryCouponResponse.getCreateTime());
queryCouponListExcel.setBillCode(queryCouponResponse.getBillCode());
queryCouponListExcel.setOperatorId(queryCouponResponse.getOperatorId());
return queryCouponListExcel;
}
}