| @@ -1,210 +0,0 @@ | |||
| package com.iformall.controller.basic; | |||
| import com.iformall.annotation.SystemControllerLog; | |||
| import com.iformall.common.Result; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.controller.base.BaseController; | |||
| import com.iformall.domain.po.BusinessCircleBase; | |||
| import com.iformall.domain.po.WxCouponOrder; | |||
| import com.iformall.domain.po.WxCreditHistory; | |||
| import com.iformall.domain.vo.WxCardSpendVo; | |||
| import com.iformall.enums.EnumShopStatus; | |||
| import com.iformall.service.*; | |||
| import io.swagger.annotations.ApiImplicitParam; | |||
| import io.swagger.annotations.ApiOperation; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.web.bind.annotation.*; | |||
| import java.util.Date; | |||
| import java.util.HashMap; | |||
| import java.util.Map; | |||
| /** | |||
| * @author | |||
| */ | |||
| @RestController | |||
| @RequestMapping("map") | |||
| public class WxMapController extends BaseController { | |||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||
| @Autowired | |||
| private WxShopService wxShopService; | |||
| @Autowired | |||
| private WxMerchantService wxMerchantService; | |||
| @Autowired | |||
| private WxRentContractService wxRentContractService; | |||
| @Autowired | |||
| private WxCouponOrderService wxCouponOrderService; | |||
| @Autowired | |||
| private WxCardSpendService wxCardSpendService; | |||
| @Autowired | |||
| private WxBusinessCircleOrderService wxBusinessCircleOrderService; | |||
| @Autowired | |||
| private AliBusinessCircleOrderService aliBusinessCircleOrderService; | |||
| @Autowired | |||
| private WxCreditHistoryService wxCreditHistoryService; | |||
| @ApiOperation("根据id查询接口") | |||
| @GetMapping("/findShopBySid") | |||
| @ApiImplicitParam(name = "sid", value = "id", dataType = "Long", paramType = "query", required = true) | |||
| @SystemControllerLog(description = "店铺管理-id查询") | |||
| public ResultData findShopBySid(String sid) { | |||
| logger.debug("[" + getIpAddr() + "] WxMapController::findShopBySid"); | |||
| Map<String, Object> resultObject = new HashMap<>(); | |||
| Map<String, Object> wxShopObject = wxShopService.detailBySid(getTenantInfo(), sid); | |||
| Map<String, Object> wxMerchantObject = new HashMap<>(); | |||
| Map<String, Object> wxRentContractObject = new HashMap<>(); | |||
| if(wxShopObject != null && !wxShopObject.isEmpty() | |||
| && EnumShopStatus.RENT.getCode().toString().equals(wxShopObject.get("status").toString())){ | |||
| //已出租 | |||
| long shopId = Long.parseLong(wxShopObject.get("id").toString()); | |||
| String shopNumber = wxShopObject.get("shopNumber").toString(); | |||
| wxMerchantObject = wxMerchantService.detailByShopId(getTenantInfo(), shopId); | |||
| if(wxMerchantObject != null && !wxMerchantObject.isEmpty()){ | |||
| long merchantId = Long.parseLong(wxMerchantObject.get("id").toString()); | |||
| wxRentContractObject = wxRentContractService.currentValidByMerchantId(getTenantInfo(),merchantId,shopNumber); | |||
| } | |||
| } | |||
| resultObject.put("wxShop",wxShopObject); | |||
| resultObject.put("wxMerchant",wxMerchantObject); | |||
| resultObject.put("wxRentContract",wxRentContractObject); | |||
| return new ResultData(Result.SUCCESS, "查询成功", resultObject); | |||
| } | |||
| @ApiOperation("根据id查询接口") | |||
| @GetMapping("/findStatisticsBySid") | |||
| @ApiImplicitParam(name = "sid", value = "sid", dataType = "Long", paramType = "query", required = true) | |||
| @SystemControllerLog(description = "店铺管理-id查询") | |||
| public ResultData findStatisticsBySid(String sid, Date startDate, Date endDate) { | |||
| logger.debug("[" + getIpAddr() + "] WxMapController::findStatisticsBySid"); | |||
| Map<String, Object> resultMap = new HashMap<>(); | |||
| Map<String, Object> wxShopObject = wxShopService.detailBySid(getTenantInfo(), sid); | |||
| if(wxShopObject != null && !wxShopObject.isEmpty() | |||
| && EnumShopStatus.RENT.getCode().toString().equals(wxShopObject.get("status").toString())){ | |||
| //已出租 | |||
| long shopId = Long.parseLong(wxShopObject.get("id").toString()); | |||
| Map<String, Object> wxMerchantObject = wxMerchantService.detailByShopId(getTenantInfo(), shopId); | |||
| if(wxMerchantObject != null && !wxMerchantObject.isEmpty()){ | |||
| long merchantId = Long.parseLong(wxMerchantObject.get("id").toString()); | |||
| WxCouponOrder wxCouponOrder = new WxCouponOrder(); | |||
| wxCouponOrder.updateTenantInfo(getTenantInfo()); | |||
| wxCouponOrder.setMerchantId(merchantId); | |||
| wxCouponOrder.setStartTime(startDate); | |||
| wxCouponOrder.setEndTime(endDate); | |||
| wxCouponOrderService.statisticsWriteOff(wxCouponOrder,resultMap); | |||
| WxCardSpendVo wxCardSpend = new WxCardSpendVo(); | |||
| wxCardSpend.updateTenantInfo(getTenantInfo()); | |||
| wxCardSpend.setMerchantId(merchantId); | |||
| wxCardSpend.setStartdate(startDate); | |||
| wxCardSpend.setEnddate(endDate); | |||
| resultMap.put("sumRealPayment",wxCardSpendService.sumRealPayment(wxCardSpend)); | |||
| BusinessCircleBase businessCircle = new BusinessCircleBase(); | |||
| businessCircle.updateTenantInfo(getTenantInfo()); | |||
| businessCircle.setMerchantId(merchantId); | |||
| businessCircle.setStartTime(startDate); | |||
| businessCircle.setEndTime(endDate); | |||
| Integer wxCircleSumPayment = wxBusinessCircleOrderService.sumCirclePayment(businessCircle); | |||
| Integer aliCircleSumPayment = aliBusinessCircleOrderService.sumCirclePayment(businessCircle); | |||
| resultMap.put("sumCirclePayment",wxCircleSumPayment + aliCircleSumPayment); | |||
| WxCreditHistory wxCreditHistory = new WxCreditHistory(); | |||
| wxCreditHistory.setTenantId(getTenantInfo().getFinalTenantId()); | |||
| wxCreditHistory.setMerchantId(merchantId); | |||
| wxCreditHistory.setStartTime(startDate); | |||
| wxCreditHistory.setEndTime(endDate); | |||
| resultMap.put("sumCreditAmount",wxCreditHistoryService.getIncrementCreditAmount(wxCreditHistory)); | |||
| } | |||
| } | |||
| return new ResultData(Result.SUCCESS, "查询成功", resultMap); | |||
| } | |||
| @ApiOperation("根据id查询接口") | |||
| @GetMapping("/findShopById") | |||
| @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) | |||
| @SystemControllerLog(description = "店铺管理-id查询") | |||
| public ResultData findShopById(Long id) { | |||
| logger.debug("[" + getIpAddr() + "] WxMapController::findShopById"); | |||
| return new ResultData(Result.SUCCESS, "查询成功", wxShopService.detailById(this.getTenantInfo(),id)); | |||
| } | |||
| @ApiOperation("根据id查询接口") | |||
| @GetMapping("/findMerchantByShop") | |||
| @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) | |||
| @SystemControllerLog(description = "店铺管理-id查询") | |||
| public ResultData findMerchantByShop(Long shopId) { | |||
| logger.debug("[" + getIpAddr() + "] WxMapController::findMerchantByShop"); | |||
| return new ResultData(Result.SUCCESS, "查询成功", wxMerchantService.findMerchantByShop(shopId)); | |||
| } | |||
| @ApiOperation("根据id查询接口") | |||
| @GetMapping("/findRentByShop") | |||
| @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) | |||
| @SystemControllerLog(description = "店铺管理-id查询") | |||
| public ResultData findRentByShop(Long shopId) { | |||
| logger.debug("[" + getIpAddr() + "] WxMapController::findRentByShop"); | |||
| return new ResultData(Result.SUCCESS, "查询成功", wxRentContractService.findRentByShop(shopId)); | |||
| } | |||
| @ApiOperation("根据id查询接口") | |||
| @GetMapping("/findStatisticsByShop") | |||
| @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) | |||
| @SystemControllerLog(description = "店铺管理-id查询") | |||
| public ResultData findStatisticsByShop(Long shopId, Date startDate, Date endDate) { | |||
| logger.debug("[" + getIpAddr() + "] WxMapController::findStatisticsByShop"); | |||
| Map<String, Object> resultMap = new HashMap<>(); | |||
| Map<String, Object> merchantByShop = wxMerchantService.findMerchantByShop(shopId); | |||
| if(merchantByShop != null && merchantByShop.get("id") != null){ | |||
| String tenantId = merchantByShop.get("tenant_id").toString(); | |||
| String parentTenantId = ""; | |||
| if(merchantByShop.get("parent_tenant_id") != null){ | |||
| parentTenantId = merchantByShop.get("parent_tenant_id").toString(); | |||
| } | |||
| Long merchantId = Long.parseLong(merchantByShop.get("id").toString()); | |||
| WxCouponOrder wxCouponOrder = new WxCouponOrder(); | |||
| wxCouponOrder.updateTenantInfo(getTenantInfo()); | |||
| wxCouponOrder.setMerchantId(merchantId); | |||
| wxCouponOrder.setStartTime(startDate); | |||
| wxCouponOrder.setEndTime(endDate); | |||
| wxCouponOrderService.statisticsWriteOff(wxCouponOrder,resultMap); | |||
| WxCardSpendVo wxCardSpend = new WxCardSpendVo(); | |||
| wxCardSpend.updateTenantInfo(getTenantInfo()); | |||
| wxCardSpend.setMerchantId(merchantId); | |||
| wxCardSpend.setStartdate(startDate); | |||
| wxCardSpend.setEnddate(endDate); | |||
| resultMap.put("sumRealPayment",wxCardSpendService.sumRealPayment(wxCardSpend)); | |||
| BusinessCircleBase businessCircle = new BusinessCircleBase(); | |||
| businessCircle.updateTenantInfo(getTenantInfo()); | |||
| businessCircle.setMerchantId(merchantId); | |||
| businessCircle.setStartTime(startDate); | |||
| businessCircle.setEndTime(endDate); | |||
| Integer wxCircleSumPayment = wxBusinessCircleOrderService.sumCirclePayment(businessCircle); | |||
| Integer aliCircleSumPayment = aliBusinessCircleOrderService.sumCirclePayment(businessCircle); | |||
| resultMap.put("sumCirclePayment",wxCircleSumPayment + aliCircleSumPayment); | |||
| WxCreditHistory wxCreditHistory = new WxCreditHistory(); | |||
| wxCreditHistory.setTenantId(getTenantInfo().getFinalTenantId()); | |||
| wxCreditHistory.setMerchantId(merchantId); | |||
| wxCreditHistory.setStartTime(startDate); | |||
| wxCreditHistory.setEndTime(endDate); | |||
| resultMap.put("sumCreditAmount",wxCreditHistoryService.getIncrementCreditAmount(wxCreditHistory)); | |||
| } | |||
| return new ResultData(Result.SUCCESS, "查询成功", resultMap); | |||
| } | |||
| } | |||
| @@ -1,113 +0,0 @@ | |||
| package com.iformall.controller.market; | |||
| import com.github.pagehelper.PageInfo; | |||
| import com.iformall.annotation.SystemControllerLog; | |||
| import com.iformall.common.ErrorCode; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.controller.base.BaseController; | |||
| import com.iformall.domain.po.AliBusinessCircleOrder; | |||
| import com.iformall.domain.po.WxBusinessCircleOrder; | |||
| import com.iformall.domain.po.base.BaseEntity; | |||
| import com.iformall.service.AliBusinessCircleOrderService; | |||
| import com.iformall.utils.Constant; | |||
| import io.swagger.annotations.Api; | |||
| import io.swagger.annotations.ApiImplicitParam; | |||
| import io.swagger.annotations.ApiImplicitParams; | |||
| import io.swagger.annotations.ApiOperation; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.web.bind.annotation.GetMapping; | |||
| import org.springframework.web.bind.annotation.ModelAttribute; | |||
| import org.springframework.web.bind.annotation.RequestMapping; | |||
| import org.springframework.web.bind.annotation.RestController; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| import javax.servlet.http.HttpServletResponse; | |||
| import java.util.HashMap; | |||
| import java.util.Map; | |||
| @RestController | |||
| @RequestMapping("aliCircle") | |||
| @Api(description = "订单相关接口") | |||
| public class AliBusinessCircleOrderController extends BaseController { | |||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||
| @Autowired | |||
| private AliBusinessCircleOrderService aliBusinessCircleOrderService; | |||
| @ApiOperation("分页列表接口") | |||
| @GetMapping("list") | |||
| @ApiImplicitParams({ | |||
| @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), | |||
| @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true), | |||
| }) | |||
| @SystemControllerLog(description = "-列表") | |||
| public ResultData list(@ModelAttribute AliBusinessCircleOrder circleOrder, Integer pageNum, Integer pageSize) { | |||
| logger.debug("[" + getIpAddr() + "] AliBusinessCircleOrderController::list"); | |||
| if (null == circleOrder) { | |||
| circleOrder = new AliBusinessCircleOrder(); | |||
| } | |||
| circleOrder.updateTenantInfo(getTenantInfo()); | |||
| circleOrder.setSortColumns(BaseEntity.SortField.CreateTime_DESC,BaseEntity.SortField.Id_DESC); | |||
| final PageInfo<AliBusinessCircleOrder> page = aliBusinessCircleOrderService.listAsPage(circleOrder, pageNum, pageSize); | |||
| return new ResultData(page); | |||
| } | |||
| @ApiOperation("统计接口") | |||
| @GetMapping("statistics") | |||
| @ApiImplicitParams({ | |||
| @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), | |||
| @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true), | |||
| }) | |||
| @SystemControllerLog(description = "-统计") | |||
| public ResultData statistics(@ModelAttribute AliBusinessCircleOrder circleOrder) { | |||
| logger.debug("[" + getIpAddr() + "] AliBusinessCircleOrderController::statistics"); | |||
| if (null == circleOrder) { | |||
| circleOrder = new AliBusinessCircleOrder(); | |||
| } | |||
| circleOrder.updateTenantInfo(getTenantInfo()); | |||
| Integer sumPayAmount = aliBusinessCircleOrderService.sumCirclePayment(circleOrder); | |||
| Integer sumRefundAmount = aliBusinessCircleOrderService.sumCircleRefundAmount(circleOrder); | |||
| Map resultMap = new HashMap(); | |||
| resultMap.put("sumPayAmount",sumPayAmount); | |||
| resultMap.put("sumRefundAmount",sumRefundAmount); | |||
| return new ResultData(resultMap); | |||
| } | |||
| @ApiOperation("详情接口") | |||
| @GetMapping("detail") | |||
| @ApiImplicitParams({ | |||
| @ApiImplicitParam(name = "orderId", value = "订单id", dataType = "String", paramType = "query", required = true) | |||
| }) | |||
| public ResultData detail(String orderId) { | |||
| if (StringUtils.isBlank(orderId) || orderId.equalsIgnoreCase(Constant.UNDEFINED)) { | |||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | |||
| } | |||
| Long id; | |||
| try { | |||
| id = Long.valueOf(orderId); | |||
| } catch (NumberFormatException e) { | |||
| logger.error(e.getMessage()); | |||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL, "orderId: " + orderId + ", e: " + e.getMessage()); | |||
| } | |||
| AliBusinessCircleOrder order = aliBusinessCircleOrderService.detail(id,getTenantInfo()); | |||
| return new ResultData(order); | |||
| } | |||
| @GetMapping("exportData") | |||
| @SystemControllerLog(description = "券订单数据-导出数据") | |||
| public void exportData(@ModelAttribute AliBusinessCircleOrder circleOrder, HttpServletRequest request, HttpServletResponse response) { | |||
| logger.debug("[" + getIpAddr() + "] AliBusinessCircleOrderController::exportData"); | |||
| if (null == circleOrder) { | |||
| circleOrder = new AliBusinessCircleOrder(); | |||
| } | |||
| circleOrder.updateTenantInfo(getTenantInfo()); | |||
| circleOrder.setSortColumns(BaseEntity.SortField.CreateTime_DESC,BaseEntity.SortField.Id_DESC); | |||
| aliBusinessCircleOrderService.exportData(circleOrder, request, response); | |||
| } | |||
| } | |||
| @@ -1,109 +0,0 @@ | |||
| package com.iformall.controller.market; | |||
| import com.github.pagehelper.PageInfo; | |||
| import com.iformall.annotation.SystemControllerLog; | |||
| import com.iformall.common.ErrorCode; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.controller.base.BaseController; | |||
| import com.iformall.domain.po.*; | |||
| import com.iformall.domain.po.base.BaseEntity; | |||
| import com.iformall.service.*; | |||
| import com.iformall.utils.Constant; | |||
| import io.swagger.annotations.Api; | |||
| import io.swagger.annotations.ApiImplicitParam; | |||
| import io.swagger.annotations.ApiImplicitParams; | |||
| import io.swagger.annotations.ApiOperation; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.web.bind.annotation.*; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| import javax.servlet.http.HttpServletResponse; | |||
| import java.util.HashMap; | |||
| import java.util.Map; | |||
| @RestController | |||
| @RequestMapping("wxCircle") | |||
| @Api(description = "订单相关接口") | |||
| public class WxBusinessCircleOrderController extends BaseController { | |||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||
| @Autowired | |||
| private WxBusinessCircleOrderService wxBusinessCircleOrderService; | |||
| @ApiOperation("分页列表接口") | |||
| @GetMapping("list") | |||
| @ApiImplicitParams({ | |||
| @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), | |||
| @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true), | |||
| }) | |||
| @SystemControllerLog(description = "-列表") | |||
| public ResultData list(@ModelAttribute WxBusinessCircleOrder circleOrder, Integer pageNum, Integer pageSize) { | |||
| logger.debug("[" + getIpAddr() + "] WxBusinessCircleOrderController::list"); | |||
| if (null == circleOrder) { | |||
| circleOrder = new WxBusinessCircleOrder(); | |||
| } | |||
| circleOrder.updateTenantInfo(getTenantInfo()); | |||
| circleOrder.setSortColumns(BaseEntity.SortField.CreateTime_DESC,BaseEntity.SortField.Id_DESC); | |||
| final PageInfo<WxBusinessCircleOrder> page = wxBusinessCircleOrderService.listAsPage(circleOrder, pageNum, pageSize); | |||
| return new ResultData(page); | |||
| } | |||
| @ApiOperation("统计接口") | |||
| @GetMapping("statistics") | |||
| @ApiImplicitParams({ | |||
| @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), | |||
| @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true), | |||
| }) | |||
| @SystemControllerLog(description = "-统计") | |||
| public ResultData statistics(@ModelAttribute WxBusinessCircleOrder circleOrder) { | |||
| logger.debug("[" + getIpAddr() + "] AliBusinessCircleOrderController::statistics"); | |||
| if (null == circleOrder) { | |||
| circleOrder = new WxBusinessCircleOrder(); | |||
| } | |||
| circleOrder.updateTenantInfo(getTenantInfo()); | |||
| Integer sumPayAmount = wxBusinessCircleOrderService.sumCirclePayment(circleOrder); | |||
| Integer sumRefundAmount = wxBusinessCircleOrderService.sumCircleRefundAmount(circleOrder); | |||
| Map resultMap = new HashMap(); | |||
| resultMap.put("sumPayAmount",sumPayAmount); | |||
| resultMap.put("sumRefundAmount",sumRefundAmount); | |||
| return new ResultData(resultMap); | |||
| } | |||
| @ApiOperation("详情接口") | |||
| @GetMapping("detail") | |||
| @ApiImplicitParams({ | |||
| @ApiImplicitParam(name = "orderId", value = "订单id", dataType = "String", paramType = "query", required = true) | |||
| }) | |||
| public ResultData detail(String orderId) { | |||
| if (StringUtils.isBlank(orderId) || orderId.equalsIgnoreCase(Constant.UNDEFINED)) { | |||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | |||
| } | |||
| Long id; | |||
| try { | |||
| id = Long.valueOf(orderId); | |||
| } catch (NumberFormatException e) { | |||
| logger.error(e.getMessage()); | |||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL, "orderId: " + orderId + ", e: " + e.getMessage()); | |||
| } | |||
| WxBusinessCircleOrder order = wxBusinessCircleOrderService.detail(id,getTenantInfo()); | |||
| return new ResultData(order); | |||
| } | |||
| @GetMapping("exportData") | |||
| @SystemControllerLog(description = "券订单数据-导出数据") | |||
| public void exportData(@ModelAttribute WxBusinessCircleOrder circleOrder, HttpServletRequest request, HttpServletResponse response) { | |||
| logger.debug("[" + getIpAddr() + "] WxBusinessCircleOrderController::exportData"); | |||
| if (null == circleOrder) { | |||
| circleOrder = new WxBusinessCircleOrder(); | |||
| } | |||
| circleOrder.updateTenantInfo(getTenantInfo()); | |||
| circleOrder.setSortColumns(BaseEntity.SortField.CreateTime_DESC,BaseEntity.SortField.Id_DESC); | |||
| wxBusinessCircleOrderService.exportData(circleOrder, request, response); | |||
| } | |||
| } | |||
| @@ -6,8 +6,6 @@ import com.iformall.common.ErrorCode; | |||
| import com.iformall.common.Result; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.controller.base.BaseController; | |||
| import com.iformall.domain.po.AliBusinessCircleOrder; | |||
| import com.iformall.domain.po.WxBusinessCircleOrder; | |||
| import com.iformall.domain.po.WxCoupon; | |||
| import com.iformall.domain.po.WxCouponChannel; | |||
| import com.iformall.domain.po.WxPressBatch; | |||
| @@ -19,8 +17,6 @@ import com.iformall.enums.EnumCouponChannelType; | |||
| import com.iformall.enums.EnumCouponContentType; | |||
| import com.iformall.enums.EnumCouponSourceType; | |||
| import com.iformall.enums.EnumCouponType; | |||
| import com.iformall.enums.EnumRentContractAppStatus; | |||
| import com.iformall.service.AliBusinessCircleOrderService; | |||
| import com.iformall.service.WxCouponChannelService; | |||
| import com.iformall.service.WxCouponService; | |||
| import com.iformall.service.WxPressBatchService; | |||
| @@ -1,126 +0,0 @@ | |||
| package com.iformall.controller.market; | |||
| import com.github.pagehelper.PageInfo; | |||
| import com.iformall.annotation.SystemControllerLog; | |||
| import com.iformall.common.ErrorCode; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.controller.base.BaseController; | |||
| import com.iformall.domain.po.WxThirdPartyOrders; | |||
| import com.iformall.domain.po.base.BaseEntity; | |||
| import com.iformall.enums.EnumThirdOrderType; | |||
| import com.iformall.service.WxThirdPartyOrdersService; | |||
| import com.iformall.utils.Constant; | |||
| import io.swagger.annotations.Api; | |||
| import io.swagger.annotations.ApiImplicitParam; | |||
| import io.swagger.annotations.ApiImplicitParams; | |||
| import io.swagger.annotations.ApiOperation; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.web.bind.annotation.GetMapping; | |||
| import org.springframework.web.bind.annotation.ModelAttribute; | |||
| import org.springframework.web.bind.annotation.RequestMapping; | |||
| import org.springframework.web.bind.annotation.RestController; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| import javax.servlet.http.HttpServletResponse; | |||
| import java.util.HashMap; | |||
| import java.util.Map; | |||
| @RestController | |||
| @RequestMapping("thirdCircle") | |||
| @Api(description = "订单相关接口") | |||
| public class WxThirdPartyOrdersController extends BaseController { | |||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||
| @Autowired | |||
| private WxThirdPartyOrdersService wxThirdPartyOrdersOrderService; | |||
| @ApiOperation("分页列表接口") | |||
| @GetMapping("list") | |||
| @ApiImplicitParams({ | |||
| @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), | |||
| @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true), | |||
| }) | |||
| @SystemControllerLog(description = "-列表") | |||
| public ResultData list(@ModelAttribute WxThirdPartyOrders circleOrder, Integer pageNum, Integer pageSize) { | |||
| logger.debug("[" + getIpAddr() + "] WxThirdPartyOrdersController::list"); | |||
| if (null == circleOrder) { | |||
| circleOrder = new WxThirdPartyOrders(); | |||
| } | |||
| circleOrder.updateTenantInfo(getTenantInfo()); | |||
| circleOrder.setSortColumns(BaseEntity.SortField.CreateTime_DESC,BaseEntity.SortField.Id_DESC); | |||
| final PageInfo<WxThirdPartyOrders> page = wxThirdPartyOrdersOrderService.listAsPage(circleOrder, pageNum, pageSize); | |||
| return new ResultData(page); | |||
| } | |||
| @ApiOperation("统计接口") | |||
| @GetMapping("statistics") | |||
| @ApiImplicitParams({ | |||
| @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), | |||
| @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true), | |||
| }) | |||
| @SystemControllerLog(description = "-统计") | |||
| public ResultData statistics(@ModelAttribute WxThirdPartyOrders circleOrder) { | |||
| logger.debug("[" + getIpAddr() + "] AliBusinessCircleOrderController::statistics"); | |||
| if (null == circleOrder) { | |||
| circleOrder = new WxThirdPartyOrders(); | |||
| } | |||
| circleOrder.updateTenantInfo(getTenantInfo()); | |||
| Integer sumPayAmount = wxThirdPartyOrdersOrderService.sumCirclePayment(circleOrder); | |||
| Integer sumRefundAmount = wxThirdPartyOrdersOrderService.sumCircleRefundAmount(circleOrder); | |||
| Map resultMap = new HashMap(); | |||
| resultMap.put("sumPayAmount",sumPayAmount); | |||
| resultMap.put("sumRefundAmount",sumRefundAmount); | |||
| return new ResultData(resultMap); | |||
| } | |||
| @ApiOperation("详情接口") | |||
| @GetMapping("detail") | |||
| @ApiImplicitParams({ | |||
| @ApiImplicitParam(name = "orderId", value = "订单id", dataType = "String", paramType = "query", required = true) | |||
| }) | |||
| public ResultData detail(String orderId) { | |||
| if (StringUtils.isBlank(orderId) || orderId.equalsIgnoreCase(Constant.UNDEFINED)) { | |||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | |||
| } | |||
| Long id; | |||
| try { | |||
| id = Long.valueOf(orderId); | |||
| } catch (NumberFormatException e) { | |||
| logger.error(e.getMessage()); | |||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL, "orderId: " + orderId + ", e: " + e.getMessage()); | |||
| } | |||
| WxThirdPartyOrders order = wxThirdPartyOrdersOrderService.detail(id,getTenantInfo()); | |||
| return new ResultData(order); | |||
| } | |||
| @GetMapping("exportData") | |||
| @SystemControllerLog(description = "券订单数据-导出数据") | |||
| public void exportData(@ModelAttribute WxThirdPartyOrders circleOrder, HttpServletRequest request, HttpServletResponse response) { | |||
| logger.debug("[" + getIpAddr() + "] WxThirdPartyOrdersController::exportData"); | |||
| if (null == circleOrder) { | |||
| circleOrder = new WxThirdPartyOrders(); | |||
| } | |||
| circleOrder.updateTenantInfo(getTenantInfo()); | |||
| circleOrder.setSortColumns(BaseEntity.SortField.CreateTime_DESC,BaseEntity.SortField.Id_DESC); | |||
| circleOrder.setSourceType(EnumThirdOrderType.RMB_PAY.getCode()); | |||
| wxThirdPartyOrdersOrderService.exportData(circleOrder, request, response); | |||
| } | |||
| @GetMapping("exportDataVo") | |||
| @SystemControllerLog(description = "券订单数据-导出数据") | |||
| public void exportDataVo(@ModelAttribute WxThirdPartyOrders circleOrder, HttpServletRequest request, HttpServletResponse response) { | |||
| logger.debug("[" + getIpAddr() + "] WxThirdPartyOrdersController::exportDataVo"); | |||
| if (null == circleOrder) { | |||
| circleOrder = new WxThirdPartyOrders(); | |||
| } | |||
| circleOrder.updateTenantInfo(getTenantInfo()); | |||
| circleOrder.setSortColumns(BaseEntity.SortField.CreateTime_DESC,BaseEntity.SortField.Id_DESC); | |||
| circleOrder.setSourceType(EnumThirdOrderType.CREDIT_PAY.getCode()); | |||
| wxThirdPartyOrdersOrderService.exportDataVo(circleOrder, request, response); | |||
| } | |||
| } | |||
| @@ -138,27 +138,6 @@ public class BaseMyBatisConfiguration { | |||
| wxCUserFromSharding.setRule(EnumShardingRule.HASH.getCode()); | |||
| shardingList.add(wxCUserFromSharding); | |||
| ShardingSphere wxBusinessCircleOrderSharding = new ShardingSphere(); | |||
| wxBusinessCircleOrderSharding.setColumn("tenant_id"); | |||
| wxBusinessCircleOrderSharding.setTableName("wx_business_circle_order"); | |||
| wxBusinessCircleOrderSharding.setCount(100); | |||
| wxBusinessCircleOrderSharding.setRule(EnumShardingRule.HASH.getCode()); | |||
| shardingList.add(wxBusinessCircleOrderSharding); | |||
| ShardingSphere aliBusinessCircleOrderSharding = new ShardingSphere(); | |||
| aliBusinessCircleOrderSharding.setColumn("tenant_id"); | |||
| aliBusinessCircleOrderSharding.setTableName("ali_business_circle_order"); | |||
| aliBusinessCircleOrderSharding.setCount(100); | |||
| aliBusinessCircleOrderSharding.setRule(EnumShardingRule.HASH.getCode()); | |||
| shardingList.add(aliBusinessCircleOrderSharding); | |||
| ShardingSphere wxThirdPartyOrdersSharding = new ShardingSphere(); | |||
| wxThirdPartyOrdersSharding.setColumn("tenant_id"); | |||
| wxThirdPartyOrdersSharding.setTableName("wx_third_party_orders"); | |||
| wxThirdPartyOrdersSharding.setCount(100); | |||
| wxThirdPartyOrdersSharding.setRule(EnumShardingRule.HASH.getCode()); | |||
| shardingList.add(wxThirdPartyOrdersSharding); | |||
| ShardingSphere wxOrderSharding = new ShardingSphere(); | |||
| wxOrderSharding.setColumn("tenant_id"); | |||
| wxOrderSharding.setTableName("wx_order"); | |||
| @@ -1,28 +0,0 @@ | |||
| package com.iformall.domain.po; | |||
| import cn.afterturn.easypoi.excel.annotation.Excel; | |||
| import com.baomidou.mybatisplus.annotation.TableName; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| import lombok.ToString; | |||
| @TableName(value = "ali_business_circle_order") | |||
| @Data | |||
| @ToString(callSuper = true) | |||
| @EqualsAndHashCode(callSuper = true) | |||
| public class AliBusinessCircleOrder extends BusinessCircleBase { | |||
| @io.swagger.annotations.ApiModelProperty(value="发生交易的商圈(非商圈组)的商圈唯一标识号",name="mallId") | |||
| private String mallId; | |||
| @io.swagger.annotations.ApiModelProperty(value="发生交易的商圈(非商圈组)的名称",name="mallName") | |||
| private String mallName; | |||
| @Excel(name = "门店编码", width = 20, orderNum = "1") | |||
| @io.swagger.annotations.ApiModelProperty(value="门店编号,商户侧系统内编号",name="mallStoreId") | |||
| private String mallStoreId; | |||
| @io.swagger.annotations.ApiModelProperty(value="支付宝用户Id",name="buyerId") | |||
| private String buyerId; | |||
| } | |||
| @@ -1,141 +0,0 @@ | |||
| package com.iformall.domain.po; | |||
| import cn.afterturn.easypoi.excel.annotation.Excel; | |||
| import com.baomidou.mybatisplus.annotation.TableField; | |||
| import com.baomidou.mybatisplus.annotation.TableName; | |||
| import com.iformall.domain.po.base.TenantEntity; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| import lombok.ToString; | |||
| import java.math.BigDecimal; | |||
| import java.util.Date; | |||
| @Data | |||
| @ToString(callSuper = true) | |||
| @EqualsAndHashCode(callSuper = true) | |||
| public class BusinessCircleBase extends TenantEntity { | |||
| protected Long id; | |||
| @io.swagger.annotations.ApiModelProperty(value="商圈支付结果通知Id",name="noticeId") | |||
| private String noticeId; | |||
| @io.swagger.annotations.ApiModelProperty(value="商圈支付结果通知创建时间",name="noticeCreateTime") | |||
| private Date noticeCreateTime; | |||
| @io.swagger.annotations.ApiModelProperty(value="商圈支付结果通知类型:MALL_TRANSACTION.SUCCESS",name="noticeEventType") | |||
| private String noticeEventType; | |||
| @Excel(name = "通知时间", width = 20, orderNum = "12") | |||
| @io.swagger.annotations.ApiModelProperty(value="商圈支付结果通知回调摘要",name="summary") | |||
| private String summary; | |||
| @Excel(name = "交易时间", width = 20, orderNum = "4", format = "yyyy-MM-dd HH:mm:ss") | |||
| @io.swagger.annotations.ApiModelProperty(value="交易完成时间",name="timeEnd") | |||
| private Date timeEnd; | |||
| @io.swagger.annotations.ApiModelProperty(value="用户实际消费金额,单位(分)",name="amount") | |||
| private Integer amount; | |||
| @TableField(exist = false) | |||
| @io.swagger.annotations.ApiModelProperty(value="用户实际消费金额,单位(元)",name="amountStr") | |||
| private String amountStr; | |||
| public String getAmountStr() { | |||
| return amount != null ? new BigDecimal(amount).divide(new BigDecimal(100)).toPlainString(): amountStr; | |||
| } | |||
| @io.swagger.annotations.ApiModelProperty(value="用户实际付款金额,单位(分)",name="payAmount") | |||
| private Integer payAmount; | |||
| @Excel(name = "付款金额(元)", width = 20, orderNum = "5") | |||
| @TableField(exist = false) | |||
| @io.swagger.annotations.ApiModelProperty(value="用户实际付款金额,单位(元)",name="payAmountStr") | |||
| private String payAmountStr; | |||
| public String getPayAmountStr() { | |||
| return payAmount != null ? new BigDecimal(payAmount).divide(new BigDecimal(100)).toPlainString(): payAmountStr; | |||
| } | |||
| @Excel(name = "支付订单号", width = 20, orderNum = "3") | |||
| @io.swagger.annotations.ApiModelProperty(value="支付订单号",name="transactionId") | |||
| private String transactionId; | |||
| @Excel(name = "通知时间", width = 20, orderNum = "11", format = "yyyy-MM-dd HH:mm:ss") | |||
| @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createTime") | |||
| private Date createTime; | |||
| @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateTime") | |||
| private Date updateTime; | |||
| @io.swagger.annotations.ApiModelProperty(value="门店Id,与第三方对齐",name="merchantId") | |||
| private Long merchantId; | |||
| @Excel(name = "门店名称", width = 20, orderNum = "2") | |||
| private String merchantName; | |||
| @TableField(exist = false) | |||
| private WxMerchant merchant; | |||
| @Excel(name = "会员ID", width = 20, orderNum = "9") | |||
| @TableField(exist = false) | |||
| private String userIdStr; | |||
| public String getUserIdStr(){ | |||
| return cUserId == null?"":Long.toString(cUserId); | |||
| } | |||
| @io.swagger.annotations.ApiModelProperty(value="c端会员id,与第三方对齐",name="cUserId") | |||
| private Long cUserId; | |||
| private String cUserNickName; | |||
| @Excel(name = "会员手机号", width = 20, orderNum = "10") | |||
| @TableField(exist = false) | |||
| private String userPhoneStr; | |||
| public String getUserPhoneStr(){ | |||
| return cUserPhone; | |||
| } | |||
| private String cUserPhone; | |||
| @TableField(exist = false) | |||
| private WxCUserBasicInfo basicInfo; | |||
| @Excel(name = "积分是否变动", width = 20, orderNum = "13", replace = {"是_1", "否_0"}) | |||
| @io.swagger.annotations.ApiModelProperty(value="是否获得积分(1:是,0:否)",name="earnPoints") | |||
| private Integer earnPoints; | |||
| @Excel(name = "积分变动值", width = 20, orderNum = "14") | |||
| @io.swagger.annotations.ApiModelProperty(value="订单更新积分值",name="increasedPoints") | |||
| private Integer increasedPoints; | |||
| @Excel(name = "积分更新时间", width = 20, orderNum = "15", format = "yyyy-MM-dd HH:mm:ss") | |||
| @io.swagger.annotations.ApiModelProperty(value="积分更新时间(新增)",name="pointsUpdateTime") | |||
| private Date pointsUpdateTime; | |||
| @Excel(name = "是否退款", width = 20, orderNum = "6", replace = {"退款订单_1", "付款订单_0"}) | |||
| @io.swagger.annotations.ApiModelProperty(value="是否退款(1:是,0:否)",name="isRefund") | |||
| private Integer isRefund; | |||
| @io.swagger.annotations.ApiModelProperty(value="正常订单状态(is_refund=0时)1:部分退款2:订单关闭",name="orderStatus") | |||
| private Integer orderStatus; | |||
| @Excel(name = "退款订单号", width = 20, orderNum = "7") | |||
| @io.swagger.annotations.ApiModelProperty(value="微信支付退款单号",name="refundId") | |||
| private String refundId; | |||
| @TableField(exist = false) | |||
| @io.swagger.annotations.ApiModelProperty(value="查询-开始时间",name="startdate") | |||
| private Date startTime; | |||
| @TableField(exist = false) | |||
| @io.swagger.annotations.ApiModelProperty(value="查询-结束时间",name="enddate") | |||
| private Date endTime; | |||
| @io.swagger.annotations.ApiModelProperty(value="用户退款金额,单位(分)",name="refundAmount") | |||
| private Integer refundAmount; | |||
| @Excel(name = "退款金额(元)", width = 20, orderNum = "8") | |||
| @TableField(exist = false) | |||
| @io.swagger.annotations.ApiModelProperty(value="用户退款金额,单位(元)",name="refundAmountStr") | |||
| private String refundAmountStr; | |||
| public String getRefundAmountStr() { | |||
| return refundAmount != null ? new BigDecimal(refundAmount).divide(new BigDecimal(100)).toPlainString(): refundAmountStr; | |||
| } | |||
| } | |||
| @@ -1,40 +0,0 @@ | |||
| package com.iformall.domain.po; | |||
| import cn.afterturn.easypoi.excel.annotation.Excel; | |||
| import com.baomidou.mybatisplus.annotation.TableName; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| import lombok.ToString; | |||
| @TableName(value = "wx_business_circle_order") | |||
| @Data | |||
| @ToString(callSuper = true) | |||
| @EqualsAndHashCode(callSuper = true) | |||
| public class WxBusinessCircleOrder extends BusinessCircleBase { | |||
| @io.swagger.annotations.ApiModelProperty(value="微信支付分配的商户号",name="wxMchid") | |||
| private String wxMchid; | |||
| @io.swagger.annotations.ApiModelProperty(value="商圈商户名称",name="wxMerchantName") | |||
| private String wxMerchantName; | |||
| @io.swagger.annotations.ApiModelProperty(value="门店名称,商圈在商圈小程序上圈店时填写的门店名称",name="wxShopName") | |||
| private String wxShopName; | |||
| @Excel(name = "门店编码", width = 20, orderNum = "1") | |||
| @io.swagger.annotations.ApiModelProperty(value="门店编号,商圈在商圈小程序上圈店时填写的门店编号,用于跟商圈自身已有的商户识别码对齐",name="wxShopNumber") | |||
| private String wxShopNumber; | |||
| @io.swagger.annotations.ApiModelProperty(value="小程序appid",name="appid") | |||
| private String appid; | |||
| @io.swagger.annotations.ApiModelProperty(value="openid",name="openid") | |||
| private String openid; | |||
| @io.swagger.annotations.ApiModelProperty(value="手动提交积分标记,自动提交时无该字段,用于区分用户手动申请后推送的积分",name="commitTag") | |||
| private String commitTag; | |||
| @io.swagger.annotations.ApiModelProperty(value="是否积分同步(1:是,0:否)",name="isPointsNotify") | |||
| private Integer isPointsNotify; | |||
| } | |||
| @@ -1,39 +0,0 @@ | |||
| package com.iformall.domain.po; | |||
| import cn.afterturn.easypoi.excel.annotation.Excel; | |||
| import com.baomidou.mybatisplus.annotation.TableField; | |||
| import com.baomidou.mybatisplus.annotation.TableName; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| import lombok.ToString; | |||
| @TableName(value = "wx_third_party_orders") | |||
| @Data | |||
| @ToString(callSuper = true) | |||
| @EqualsAndHashCode(callSuper = true) | |||
| public class WxThirdPartyOrders extends BusinessCircleBase { | |||
| @io.swagger.annotations.ApiModelProperty(value="来源(wx_third_party_api)",name="sourceAppId") | |||
| private String sourceAppId; | |||
| @TableField(exist = false) | |||
| @io.swagger.annotations.ApiModelProperty(value="来源(wx_third_party_api)",name="sourceAppName") | |||
| private String sourceAppName; | |||
| @io.swagger.annotations.ApiModelProperty(value="1:RMB订单;2:积分订单",name="sourceType") | |||
| private Integer sourceType; | |||
| @io.swagger.annotations.ApiModelProperty(value="门店名称",name="shopName") | |||
| private String shopName; | |||
| @Excel(name = "门店编码", width = 20, orderNum = "1") | |||
| @io.swagger.annotations.ApiModelProperty(value="门店编号",name="shopNumber") | |||
| private String shopNumber; | |||
| @io.swagger.annotations.ApiModelProperty(value="顾客手机号",name="userPhone") | |||
| private String userPhone; | |||
| @io.swagger.annotations.ApiModelProperty(value="顾客编号",name="userNumber") | |||
| private String userNumber; | |||
| } | |||
| @@ -1,20 +0,0 @@ | |||
| package com.iformall.domain.po.msg; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| import lombok.ToString; | |||
| /** | |||
| * | |||
| */ | |||
| @Data | |||
| @ToString(callSuper = true) | |||
| @EqualsAndHashCode(callSuper = true) | |||
| public class AfterBusinessCreditMsg extends BaseMsg { | |||
| private static final long serialVersionUID = -1l; | |||
| @io.swagger.annotations.ApiModelProperty(value="商圈订单ID",name="businessCircleOrderId") | |||
| private Long businessCircleOrderId; | |||
| } | |||
| @@ -1,32 +0,0 @@ | |||
| package com.iformall.domain.po.msg; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| import lombok.ToString; | |||
| @Data | |||
| @ToString(callSuper = true) | |||
| @EqualsAndHashCode(callSuper = true) | |||
| public class FmInsideThirdPartyOrdersMsg extends BaseMsg{ | |||
| private static final long serialVersionUID = 1L; | |||
| @io.swagger.annotations.ApiModelProperty(value="第三方交易状态",name="eventType") | |||
| private String eventType; | |||
| @io.swagger.annotations.ApiModelProperty(value="商圈订单Id",name="businessCircleOrderId") | |||
| private Long businessCircleOrderId; | |||
| @io.swagger.annotations.ApiModelProperty(value="门店Id",name="merchantId") | |||
| private Long merchantId; | |||
| @io.swagger.annotations.ApiModelProperty(value="c端会员id",name="cUserId") | |||
| private Long cUserId; | |||
| @io.swagger.annotations.ApiModelProperty(value="门店名称,商圈在商圈小程序上圈店时填写的门店名称",name="wxShopName") | |||
| private String wxShopName; | |||
| @io.swagger.annotations.ApiModelProperty(value="用户实际消费金额,单位(分)",name="amount") | |||
| private Integer amount; | |||
| } | |||
| @@ -1,162 +0,0 @@ | |||
| package com.iformall.domain.vo; | |||
| import cn.afterturn.easypoi.excel.annotation.Excel; | |||
| import com.baomidou.mybatisplus.annotation.TableField; | |||
| import com.baomidou.mybatisplus.annotation.TableName; | |||
| import com.iformall.domain.po.BusinessCircleBase; | |||
| import com.iformall.domain.po.WxCUserBasicInfo; | |||
| import com.iformall.domain.po.WxMerchant; | |||
| import com.iformall.domain.po.base.TenantEntity; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| import lombok.ToString; | |||
| import java.math.BigDecimal; | |||
| import java.util.Date; | |||
| @Data | |||
| @ToString(callSuper = true) | |||
| @EqualsAndHashCode(callSuper = true) | |||
| public class WxThirdPartyOrdersVo extends TenantEntity { | |||
| protected Long id; | |||
| @io.swagger.annotations.ApiModelProperty(value="商圈支付结果通知Id",name="noticeId") | |||
| private String noticeId; | |||
| @io.swagger.annotations.ApiModelProperty(value="商圈支付结果通知创建时间",name="noticeCreateTime") | |||
| private Date noticeCreateTime; | |||
| @io.swagger.annotations.ApiModelProperty(value="商圈支付结果通知类型:MALL_TRANSACTION.SUCCESS",name="noticeEventType") | |||
| private String noticeEventType; | |||
| @Excel(name = "摘要", width = 20, orderNum = "10") | |||
| @io.swagger.annotations.ApiModelProperty(value="商圈支付结果通知回调摘要",name="summary") | |||
| private String summary; | |||
| @Excel(name = "抵扣/退款时间", width = 20, orderNum = "6", format = "yyyy-MM-dd HH:mm:ss") | |||
| @io.swagger.annotations.ApiModelProperty(value="交易完成时间",name="timeEnd") | |||
| private Date timeEnd; | |||
| @io.swagger.annotations.ApiModelProperty(value="用户实际消费金额,单位(分)",name="amount") | |||
| private Integer amount; | |||
| @TableField(exist = false) | |||
| @io.swagger.annotations.ApiModelProperty(value="用户实际消费金额,单位(元)",name="amountStr") | |||
| private String amountStr; | |||
| public String getAmountStr() { | |||
| return amount != null ? new BigDecimal(amount).divide(new BigDecimal(100)).toPlainString(): amountStr; | |||
| } | |||
| @Excel(name = "积分数量", width = 20, orderNum = "7") | |||
| @io.swagger.annotations.ApiModelProperty(value="用户实际付款金额,单位(分)",name="payAmount") | |||
| private Integer payAmount; | |||
| @TableField(exist = false) | |||
| @io.swagger.annotations.ApiModelProperty(value="用户实际付款金额,单位(元)",name="payAmountStr") | |||
| private String payAmountStr; | |||
| public String getPayAmountStr() { | |||
| return payAmount != null ? new BigDecimal(payAmount).divide(new BigDecimal(100)).toPlainString(): payAmountStr; | |||
| } | |||
| @Excel(name = "付款订单编号", width = 20, orderNum = "3") | |||
| @io.swagger.annotations.ApiModelProperty(value="支付订单号",name="transactionId") | |||
| private String transactionId; | |||
| @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createTime") | |||
| private Date createTime; | |||
| @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateTime") | |||
| private Date updateTime; | |||
| @io.swagger.annotations.ApiModelProperty(value="门店Id,与第三方对齐",name="merchantId") | |||
| private Long merchantId; | |||
| @Excel(name = "门店名称", width = 20, orderNum = "2") | |||
| private String merchantName; | |||
| @TableField(exist = false) | |||
| private WxMerchant merchant; | |||
| @Excel(name = "会员ID", width = 20, orderNum = "8") | |||
| @TableField(exist = false) | |||
| private String userIdStr; | |||
| public String getUserIdStr(){ | |||
| return cUserId == null?"":Long.toString(cUserId); | |||
| } | |||
| @io.swagger.annotations.ApiModelProperty(value="c端会员id,与第三方对齐",name="cUserId") | |||
| private Long cUserId; | |||
| private String cUserNickName; | |||
| @Excel(name = "会员手机号", width = 20, orderNum = "9") | |||
| @TableField(exist = false) | |||
| private String userPhoneStr; | |||
| public String getUserPhoneStr(){ | |||
| return cUserPhone; | |||
| } | |||
| private String cUserPhone; | |||
| @TableField(exist = false) | |||
| private WxCUserBasicInfo basicInfo; | |||
| @io.swagger.annotations.ApiModelProperty(value="是否获得积分(1:是,0:否)",name="earnPoints") | |||
| private Integer earnPoints; | |||
| @io.swagger.annotations.ApiModelProperty(value="订单更新积分值",name="increasedPoints") | |||
| private Integer increasedPoints; | |||
| @io.swagger.annotations.ApiModelProperty(value="积分更新时间(新增)",name="increasedPoints") | |||
| private Date pointsUpdateTime; | |||
| @Excel(name = "是否退款", width = 20, orderNum = "4", replace = {"退款订单_1", "付款订单_0"}) | |||
| @io.swagger.annotations.ApiModelProperty(value="是否退款(1:是,0:否)",name="isRefund") | |||
| private Integer isRefund; | |||
| @io.swagger.annotations.ApiModelProperty(value="正常订单状态(is_refund=0时)1:部分退款2:订单关闭",name="orderStatus") | |||
| private Integer orderStatus; | |||
| @Excel(name = "退款订单编号", width = 20, orderNum = "5") | |||
| @io.swagger.annotations.ApiModelProperty(value="微信支付退款单号",name="refundId") | |||
| private String refundId; | |||
| @TableField(exist = false) | |||
| @io.swagger.annotations.ApiModelProperty(value="查询-开始时间",name="startdate") | |||
| private Date startTime; | |||
| @TableField(exist = false) | |||
| @io.swagger.annotations.ApiModelProperty(value="查询-结束时间",name="enddate") | |||
| private Date endTime; | |||
| @io.swagger.annotations.ApiModelProperty(value="用户退款金额,单位(分)",name="refundAmount") | |||
| private Integer refundAmount; | |||
| @TableField(exist = false) | |||
| @io.swagger.annotations.ApiModelProperty(value="用户退款金额,单位(元)",name="refundAmountStr") | |||
| private String refundAmountStr; | |||
| public String getRefundAmountStr() { | |||
| return refundAmount != null ? new BigDecimal(refundAmount).divide(new BigDecimal(100)).toPlainString(): refundAmountStr; | |||
| } | |||
| @io.swagger.annotations.ApiModelProperty(value="来源(wx_third_party_api)",name="sourceAppId") | |||
| private String sourceAppId; | |||
| @TableField(exist = false) | |||
| @io.swagger.annotations.ApiModelProperty(value="来源(wx_third_party_api)",name="sourceAppName") | |||
| private String sourceAppName; | |||
| @io.swagger.annotations.ApiModelProperty(value="1:RMB订单;2:积分订单",name="sourceType") | |||
| private Integer sourceType; | |||
| @io.swagger.annotations.ApiModelProperty(value="门店名称",name="shopName") | |||
| private String shopName; | |||
| @Excel(name = "门店编码", width = 20, orderNum = "1") | |||
| @io.swagger.annotations.ApiModelProperty(value="门店编号",name="shopNumber") | |||
| private String shopNumber; | |||
| @io.swagger.annotations.ApiModelProperty(value="顾客手机号",name="userPhone") | |||
| private String userPhone; | |||
| @io.swagger.annotations.ApiModelProperty(value="顾客编号",name="userNumber") | |||
| private String userNumber; | |||
| } | |||
| @@ -1,48 +0,0 @@ | |||
| package com.iformall.enums; | |||
| /** | |||
| * . | |||
| */ | |||
| public enum EnumBusinessCircleAuthorizeState { | |||
| //UNAUTHORIZED:未授权 | |||
| //AUTHORIZED:已授权 | |||
| //DEAUTHORIZED:已取消授权 | |||
| UNAUTHORIZED(0, "UNAUTHORIZED"), | |||
| AUTHORIZED(1, "AUTHORIZED"), | |||
| DEAUTHORIZED(2, "DEAUTHORIZED"), | |||
| ; | |||
| public static EnumBusinessCircleAuthorizeState getEnum(Integer code) { | |||
| for (EnumBusinessCircleAuthorizeState value : values()) { | |||
| if (value.getCode().equals(code)) { | |||
| return value; | |||
| } | |||
| } | |||
| return null; | |||
| } | |||
| public static EnumBusinessCircleAuthorizeState getEnum(String message) { | |||
| for (EnumBusinessCircleAuthorizeState value : values()) { | |||
| if (value.getMessage().equals(message)) { | |||
| return value; | |||
| } | |||
| } | |||
| return null; | |||
| } | |||
| private Integer code; | |||
| private String message; | |||
| EnumBusinessCircleAuthorizeState(Integer code, String message) { | |||
| this.code = code; | |||
| this.message = message; | |||
| } | |||
| public Integer getCode() { | |||
| return code; | |||
| } | |||
| public String getMessage() { | |||
| return message; | |||
| } | |||
| } | |||
| @@ -1,50 +0,0 @@ | |||
| package com.iformall.mapper; | |||
| import com.iformall.common.CommonMapper; | |||
| import com.iformall.domain.po.AliBusinessCircleOrder; | |||
| import com.iformall.domain.po.BusinessCircleBase; | |||
| import org.apache.ibatis.annotations.Param; | |||
| import java.util.Date; | |||
| import java.util.List; | |||
| public interface AliBusinessCircleOrderMapper extends CommonMapper<AliBusinessCircleOrder, Long> { | |||
| List<AliBusinessCircleOrder> findList(AliBusinessCircleOrder record); | |||
| AliBusinessCircleOrder getById(AliBusinessCircleOrder record); | |||
| AliBusinessCircleOrder getOrderByTransactionId(AliBusinessCircleOrder record); | |||
| AliBusinessCircleOrder getRefundOrderByRefundId(AliBusinessCircleOrder record); | |||
| List<AliBusinessCircleOrder> getRefundOrderByTransactionId(AliBusinessCircleOrder record); | |||
| /** | |||
| * 成功通知新建 | |||
| * @param record | |||
| */ | |||
| void insertNoticeOrder(AliBusinessCircleOrder record); | |||
| /** | |||
| * 加积分 | |||
| * @param record | |||
| */ | |||
| void updatePoints(AliBusinessCircleOrder record); | |||
| /** | |||
| * 退款 | |||
| * @param record | |||
| */ | |||
| void insertRefundNoticeOrder(AliBusinessCircleOrder record); | |||
| /** | |||
| * 修改正常订单状态 | |||
| * @param record | |||
| */ | |||
| void updateOrderStatus(AliBusinessCircleOrder record); | |||
| Integer sumCirclePayment(BusinessCircleBase record); | |||
| Integer sumCircleRefundAmount(BusinessCircleBase circleOrder); | |||
| } | |||
| @@ -1,12 +1,8 @@ | |||
| package com.iformall.mapper; | |||
| import com.iformall.common.CommonMapper; | |||
| import com.iformall.domain.po.AliBusinessCircleOrder; | |||
| import com.iformall.domain.po.sm.InviteCode; | |||
| import com.iformall.service.sm.InviteCodeService; | |||
| import org.apache.ibatis.annotations.Param; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Service; | |||
| public interface InviteCodeMapper extends CommonMapper<InviteCode, Long> { | |||
| @@ -1,53 +0,0 @@ | |||
| package com.iformall.mapper; | |||
| import com.iformall.common.CommonMapper; | |||
| import com.iformall.domain.po.BusinessCircleBase; | |||
| import com.iformall.domain.po.WxBusinessCircleOrder; | |||
| import org.apache.ibatis.annotations.Param; | |||
| import java.util.Date; | |||
| import java.util.List; | |||
| public interface WxBusinessCircleOrderMapper extends CommonMapper<WxBusinessCircleOrder, Long> { | |||
| List<WxBusinessCircleOrder> findList(WxBusinessCircleOrder record); | |||
| WxBusinessCircleOrder getById(WxBusinessCircleOrder record); | |||
| WxBusinessCircleOrder getOrderByTransactionId(WxBusinessCircleOrder record); | |||
| WxBusinessCircleOrder getRefundOrderByRefundId(WxBusinessCircleOrder record); | |||
| List<WxBusinessCircleOrder> getRefundOrderByTransactionId(WxBusinessCircleOrder record); | |||
| /** | |||
| * 成功通知新建 | |||
| * @param record | |||
| */ | |||
| void insertNoticeOrder(WxBusinessCircleOrder record); | |||
| /** | |||
| * 加积分 | |||
| * @param record | |||
| */ | |||
| void updatePoints(WxBusinessCircleOrder record); | |||
| /** | |||
| * 积分同步状态修改 | |||
| */ | |||
| void updateIsPointsNotify(WxBusinessCircleOrder record); | |||
| /** | |||
| * 退款通知新建 | |||
| * @param record | |||
| */ | |||
| void insertRefundNoticeOrder(WxBusinessCircleOrder record); | |||
| /** | |||
| * 修改正常订单状态 | |||
| * @param record | |||
| */ | |||
| void updateOrderStatus(WxBusinessCircleOrder record); | |||
| Integer sumCirclePayment(BusinessCircleBase record); | |||
| Integer sumCircleRefundAmount(BusinessCircleBase circleOrder); | |||
| } | |||
| @@ -1,51 +0,0 @@ | |||
| package com.iformall.mapper; | |||
| import com.iformall.common.CommonMapper; | |||
| import com.iformall.domain.po.BusinessCircleBase; | |||
| import com.iformall.domain.po.WxThirdPartyOrders; | |||
| import com.iformall.domain.vo.WxThirdPartyOrdersVo; | |||
| import java.util.List; | |||
| public interface WxThirdPartyOrdersMapper extends CommonMapper<WxThirdPartyOrders, Long> { | |||
| List<WxThirdPartyOrders> findList(WxThirdPartyOrders record); | |||
| List<WxThirdPartyOrdersVo> findListVo(WxThirdPartyOrders circleOrder); | |||
| WxThirdPartyOrders getById(WxThirdPartyOrders record); | |||
| WxThirdPartyOrders getOrderByTransactionId(WxThirdPartyOrders record); | |||
| WxThirdPartyOrders getRefundOrderByRefundId(WxThirdPartyOrders record); | |||
| List<WxThirdPartyOrders> getRefundOrderByTransactionId(WxThirdPartyOrders record); | |||
| /** | |||
| * 成功通知新建 | |||
| * @param record | |||
| */ | |||
| void insertNoticeOrder(WxThirdPartyOrders record); | |||
| /** | |||
| * 加积分 | |||
| * @param record | |||
| */ | |||
| void updatePoints(WxThirdPartyOrders record); | |||
| /** | |||
| * 退款 | |||
| * @param record | |||
| */ | |||
| void insertRefundNoticeOrder(WxThirdPartyOrders record); | |||
| /** | |||
| * 修改正常订单状态 | |||
| * @param record | |||
| */ | |||
| void updateOrderStatus(WxThirdPartyOrders record); | |||
| Integer sumCirclePayment(BusinessCircleBase record); | |||
| Integer sumCircleRefundAmount(BusinessCircleBase circleOrder); | |||
| } | |||
| @@ -1,60 +0,0 @@ | |||
| package com.iformall.service; | |||
| import com.github.pagehelper.PageInfo; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.domain.po.AliBusinessCircleOrder; | |||
| import com.iformall.domain.po.BusinessCircleBase; | |||
| import com.iformall.domain.po.WxMerchant; | |||
| import com.iformall.domain.po.base.TenantEntity; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| import javax.servlet.http.HttpServletResponse; | |||
| import java.util.List; | |||
| public interface AliBusinessCircleOrderService { | |||
| /** | |||
| * 根据实体查询分页列表 | |||
| * | |||
| * @param record | |||
| * @param pageIndex | |||
| * @param pageSize | |||
| * @return | |||
| */ | |||
| PageInfo<AliBusinessCircleOrder> listAsPage(AliBusinessCircleOrder record, Integer pageIndex, Integer pageSize); | |||
| /** | |||
| * id+tenantId | |||
| * @param | |||
| * @return | |||
| */ | |||
| AliBusinessCircleOrder getById(Long id, String tenantId); | |||
| AliBusinessCircleOrder detail(Long id, TenantEntity tenantInfo); | |||
| /** | |||
| * transactionId+tenantId | |||
| * @param | |||
| * @return | |||
| */ | |||
| AliBusinessCircleOrder getOrderByTransactionId(String transactionId, String tenantId); | |||
| AliBusinessCircleOrder getRefundOrderByRefundId(String refundId, String tenantId); | |||
| List<AliBusinessCircleOrder> getRefundOrderByTransactionId(String transactionId, String tenantId); | |||
| ResultData createOrder(WxMerchant wxMerchant, AliBusinessCircleOrder record); | |||
| ResultData insertRefundNoticeOrder(WxMerchant wxMerchant, AliBusinessCircleOrder record); | |||
| /** | |||
| * 积分 | |||
| * @param record | |||
| */ | |||
| void updatePoints(AliBusinessCircleOrder record); | |||
| void exportData(AliBusinessCircleOrder circleOrder, HttpServletRequest request, HttpServletResponse response); | |||
| Integer sumCirclePayment(BusinessCircleBase circleOrder); | |||
| Integer sumCircleRefundAmount(BusinessCircleBase circleOrder); | |||
| } | |||
| @@ -1,92 +0,0 @@ | |||
| package com.iformall.service; | |||
| import com.github.pagehelper.PageInfo; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.domain.po.BusinessCircleBase; | |||
| import com.iformall.domain.po.WxBusinessCircleOrder; | |||
| import com.iformall.domain.po.base.TenantEntity; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| import javax.servlet.http.HttpServletResponse; | |||
| import java.util.Date; | |||
| import java.util.List; | |||
| public interface WxBusinessCircleOrderService { | |||
| /** | |||
| * 根据实体查询分页列表 | |||
| * | |||
| * @param record | |||
| * @param pageIndex | |||
| * @param pageSize | |||
| * @return | |||
| */ | |||
| PageInfo<WxBusinessCircleOrder> listAsPage(WxBusinessCircleOrder record, Integer pageIndex, Integer pageSize); | |||
| /** | |||
| * id+tenantId | |||
| * @param | |||
| * @return | |||
| */ | |||
| WxBusinessCircleOrder getById(Long id, String tenantId); | |||
| WxBusinessCircleOrder detail(Long id, TenantEntity tenantInfo); | |||
| /** | |||
| * transactionId+tenantId | |||
| * @param | |||
| * @return | |||
| */ | |||
| WxBusinessCircleOrder getOrderByTransactionId(String transactionId, String tenantId); | |||
| WxBusinessCircleOrder getRefundOrderByRefundId(String refundId, String tenantId); | |||
| List<WxBusinessCircleOrder> getRefundOrderByTransactionId(String transactionId, String tenantId); | |||
| ResultData createOrder(WxBusinessCircleOrder record); | |||
| ResultData insertRefundNoticeOrder(WxBusinessCircleOrder record); | |||
| /** | |||
| * 更新积分 | |||
| * @param record | |||
| */ | |||
| void updatePoints(WxBusinessCircleOrder record); | |||
| /** | |||
| * 同步积分状态 | |||
| * @param record | |||
| */ | |||
| void notifyPoints(WxBusinessCircleOrder record); | |||
| /** | |||
| * 积分同步状态修改 | |||
| */ | |||
| void updateIsPointsNotify(WxBusinessCircleOrder record); | |||
| void sendsyncNotifyPointsMsg(TenantEntity tenantEntity, Long businessCircleOrderId); | |||
| void exportData(WxBusinessCircleOrder circleOrder, HttpServletRequest request, HttpServletResponse response); | |||
| Integer sumCirclePayment(BusinessCircleBase circleOrder); | |||
| Integer sumCircleRefundAmount(BusinessCircleBase circleOrder); | |||
| /** | |||
| * 同步授权快速积分 | |||
| */ | |||
| ResultData syncauthorizeState(TenantEntity tenantEntity,String openid); | |||
| /** | |||
| * 查询待积分状态 | |||
| */ | |||
| ResultData getPointsCommitStatus(TenantEntity tenantEntity,String openId); | |||
| /** | |||
| * 商圈同步停车状态 | |||
| * state | |||
| * IN:入场,用户开车进入商圈 | |||
| * OUT:离场,用户开车离开商圈 | |||
| */ | |||
| ResultData syncParkings(TenantEntity tenantEntity,String openId,String plate_number,String state,Date time); | |||
| void sendSyncParkingsMsg(TenantEntity tenantEntity,Long carCmdLogId); | |||
| } | |||
| @@ -1,50 +0,0 @@ | |||
| package com.iformall.service; | |||
| import com.github.pagehelper.PageInfo; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.domain.po.WxMemberCard; | |||
| import com.iformall.domain.po.base.TenantEntity; | |||
| public interface WxMemberCardService { | |||
| /** | |||
| * 根据实体查询分页列表 | |||
| * | |||
| * @param record | |||
| * @param pageIndex | |||
| * @param pageSize | |||
| * @return | |||
| */ | |||
| PageInfo<WxMemberCard> listAsPage(WxMemberCard record, Integer pageIndex, Integer pageSize); | |||
| ResultData saveorupdate(WxMemberCard record); | |||
| ResultData saveorupdateByCode(WxMemberCard record); | |||
| ResultData delUserCardStatusByCode(WxMemberCard record); | |||
| /** | |||
| * 同步会员卡卡信息 | |||
| */ | |||
| ResultData syncMemberCard(TenantEntity tenantEntity,String card_id,String code); | |||
| void sendSyncMemberCardMsg(TenantEntity tenantEntity,String card_id,String code); | |||
| /** | |||
| * 同步会员卡等级 | |||
| * need_inform_level 是否发送等级变更通知 | |||
| */ | |||
| ResultData syncMemberCardLevel(TenantEntity tenantEntity,String card_id,String code,String markid, | |||
| String level,Boolean need_inform_level); | |||
| void sendsyncMemberCardLevelMsg(TenantEntity tenantEntity,Long baseUserId,Long scoreHistoryId); | |||
| /** | |||
| * 更新会员卡积分 | |||
| */ | |||
| ResultData syncMemberCardBonus(TenantEntity tenantEntity,String card_id,String code,String markid, | |||
| int before_bonus_value,int bonus_value,Boolean need_inform_bonus); | |||
| void sendsyncMemberCardBonusMsg(TenantEntity tenantEntity,Long cuserId,Long baseUserId,Long creditHistoryId); | |||
| } | |||
| @@ -1,74 +0,0 @@ | |||
| package com.iformall.service; | |||
| import com.github.pagehelper.PageInfo; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.domain.po.BusinessCircleBase; | |||
| import com.iformall.domain.po.WxThirdPartyOrders; | |||
| import com.iformall.domain.po.base.TenantEntity; | |||
| import com.iformall.enums.EnumThirdOrderType; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| import javax.servlet.http.HttpServletResponse; | |||
| import java.util.List; | |||
| public interface WxThirdPartyOrdersService { | |||
| /** | |||
| * 根据实体查询分页列表 | |||
| * | |||
| * @param record | |||
| * @param pageIndex | |||
| * @param pageSize | |||
| * @return | |||
| */ | |||
| PageInfo<WxThirdPartyOrders> listAsPage(WxThirdPartyOrders record, Integer pageIndex, Integer pageSize); | |||
| /** | |||
| * id+tenantId | |||
| * @param | |||
| * @return | |||
| */ | |||
| WxThirdPartyOrders getById(Long id, String tenantId); | |||
| WxThirdPartyOrders detail(Long id, TenantEntity tenantInfo); | |||
| /** | |||
| * transactionId+tenantId | |||
| * @param | |||
| * @return | |||
| */ | |||
| WxThirdPartyOrders getOrderByTransactionId(EnumThirdOrderType orderType, String transactionId, String tenantId); | |||
| WxThirdPartyOrders getRefundOrderByRefundId(EnumThirdOrderType orderType,String refundId, String tenantId); | |||
| List<WxThirdPartyOrders> getRefundOrderByTransactionId(EnumThirdOrderType orderType, String transactionId, String tenantId); | |||
| ResultData createOrder(WxThirdPartyOrders record); | |||
| ResultData insertRefundNoticeOrder(WxThirdPartyOrders record); | |||
| /** | |||
| * 积分 | |||
| * @param record | |||
| */ | |||
| void updatePoints(WxThirdPartyOrders record); | |||
| /** | |||
| * 积分抵扣 | |||
| * @param record | |||
| */ | |||
| void pointDeduction(WxThirdPartyOrders record); | |||
| void pointRefund(WxThirdPartyOrders thirdPartyOrders); | |||
| void pointChange(WxThirdPartyOrders record); | |||
| void exportData(WxThirdPartyOrders circleOrder, HttpServletRequest request, HttpServletResponse response); | |||
| void exportDataVo(WxThirdPartyOrders circleOrder, HttpServletRequest request, HttpServletResponse response); | |||
| Integer sumCirclePayment(BusinessCircleBase circleOrder); | |||
| Integer sumCircleRefundAmount(BusinessCircleBase circleOrder); | |||
| } | |||
| @@ -1,381 +0,0 @@ | |||
| package com.iformall.service.impl; | |||
| import com.github.pagehelper.PageHelper; | |||
| import com.github.pagehelper.PageInfo; | |||
| import com.iformall.common.ErrorCode; | |||
| import com.iformall.common.IdWorker; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.domain.po.*; | |||
| import com.iformall.domain.po.base.TenantEntity; | |||
| import com.iformall.enums.*; | |||
| import com.iformall.exception.MallinkException; | |||
| import com.iformall.mapper.AliBusinessCircleOrderMapper; | |||
| import com.iformall.service.*; | |||
| import com.iformall.utils.RedisLock; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Service; | |||
| import org.springframework.transaction.annotation.Propagation; | |||
| import org.springframework.transaction.annotation.Transactional; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| import javax.servlet.http.HttpServletResponse; | |||
| import java.util.Date; | |||
| import java.util.List; | |||
| @Service | |||
| public class AliBusinessCircleOrderServiceImpl implements AliBusinessCircleOrderService { | |||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||
| private static final String ALI_CIRCLE_KEY = "CIRCLE:ALI:"; | |||
| @Autowired | |||
| ExcelService excelService; | |||
| @Autowired | |||
| RedisLock redisLock; | |||
| @Autowired | |||
| AliBusinessCircleOrderMapper aliBusinessCircleOrderMapper; | |||
| @Autowired | |||
| WxMerchantService wxMerchantService; | |||
| @Autowired | |||
| AliPayCUserService aliPayCUserService; | |||
| @Autowired | |||
| WxCUserBasicInfoService wxCUserBasicInfoService; | |||
| @Autowired | |||
| WxCreditHistoryService creditHistoryService; | |||
| @Autowired | |||
| WxCouponSendService wxCouponSendService; | |||
| @Override | |||
| public PageInfo<AliBusinessCircleOrder> listAsPage(AliBusinessCircleOrder record, Integer pageIndex, Integer pageSize) { | |||
| return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> aliBusinessCircleOrderMapper.findList(record)); | |||
| } | |||
| @Override | |||
| public AliBusinessCircleOrder getById(Long id, String tenantId) { | |||
| AliBusinessCircleOrder recordQ = new AliBusinessCircleOrder(); | |||
| recordQ.setId(id); | |||
| recordQ.setTenantId(tenantId); | |||
| return aliBusinessCircleOrderMapper.getById(recordQ); | |||
| } | |||
| @Override | |||
| public AliBusinessCircleOrder detail(Long id, TenantEntity tenantInfo) { | |||
| AliBusinessCircleOrder order = this.getById(id, tenantInfo.getTenantId()); | |||
| if(order.getMerchantId() != null){ | |||
| order.setMerchant(wxMerchantService.selectById(order.getMerchantId())); | |||
| } | |||
| if(order.getCUserId() != null){ | |||
| order.setBasicInfo(wxCUserBasicInfoService.getById(id,tenantInfo.getFinalTenantId())); | |||
| } | |||
| // if(order.getIsRefund() != null && order.getIsRefund().equals(EnumYesOrNo.YES.getCode())){ | |||
| // | |||
| // } | |||
| return order; | |||
| } | |||
| @Override | |||
| public AliBusinessCircleOrder getOrderByTransactionId(String transactionId, String tenantId) { | |||
| AliBusinessCircleOrder recordQ = new AliBusinessCircleOrder(); | |||
| recordQ.setTransactionId(transactionId); | |||
| recordQ.setTenantId(tenantId); | |||
| return aliBusinessCircleOrderMapper.getOrderByTransactionId(recordQ); | |||
| } | |||
| @Override | |||
| public AliBusinessCircleOrder getRefundOrderByRefundId(String refundId, String tenantId) { | |||
| AliBusinessCircleOrder recordQ = new AliBusinessCircleOrder(); | |||
| recordQ.setRefundId(refundId); | |||
| recordQ.setTenantId(tenantId); | |||
| return aliBusinessCircleOrderMapper.getRefundOrderByRefundId(recordQ); | |||
| } | |||
| @Override | |||
| public List<AliBusinessCircleOrder> getRefundOrderByTransactionId(String transactionId, String tenantId) { | |||
| AliBusinessCircleOrder recordQ = new AliBusinessCircleOrder(); | |||
| recordQ.setTransactionId(transactionId); | |||
| recordQ.setTenantId(tenantId); | |||
| return aliBusinessCircleOrderMapper.getRefundOrderByTransactionId(recordQ); | |||
| } | |||
| @Override | |||
| @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | |||
| public ResultData createOrder(WxMerchant wxMerchant, AliBusinessCircleOrder record) { | |||
| String lockKey = StringUtils.join(ALI_CIRCLE_KEY,record.getTransactionId(), ":",EnumYesOrNo.NO.getCode(),":","lock"); | |||
| long time = System.currentTimeMillis() + 2000; | |||
| String timeStr = String.valueOf(time); | |||
| if (redisLock.lock2(lockKey, timeStr)) { | |||
| AliBusinessCircleOrder byTransactionId = this.getOrderByTransactionId(record.getTransactionId(),record.getTenantId()); | |||
| if(byTransactionId != null){ | |||
| logger.error("--Ali商圈付款--订单消息已存在---byTransactionId="+byTransactionId.getTransactionId()); | |||
| redisLock.unlock(lockKey, timeStr); | |||
| throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "订单数据已存在"); | |||
| }else{ | |||
| Date now = new Date(); | |||
| final IdWorker idWorker = IdWorker.get(); | |||
| record.setId(idWorker.nextId()); | |||
| record.setCreateTime(now); | |||
| record.setUpdateTime(now); | |||
| if(wxMerchant == null && StringUtils.isNotBlank(record.getMallStoreId())){ | |||
| wxMerchant = wxMerchantService.getMerchantByEncode(record.getMallStoreId()); | |||
| } | |||
| if(wxMerchant != null){ | |||
| record.setMerchantId(wxMerchant.getId()); | |||
| record.setMerchantName(wxMerchant.getName()); | |||
| }else{ | |||
| logger.error("--Ali商圈付款通知消息未找到门店--mallStoreId="+record.getMallStoreId()); | |||
| record.setMerchantName("未知门店"); | |||
| } | |||
| if(record.getCUserId() != null){ | |||
| WxCUserBasicInfo byId = wxCUserBasicInfoService.getById(record.getCUserId(), record.getFinalTenantId()); | |||
| if(byId != null){ | |||
| record.setCUserNickName(byId.getNickName()); | |||
| record.setCUserPhone(byId.getPhone()); | |||
| }else{ | |||
| record.setCUserId(null); | |||
| } | |||
| }else if(record.getCUserPhone() != null) { | |||
| WxCUserBasicInfo byPhone = wxCUserBasicInfoService.registerByPhone(record, record.getCUserPhone(), null,null, null, null); | |||
| if (byPhone != null) { | |||
| record.setCUserId(byPhone.getId()); | |||
| record.setCUserNickName(byPhone.getNickName()); | |||
| record.setCUserPhone(byPhone.getPhone()); | |||
| } | |||
| }else{ | |||
| AliPayCUser userQ = new AliPayCUser(); | |||
| userQ.updateTenantInfo(record); | |||
| userQ.setAlipayUserId(record.getBuyerId()); | |||
| AliPayCUser aliUser = aliPayCUserService.getByAliPayUserId(userQ); | |||
| if(aliUser != null){ | |||
| // WxCUserBasicInfo infoByPhone = wxCUserBasicInfoService.findInfoByPhone(aliUser, aliUser.getPhone()); | |||
| WxCUserBasicInfo infoByPhone = wxCUserBasicInfoService.registerByPhone(aliUser, aliUser.getPhone(),aliUser.getName(),null,null,null); | |||
| if(infoByPhone != null ){ | |||
| record.setCUserId(infoByPhone.getId()); | |||
| record.setCUserNickName(infoByPhone.getNickName()); | |||
| record.setCUserPhone(infoByPhone.getPhone()); | |||
| }else{ | |||
| logger.error("--Ali商圈付款通知消息未找到会员--aliUserId="+record.getBuyerId()); | |||
| } | |||
| }else{ | |||
| logger.error("--Ali商圈付款通知消息未找到会员--aliUserId="+record.getBuyerId()); | |||
| } | |||
| } | |||
| aliBusinessCircleOrderMapper.insertNoticeOrder(record); | |||
| if(record.getCUserId() == null){ | |||
| redisLock.unlock(lockKey, timeStr); | |||
| return new ResultData(0); | |||
| } | |||
| try { | |||
| wxCouponSendService.sendCouponToUser(EnumCouponSendSendType.B_MICROPAY, record,EnumPayWay.PAY_WAY_NOT_UNPAY_B_MA,EnumPayVersion.NO_VERSION); | |||
| } catch (Exception e) { | |||
| logger.error("支付发券: " + e.getMessage()); | |||
| } | |||
| Integer businessId = EnumBusiness.BUSINESS_ID6.getCode(); | |||
| if(wxMerchant != null){ | |||
| businessId = wxMerchant.getBusinessId(); | |||
| } | |||
| WxCreditHistory creditHistory = new WxCreditHistory(); | |||
| creditHistory.setTenantId(record.getFinalTenantId()); | |||
| creditHistory.setOperatorType(EnumUserType.ALI_CIRCLE.getCode()); | |||
| creditHistory.setOperatorId(record.getCUserId()); | |||
| creditHistory.setCUserId(record.getCUserId()); | |||
| creditHistory.setCreateDate(now); | |||
| creditHistory.setCouponId(record.getId()); | |||
| creditHistory.setBusinessId(businessId); | |||
| creditHistory.setMerchantId(record.getMerchantId()); | |||
| creditHistory.setCreditType(EnumScoreType.CONSUMPTION.getCode()); | |||
| creditHistory.setSpend(record.getPayAmount()); | |||
| creditHistory.setChangePurpose("支付宝商圈消费:商户["+record.getMerchantName()+"] ("+record.getPayAmountStr()+"元) "); | |||
| creditHistory = creditHistoryService.saveOrUpdate(creditHistory,record.getTenantId()); | |||
| Integer creditNum = 0; | |||
| if (creditHistory.getCreditNum() != null) { | |||
| creditNum = creditHistory.getCreditNum(); | |||
| } | |||
| if(creditNum == 0){ | |||
| redisLock.unlock(lockKey, timeStr); | |||
| return new ResultData(0); | |||
| } | |||
| record.setIncreasedPoints(creditNum); | |||
| record.setPointsUpdateTime(creditHistory.getCreateDate()); | |||
| this.updatePoints(record); | |||
| redisLock.unlock(lockKey, timeStr); | |||
| return new ResultData(creditNum); | |||
| } | |||
| }else{ | |||
| logger.debug("CacheAspect 读库等待中, key:{}: " + lockKey); | |||
| try { | |||
| Thread.sleep(2000); | |||
| } catch (InterruptedException e) { | |||
| e.printStackTrace(); | |||
| }finally { | |||
| redisLock.unlock(lockKey, timeStr); | |||
| } | |||
| return new ResultData(ErrorCode.SYS_REPEAT_SUBMIT_EXCEPTION); | |||
| } | |||
| } | |||
| @Override | |||
| @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | |||
| public ResultData insertRefundNoticeOrder(WxMerchant wxMerchant, AliBusinessCircleOrder record) { | |||
| AliBusinessCircleOrder order = this.getOrderByTransactionId(record.getTransactionId(),record.getTenantId()); | |||
| if(order == null){ | |||
| logger.error("--Ali商圈退款--付款消息未找到--transactionId="+record.getTransactionId()); | |||
| throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "付款消息未找到"); | |||
| }else{ | |||
| String lockKey = StringUtils.join(ALI_CIRCLE_KEY,record.getTransactionId(), ":",EnumYesOrNo.YES.getCode(),":","lock"); | |||
| long time = System.currentTimeMillis() + 2000; | |||
| String timeStr = String.valueOf(time); | |||
| if (redisLock.lock2(lockKey, timeStr)) { | |||
| List<AliBusinessCircleOrder> refundOrders = this.getRefundOrderByTransactionId(record.getTransactionId(),record.getTenantId()); | |||
| if(refundOrders != null && refundOrders.size() > 0){ | |||
| logger.error("--Ali商圈退款--已经退款--transactionId="+record.getTransactionId()); | |||
| redisLock.unlock(lockKey, timeStr); | |||
| throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "退款数据已存在"); | |||
| } | |||
| // AliBusinessCircleOrder refundOrder = this.getRefundOrderByRefundId(record.getRefundId(),record.getTenantId()); | |||
| // if(refundOrder != null){ | |||
| // logger.error("--Ali商圈退款--退款消息已存在---RefundId="+record.getRefundId()); | |||
| // }else{ | |||
| // List<AliBusinessCircleOrder> refundOrders = this.getRefundOrderByTransactionId(record.getTransactionId(),record.getTenantId()); | |||
| // Integer amount = order.getPayAmount(); | |||
| // Integer increasedPoints = order.getIncreasedPoints(); | |||
| // Integer refundAmount = 0; | |||
| // Integer refundIncreasedPoints = 0; | |||
| // | |||
| // if(refundOrders != null && refundOrders.size()>0){ | |||
| // for (AliBusinessCircleOrder ro:refundOrders) { | |||
| // refundAmount += ro.getRefundAmount(); | |||
| // refundIncreasedPoints += ro.getIncreasedPoints(); | |||
| // } | |||
| // } | |||
| // if(refundAmount >= amount){ | |||
| // logger.error("--Ali商圈退款--已经退款--transactionId="+record.getTransactionId()); | |||
| // }else if((refundAmount + record.getRefundAmount()) > amount ){ | |||
| // logger.error("--Ali商圈退款--退款金额超限--transactionId="+record.getTransactionId()); | |||
| // } | |||
| else{ | |||
| Date now = new Date(); | |||
| final IdWorker idWorker = IdWorker.get(); | |||
| record.setId(idWorker.nextId()); | |||
| record.setCreateTime(now); | |||
| record.setUpdateTime(now); | |||
| record.setAmount(order.getAmount()); | |||
| record.setPayAmount(order.getPayAmount()); | |||
| if(record.getRefundAmount() == null){ | |||
| record.setRefundAmount(order.getPayAmount()); | |||
| } | |||
| record.setCUserId(order.getCUserId()); | |||
| record.setCUserNickName(order.getCUserNickName()); | |||
| record.setCUserPhone(order.getCUserPhone()); | |||
| record.setMerchantId(order.getMerchantId()); | |||
| record.setMerchantName(order.getMerchantName()); | |||
| aliBusinessCircleOrderMapper.insertRefundNoticeOrder(record); | |||
| order.setOrderStatus(2);//全额退款 订单关闭 | |||
| order.setUpdateTime(now); | |||
| aliBusinessCircleOrderMapper.updateOrderStatus(order); | |||
| int creditNum = 0; | |||
| if(order.getEarnPoints().equals(EnumYesOrNo.YES.getCode())){ | |||
| WxCreditHistory creditHistory = new WxCreditHistory(); | |||
| creditHistory.setTenantId(record.getFinalTenantId()); | |||
| creditHistory.setOperatorType(EnumUserType.ALI_CIRCLE.getCode()); | |||
| creditHistory.setOperatorId(record.getCUserId()); | |||
| creditHistory.setCUserId(record.getCUserId()); | |||
| creditHistory.setCreateDate(new Date()); | |||
| creditHistory.setCouponId(record.getId()); | |||
| creditHistory.setMerchantId(order.getMerchantId()); | |||
| creditHistory.setCreditType(EnumScoreType.REFUND_CONSUMPTION.getCode()); | |||
| // int points = 0; | |||
| // if((refundAmount + record.getRefundAmount()) == amount){ | |||
| // points = increasedPoints - refundIncreasedPoints; | |||
| // }else{ | |||
| // points = new BigDecimal(order.getIncreasedPoints()) | |||
| // .divide(new BigDecimal(order.getPayAmount()),2,BigDecimal.ROUND_HALF_UP) | |||
| // .multiply(new BigDecimal(record.getRefundAmount())) | |||
| // .intValue(); | |||
| // } | |||
| int points = order.getIncreasedPoints(); | |||
| creditHistory.setCreditNum(points); | |||
| creditHistory.setSpend(0-record.getRefundAmount()); | |||
| creditHistory.setChangePurpose("支付宝商圈退款:商户["+record.getMerchantName()+"] ("+record.getRefundAmountStr()+"元) "); | |||
| creditHistory = creditHistoryService.saveOrUpdate(creditHistory,record.getTenantId()); | |||
| if (creditHistory.getCreditNum() != null) { | |||
| creditNum = creditHistory.getCreditNum(); | |||
| } | |||
| if(creditNum != 0){ | |||
| record.setIncreasedPoints(creditNum); | |||
| record.setPointsUpdateTime(creditHistory.getCreateDate()); | |||
| this.updatePoints(record); | |||
| } | |||
| } | |||
| redisLock.unlock(lockKey, timeStr); | |||
| return new ResultData(creditNum); | |||
| } | |||
| // } | |||
| }else{ | |||
| logger.debug("CacheAspect 读库等待中, key:{}: " + lockKey); | |||
| try { | |||
| Thread.sleep(2000); | |||
| } catch (InterruptedException e) { | |||
| e.printStackTrace(); | |||
| }finally { | |||
| redisLock.unlock(lockKey, timeStr); | |||
| } | |||
| return new ResultData(ErrorCode.SYS_REPEAT_SUBMIT_EXCEPTION); | |||
| } | |||
| } | |||
| } | |||
| @Override | |||
| public void updatePoints(AliBusinessCircleOrder record) { | |||
| record.setUpdateTime(new Date()); | |||
| aliBusinessCircleOrderMapper.updatePoints(record); | |||
| } | |||
| @Override | |||
| public void exportData(AliBusinessCircleOrder circleOrder, HttpServletRequest request, HttpServletResponse response) { | |||
| List<AliBusinessCircleOrder> list = aliBusinessCircleOrderMapper.findList(circleOrder); | |||
| excelService.exportExcel(list, null, "支付宝商圈交易", AliBusinessCircleOrder.class, "支付宝商圈交易.xlsx", response, false); | |||
| } | |||
| @Override | |||
| public Integer sumCirclePayment(BusinessCircleBase circleOrder) { | |||
| Integer sumCirclePayment = aliBusinessCircleOrderMapper.sumCirclePayment(circleOrder); | |||
| return sumCirclePayment==null?0:sumCirclePayment; | |||
| } | |||
| @Override | |||
| public Integer sumCircleRefundAmount(BusinessCircleBase circleOrder) { | |||
| Integer sumCircleRefundAmount = aliBusinessCircleOrderMapper.sumCircleRefundAmount(circleOrder); | |||
| return sumCircleRefundAmount==null?0:sumCircleRefundAmount; | |||
| } | |||
| } | |||
| @@ -1,556 +0,0 @@ | |||
| package com.iformall.service.impl; | |||
| import com.github.binarywang.wxpay.bean.businesscircle.MemberCardAuthorizeResult; | |||
| import com.github.binarywang.wxpay.bean.businesscircle.ParkingNotifyRequest; | |||
| import com.github.binarywang.wxpay.bean.businesscircle.PointsCommitStatusResult; | |||
| import com.github.binarywang.wxpay.bean.businesscircle.PointsNotifyRequest; | |||
| import com.github.binarywang.wxpay.exception.WxPayException; | |||
| import com.github.binarywang.wxpay.service.WxPayService; | |||
| import com.github.pagehelper.PageHelper; | |||
| import com.github.pagehelper.PageInfo; | |||
| import com.iformall.common.ErrorCode; | |||
| import com.iformall.common.IdWorker; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.domain.po.*; | |||
| import com.iformall.domain.po.base.TenantEntity; | |||
| import com.iformall.domain.po.msg.AfterBusinessCreditMsg; | |||
| import com.iformall.enums.*; | |||
| import com.iformall.exception.MallinkException; | |||
| import com.iformall.mapper.WxBusinessCircleOrderMapper; | |||
| import com.iformall.mq.MqBaseProducer; | |||
| import com.iformall.service.*; | |||
| import com.iformall.utils.DateUtils; | |||
| import com.iformall.utils.MaUtil; | |||
| import com.iformall.utils.RedisLock; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Service; | |||
| import org.springframework.transaction.annotation.Propagation; | |||
| import org.springframework.transaction.annotation.Transactional; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| import javax.servlet.http.HttpServletResponse; | |||
| import java.math.BigDecimal; | |||
| import java.util.Date; | |||
| import java.util.List; | |||
| @Service | |||
| public class WxBusinessCircleOrderServiceImpl implements WxBusinessCircleOrderService { | |||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||
| private final String WX_CIRCLE_KEY = "CIRCLE:WX:"; | |||
| @Autowired | |||
| ExcelService excelService; | |||
| @Autowired | |||
| RedisLock redisLock; | |||
| @Autowired | |||
| WxBusinessCircleOrderMapper wxBusinessCircleOrderMapper; | |||
| @Autowired | |||
| WxMerchantService wxMerchantService; | |||
| @Autowired | |||
| WxCUserService wxCUserService; | |||
| @Autowired | |||
| WxCUserBasicInfoService wxCUserBasicInfoService; | |||
| @Autowired | |||
| WxCreditHistoryService creditHistoryService; | |||
| @Autowired | |||
| WxCouponSendService wxCouponSendService; | |||
| @Autowired | |||
| WxAppinfoService wxAppinfoService; | |||
| @Autowired | |||
| WxPayAccountService wxPayAccountService; | |||
| @Autowired | |||
| MqBaseProducer mqBaseProducer; | |||
| @Autowired | |||
| MaUtil maUtil; | |||
| @Override | |||
| public PageInfo<WxBusinessCircleOrder> listAsPage(WxBusinessCircleOrder record, Integer pageIndex, Integer pageSize) { | |||
| return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxBusinessCircleOrderMapper.findList(record)); | |||
| } | |||
| @Override | |||
| public WxBusinessCircleOrder getById(Long id, String tenantId) { | |||
| WxBusinessCircleOrder recordQ = new WxBusinessCircleOrder(); | |||
| recordQ.setId(id); | |||
| recordQ.setTenantId(tenantId); | |||
| return wxBusinessCircleOrderMapper.getById(recordQ); | |||
| } | |||
| @Override | |||
| public WxBusinessCircleOrder detail(Long id, TenantEntity tenantInfo) { | |||
| WxBusinessCircleOrder order = this.getById(id, tenantInfo.getTenantId()); | |||
| if(order.getMerchantId() != null){ | |||
| order.setMerchant(wxMerchantService.selectById(order.getMerchantId())); | |||
| } | |||
| if(order.getCUserId() != null){ | |||
| order.setBasicInfo(wxCUserBasicInfoService.getById(id,tenantInfo.getFinalTenantId())); | |||
| } | |||
| // if(order.getIsRefund() != null && order.getIsRefund().equals(EnumYesOrNo.YES.getCode())){ | |||
| // | |||
| // } | |||
| return order; | |||
| } | |||
| @Override | |||
| public WxBusinessCircleOrder getOrderByTransactionId(String transactionId, String tenantId) { | |||
| WxBusinessCircleOrder recordQ = new WxBusinessCircleOrder(); | |||
| recordQ.setTransactionId(transactionId); | |||
| recordQ.setTenantId(tenantId); | |||
| return wxBusinessCircleOrderMapper.getOrderByTransactionId(recordQ); | |||
| } | |||
| @Override | |||
| public WxBusinessCircleOrder getRefundOrderByRefundId(String refundId, String tenantId) { | |||
| WxBusinessCircleOrder recordQ = new WxBusinessCircleOrder(); | |||
| recordQ.setRefundId(refundId); | |||
| recordQ.setTenantId(tenantId); | |||
| return wxBusinessCircleOrderMapper.getRefundOrderByRefundId(recordQ); | |||
| } | |||
| @Override | |||
| public List<WxBusinessCircleOrder> getRefundOrderByTransactionId(String transactionId, String tenantId) { | |||
| WxBusinessCircleOrder recordQ = new WxBusinessCircleOrder(); | |||
| recordQ.setTransactionId(transactionId); | |||
| recordQ.setTenantId(tenantId); | |||
| return wxBusinessCircleOrderMapper.getRefundOrderByTransactionId(recordQ); | |||
| } | |||
| @Override | |||
| @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | |||
| public ResultData createOrder(WxBusinessCircleOrder record) { | |||
| String lockKey = StringUtils.join(WX_CIRCLE_KEY,record.getTransactionId(), ":",EnumYesOrNo.NO.getCode(),":", "lock"); | |||
| long time = System.currentTimeMillis() + 2000; | |||
| String timeStr = String.valueOf(time); | |||
| if (redisLock.lock2(lockKey, timeStr)) { | |||
| WxBusinessCircleOrder byTransactionId = this.getOrderByTransactionId(record.getTransactionId(),record.getTenantId()); | |||
| if(byTransactionId != null){ | |||
| logger.error("--Wx商圈付款--订单消息已存在---byTransactionId="+byTransactionId.getTransactionId()); | |||
| //同步积分状态 | |||
| this.sendsyncNotifyPointsMsg(record,byTransactionId.getId()); | |||
| redisLock.unlock(lockKey, timeStr); | |||
| return new ResultData(); | |||
| // throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "订单数据已存在"); | |||
| }else { | |||
| Date now = new Date(); | |||
| final IdWorker idWorker = IdWorker.get(); | |||
| record.setId(idWorker.nextId()); | |||
| record.setCreateTime(now); | |||
| record.setUpdateTime(now); | |||
| //TODO 第三方获取门店(标识可能发生变化) | |||
| // WxMerchant wxMerchant = wxMerchantService.getById(Long.parseLong(record.getWxShopNumber())); | |||
| WxMerchant wxMerchant = wxMerchantService.getMerchantByEncode(record.getWxShopNumber()); | |||
| if (wxMerchant != null) { | |||
| record.setMerchantId(wxMerchant.getId()); | |||
| record.setMerchantName(wxMerchant.getName()); | |||
| } else { | |||
| record.setMerchantName("未知门店"); | |||
| logger.error("--wx商圈付款通知消息未找到门店--shopName=" + record.getWxShopName() + "&shopNumber=" + record.getWxShopNumber()); | |||
| } | |||
| if(StringUtils.isNotBlank(record.getOpenid()) && StringUtils.isNotBlank(record.getAppid())){ | |||
| WxCUser userQ = new WxCUser(); | |||
| userQ.updateTenantInfo(record); | |||
| userQ.setOpenId(record.getOpenid()); | |||
| userQ.setAppId(record.getAppid()); | |||
| WxCUser user = wxCUserService.getByOpenId(userQ); | |||
| if (user != null && user.getUserId() != null) { | |||
| record.setCUserId(user.getUserId()); | |||
| } | |||
| } | |||
| if(record.getCUserId() == null){ | |||
| WxCUserBasicInfo byPhone = wxCUserBasicInfoService.registerByPhone(record, record.getCUserPhone(),null,null,null,null); | |||
| if(byPhone != null){ | |||
| record.setCUserNickName(byPhone.getNickName()); | |||
| record.setCUserPhone(byPhone.getPhone()); | |||
| }else{ | |||
| logger.error("--微信商圈付款通知消息未找到会员--1"); | |||
| } | |||
| }else{ | |||
| WxCUserBasicInfo byId = wxCUserBasicInfoService.getById(record.getCUserId(), record.getFinalTenantId()); | |||
| if(byId != null){ | |||
| record.setCUserNickName(byId.getNickName()); | |||
| record.setCUserPhone(byId.getPhone()); | |||
| }else{ | |||
| record.setCUserId(null); | |||
| logger.error("--微信商圈付款通知消息未找到会员--2"); | |||
| } | |||
| } | |||
| wxBusinessCircleOrderMapper.insertNoticeOrder(record); | |||
| Integer creditNum = 0; | |||
| if(record.getCUserId() != null){ | |||
| try { | |||
| wxCouponSendService.sendCouponToUser(EnumCouponSendSendType.B_MICROPAY, record,EnumPayWay.PAY_WAY_NOT_UNPAY_B_MA,EnumPayVersion.NO_VERSION); | |||
| } catch (Exception e) { | |||
| logger.error("支付发券: " + e.getMessage()); | |||
| } | |||
| Integer businessId = EnumBusiness.BUSINESS_ID6.getCode(); | |||
| if(wxMerchant != null){ | |||
| businessId = wxMerchant.getBusinessId(); | |||
| } | |||
| WxCreditHistory creditHistory = new WxCreditHistory(); | |||
| creditHistory.setTenantId(record.getFinalTenantId()); | |||
| creditHistory.setOperatorType(EnumUserType.BUSINESS_CIRCLE.getCode()); | |||
| creditHistory.setOperatorId(record.getCUserId()); | |||
| creditHistory.setCUserId(record.getCUserId()); | |||
| creditHistory.setCreateDate(now); | |||
| creditHistory.setCouponId(record.getId()); | |||
| creditHistory.setBusinessId(businessId); | |||
| creditHistory.setMerchantId(record.getMerchantId()); | |||
| creditHistory.setCreditType(EnumScoreType.CONSUMPTION.getCode()); | |||
| creditHistory.setSpend(record.getPayAmount()); | |||
| creditHistory.setChangePurpose("微信商圈消费:商户["+record.getMerchantName()+"] ("+record.getPayAmountStr()+"元) "); | |||
| creditHistory = creditHistoryService.saveOrUpdate(creditHistory,record.getTenantId()); | |||
| if (creditHistory.getCreditNum() != null) { | |||
| creditNum = creditHistory.getCreditNum(); | |||
| } | |||
| if(creditNum == 0){ | |||
| redisLock.unlock(lockKey, timeStr); | |||
| return new ResultData(0); | |||
| } | |||
| record.setIncreasedPoints(creditNum); | |||
| record.setPointsUpdateTime(creditHistory.getCreateDate()); | |||
| this.updatePoints(record); | |||
| //同步积分 | |||
| this.sendsyncNotifyPointsMsg(record,record.getId()); | |||
| } | |||
| redisLock.unlock(lockKey, timeStr); | |||
| return new ResultData(creditNum); | |||
| } | |||
| }else { | |||
| logger.debug("CacheAspect 读库等待中, key:{}: " + lockKey); | |||
| try { | |||
| Thread.sleep(2000); | |||
| } catch (InterruptedException e) { | |||
| e.printStackTrace(); | |||
| }finally { | |||
| redisLock.unlock(lockKey, timeStr); | |||
| } | |||
| return new ResultData(ErrorCode.SYS_REPEAT_SUBMIT_EXCEPTION); | |||
| } | |||
| } | |||
| @Override | |||
| @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | |||
| public ResultData insertRefundNoticeOrder(WxBusinessCircleOrder record) { | |||
| WxBusinessCircleOrder order = this.getOrderByTransactionId(record.getTransactionId(),record.getTenantId()); | |||
| if(order == null){ | |||
| logger.error("--Wx商圈退款--付款消息未找到--transactionId="+record.getTransactionId()); | |||
| throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "付款消息未找到"); | |||
| }else{ | |||
| String lockKey = StringUtils.join(WX_CIRCLE_KEY,record.getRefundId(), ":",EnumYesOrNo.YES.getCode(),":", "lock"); | |||
| long time = System.currentTimeMillis() + 2000; | |||
| String timeStr = String.valueOf(time); | |||
| if (redisLock.lock2(lockKey, timeStr)) { | |||
| WxBusinessCircleOrder refundOrder = this.getRefundOrderByRefundId(record.getRefundId(),record.getTenantId()); | |||
| if(refundOrder != null){ | |||
| logger.error("--Ali商圈退款--退款消息已存在---RefundId="+record.getRefundId()); | |||
| redisLock.unlock(lockKey, timeStr); | |||
| throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "退款数据已存在"); | |||
| }else{ | |||
| List<WxBusinessCircleOrder> refundOrders = this.getRefundOrderByTransactionId(record.getTransactionId(),record.getTenantId()); | |||
| Integer amount = order.getPayAmount(); | |||
| Integer increasedPoints = order.getIncreasedPoints(); | |||
| Integer refundAmount = 0; | |||
| Integer refundIncreasedPoints = 0; | |||
| if(refundOrders != null && refundOrders.size()>0){ | |||
| for (WxBusinessCircleOrder ro:refundOrders) { | |||
| refundAmount += ro.getRefundAmount(); | |||
| refundIncreasedPoints += ro.getIncreasedPoints(); | |||
| } | |||
| } | |||
| if(record.getRefundAmount() == null){ | |||
| record.setRefundAmount(order.getPayAmount()-refundAmount); | |||
| } | |||
| if(refundAmount >= amount){ | |||
| logger.error("--Wx商圈退款--已经退款--transactionId="+record.getTransactionId()); | |||
| redisLock.unlock(lockKey, timeStr); | |||
| throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "已经退款"); | |||
| }else if((refundAmount + record.getRefundAmount()) > amount ){ | |||
| logger.error("--Wx商圈退款--退款金额超限--transactionId="+record.getTransactionId()); | |||
| redisLock.unlock(lockKey, timeStr); | |||
| throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "退款金额超限"); | |||
| }else{ | |||
| Date now = new Date(); | |||
| final IdWorker idWorker = IdWorker.get(); | |||
| record.setId(idWorker.nextId()); | |||
| record.setCreateTime(now); | |||
| record.setUpdateTime(now); | |||
| if(record.getAmount() == null){ | |||
| record.setAmount(order.getAmount()); | |||
| } | |||
| if(record.getPayAmount() == null){ | |||
| record.setPayAmount(order.getPayAmount()); | |||
| } | |||
| record.setCUserId(order.getCUserId()); | |||
| record.setCUserNickName(order.getCUserNickName()); | |||
| record.setCUserPhone(order.getCUserPhone()); | |||
| record.setMerchantId(order.getMerchantId()); | |||
| record.setMerchantName(order.getMerchantName()); | |||
| wxBusinessCircleOrderMapper.insertRefundNoticeOrder(record); | |||
| if((refundAmount + record.getRefundAmount()) == amount){ | |||
| order.setOrderStatus(2);//全额退款 | |||
| }else{ | |||
| order.setOrderStatus(1);//部分退款 | |||
| } | |||
| order.setUpdateTime(now); | |||
| wxBusinessCircleOrderMapper.updateOrderStatus(order); | |||
| int creditNum = 0; | |||
| if(order.getEarnPoints().equals(EnumYesOrNo.YES.getCode())){ | |||
| WxCreditHistory creditHistory = new WxCreditHistory(); | |||
| creditHistory.setTenantId(record.getFinalTenantId()); | |||
| creditHistory.setOperatorType(EnumUserType.BUSINESS_CIRCLE.getCode()); | |||
| creditHistory.setOperatorId(record.getCUserId()); | |||
| creditHistory.setCUserId(record.getCUserId()); | |||
| creditHistory.setCreateDate(new Date()); | |||
| creditHistory.setCouponId(record.getId()); | |||
| creditHistory.setMerchantId(record.getMerchantId()); | |||
| creditHistory.setCreditType(EnumScoreType.REFUND_CONSUMPTION.getCode()); | |||
| int points = 0; | |||
| if((refundAmount + record.getRefundAmount()) == amount){ | |||
| points = increasedPoints - refundIncreasedPoints; | |||
| }else{ | |||
| points = new BigDecimal(order.getIncreasedPoints()) | |||
| .divide(new BigDecimal(order.getPayAmount()),2,BigDecimal.ROUND_HALF_UP) | |||
| .multiply(new BigDecimal(record.getRefundAmount())) | |||
| .intValue(); | |||
| } | |||
| creditHistory.setCreditNum(points); | |||
| creditHistory.setSpend(0-record.getRefundAmount()); | |||
| creditHistory.setChangePurpose("微信商圈退款:商户["+record.getMerchantName()+"] ("+record.getRefundAmountStr()+"元) "); | |||
| creditHistory = creditHistoryService.saveOrUpdate(creditHistory,record.getTenantId()); | |||
| if (creditHistory.getCreditNum() != null) { | |||
| creditNum = creditHistory.getCreditNum(); | |||
| } | |||
| if(creditNum != 0){ | |||
| record.setIncreasedPoints(creditNum); | |||
| record.setPointsUpdateTime(creditHistory.getCreateDate()); | |||
| this.updatePoints(record); | |||
| } | |||
| } | |||
| redisLock.unlock(lockKey, timeStr); | |||
| return new ResultData(creditNum); | |||
| } | |||
| } | |||
| }else { | |||
| logger.debug("CacheAspect 读库等待中, key:{}: " + lockKey); | |||
| try { | |||
| Thread.sleep(2000); | |||
| } catch (InterruptedException e) { | |||
| e.printStackTrace(); | |||
| }finally { | |||
| redisLock.unlock(lockKey, timeStr); | |||
| } | |||
| return new ResultData(ErrorCode.SYS_REPEAT_SUBMIT_EXCEPTION); | |||
| } | |||
| } | |||
| } | |||
| @Override | |||
| public void updatePoints(WxBusinessCircleOrder record) { | |||
| record.setUpdateTime(new Date()); | |||
| wxBusinessCircleOrderMapper.updatePoints(record); | |||
| } | |||
| @Override | |||
| public void notifyPoints(WxBusinessCircleOrder record){ | |||
| if(EnumYesOrNo.YES.getCode().equals(record.getIsPointsNotify())){ | |||
| logger.info("该商圈订单已同步积分"+record.getId()); | |||
| return; | |||
| } | |||
| WxPayService wxPayService = wxPayAccountService.getWxPayService(record.getTenantId()); | |||
| PointsNotifyRequest request = new PointsNotifyRequest(); | |||
| request.setSubMchid(wxPayService.getConfig().getSubMchId()); | |||
| request.setTransactionId(record.getTransactionId()); | |||
| request.setAppid(wxPayService.getConfig().getAppId()); | |||
| request.setOpenid(record.getOpenid()); | |||
| if(record.getIncreasedPoints() != null && record.getIncreasedPoints() > 0 ){ | |||
| request.setEarnPoints(true); | |||
| request.setIncreasedPoints(record.getIncreasedPoints()); | |||
| request.setPointsUpdateTime(DateUtils.toRfc3339Str(record.getPointsUpdateTime())); | |||
| }else{ | |||
| request.setEarnPoints(false); | |||
| request.setIncreasedPoints(0); | |||
| request.setPointsUpdateTime(DateUtils.toRfc3339Str(new Date())); | |||
| request.setNoPointsRemarks("该订单不参与积分活动"); | |||
| } | |||
| try { | |||
| String result = wxPayService.getBusinessCircleService().notifyPoints(request); | |||
| logger.info("微信商圈同步积分请求结果----"+result); | |||
| record.setUpdateTime(new Date()); | |||
| this.updateIsPointsNotify(record); | |||
| } catch (WxPayException e) { | |||
| e.printStackTrace(); | |||
| } | |||
| } | |||
| @Override | |||
| public void sendsyncNotifyPointsMsg(TenantEntity tenantEntity, Long businessCircleOrderId) { | |||
| AfterBusinessCreditMsg msg = new AfterBusinessCreditMsg(); | |||
| msg.updateTenantInfo(tenantEntity); | |||
| msg.setMsgType(EnumMsgRecordType.AFTER_BUSINESS_CREDIT.getCode()); | |||
| msg.setBusinessCircleOrderId(businessCircleOrderId); | |||
| mqBaseProducer.sendMessage(msg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); | |||
| } | |||
| @Override | |||
| public void updateIsPointsNotify(WxBusinessCircleOrder record) { | |||
| record.setUpdateTime(new Date()); | |||
| wxBusinessCircleOrderMapper.updateIsPointsNotify(record); | |||
| } | |||
| @Override | |||
| public void exportData(WxBusinessCircleOrder circleOrder, HttpServletRequest request, HttpServletResponse response) { | |||
| List<WxBusinessCircleOrder> list = wxBusinessCircleOrderMapper.findList(circleOrder); | |||
| excelService.exportExcel(list, null, "微信商圈交易", WxBusinessCircleOrder.class, "微信商圈交易.xlsx", response, false); | |||
| } | |||
| @Override | |||
| public Integer sumCirclePayment(BusinessCircleBase circleOrder) { | |||
| Integer sumCirclePayment = wxBusinessCircleOrderMapper.sumCirclePayment(circleOrder); | |||
| return sumCirclePayment==null?0:sumCirclePayment; | |||
| } | |||
| @Override | |||
| public Integer sumCircleRefundAmount(BusinessCircleBase circleOrder) { | |||
| Integer sumCircleRefundAmount = wxBusinessCircleOrderMapper.sumCircleRefundAmount(circleOrder); | |||
| return sumCircleRefundAmount==null?0:sumCircleRefundAmount; | |||
| } | |||
| @Override | |||
| public ResultData syncauthorizeState(TenantEntity tenantEntity, String openid) { | |||
| WxAppinfo cAppInfo = wxAppinfoService.getCAppInfoFromRedis(tenantEntity.getTenantId(), EnumAppPlat.WX); | |||
| if(cAppInfo == null){ | |||
| return new ResultData(ErrorCode.APP_ID_NOT_FOUND); | |||
| } | |||
| WxPayAccount payAccount = wxPayAccountService.getByIdFromRedis(cAppInfo.getPayId()); | |||
| if(payAccount == null){ | |||
| return new ResultData(ErrorCode.API_KEY_NOT_FOUND); | |||
| } | |||
| if(!EnumBusinessType.BUSINESS_3.getCode().equals(payAccount.getBusinessType())){ | |||
| return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(),"未开通商圈或不支持此项操作"); | |||
| } | |||
| try { | |||
| WxPayService wxPayService = maUtil.getWxPayService(cAppInfo, payAccount); | |||
| MemberCardAuthorizeResult authorizations = wxPayService.getBusinessCircleService().getAuthorizations(openid); | |||
| EnumBusinessCircleAuthorizeState authorizeState = EnumBusinessCircleAuthorizeState.getEnum(authorizations.getAuthorizeState()); | |||
| if(!EnumBusinessCircleAuthorizeState.UNAUTHORIZED.equals(authorizeState)){ | |||
| WxCUser updCuser = new WxCUser(); | |||
| updCuser.updateTenantInfo(tenantEntity); | |||
| updCuser.setOpenId(authorizations.getOpenid()); | |||
| updCuser.setAuthorizeState(authorizeState.getCode()); | |||
| updCuser.setAuthorizeTime(DateUtils.rfc3339Formatter(authorizations.getAuthorizeTime())); | |||
| updCuser.setDeauthorizeTime(DateUtils.rfc3339Formatter(authorizations.getDeauthorizeTime())); | |||
| wxCUserService.updateAuthorizeStateByOpenId(updCuser); | |||
| } | |||
| return new ResultData(authorizeState); | |||
| } catch (WxPayException e) { | |||
| e.printStackTrace(); | |||
| return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(),e.getMessage()); | |||
| } | |||
| } | |||
| @Override | |||
| public ResultData getPointsCommitStatus(TenantEntity tenantEntity, String openId) { | |||
| WxAppinfo cAppInfo = wxAppinfoService.getCAppInfoFromRedis(tenantEntity.getTenantId(), EnumAppPlat.WX); | |||
| if(cAppInfo == null){ | |||
| return new ResultData(ErrorCode.APP_ID_NOT_FOUND); | |||
| } | |||
| WxPayAccount payAccount = wxPayAccountService.getByIdFromRedis(cAppInfo.getPayId()); | |||
| if(payAccount == null){ | |||
| return new ResultData(ErrorCode.API_KEY_NOT_FOUND); | |||
| } | |||
| if(!EnumBusinessType.BUSINESS_3.getCode().equals(payAccount.getBusinessType())){ | |||
| return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(),"未开通商圈或不支持此项操作"); | |||
| } | |||
| try { | |||
| WxPayService wxPayService = maUtil.getWxPayService(cAppInfo, payAccount); | |||
| PointsCommitStatusResult pointsCommitStatus = wxPayService.getBusinessCircleService().getPointsCommitStatus(payAccount.getBrandid(), openId); | |||
| return new ResultData(pointsCommitStatus); | |||
| } catch (WxPayException e) { | |||
| e.printStackTrace(); | |||
| return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(),e.getMessage()); | |||
| } | |||
| } | |||
| @Override | |||
| public ResultData syncParkings(TenantEntity tenantEntity, String openId, String plate_number, String state, Date time) { | |||
| WxAppinfo cAppInfo = wxAppinfoService.getCAppInfoFromRedis(tenantEntity.getTenantId(), EnumAppPlat.WX); | |||
| if(cAppInfo == null){ | |||
| return new ResultData(ErrorCode.APP_ID_NOT_FOUND); | |||
| } | |||
| WxPayAccount payAccount = wxPayAccountService.getByIdFromRedis(cAppInfo.getPayId()); | |||
| if(payAccount == null){ | |||
| return new ResultData(ErrorCode.API_KEY_NOT_FOUND); | |||
| } | |||
| if(!EnumBusinessType.BUSINESS_3.getCode().equals(payAccount.getBusinessType())){ | |||
| return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(),"未开通商圈或不支持此项操作"); | |||
| } | |||
| try { | |||
| WxPayService wxPayService = maUtil.getWxPayService(cAppInfo, payAccount); | |||
| ParkingNotifyRequest request = new ParkingNotifyRequest(); | |||
| request.setBrandid(payAccount.getBrandid()); | |||
| request.setOpenid(openId); | |||
| request.setPlateNumber(plate_number); | |||
| request.setState(state); | |||
| request.setTime(DateUtils.toRfc3339Str(time)); | |||
| wxPayService.getBusinessCircleService().notifyParkings(request); | |||
| return new ResultData(); | |||
| } catch (WxPayException e) { | |||
| e.printStackTrace(); | |||
| return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(),e.getMessage()); | |||
| } | |||
| } | |||
| @Override | |||
| public void sendSyncParkingsMsg(TenantEntity tenantEntity, Long carCmdLogId) { | |||
| //停车出入场通知 todo | |||
| // AfterCarInOutMsg msg = new AfterCarInOutMsg(); | |||
| // msg.updateTenantInfo(tenantEntity); | |||
| // msg.setMsgType(EnumMsgRecordType.AFTER_ADD_CREDIT.getCode()); | |||
| // msg.setCarCmdLogId(carCmdLogId); | |||
| // mqBaseProducer.sendMessage(msg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); | |||
| } | |||
| } | |||
| @@ -7,7 +7,6 @@ import com.iformall.domain.po.base.TenantEntity; | |||
| import com.iformall.enums.EnumCarCmd; | |||
| import com.iformall.mapper.WxCarCmdLogMapper; | |||
| import com.iformall.mapper.WxMallMapper; | |||
| import com.iformall.service.WxBusinessCircleOrderService; | |||
| import com.iformall.service.WxCarCmdLogService; | |||
| import com.iformall.service.WxMallService; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| @@ -33,9 +32,6 @@ public class WxCarCmdLogServiceImpl implements WxCarCmdLogService { | |||
| @Autowired | |||
| WxMallService wxMallService; | |||
| @Autowired | |||
| WxBusinessCircleOrderService wxBusinessCircleOrderService; | |||
| @Override | |||
| public PageInfo<WxCarCmdLog> listAsPage(WxCarCmdLog record, Integer pageIndex, Integer pageSize) { | |||
| @@ -54,22 +50,11 @@ public class WxCarCmdLogServiceImpl implements WxCarCmdLogService { | |||
| final IdWorker idWorker = IdWorker.get(); | |||
| record.setId(idWorker.nextId()); | |||
| wxCarCmdLogMapper.insert(record); | |||
| this.afterCarInOrOut(record); | |||
| } else { | |||
| wxCarCmdLogMapper.updateById(record); | |||
| } | |||
| } | |||
| private void afterCarInOrOut(WxCarCmdLog record){ | |||
| if(StringUtils.isBlank(record.getPlateNumber())){ | |||
| return; | |||
| } | |||
| if(EnumCarCmd.getCarIn().contains(record.getCmdType()) | |||
| || EnumCarCmd.getCarOut().contains(record.getCmdType())){ | |||
| wxBusinessCircleOrderService.sendSyncParkingsMsg(record,record.getId()); | |||
| } | |||
| } | |||
| @Override | |||
| public void deleteById(Long id,String tenantId) { | |||
| wxCarCmdLogMapper.deleteById(id,tenantId); | |||
| @@ -423,26 +423,6 @@ public class WxCouponSendServiceImpl implements WxCouponSendService { | |||
| } catch (Exception e) { | |||
| logger.error("收银台发券条件判断错误:ID=" + wxCouponSend.getId() + e.getMessage()); | |||
| } | |||
| }else if(param instanceof BusinessCircleBase){ | |||
| BusinessCircleBase circleBase = (BusinessCircleBase) param; | |||
| try { | |||
| JSONObject jo = JSONObject.parseObject(wxCouponSend.getConditions()); | |||
| Long sendId = jo.getLong("id"); | |||
| int miniPayment = jo.getIntValue("miniPayment")*100; | |||
| if(sendId == null && circleBase.getPayAmount().intValue() >= miniPayment){ | |||
| return true; | |||
| } | |||
| if (sendId != null && circleBase.getMerchantId() != null | |||
| && circleBase.getMerchantId().equals(sendId) | |||
| && circleBase.getPayAmount().intValue() >= miniPayment) { | |||
| return true; | |||
| } | |||
| logger.info("商圈收银发券条件判断--不满足{}"+circleBase.getId()); | |||
| } catch (Exception e) { | |||
| logger.error("商圈收银条件判断错误:ID=" + wxCouponSend.getId() + e.getMessage()); | |||
| } | |||
| } | |||
| return false; | |||
| @@ -489,11 +469,6 @@ public class WxCouponSendServiceImpl implements WxCouponSendService { | |||
| cUserId = order.getCUserId(); | |||
| tenantEntity = order; | |||
| break; | |||
| }else if(param instanceof BusinessCircleBase){ | |||
| BusinessCircleBase circleBase = (BusinessCircleBase) param; | |||
| cUserId = circleBase.getCUserId(); | |||
| tenantEntity = circleBase; | |||
| break; | |||
| }else{ | |||
| return false; | |||
| } | |||
| @@ -1,317 +0,0 @@ | |||
| package com.iformall.service.impl; | |||
| import com.alibaba.fastjson.JSON; | |||
| import com.github.binarywang.wxpay.bean.businesscircle.MemberCardAuthorizeResult; | |||
| import com.github.binarywang.wxpay.bean.membercard.MemberCardResult; | |||
| import com.github.binarywang.wxpay.bean.membercard.MemberCardRightsRequest; | |||
| import com.github.binarywang.wxpay.bean.membercard.MemberCardUpdRequest; | |||
| import com.github.binarywang.wxpay.exception.WxPayException; | |||
| import com.github.binarywang.wxpay.service.WxPayService; | |||
| import com.github.pagehelper.PageHelper; | |||
| import com.github.pagehelper.PageInfo; | |||
| import com.iformall.common.ErrorCode; | |||
| import com.iformall.common.IdWorker; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.domain.po.*; | |||
| import com.iformall.domain.po.base.TenantEntity; | |||
| import com.iformall.domain.po.msg.AfterAddCreditMsg; | |||
| import com.iformall.domain.po.msg.AfterAddScoreMsg; | |||
| import com.iformall.domain.po.msg.FmInsideCLoginMsg; | |||
| import com.iformall.domain.po.msg.SyncMemberCardMsg; | |||
| import com.iformall.enums.*; | |||
| import com.iformall.mapper.WxMemberCardMapper; | |||
| import com.iformall.mq.MqBaseProducer; | |||
| import com.iformall.service.*; | |||
| import com.iformall.utils.DateUtils; | |||
| import com.iformall.utils.MaUtil; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Service; | |||
| import java.util.Date; | |||
| import java.util.List; | |||
| @Service | |||
| public class WxMemberCardServiceImpl implements WxMemberCardService { | |||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||
| @Autowired | |||
| WxMemberCardMapper wxMemberCardMapper; | |||
| @Autowired | |||
| WxAppinfoService wxAppinfoService; | |||
| @Autowired | |||
| WxPayAccountService wxPayAccountService; | |||
| @Autowired | |||
| WxCUserBasicInfoService wxCUserBasicInfoService; | |||
| @Autowired | |||
| private MqBaseProducer mqBaseProducer; | |||
| @Autowired | |||
| MaUtil maUtil; | |||
| @Override | |||
| public PageInfo<WxMemberCard> listAsPage(WxMemberCard record, Integer pageIndex, Integer pageSize) { | |||
| return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxMemberCardMapper.findList(record)); | |||
| } | |||
| @Override | |||
| public ResultData saveorupdate(WxMemberCard record) { | |||
| Date now = new Date(); | |||
| if(record.getId() == null){ | |||
| final IdWorker idWorker = IdWorker.get(); | |||
| record.setId(idWorker.nextId()); | |||
| record.setCreateDate(now); | |||
| record.setUpdateDate(now); | |||
| wxMemberCardMapper.insert(record); | |||
| }else{ | |||
| record.setUpdateDate(now); | |||
| wxMemberCardMapper.updateById(record); | |||
| } | |||
| return new ResultData(); | |||
| } | |||
| @Override | |||
| public ResultData saveorupdateByCode(WxMemberCard record) { | |||
| Long id = wxMemberCardMapper.getIdByCode(record); | |||
| Date now = new Date(); | |||
| if(id == null){ | |||
| final IdWorker idWorker = IdWorker.get(); | |||
| id = idWorker.nextId(); | |||
| record.setId(id); | |||
| if(record.getCreateDate() == null){ | |||
| record.setCreateDate(now); | |||
| } | |||
| record.setUpdateDate(record.getCreateDate()); | |||
| wxMemberCardMapper.insert(record); | |||
| if(record.getCuserId() != null){ | |||
| TenantEntity tenantEntity = new TenantEntity(); | |||
| tenantEntity.setTenantId(record.getTenantId()); | |||
| tenantEntity.setParentTenantId(record.getParentTenantId()); | |||
| this.sendsyncMemberCardBonusMsg(tenantEntity,record.getCuserId(),null,null); | |||
| } | |||
| }else{ | |||
| record.setId(id); | |||
| if(record.getUpdateDate() == null){ | |||
| record.setUpdateDate(now); | |||
| } | |||
| wxMemberCardMapper.updateById(record); | |||
| } | |||
| return new ResultData(); | |||
| } | |||
| @Override | |||
| public ResultData delUserCardStatusByCode(WxMemberCard record) { | |||
| record.setUserCardStatus(EnumMemberCardStatus.DELETE.getCode()); | |||
| if(record.getUpdateDate() == null){ | |||
| record.setUpdateDate(new Date()); | |||
| } | |||
| wxMemberCardMapper.deleteByCode(record); | |||
| return new ResultData(); | |||
| } | |||
| @Override | |||
| public ResultData syncMemberCard(TenantEntity tenantEntity, String card_id, String code) { | |||
| WxAppinfo cAppInfo = wxAppinfoService.getCAppInfoFromRedis(tenantEntity.getTenantId(), EnumAppPlat.WX); | |||
| if(cAppInfo == null){ | |||
| return new ResultData(ErrorCode.APP_ID_NOT_FOUND); | |||
| } | |||
| WxPayAccount payAccount = wxPayAccountService.getByIdFromRedis(cAppInfo.getPayId()); | |||
| if(payAccount == null){ | |||
| return new ResultData(ErrorCode.API_KEY_NOT_FOUND); | |||
| } | |||
| if(!EnumBusinessType.BUSINESS_3.getCode().equals(payAccount.getBusinessType())){ | |||
| return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(),"未开通商圈或不支持此项操作"); | |||
| } | |||
| try { | |||
| WxPayService wxPayService = maUtil.getWxPayServiceBySelfModel(cAppInfo, payAccount); | |||
| MemberCardResult memberCard = wxPayService.getMemberCardService().getMemberCard(card_id, code); | |||
| WxMemberCard record = new WxMemberCard(); | |||
| record.setTenantId(tenantEntity.getTenantId()); | |||
| record.setParentTenantId(tenantEntity.getParentTenantId()); | |||
| record.updateFinalTenantId(tenantEntity); | |||
| record.setCardId(card_id); | |||
| record.setCardCode(code); | |||
| record.setOpenId(memberCard.getOpenid()); | |||
| record.setMembershipNumber(memberCard.getMembershipNumber()); | |||
| record.setLevel(memberCard.getLevel()); | |||
| record.setNickname(memberCard.getNickname()); | |||
| record.setHeadImageUrl(memberCard.getHeadImageUrl()); | |||
| record.setBackgroundPictureUrl(memberCard.getBackgroundPictureUrl()); | |||
| record.setBalance(memberCard.getBalance()); | |||
| EnumMemberCardStatus enumMemberCardStatus = EnumMemberCardStatus.getEnum(memberCard.getUserCardStatus()); | |||
| if(enumMemberCardStatus != null){ | |||
| record.setUserCardStatus(enumMemberCardStatus.getCode()); | |||
| } | |||
| record.setUserInformation(JSON.toJSONString(memberCard.getUserInformation())); | |||
| record.setBonusValue(memberCard.getBonusValue()); | |||
| if(memberCard.getServiceModules() != null){ | |||
| record.setServiceModules(JSON.toJSONString(memberCard.getServiceModules())); | |||
| } | |||
| record.setMemberPriceWord(memberCard.getMemberPriceWord()); | |||
| record.setFapiaoJumpWord(memberCard.getFapiaoJumpWord()); | |||
| if(memberCard.getGuide() != null){ | |||
| record.setGuide(JSON.toJSONString(memberCard.getGuide())); | |||
| } | |||
| // MemberCardResult.UserInformation userInformation = memberCard.getUserInformation(); | |||
| // List<MemberCardResult.CommonField> commonFieldList = userInformation.getCommonFieldList(); | |||
| // String phone = null, name = null, avatarUrl = null; | |||
| // Integer sex = null; | |||
| // for (MemberCardResult.CommonField commonField:commonFieldList) { | |||
| // /** | |||
| // * 平台提供了一些通用的开卡字段供开发者选用 | |||
| // * USER_FORM_FLAG_MOBILE:手机号 | |||
| // * USER_FORM_FLAG_SEX:性别 | |||
| // * USER_FORM_FLAG_NAME:姓名 | |||
| // * USER_FORM_FLAG_BIRTHDAY:生日 | |||
| // * USER_FORM_FLAG_ADDRESS:地址 | |||
| // * USER_FORM_FLAG_EMAIL:邮箱 | |||
| // * USER_FORM_FLAG_CITY:城市 | |||
| // */ | |||
| // if("USER_FORM_FLAG_MOBILE".equals(commonField.getName())){ | |||
| // phone = commonField.getValue(); | |||
| // }else if("USER_FORM_FLAG_SEX".equals(commonField.getName())){ | |||
| // if("男".equals(commonField.getValue())){ | |||
| // sex = 1; | |||
| // }else if("女".equals(commonField.getValue())){ | |||
| // sex = 2; | |||
| // }else{ | |||
| // sex = 0; | |||
| // } | |||
| // }else if("USER_FORM_FLAG_NAME".equals(commonField.getName())){ | |||
| // name = commonField.getValue(); | |||
| // } | |||
| // } | |||
| // WxCUserBasicInfo basicInfo = wxCUserBasicInfoService.registerByPhone(tenantEntity, phone, null,name, sex, avatarUrl); | |||
| WxMemberCard old = wxMemberCardMapper.getByCode(record); | |||
| if(old != null){ | |||
| record.setId(old.getId()); | |||
| } | |||
| // if(basicInfo != null && (old == null || !basicInfo.getId().equals(old.getUserId()))){ | |||
| // record.setUserId(basicInfo.getId()); | |||
| // } | |||
| this.saveorupdate(record); | |||
| // if(record.getUserId() != null){ | |||
| // this.sendsyncMemberCardBonusMsg(tenantEntity,record.getUserId(),null); | |||
| //// this.sendsyncMemberCardLevelMsg(tenantEntity,record.getUserId(),null); | |||
| // } | |||
| return new ResultData(); | |||
| } catch (WxPayException e) { | |||
| e.printStackTrace(); | |||
| return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(),e.getMessage()); | |||
| } | |||
| } | |||
| @Override | |||
| public void sendSyncMemberCardMsg(TenantEntity tenantEntity, String card_id, String code) { | |||
| SyncMemberCardMsg msg = new SyncMemberCardMsg(); | |||
| msg.updateTenantInfo(tenantEntity); | |||
| msg.setMsgType(EnumMsgRecordType.SYNC_MEMBER_CARD.getCode()); | |||
| msg.setCardId(card_id); | |||
| msg.setCode(code); | |||
| mqBaseProducer.sendMessage(msg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); | |||
| } | |||
| @Override | |||
| public ResultData syncMemberCardLevel(TenantEntity tenantEntity, String card_id, String code,String markid, | |||
| String level, Boolean need_inform_level) { | |||
| WxAppinfo cAppInfo = wxAppinfoService.getCAppInfoFromRedis(tenantEntity.getTenantId(), EnumAppPlat.WX); | |||
| if(cAppInfo == null){ | |||
| return new ResultData(ErrorCode.APP_ID_NOT_FOUND); | |||
| } | |||
| WxPayAccount payAccount = wxPayAccountService.getByIdFromRedis(cAppInfo.getPayId()); | |||
| if(payAccount == null){ | |||
| return new ResultData(ErrorCode.API_KEY_NOT_FOUND); | |||
| } | |||
| if(!EnumBusinessType.BUSINESS_3.getCode().equals(payAccount.getBusinessType())){ | |||
| return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(),"未开通商圈或不支持此项操作"); | |||
| } | |||
| try { | |||
| WxPayService wxPayService = maUtil.getWxPayServiceBySelfModel(cAppInfo, payAccount); | |||
| MemberCardUpdRequest request = new MemberCardUpdRequest(); | |||
| request.setLevel(level); | |||
| request.setOutRequestNo(markid); | |||
| request.setNeedInformLevel(need_inform_level); | |||
| wxPayService.getMemberCardService().updMemberCard(card_id,code,request); | |||
| this.sendSyncMemberCardMsg(tenantEntity,card_id,code); | |||
| return new ResultData(); | |||
| } catch (WxPayException e) { | |||
| e.printStackTrace(); | |||
| return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(),e.getMessage()); | |||
| } | |||
| } | |||
| @Override | |||
| public void sendsyncMemberCardLevelMsg(TenantEntity tenantEntity, Long baseUserId, Long scoreHistoryId) { | |||
| //todo 暂不推送等级给商圈 | |||
| // AfterAddScoreMsg msg = new AfterAddScoreMsg(); | |||
| // msg.updateTenantInfo(tenantEntity); | |||
| // msg.setMsgType(EnumMsgRecordType.AFTER_ADD_SCORE.getCode()); | |||
| // msg.setBasicUserId(baseUserId); | |||
| // msg.setScoreHistoryId(scoreHistoryId); | |||
| // mqBaseProducer.sendMessage(msg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); | |||
| } | |||
| @Override | |||
| public ResultData syncMemberCardBonus(TenantEntity tenantEntity, String card_id, String code,String markid, | |||
| int before_bonus_value,int bonus_value, Boolean need_inform_bonus) { | |||
| WxAppinfo cAppInfo = wxAppinfoService.getCAppInfoFromRedis(tenantEntity.getTenantId(), EnumAppPlat.WX); | |||
| if(cAppInfo == null){ | |||
| return new ResultData(ErrorCode.APP_ID_NOT_FOUND); | |||
| } | |||
| WxPayAccount payAccount = wxPayAccountService.getByIdFromRedis(cAppInfo.getPayId()); | |||
| if(payAccount == null){ | |||
| return new ResultData(ErrorCode.API_KEY_NOT_FOUND); | |||
| } | |||
| if(!EnumBusinessType.BUSINESS_3.getCode().equals(payAccount.getBusinessType())){ | |||
| return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(),"未开通商圈或不支持此项操作"); | |||
| } | |||
| try { | |||
| WxPayService wxPayService = maUtil.getWxPayServiceBySelfModel(cAppInfo, payAccount); | |||
| MemberCardRightsRequest request = new MemberCardRightsRequest(); | |||
| request.setBeforeBonusValue(before_bonus_value); | |||
| request.setBonusValue(bonus_value); | |||
| request.setAddBonusValue(bonus_value - before_bonus_value); | |||
| request.setOutRequestNo(markid); | |||
| request.setNeedInformBonus(need_inform_bonus); | |||
| wxPayService.getMemberCardService().setMemberCardRights(card_id,code,request); | |||
| this.sendSyncMemberCardMsg(tenantEntity,card_id,code); | |||
| return new ResultData(); | |||
| } catch (WxPayException e) { | |||
| e.printStackTrace(); | |||
| return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(),e.getMessage()); | |||
| } | |||
| } | |||
| @Override | |||
| public void sendsyncMemberCardBonusMsg(TenantEntity tenantEntity, Long cuserId, Long baseUserId, Long creditHistoryId) { | |||
| AfterAddCreditMsg msg = new AfterAddCreditMsg(); | |||
| msg.updateTenantInfo(tenantEntity); | |||
| msg.setMsgType(EnumMsgRecordType.AFTER_ADD_CREDIT.getCode()); | |||
| if(cuserId != null){ | |||
| msg.setCuserId(cuserId); | |||
| }else if(baseUserId != null){ | |||
| msg.setBasicUserId(baseUserId); | |||
| }else { | |||
| logger.error("商圈会员积分同步消息发送失败"); | |||
| } | |||
| msg.setCreditHistoryId(creditHistoryId); | |||
| mqBaseProducer.sendMessage(msg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); | |||
| } | |||
| } | |||
| @@ -1,655 +0,0 @@ | |||
| package com.iformall.service.impl; | |||
| import com.github.pagehelper.PageHelper; | |||
| import com.github.pagehelper.PageInfo; | |||
| import com.iformall.common.ErrorCode; | |||
| import com.iformall.common.IdWorker; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.domain.po.*; | |||
| import com.iformall.domain.po.base.TenantEntity; | |||
| import com.iformall.domain.vo.WxThirdPartyOrdersVo; | |||
| import com.iformall.enums.*; | |||
| import com.iformall.exception.MallinkException; | |||
| import com.iformall.mapper.WxThirdPartyOrdersMapper; | |||
| import com.iformall.service.*; | |||
| import com.iformall.utils.RedisLock; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Service; | |||
| import org.springframework.transaction.annotation.Propagation; | |||
| import org.springframework.transaction.annotation.Transactional; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| import javax.servlet.http.HttpServletResponse; | |||
| import java.math.BigDecimal; | |||
| import java.util.Date; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| @Service | |||
| public class WxThirdPartyOrdersServiceImpl implements WxThirdPartyOrdersService { | |||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||
| private static final String THIRD_CIRCLE_KEY = "CIRCLE:TH:"; | |||
| @Autowired | |||
| ExcelService excelService; | |||
| @Autowired | |||
| RedisLock redisLock; | |||
| @Autowired | |||
| WxThirdPartyOrdersMapper wxThirdPartyOrdersMapper; | |||
| @Autowired | |||
| WxMerchantService wxMerchantService; | |||
| @Autowired | |||
| WxCUserService wxCUserService; | |||
| @Autowired | |||
| WxCUserBasicInfoService wxCUserBasicInfoService; | |||
| @Autowired | |||
| WxCreditHistoryService wxCreditHistoryService; | |||
| @Autowired | |||
| WxCouponSendService wxCouponSendService; | |||
| @Override | |||
| public PageInfo<WxThirdPartyOrders> listAsPage(WxThirdPartyOrders record, Integer pageIndex, Integer pageSize) { | |||
| return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxThirdPartyOrdersMapper.findList(record)); | |||
| } | |||
| @Override | |||
| public WxThirdPartyOrders getById(Long id, String tenantId) { | |||
| WxThirdPartyOrders recordQ = new WxThirdPartyOrders(); | |||
| recordQ.setId(id); | |||
| recordQ.setTenantId(tenantId); | |||
| return wxThirdPartyOrdersMapper.getById(recordQ); | |||
| } | |||
| @Override | |||
| public WxThirdPartyOrders detail(Long id, TenantEntity tenantInfo) { | |||
| WxThirdPartyOrders order = this.getById(id, tenantInfo.getTenantId()); | |||
| if(order.getMerchantId() != null){ | |||
| order.setMerchant(wxMerchantService.selectById(order.getMerchantId())); | |||
| } | |||
| if(order.getCUserId() != null){ | |||
| order.setBasicInfo(wxCUserBasicInfoService.getById(id,tenantInfo.getFinalTenantId())); | |||
| } | |||
| // if(order.getIsRefund() != null && order.getIsRefund().equals(EnumYesOrNo.YES.getCode())){ | |||
| // | |||
| // } | |||
| return order; | |||
| } | |||
| @Override | |||
| public WxThirdPartyOrders getOrderByTransactionId(EnumThirdOrderType orderType, String transactionId, String tenantId) { | |||
| WxThirdPartyOrders recordQ = new WxThirdPartyOrders(); | |||
| recordQ.setSourceType(orderType.getCode()); | |||
| recordQ.setTransactionId(transactionId); | |||
| recordQ.setTenantId(tenantId); | |||
| return wxThirdPartyOrdersMapper.getOrderByTransactionId(recordQ); | |||
| } | |||
| @Override | |||
| public WxThirdPartyOrders getRefundOrderByRefundId(EnumThirdOrderType orderType,String refundId, String tenantId) { | |||
| WxThirdPartyOrders recordQ = new WxThirdPartyOrders(); | |||
| recordQ.setSourceType(orderType.getCode()); | |||
| recordQ.setRefundId(refundId); | |||
| recordQ.setTenantId(tenantId); | |||
| return wxThirdPartyOrdersMapper.getRefundOrderByRefundId(recordQ); | |||
| } | |||
| @Override | |||
| public List<WxThirdPartyOrders> getRefundOrderByTransactionId(EnumThirdOrderType orderType, String transactionId, String tenantId) { | |||
| WxThirdPartyOrders recordQ = new WxThirdPartyOrders(); | |||
| recordQ.setSourceType(orderType.getCode()); | |||
| recordQ.setTransactionId(transactionId); | |||
| recordQ.setTenantId(tenantId); | |||
| return wxThirdPartyOrdersMapper.getRefundOrderByTransactionId(recordQ); | |||
| } | |||
| @Override | |||
| @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | |||
| public ResultData createOrder(WxThirdPartyOrders record) { | |||
| String lockKey = StringUtils.join(THIRD_CIRCLE_KEY,record.getTransactionId(), ":",EnumYesOrNo.NO.getCode(),":", "lock"); | |||
| long time = System.currentTimeMillis() + 2000; | |||
| String timeStr = String.valueOf(time); | |||
| if (redisLock.lock2(lockKey, timeStr)) { | |||
| WxThirdPartyOrders byTransactionId = this.getOrderByTransactionId(EnumThirdOrderType.RMB_PAY,record.getTransactionId(),record.getTenantId()); | |||
| if(byTransactionId != null){ | |||
| logger.error("--第三方付款--通知消息已存在---byTransactionId="+byTransactionId.getTransactionId()); | |||
| redisLock.unlock(lockKey, timeStr); | |||
| throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "订单数据已存在"); | |||
| }else{ | |||
| Date now = new Date(); | |||
| final IdWorker idWorker = IdWorker.get(); | |||
| record.setId(idWorker.nextId()); | |||
| record.setCreateTime(now); | |||
| record.setUpdateTime(now); | |||
| record.setSourceType(EnumThirdOrderType.RMB_PAY.getCode()); | |||
| //TODO 第三方获取门店(标识可能发生变化) | |||
| // WxMerchant wxMerchant = wxMerchantService.getById(Long.parseLong(record.getShopNumber())); | |||
| WxMerchant wxMerchant = wxMerchantService.getMerchantByEncode(record.getShopNumber()); | |||
| if(wxMerchant != null){ | |||
| record.setMerchantId(wxMerchant.getId()); | |||
| record.setMerchantName(wxMerchant.getName()); | |||
| // record.setShopName(wxMerchant.getName()); | |||
| }else{ | |||
| if(StringUtils.isBlank(record.getShopName())){ | |||
| // record.setShopName("第三方门店"); | |||
| record.setMerchantName("未知门店"); | |||
| } | |||
| logger.info("--第三方付款通知消息未找到门店--shopName="+record.getShopName()+"&shopNumber="+record.getShopNumber()); | |||
| } | |||
| WxCUserBasicInfo basicInfo = null; | |||
| Long userId = null; | |||
| try { | |||
| userId = Long.parseLong(record.getUserNumber()); | |||
| } catch (NumberFormatException e) {} | |||
| if(userId != null){ | |||
| basicInfo = wxCUserBasicInfoService.getById(userId, record.getFinalTenantId()); | |||
| } | |||
| if(basicInfo == null && StringUtils.isNotBlank(record.getUserPhone())){ | |||
| basicInfo = wxCUserBasicInfoService.registerByPhone(record, record.getUserPhone(),null,null,null,null); | |||
| } | |||
| if(basicInfo != null){ | |||
| record.setCUserId(basicInfo.getId()); | |||
| record.setCUserNickName(basicInfo.getNickName()); | |||
| record.setCUserPhone(basicInfo.getPhone()); | |||
| }else{ | |||
| logger.error("--第三方付款通知消息未找到会员--userPhone="+record.getUserPhone()+"$userNumer="+record.getId()); | |||
| } | |||
| wxThirdPartyOrdersMapper.insertNoticeOrder(record); | |||
| if(record.getCUserId() == null){ | |||
| redisLock.unlock(lockKey, timeStr); | |||
| return new ResultData(0); | |||
| } | |||
| try { | |||
| wxCouponSendService.sendCouponToUser(EnumCouponSendSendType.B_MICROPAY, record,EnumPayWay.PAY_WAY_NOT_UNPAY_B_MA,EnumPayVersion.NO_VERSION); | |||
| } catch (Exception e) { | |||
| logger.error("支付发券: " + e.getMessage()); | |||
| } | |||
| Integer businessId = EnumBusiness.BUSINESS_ID6.getCode(); | |||
| if(wxMerchant != null){ | |||
| businessId = wxMerchant.getBusinessId(); | |||
| } | |||
| WxCreditHistory creditHistory = new WxCreditHistory(); | |||
| creditHistory.setTenantId(record.getFinalTenantId()); | |||
| creditHistory.setOperatorType(EnumUserType.THIRD_CIRCLE.getCode()); | |||
| creditHistory.setOperatorId(record.getCUserId()); | |||
| creditHistory.setCUserId(record.getCUserId()); | |||
| creditHistory.setCreateDate(now); | |||
| creditHistory.setCouponId(record.getId()); | |||
| creditHistory.setBusinessId(businessId); | |||
| creditHistory.setMerchantId(record.getMerchantId()); | |||
| creditHistory.setCreditType(EnumScoreType.CONSUMPTION.getCode()); | |||
| creditHistory.setSpend(record.getPayAmount()); | |||
| creditHistory.setChangePurpose(record.getSourceAppName()+"·消费:商户["+record.getMerchantName()+"] ("+record.getPayAmountStr()+"元) "); | |||
| creditHistory = wxCreditHistoryService.saveOrUpdate(creditHistory,record.getTenantId()); | |||
| Integer creditNum = 0; | |||
| if (creditHistory.getCreditNum() != null) { | |||
| creditNum = creditHistory.getCreditNum(); | |||
| } | |||
| if(creditNum == 0){ | |||
| redisLock.unlock(lockKey, timeStr); | |||
| return new ResultData(0); | |||
| } | |||
| record.setIncreasedPoints(creditNum); | |||
| record.setPointsUpdateTime(creditHistory.getCreateDate()); | |||
| this.updatePoints(record); | |||
| redisLock.unlock(lockKey, timeStr); | |||
| return new ResultData(creditNum); | |||
| } | |||
| }else { | |||
| logger.debug("CacheAspect 读库等待中, key:{}: " + lockKey); | |||
| try { | |||
| Thread.sleep(2000); | |||
| } catch (InterruptedException e) { | |||
| e.printStackTrace(); | |||
| }finally { | |||
| redisLock.unlock(lockKey, timeStr); | |||
| } | |||
| return new ResultData(ErrorCode.SYS_REPEAT_SUBMIT_EXCEPTION); | |||
| } | |||
| } | |||
| @Override | |||
| @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | |||
| public ResultData insertRefundNoticeOrder(WxThirdPartyOrders record) { | |||
| WxThirdPartyOrders order = this.getOrderByTransactionId(EnumThirdOrderType.RMB_PAY,record.getTransactionId(),record.getTenantId()); | |||
| if(order == null){ | |||
| logger.error("--第三方退款--付款消息未找到--transactionId="+record.getTransactionId()); | |||
| throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "付款消息未找到"); | |||
| }else{ | |||
| String lockKey = StringUtils.join(THIRD_CIRCLE_KEY,record.getRefundId(), ":",EnumYesOrNo.YES.getCode(),":", "lock"); | |||
| long time = System.currentTimeMillis() + 2000; | |||
| String timeStr = String.valueOf(time); | |||
| if (redisLock.lock2(lockKey, timeStr)) { | |||
| WxThirdPartyOrders refundOrder = this.getRefundOrderByRefundId(EnumThirdOrderType.RMB_PAY,record.getRefundId(),record.getTenantId()); | |||
| if(refundOrder != null){ | |||
| logger.error("--第三方退款--退款消息已存在---RefundId="+record.getRefundId()); | |||
| redisLock.unlock(lockKey, timeStr); | |||
| throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "退款数据已存在"); | |||
| }else{ | |||
| List<WxThirdPartyOrders> refundOrders = this.getRefundOrderByTransactionId(EnumThirdOrderType.RMB_PAY,record.getTransactionId(),record.getTenantId()); | |||
| Integer amount = order.getPayAmount(); | |||
| Integer increasedPoints = order.getIncreasedPoints(); | |||
| Integer refundAmount = 0; | |||
| Integer refundIncreasedPoints = 0; | |||
| if(refundOrders != null && refundOrders.size()>0){ | |||
| for (WxThirdPartyOrders ro:refundOrders) { | |||
| refundAmount += ro.getRefundAmount(); | |||
| refundIncreasedPoints += ro.getIncreasedPoints(); | |||
| } | |||
| } | |||
| if(record.getRefundAmount() == null){ | |||
| record.setRefundAmount(order.getPayAmount()-refundAmount); | |||
| } | |||
| if(refundAmount >= amount){ | |||
| logger.error("--第三方退款--已经退款--transactionId="+record.getTransactionId()); | |||
| redisLock.unlock(lockKey, timeStr); | |||
| throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "已经退款"); | |||
| }else if((refundAmount + record.getRefundAmount()) > amount ){ | |||
| logger.error("--第三方退款--退款金额超限--transactionId="+record.getTransactionId()); | |||
| redisLock.unlock(lockKey, timeStr); | |||
| throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "退款金额超限"); | |||
| }else{ | |||
| Date now = new Date(); | |||
| final IdWorker idWorker = IdWorker.get(); | |||
| record.setId(idWorker.nextId()); | |||
| record.setCreateTime(now); | |||
| record.setUpdateTime(now); | |||
| record.setSourceType(EnumThirdOrderType.RMB_PAY.getCode()); | |||
| record.setShopName(order.getShopName()); | |||
| record.setShopNumber(order.getShopNumber()); | |||
| record.setUserPhone(order.getUserPhone()); | |||
| record.setUserNumber(order.getUserNumber()); | |||
| record.setAmount(order.getAmount()); | |||
| record.setPayAmount(order.getPayAmount()); | |||
| record.setCUserId(order.getCUserId()); | |||
| record.setCUserNickName(order.getCUserNickName()); | |||
| record.setCUserPhone(order.getCUserPhone()); | |||
| record.setMerchantId(order.getMerchantId()); | |||
| record.setMerchantName(order.getMerchantName()); | |||
| wxThirdPartyOrdersMapper.insertRefundNoticeOrder(record); | |||
| if((refundAmount + record.getRefundAmount()) == amount){ | |||
| order.setOrderStatus(2);//全额退款 | |||
| }else{ | |||
| order.setOrderStatus(1);//部分退款 | |||
| } | |||
| order.setUpdateTime(now); | |||
| wxThirdPartyOrdersMapper.updateOrderStatus(order); | |||
| int creditNum = 0; | |||
| if(order.getEarnPoints().equals(EnumYesOrNo.YES.getCode())){ | |||
| WxCreditHistory creditHistory = new WxCreditHistory(); | |||
| creditHistory.setTenantId(record.getFinalTenantId()); | |||
| creditHistory.setOperatorType(EnumUserType.THIRD_CIRCLE.getCode()); | |||
| creditHistory.setOperatorId(record.getCUserId()); | |||
| creditHistory.setCUserId(record.getCUserId()); | |||
| creditHistory.setCreateDate(new Date()); | |||
| creditHistory.setCouponId(record.getId()); | |||
| creditHistory.setMerchantId(record.getMerchantId()); | |||
| creditHistory.setCreditType(EnumScoreType.REFUND_CONSUMPTION.getCode()); | |||
| int points = 0; | |||
| if((refundAmount + record.getRefundAmount()) == amount){ | |||
| points = increasedPoints - refundIncreasedPoints; | |||
| }else{ | |||
| points = new BigDecimal(order.getIncreasedPoints()) | |||
| .divide(new BigDecimal(order.getPayAmount()),2,BigDecimal.ROUND_HALF_UP) | |||
| .multiply(new BigDecimal(record.getRefundAmount())) | |||
| .intValue(); | |||
| } | |||
| creditHistory.setCreditNum(points); | |||
| creditHistory.setSpend(0-record.getRefundAmount()); | |||
| creditHistory.setChangePurpose(record.getSourceAppName()+"·消费退款:商户["+record.getMerchantName()+"] ("+record.getRefundAmountStr()+"元) "); | |||
| creditHistory = wxCreditHistoryService.saveOrUpdate(creditHistory,record.getTenantId()); | |||
| if (creditHistory.getCreditNum() != null) { | |||
| creditNum = creditHistory.getCreditNum(); | |||
| } | |||
| if(creditNum != 0){ | |||
| record.setIncreasedPoints(creditNum); | |||
| record.setPointsUpdateTime(creditHistory.getCreateDate()); | |||
| this.updatePoints(record); | |||
| } | |||
| } | |||
| redisLock.unlock(lockKey, timeStr); | |||
| return new ResultData(creditNum); | |||
| } | |||
| } | |||
| }else { | |||
| logger.debug("CacheAspect 读库等待中, key:{}: " + lockKey); | |||
| try { | |||
| Thread.sleep(2000); | |||
| } catch (InterruptedException e) { | |||
| e.printStackTrace(); | |||
| }finally { | |||
| redisLock.unlock(lockKey, timeStr); | |||
| } | |||
| return new ResultData(ErrorCode.SYS_REPEAT_SUBMIT_EXCEPTION); | |||
| } | |||
| } | |||
| } | |||
| @Override | |||
| public void updatePoints(WxThirdPartyOrders record) { | |||
| record.setUpdateTime(new Date()); | |||
| wxThirdPartyOrdersMapper.updatePoints(record); | |||
| } | |||
| @Override | |||
| @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | |||
| public void pointDeduction(WxThirdPartyOrders record) { | |||
| WxCUserBasicInfo basicInfo = null; | |||
| Long userId = null; | |||
| try { | |||
| userId = Long.parseLong(record.getUserNumber()); | |||
| } catch (NumberFormatException e) {} | |||
| if(userId != null){ | |||
| basicInfo = wxCUserBasicInfoService.getById(userId, record.getFinalTenantId()); | |||
| } | |||
| if(basicInfo == null){ | |||
| basicInfo = wxCUserBasicInfoService.registerByPhone(record, record.getUserPhone(),null,null,null,null); | |||
| } | |||
| if(basicInfo == null){ | |||
| logger.error("--第三方积分订单--未找到用户---userId="+record.getUserNumber()); | |||
| throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "未找到用户"); | |||
| } | |||
| record.setCUserId(basicInfo.getId()); | |||
| record.setCUserNickName(basicInfo.getNickName()); | |||
| record.setCUserPhone(basicInfo.getPhone()); | |||
| String lockKey = StringUtils.join(THIRD_CIRCLE_KEY,record.getTransactionId(), ":CP:", "lock"); | |||
| long time = System.currentTimeMillis() + 2000; | |||
| String timeStr = String.valueOf(time); | |||
| if (redisLock.lock2(lockKey, timeStr)) { | |||
| WxThirdPartyOrders byTransactionId = this.getOrderByTransactionId(EnumThirdOrderType.CREDIT_PAY,record.getTransactionId(),record.getTenantId()); | |||
| if(byTransactionId != null){ | |||
| logger.error("--第三方积分订单--数据已存在---byTransactionId="+byTransactionId.getTransactionId()); | |||
| redisLock.unlock(lockKey, timeStr); | |||
| throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "订单数据已存在"); | |||
| }else{ | |||
| Date now = new Date(); | |||
| final IdWorker idWorker = IdWorker.get(); | |||
| record.setId(idWorker.nextId()); | |||
| record.setCreateTime(now); | |||
| record.setUpdateTime(now); | |||
| record.setSourceType(EnumThirdOrderType.CREDIT_PAY.getCode()); | |||
| //TODO 第三方获取门店(标识可能发生变化) | |||
| // WxMerchant wxMerchant = wxMerchantService.getById(Long.parseLong(record.getShopNumber())); | |||
| WxMerchant wxMerchant = wxMerchantService.getMerchantByEncode(record.getShopNumber()); | |||
| if(wxMerchant != null){ | |||
| record.setMerchantId(wxMerchant.getId()); | |||
| record.setMerchantName(wxMerchant.getName()); | |||
| // record.setShopName(wxMerchant.getName()); | |||
| }else{ | |||
| if(StringUtils.isBlank(record.getShopName())){ | |||
| // record.setShopName("第三方门店"); | |||
| record.setMerchantName("未知门店"); | |||
| } | |||
| logger.info("--第三方积分抵扣未找到门店--shopName="+record.getShopName()+"&shopNumber="+record.getShopNumber()); | |||
| } | |||
| WxCreditHistory creditHistory = new WxCreditHistory(); | |||
| creditHistory.setTenantId(record.getFinalTenantId()); | |||
| creditHistory.setCUserId(basicInfo.getId()); | |||
| creditHistory.setOperatorId(basicInfo.getId()); | |||
| creditHistory.setOperatorType(EnumUserType.THIRD_CIRCLE.getCode()); | |||
| creditHistory.setCreditNum(record.getPayAmount()); | |||
| creditHistory.setCreditType(EnumScoreType.CHANGE_CREDIT.getCode()); | |||
| creditHistory.setChangePurpose(record.getSourceAppName()+"·积分抵扣-"+record.getPayAmount()+"("+record.getSummary()+")"); | |||
| creditHistory.setCouponId(record.getId()); | |||
| creditHistory = wxCreditHistoryService.saveOrUpdate(creditHistory, record.getTenantId()); | |||
| Integer creditNum = 0; | |||
| if (creditHistory.getCreditNum() != null) { | |||
| creditNum = creditHistory.getCreditNum(); | |||
| } | |||
| if(creditNum == 0){ | |||
| redisLock.unlock(lockKey, timeStr); | |||
| throw new MallinkException(ErrorCode.CREDIT_ZERO.getCode(), "本次扣减积分为0"); | |||
| } | |||
| wxThirdPartyOrdersMapper.insertNoticeOrder(record); | |||
| } | |||
| redisLock.unlock(lockKey, timeStr); | |||
| }else{ | |||
| logger.debug("CacheAspect 读库等待中, key:{}: " + lockKey); | |||
| try { | |||
| Thread.sleep(2000); | |||
| } catch (InterruptedException e) { | |||
| e.printStackTrace(); | |||
| }finally { | |||
| redisLock.unlock(lockKey, timeStr); | |||
| } | |||
| } | |||
| } | |||
| @Override | |||
| @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | |||
| public void pointRefund(WxThirdPartyOrders record) { | |||
| WxThirdPartyOrders order = this.getOrderByTransactionId(EnumThirdOrderType.CREDIT_PAY,record.getTransactionId(),record.getTenantId()); | |||
| if(order == null){ | |||
| logger.error("--第三方积分退款--积分付款消息未找到--transactionId="+record.getTransactionId()); | |||
| throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "积分抵扣订单未找到"); | |||
| }else{ | |||
| String lockKey = StringUtils.join(THIRD_CIRCLE_KEY,record.getRefundId(), ":CPR:", "lock"); | |||
| long time = System.currentTimeMillis() + 2000; | |||
| String timeStr = String.valueOf(time); | |||
| if (redisLock.lock2(lockKey, timeStr)) { | |||
| // WxThirdPartyOrders refundOrder = this.getRefundOrderByRefundId(EnumThirdOrderType.CREDIT_PAY,record.getRefundId(),record.getTenantId()); | |||
| // if(refundOrder != null){ | |||
| // logger.error("--第三方积分退款--退款消息已存在---RefundId="+record.getRefundId()); | |||
| // redisLock.unlock(lockKey, timeStr); | |||
| // throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "退款数据已存在"); | |||
| // }else{ | |||
| List<WxThirdPartyOrders> refundOrders = this.getRefundOrderByTransactionId(EnumThirdOrderType.CREDIT_PAY,record.getTransactionId(),record.getTenantId()); | |||
| if(refundOrders != null && refundOrders.size()>0){ | |||
| logger.error("--第三方积分退款--已经退款--transactionId="+record.getTransactionId()); | |||
| redisLock.unlock(lockKey, timeStr); | |||
| throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "已退款"); | |||
| }else{ | |||
| Date now = new Date(); | |||
| final IdWorker idWorker = IdWorker.get(); | |||
| record.setId(idWorker.nextId()); | |||
| record.setCreateTime(now); | |||
| record.setUpdateTime(now); | |||
| record.setSourceType(EnumThirdOrderType.CREDIT_PAY.getCode()); | |||
| record.setRefundAmount(order.getPayAmount()); | |||
| record.setShopName(order.getShopName()); | |||
| record.setShopNumber(order.getShopNumber()); | |||
| record.setUserPhone(order.getUserPhone()); | |||
| record.setUserNumber(order.getUserNumber()); | |||
| record.setAmount(order.getAmount()); | |||
| record.setPayAmount(order.getPayAmount()); | |||
| record.setCUserId(order.getCUserId()); | |||
| record.setCUserNickName(order.getCUserNickName()); | |||
| record.setCUserPhone(order.getCUserPhone()); | |||
| record.setMerchantId(order.getMerchantId()); | |||
| record.setMerchantName(order.getMerchantName()); | |||
| wxThirdPartyOrdersMapper.insertRefundNoticeOrder(record); | |||
| order.setOrderStatus(2);//全额退款 | |||
| order.setUpdateTime(now); | |||
| wxThirdPartyOrdersMapper.updateOrderStatus(order); | |||
| int creditNum = 0; | |||
| // if(order.getEarnPoints().equals(EnumYesOrNo.YES.getCode())){ | |||
| WxCreditHistory creditHistory = new WxCreditHistory(); | |||
| creditHistory.setTenantId(record.getFinalTenantId()); | |||
| creditHistory.setOperatorType(EnumUserType.THIRD_CIRCLE.getCode()); | |||
| creditHistory.setOperatorId(record.getCUserId()); | |||
| creditHistory.setCUserId(record.getCUserId()); | |||
| creditHistory.setCreateDate(new Date()); | |||
| creditHistory.setCouponId(record.getId()); | |||
| creditHistory.setMerchantId(record.getMerchantId()); | |||
| creditHistory.setCreditType(EnumScoreType.REFUND_REDUCE_CREDIT.getCode()); | |||
| creditHistory.setCreditNum(record.getRefundAmount()); | |||
| creditHistory.setSpend(0-record.getRefundAmount()); | |||
| creditHistory.setChangePurpose(record.getSourceAppName()+"·积分抵扣退款:商户["+record.getMerchantName()+"] (-"+record.getRefundAmount()+") "); | |||
| creditHistory = wxCreditHistoryService.saveOrUpdate(creditHistory,record.getTenantId()); | |||
| if (creditHistory.getCreditNum() != null) { | |||
| creditNum = creditHistory.getCreditNum(); | |||
| } | |||
| if(creditNum != 0){ | |||
| record.setIncreasedPoints(creditNum); | |||
| record.setPointsUpdateTime(creditHistory.getCreateDate()); | |||
| this.updatePoints(record); | |||
| } | |||
| // } | |||
| redisLock.unlock(lockKey, timeStr); | |||
| // return new ResultData(creditNum); | |||
| } | |||
| // } | |||
| }else { | |||
| logger.debug("CacheAspect 读库等待中, key:{}: " + lockKey); | |||
| try { | |||
| Thread.sleep(2000); | |||
| } catch (InterruptedException e) { | |||
| e.printStackTrace(); | |||
| }finally { | |||
| redisLock.unlock(lockKey, timeStr); | |||
| } | |||
| // return new ResultData(ErrorCode.SYS_REPEAT_SUBMIT_EXCEPTION); | |||
| } | |||
| } | |||
| } | |||
| @Override | |||
| @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | |||
| public void pointChange(WxThirdPartyOrders record) { | |||
| WxCUserBasicInfo basicInfo = null; | |||
| Long userId = null; | |||
| try { | |||
| userId = Long.parseLong(record.getUserNumber()); | |||
| } catch (NumberFormatException e) {} | |||
| if(userId != null){ | |||
| basicInfo = wxCUserBasicInfoService.getById(userId, record.getFinalTenantId()); | |||
| } | |||
| if(basicInfo == null){ | |||
| basicInfo = wxCUserBasicInfoService.registerByPhone(record, record.getUserPhone(),null,null,null,null); | |||
| } | |||
| if(basicInfo == null){ | |||
| logger.error("--第三方积分变动--未找到用户---userId="+record.getUserNumber()); | |||
| throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "未找到用户"); | |||
| } | |||
| record.setCUserId(basicInfo.getId()); | |||
| record.setCUserNickName(basicInfo.getNickName()); | |||
| record.setCUserPhone(basicInfo.getPhone()); | |||
| String lockKey = StringUtils.join(THIRD_CIRCLE_KEY,record.getTransactionId(), ":PACC:", "lock"); | |||
| long time = System.currentTimeMillis() + 2000; | |||
| String timeStr = String.valueOf(time); | |||
| if (redisLock.lock2(lockKey, timeStr)) { | |||
| WxThirdPartyOrders byTransactionId = this.getOrderByTransactionId(EnumThirdOrderType.CREDIT_CHANGE,record.getTransactionId(),record.getTenantId()); | |||
| if(byTransactionId != null){ | |||
| logger.error("--第三方积分变动--数据已存在---byTransactionId="+byTransactionId.getTransactionId()); | |||
| redisLock.unlock(lockKey, timeStr); | |||
| throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "订单数据已存在"); | |||
| }else{ | |||
| Date now = new Date(); | |||
| final IdWorker idWorker = IdWorker.get(); | |||
| record.setId(idWorker.nextId()); | |||
| record.setCreateTime(now); | |||
| record.setUpdateTime(now); | |||
| record.setSourceType(EnumThirdOrderType.CREDIT_CHANGE.getCode()); | |||
| WxCreditHistory creditHistory = new WxCreditHistory(); | |||
| creditHistory.setTenantId(record.getFinalTenantId()); | |||
| creditHistory.setCUserId(basicInfo.getId()); | |||
| creditHistory.setOperatorId(basicInfo.getId()); | |||
| creditHistory.setOperatorType(EnumUserType.THIRD_CIRCLE.getCode()); | |||
| creditHistory.setCreditNum(record.getPayAmount()); | |||
| creditHistory.setCreditType(EnumScoreType.POINT_CHANGE.getCode()); | |||
| if(creditHistory.getCreditNum() > 0){ | |||
| creditHistory.setChangePurpose(record.getSourceAppName()+"·积分新增"+record.getPayAmount()+"("+record.getSummary()+")"); | |||
| }else if(creditHistory.getCreditNum() < 0){ | |||
| creditHistory.setChangePurpose(record.getSourceAppName()+"·积分扣减"+record.getPayAmount()+"("+record.getSummary()+")"); | |||
| } | |||
| creditHistory.setCouponId(record.getId()); | |||
| creditHistory = wxCreditHistoryService.saveOrUpdate(creditHistory, record.getTenantId()); | |||
| Integer creditNum = 0; | |||
| if (creditHistory.getCreditNum() != null) { | |||
| creditNum = creditHistory.getCreditNum(); | |||
| } | |||
| if(creditNum == 0){ | |||
| redisLock.unlock(lockKey, timeStr); | |||
| throw new MallinkException(ErrorCode.CREDIT_ZERO.getCode(), "本次扣减积分为0"); | |||
| } | |||
| wxThirdPartyOrdersMapper.insertNoticeOrder(record); | |||
| } | |||
| redisLock.unlock(lockKey, timeStr); | |||
| }else{ | |||
| logger.debug("CacheAspect 读库等待中, key:{}: " + lockKey); | |||
| try { | |||
| Thread.sleep(2000); | |||
| } catch (InterruptedException e) { | |||
| e.printStackTrace(); | |||
| }finally { | |||
| redisLock.unlock(lockKey, timeStr); | |||
| } | |||
| } | |||
| } | |||
| @Override | |||
| public void exportData(WxThirdPartyOrders circleOrder, HttpServletRequest request, HttpServletResponse response) { | |||
| List<WxThirdPartyOrders> list = wxThirdPartyOrdersMapper.findList(circleOrder); | |||
| excelService.exportExcel(list, null, "第三方订单交易", WxThirdPartyOrders.class, "第三方订单交易.xlsx", response, false); | |||
| } | |||
| @Override | |||
| public void exportDataVo(WxThirdPartyOrders circleOrder, HttpServletRequest request, HttpServletResponse response) { | |||
| List<WxThirdPartyOrdersVo> list = wxThirdPartyOrdersMapper.findListVo(circleOrder); | |||
| excelService.exportExcel(list, null, "第三方积分抵扣", WxThirdPartyOrdersVo.class, "第三方积分抵扣.xlsx", response, false); | |||
| } | |||
| @Override | |||
| public Integer sumCirclePayment(BusinessCircleBase circleOrder) { | |||
| Integer sumCirclePayment = wxThirdPartyOrdersMapper.sumCirclePayment(circleOrder); | |||
| return sumCirclePayment==null?0:sumCirclePayment; | |||
| } | |||
| @Override | |||
| public Integer sumCircleRefundAmount(BusinessCircleBase circleOrder) { | |||
| Integer sumCircleRefundAmount = wxThirdPartyOrdersMapper.sumCircleRefundAmount(circleOrder); | |||
| return sumCircleRefundAmount==null?0:sumCircleRefundAmount; | |||
| } | |||
| } | |||
| @@ -1,58 +0,0 @@ | |||
| package com.iformall.service.msg.impl; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.domain.po.*; | |||
| import com.iformall.domain.po.base.TenantEntity; | |||
| import com.iformall.domain.po.msg.AfterBusinessCreditMsg; | |||
| import com.iformall.domain.po.msg.AfterCarInOutMsg; | |||
| import com.iformall.domain.po.msg.BaseMsg; | |||
| import com.iformall.enums.EnumAppPlat; | |||
| import com.iformall.enums.EnumBusinessType; | |||
| import com.iformall.enums.EnumCarCmd; | |||
| import com.iformall.mapper.WxCUserMapper; | |||
| import com.iformall.mapper.WxCarCmdLogMapper; | |||
| import com.iformall.pay.WxPayConstant; | |||
| import com.iformall.service.WxAppinfoService; | |||
| import com.iformall.service.WxBusinessCircleOrderService; | |||
| import com.iformall.service.WxCUserCarService; | |||
| import com.iformall.service.WxPayAccountService; | |||
| import com.iformall.service.msg.MsgSendService; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Service; | |||
| /** | |||
| * | |||
| */ | |||
| @Service | |||
| public class AfterBusinessCreditMsgServiceImpl implements MsgSendService { | |||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||
| @Autowired | |||
| private WxBusinessCircleOrderService wxBusinessCircleOrderService; | |||
| @Override | |||
| public void send(BaseMsg baseMsg) throws Exception{ | |||
| AfterBusinessCreditMsg msg = (AfterBusinessCreditMsg)baseMsg; | |||
| TenantEntity tenantEntity = new TenantEntity(); | |||
| tenantEntity.setTenantId(msg.getTenantId()); | |||
| tenantEntity.setParentTenantId(msg.getParentTenantId()); | |||
| try { | |||
| Thread.currentThread().sleep(3000); | |||
| } catch (Exception e) { | |||
| logger.error("sleep error: " + e.getMessage()); | |||
| } | |||
| WxBusinessCircleOrder circleOrder = wxBusinessCircleOrderService.getById(msg.getBusinessCircleOrderId(), tenantEntity.getTenantId()); | |||
| if(circleOrder != null){ | |||
| wxBusinessCircleOrderService.notifyPoints(circleOrder); | |||
| } | |||
| } | |||
| } | |||
| @@ -35,9 +35,6 @@ public class AfterCarInOutMsgServiceImpl implements MsgSendService { | |||
| @Autowired | |||
| private WxPayAccountService wxPayAccountService; | |||
| @Autowired | |||
| private WxBusinessCircleOrderService wxBusinessCircleOrderService; | |||
| @Autowired | |||
| private WxCUserCarService wxCUserCarService; | |||
| @@ -102,9 +99,6 @@ public class AfterCarInOutMsgServiceImpl implements MsgSendService { | |||
| logger.error("车牌未找到用户{}"+plateNumber); | |||
| return; | |||
| } | |||
| ResultData resultData = wxBusinessCircleOrderService.syncParkings(tenantEntity, openId, plateNumber, state, wxCarCmdLog.getCreateDate()); | |||
| logger.info(tenantEntity.getTenantId()+"--"+plateNumber+"--微信商圈同步停车记录{}"+resultData.message); | |||
| } | |||
| } | |||
| @@ -1,232 +0,0 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||
| <mapper namespace="com.iformall.mapper.AliBusinessCircleOrderMapper"> | |||
| <resultMap id="BaseResultMap" type="com.iformall.domain.po.AliBusinessCircleOrder"> | |||
| <id column="id" jdbcType="BIGINT" property="id"/> | |||
| <result column="tenant_id" jdbcType="VARCHAR" property="tenantId"/> | |||
| <result column="parent_tenant_id" jdbcType="VARCHAR" property="parentTenantId" /> | |||
| <result column="notice_id" jdbcType="VARCHAR" property="noticeId" /> | |||
| <result column="notice_create_time" jdbcType="TIMESTAMP" property="noticeCreateTime"/> | |||
| <result column="notice_event_type" jdbcType="VARCHAR" property="noticeEventType" /> | |||
| <result column="summary" jdbcType="VARCHAR" property="summary" /> | |||
| <result column="mall_id" jdbcType="VARCHAR" property="mallId" /> | |||
| <result column="mall_name" jdbcType="VARCHAR" property="mallName" /> | |||
| <result column="mall_store_id" jdbcType="VARCHAR" property="mallStoreId" /> | |||
| <result column="buyer_id" jdbcType="VARCHAR" property="buyerId" /> | |||
| <result column="time_end" jdbcType="TIMESTAMP" property="timeEnd"/> | |||
| <result column="amount" jdbcType="INTEGER" property="amount"/> | |||
| <result column="pay_amount" jdbcType="INTEGER" property="payAmount"/> | |||
| <result column="transaction_id" jdbcType="VARCHAR" property="transactionId" /> | |||
| <result column="create_time" jdbcType="TIMESTAMP" property="createTime"/> | |||
| <result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/> | |||
| <result column="merchant_id" jdbcType="BIGINT" property="merchantId"/> | |||
| <result column="merchant_name" jdbcType="VARCHAR" property="merchantName" /> | |||
| <result column="c_user_id" jdbcType="BIGINT" property="cUserId"/> | |||
| <result column="c_user_nick_name" jdbcType="VARCHAR" property="cUserNickName" /> | |||
| <result column="c_user_phone" jdbcType="VARCHAR" property="cUserPhone" /> | |||
| <result column="earn_points" jdbcType="TINYINT" property="earnPoints"/> | |||
| <result column="increased_points" jdbcType="INTEGER" property="increasedPoints"/> | |||
| <result column="points_update_time" jdbcType="TIMESTAMP" property="pointsUpdateTime"/> | |||
| <result column="is_refund" jdbcType="TINYINT" property="isRefund"/> | |||
| <result column="order_status" jdbcType="TINYINT" property="orderStatus"/> | |||
| <result column="refund_id" jdbcType="VARCHAR" property="refundId" /> | |||
| <result column="refund_amount" jdbcType="INTEGER" property="refundAmount"/> | |||
| </resultMap> | |||
| <sql id="allColumns"> | |||
| `id`, `tenant_id`, `parent_tenant_id`, `notice_id`, `notice_create_time`, `notice_event_type`, | |||
| `summary`,`mall_id`, `mall_name`, `mall_store_id`, `buyer_id`, | |||
| `time_end`, `amount`, `pay_amount`, `transaction_id`, `create_time`, `update_time`, | |||
| `merchant_id`,`merchant_name`, `c_user_id`, `c_user_nick_name`, `c_user_phone`, | |||
| `earn_points`, `increased_points`, `points_update_time`, | |||
| `is_refund`, `order_status`, `refund_id`, `refund_amount` | |||
| </sql> | |||
| <sql id="dynamicWhereConditions"> | |||
| where 1 = 1 | |||
| <if test=" null != id "> | |||
| and `id` = #{id} | |||
| </if> | |||
| <if test=" null != tenantId and '' != tenantId"> | |||
| and `tenant_id` = #{tenantId} | |||
| </if> | |||
| <if test=" null != parentTenantId and '' != parentTenantId"> | |||
| and `parent_tenant_id` = #{parentTenantId} | |||
| </if> | |||
| <if test=" null != mallStoreId and '' != mallStoreId"> | |||
| and `mall_store_id` = #{mallStoreId} | |||
| </if> | |||
| <if test=" null != buyerId and '' != buyerId"> | |||
| and `buyer_id` = #{buyerId} | |||
| </if> | |||
| <if test=" null != noticeId and '' != noticeId"> | |||
| and `notice_id` = #{noticeId} | |||
| </if> | |||
| <if test=" null != startTime "> | |||
| and `time_end` >= #{startTime} | |||
| </if> | |||
| <if test=" null != endTime"> | |||
| and `time_end` < #{endTime} | |||
| </if> | |||
| <if test=" null != transactionId and '' != transactionId"> | |||
| and `transaction_id` = #{transactionId} | |||
| </if> | |||
| <if test=" null != merchantId "> | |||
| and `merchant_id` = #{merchantId} | |||
| </if> | |||
| <if test=" null != merchantName and ''!=merchantName"> | |||
| and `merchant_name` like concat('%', #{merchantName},'%') | |||
| </if> | |||
| <if test=" null != cUserId "> | |||
| and `c_user_id` = #{cUserId} | |||
| </if> | |||
| <if test=" null != cUserNickName and ''!=cUserNickName"> | |||
| and `c_user_nick_name` like concat('%', #{cUserNickName},'%') | |||
| </if> | |||
| <if test=" null != cUserPhone and ''!=cUserPhone"> | |||
| and `c_user_phone` like concat('%', #{cUserPhone},'%') | |||
| </if> | |||
| <if test=" null != earnPoints "> | |||
| and `earn_points` = #{earnPoints} | |||
| </if> | |||
| <if test=" null != isRefund "> | |||
| and `is_refund` = #{isRefund} | |||
| </if> | |||
| <if test=" null != orderStatus "> | |||
| and `order_status` = #{orderStatus} | |||
| </if> | |||
| <if test=" null != refundId and '' != refundId"> | |||
| and `refund_id` = #{refundId} | |||
| </if> | |||
| <if test=" null != ids "> | |||
| and `id` in | |||
| <foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")"> | |||
| #{idItem} | |||
| </foreach> | |||
| </if> | |||
| </sql> | |||
| <select id="findList" parameterType="com.iformall.domain.po.AliBusinessCircleOrder" resultMap="BaseResultMap"> | |||
| select | |||
| <include refid="allColumns"/> | |||
| from ali_business_circle_order | |||
| <include refid="dynamicWhereConditions"/> | |||
| <if test=" null != sortColumns">order by ${sortColumns}</if> | |||
| </select> | |||
| <select id="getById" parameterType="com.iformall.domain.po.AliBusinessCircleOrder" resultMap="BaseResultMap"> | |||
| select | |||
| <include refid="allColumns"/> | |||
| from ali_business_circle_order | |||
| where `id` = #{id} | |||
| and tenant_id=#{tenantId} | |||
| </select> | |||
| <select id="getOrderByTransactionId" parameterType="com.iformall.domain.po.AliBusinessCircleOrder" resultMap="BaseResultMap"> | |||
| select | |||
| <include refid="allColumns"/> | |||
| from ali_business_circle_order | |||
| where `is_refund` = 0 | |||
| and tenant_id = #{tenantId} | |||
| and `transaction_id` = #{transactionId} | |||
| </select> | |||
| <select id="getRefundOrderByRefundId" parameterType="com.iformall.domain.po.AliBusinessCircleOrder" resultMap="BaseResultMap"> | |||
| select | |||
| <include refid="allColumns"/> | |||
| from ali_business_circle_order | |||
| where `is_refund` = 1 | |||
| and tenant_id = #{tenantId} | |||
| and `refund_id` = #{refundId} | |||
| </select> | |||
| <select id="getRefundOrderByTransactionId" parameterType="com.iformall.domain.po.AliBusinessCircleOrder" resultMap="BaseResultMap"> | |||
| select | |||
| <include refid="allColumns"/> | |||
| from ali_business_circle_order | |||
| where `is_refund` = 1 | |||
| and tenant_id = #{tenantId} | |||
| and `transaction_id` = #{transactionId} | |||
| </select> | |||
| <insert id="insertNoticeOrder" parameterType="com.iformall.domain.po.AliBusinessCircleOrder" > | |||
| INSERT INTO ali_business_circle_order ( | |||
| `id`, `tenant_id`, `parent_tenant_id`, `notice_id`, `notice_create_time`, `notice_event_type`, | |||
| `summary`, `mall_id`, `mall_name`, `mall_store_id`, `buyer_id`,`time_end`, `amount`, `pay_amount`, `transaction_id`, `create_time`, `update_time`, | |||
| `merchant_id`,`merchant_name`, `c_user_id`, `c_user_nick_name`, `c_user_phone`, `earn_points`, `is_refund` | |||
| ) | |||
| VALUES( | |||
| #{id},#{tenantId},#{parentTenantId},#{noticeId},#{noticeCreateTime},#{noticeEventType}, | |||
| #{summary},#{mallId},#{mallName},#{mallStoreId},#{buyerId},#{timeEnd},#{amount},#{payAmount},#{transactionId},#{createTime},#{updateTime}, | |||
| #{merchantId},#{merchantName},#{cUserId},#{cUserNickName},#{cUserPhone},0,0 | |||
| ); | |||
| </insert> | |||
| <update id="updatePoints" parameterType="com.iformall.domain.po.AliBusinessCircleOrder"> | |||
| update ali_business_circle_order set | |||
| `earn_points` = 1, `increased_points` = #{increasedPoints}, `points_update_time` = #{pointsUpdateTime}, | |||
| `update_time` = #{updateTime} | |||
| where `id` = #{id} and `tenant_id` = #{tenantId} | |||
| </update> | |||
| <insert id="insertRefundNoticeOrder" parameterType="com.iformall.domain.po.AliBusinessCircleOrder" > | |||
| INSERT INTO ali_business_circle_order ( | |||
| `id`, `tenant_id`, `parent_tenant_id`,`notice_id`, `notice_create_time`, `notice_event_type`, | |||
| `summary`,`mall_id`, `mall_name`, `mall_store_id`, `buyer_id`, `time_end`, `amount`,`pay_amount`, `transaction_id`, `create_time`, `update_time`, | |||
| `merchant_id`,`merchant_name`, `c_user_id`, `c_user_nick_name`, `c_user_phone`, `earn_points`, `is_refund`, `refund_id`, `refund_amount` | |||
| ) | |||
| VALUES( | |||
| #{id},#{tenantId},#{parentTenantId},#{noticeId},#{noticeCreateTime},#{noticeEventType}, | |||
| #{summary},#{mallId},#{mallName},#{mallStoreId},#{buyerId},#{timeEnd},#{amount},#{payAmount},#{transactionId},#{createTime},#{updateTime}, | |||
| #{merchantId},#{merchantName},#{cUserId},#{cUserNickName},#{cUserPhone},0,1,#{refundId},#{refundAmount} | |||
| ); | |||
| </insert> | |||
| <update id="updateOrderStatus" parameterType="com.iformall.domain.po.AliBusinessCircleOrder"> | |||
| update ali_business_circle_order set | |||
| `order_status` = #{orderStatus}, | |||
| `update_time` = #{updateTime} | |||
| where `id` = #{id} and `tenant_id` = #{tenantId} | |||
| </update> | |||
| <select id="sumCirclePayment" parameterType="com.iformall.domain.po.BusinessCircleBase" resultType="Integer"> | |||
| select | |||
| IFNULL(SUM(`pay_amount`),0) as sum_pay_amount | |||
| from ali_business_circle_order | |||
| <include refid="dynamicWhereConditions"/> | |||
| and is_refund = 0 | |||
| </select> | |||
| <select id="sumCircleRefundAmount" parameterType="com.iformall.domain.po.BusinessCircleBase" resultType="Integer"> | |||
| select | |||
| IFNULL(SUM(`refund_amount`),0) as sum_refund_amount | |||
| from ali_business_circle_order | |||
| <include refid="dynamicWhereConditions"/> | |||
| and is_refund = 1 | |||
| </select> | |||
| </mapper> | |||
| @@ -1,264 +0,0 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||
| <mapper namespace="com.iformall.mapper.WxBusinessCircleOrderMapper"> | |||
| <resultMap id="BaseResultMap" type="com.iformall.domain.po.WxBusinessCircleOrder"> | |||
| <id column="id" jdbcType="BIGINT" property="id"/> | |||
| <result column="tenant_id" jdbcType="VARCHAR" property="tenantId"/> | |||
| <result column="parent_tenant_id" jdbcType="VARCHAR" property="parentTenantId" /> | |||
| <result column="notice_id" jdbcType="VARCHAR" property="noticeId" /> | |||
| <result column="notice_create_time" jdbcType="TIMESTAMP" property="noticeCreateTime"/> | |||
| <result column="notice_event_type" jdbcType="VARCHAR" property="noticeEventType" /> | |||
| <result column="summary" jdbcType="VARCHAR" property="summary" /> | |||
| <result column="wx_mchid" jdbcType="VARCHAR" property="wxMchid" /> | |||
| <result column="wx_merchant_name" jdbcType="VARCHAR" property="wxMerchantName" /> | |||
| <result column="wx_shop_name" jdbcType="VARCHAR" property="wxShopName" /> | |||
| <result column="wx_shop_number" jdbcType="VARCHAR" property="wxShopNumber" /> | |||
| <result column="appid" jdbcType="VARCHAR" property="appid" /> | |||
| <result column="openid" jdbcType="VARCHAR" property="openid" /> | |||
| <result column="time_end" jdbcType="TIMESTAMP" property="timeEnd"/> | |||
| <result column="amount" jdbcType="INTEGER" property="amount"/> | |||
| <result column="pay_amount" jdbcType="INTEGER" property="payAmount"/> | |||
| <result column="transaction_id" jdbcType="VARCHAR" property="transactionId" /> | |||
| <result column="commit_tag" jdbcType="VARCHAR" property="commitTag" /> | |||
| <result column="create_time" jdbcType="TIMESTAMP" property="createTime"/> | |||
| <result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/> | |||
| <result column="merchant_id" jdbcType="BIGINT" property="merchantId"/> | |||
| <result column="merchant_name" jdbcType="VARCHAR" property="merchantName" /> | |||
| <result column="c_user_id" jdbcType="BIGINT" property="cUserId"/> | |||
| <result column="c_user_nick_name" jdbcType="VARCHAR" property="cUserNickName" /> | |||
| <result column="c_user_phone" jdbcType="VARCHAR" property="cUserPhone" /> | |||
| <result column="earn_points" jdbcType="TINYINT" property="earnPoints"/> | |||
| <result column="increased_points" jdbcType="INTEGER" property="increasedPoints"/> | |||
| <result column="points_update_time" jdbcType="TIMESTAMP" property="pointsUpdateTime"/> | |||
| <result column="is_points_notify" jdbcType="TINYINT" property="isPointsNotify"/> | |||
| <result column="is_refund" jdbcType="TINYINT" property="isRefund"/> | |||
| <result column="order_status" jdbcType="TINYINT" property="orderStatus"/> | |||
| <result column="refund_id" jdbcType="VARCHAR" property="refundId" /> | |||
| <result column="refund_amount" jdbcType="INTEGER" property="refundAmount"/> | |||
| </resultMap> | |||
| <sql id="allColumns"> | |||
| `id`, `tenant_id`, `parent_tenant_id`, `notice_id`, `notice_create_time`, `notice_event_type`, | |||
| `summary`, `wx_mchid`, `wx_merchant_name`, `wx_shop_name`, `wx_shop_number`, | |||
| `appid`, `openid`, `time_end`, `amount`, `pay_amount`, `transaction_id`, `commit_tag`, `create_time`, `update_time`, | |||
| `merchant_id`,`merchant_name`, `c_user_id`, `c_user_nick_name`, `c_user_phone`, | |||
| `earn_points`, `increased_points`, `points_update_time`, `is_points_notify`, | |||
| `is_refund`, `order_status`, `refund_id`, `refund_amount` | |||
| </sql> | |||
| <sql id="dynamicWhereConditions"> | |||
| where 1 = 1 | |||
| <if test=" null != id "> | |||
| and `id` = #{id} | |||
| </if> | |||
| <if test=" null != tenantId and '' != tenantId"> | |||
| and `tenant_id` = #{tenantId} | |||
| </if> | |||
| <if test=" null != parentTenantId and '' != parentTenantId"> | |||
| and `parent_tenant_id` = #{parentTenantId} | |||
| </if> | |||
| <if test=" null != noticeId and '' != noticeId"> | |||
| and `notice_id` = #{noticeId} | |||
| </if> | |||
| <if test=" null != wxMchid and '' != wxMchid"> | |||
| and `wx_mchid` = #{wxMchid} | |||
| </if> | |||
| <if test=" null != wxMerchantName "> | |||
| and `wx_merchant_name` like concat('%', #{wxMerchantName},'%') | |||
| </if> | |||
| <if test=" null != wxShopName "> | |||
| and `wx_shop_name` like concat('%', #{wxShopName},'%') | |||
| </if> | |||
| <if test=" null != wxShopNumber and '' != wxShopNumber"> | |||
| and `wx_shop_number` = #{wxShopNumber} | |||
| </if> | |||
| <if test=" null != appid and '' != appid"> | |||
| and `appid` = #{appid} | |||
| </if> | |||
| <if test=" null != openid and '' != openid"> | |||
| and `openid` = #{openid} | |||
| </if> | |||
| <if test=" null != startTime "> | |||
| and `time_end` >= #{startTime} | |||
| </if> | |||
| <if test=" null != endTime"> | |||
| and `time_end` < #{endTime} | |||
| </if> | |||
| <if test=" null != transactionId and '' != transactionId"> | |||
| and `transaction_id` = #{transactionId} | |||
| </if> | |||
| <if test=" null != merchantId "> | |||
| and `merchant_id` = #{merchantId} | |||
| </if> | |||
| <if test=" null != merchantName and ''!=merchantName"> | |||
| and `merchant_name` like concat('%', #{merchantName},'%') | |||
| </if> | |||
| <if test=" null != cUserId "> | |||
| and `c_user_id` = #{cUserId} | |||
| </if> | |||
| <if test=" null != cUserNickName and ''!=cUserNickName"> | |||
| and `c_user_nick_name` like concat('%', #{cUserNickName},'%') | |||
| </if> | |||
| <if test=" null != cUserPhone and ''!=cUserPhone"> | |||
| and `c_user_phone` like concat('%', #{cUserPhone},'%') | |||
| </if> | |||
| <if test=" null != earnPoints "> | |||
| and `earn_points` = #{earnPoints} | |||
| </if> | |||
| <if test=" null != isPointsNotify "> | |||
| and `is_points_notify` = #{isPointsNotify} | |||
| </if> | |||
| <if test=" null != isRefund "> | |||
| and `is_refund` = #{isRefund} | |||
| </if> | |||
| <if test=" null != orderStatus "> | |||
| and `order_status` = #{orderStatus} | |||
| </if> | |||
| <if test=" null != refundId and '' != refundId"> | |||
| and `refund_id` = #{refundId} | |||
| </if> | |||
| <if test=" null != ids "> | |||
| and `id` in | |||
| <foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")"> | |||
| #{idItem} | |||
| </foreach> | |||
| </if> | |||
| </sql> | |||
| <select id="findList" parameterType="com.iformall.domain.po.WxBusinessCircleOrder" resultMap="BaseResultMap"> | |||
| select | |||
| <include refid="allColumns"/> | |||
| from wx_business_circle_order | |||
| <include refid="dynamicWhereConditions"/> | |||
| <if test=" null != sortColumns">order by ${sortColumns}</if> | |||
| </select> | |||
| <select id="getById" parameterType="com.iformall.domain.po.WxBusinessCircleOrder" resultMap="BaseResultMap"> | |||
| select | |||
| <include refid="allColumns"/> | |||
| from wx_business_circle_order | |||
| where `id` = #{id} | |||
| and tenant_id=#{tenantId} | |||
| </select> | |||
| <select id="getOrderByTransactionId" parameterType="com.iformall.domain.po.WxBusinessCircleOrder" resultMap="BaseResultMap"> | |||
| select | |||
| <include refid="allColumns"/> | |||
| from wx_business_circle_order | |||
| where `is_refund` = 0 | |||
| and tenant_id = #{tenantId} | |||
| and `transaction_id` = #{transactionId} | |||
| </select> | |||
| <select id="getRefundOrderByRefundId" parameterType="com.iformall.domain.po.WxBusinessCircleOrder" resultMap="BaseResultMap"> | |||
| select | |||
| <include refid="allColumns"/> | |||
| from wx_business_circle_order | |||
| where `is_refund` = 1 | |||
| and tenant_id = #{tenantId} | |||
| and `refund_id` = #{refundId} | |||
| </select> | |||
| <select id="getRefundOrderByTransactionId" parameterType="com.iformall.domain.po.WxBusinessCircleOrder" resultMap="BaseResultMap"> | |||
| select | |||
| <include refid="allColumns"/> | |||
| from wx_business_circle_order | |||
| where `is_refund` = 1 | |||
| and tenant_id = #{tenantId} | |||
| and `transaction_id` = #{transactionId} | |||
| </select> | |||
| <insert id="insertNoticeOrder" parameterType="com.iformall.domain.po.WxBusinessCircleOrder" > | |||
| INSERT INTO wx_business_circle_order ( | |||
| `id`, `tenant_id`, `parent_tenant_id`, `notice_id`, `notice_create_time`, `notice_event_type`, | |||
| `summary`, `wx_mchid`, `wx_merchant_name`, `wx_shop_name`, `wx_shop_number`, | |||
| `appid`, `openid`, `time_end`, `amount`, `pay_amount`, `transaction_id`, `commit_tag`, `create_time`, `update_time`, | |||
| `merchant_id`,`merchant_name`, `c_user_id`, `c_user_nick_name`, `c_user_phone`, `earn_points`, `is_points_notify`, `is_refund` | |||
| ) | |||
| VALUES( | |||
| #{id},#{tenantId},#{parentTenantId},#{noticeId},#{noticeCreateTime},#{noticeEventType}, | |||
| #{summary},#{wxMchid},#{wxMerchantName},#{wxShopName},#{wxShopNumber}, | |||
| #{appid},#{openid},#{timeEnd},#{amount},#{payAmount},#{transactionId},#{commitTag},#{createTime},#{updateTime}, | |||
| #{merchantId},#{merchantName},#{cUserId},#{cUserNickName},#{cUserPhone},0,0,0 | |||
| ); | |||
| </insert> | |||
| <update id="updatePoints" parameterType="com.iformall.domain.po.WxBusinessCircleOrder"> | |||
| update wx_business_circle_order set | |||
| `earn_points` = 1, `increased_points` = #{increasedPoints}, `points_update_time` = #{pointsUpdateTime}, | |||
| `update_time` = #{updateTime} | |||
| where `id` = #{id} and `tenant_id` = #{tenantId} | |||
| </update> | |||
| <update id="updateIsPointsNotify" parameterType="com.iformall.domain.po.WxBusinessCircleOrder"> | |||
| update wx_business_circle_order set | |||
| `is_points_notify` = 1, `update_time` = #{updateTime} | |||
| where `id` = #{id} and `tenant_id` = #{tenantId} | |||
| </update> | |||
| <insert id="insertRefundNoticeOrder" parameterType="com.iformall.domain.po.WxBusinessCircleOrder" > | |||
| INSERT INTO wx_business_circle_order ( | |||
| `id`, `tenant_id`, `parent_tenant_id`, `notice_id`, `notice_create_time`, `notice_event_type`, | |||
| `summary`, `wx_mchid`, `wx_merchant_name`, `wx_shop_name`, `wx_shop_number`, | |||
| `appid`, `openid`, `time_end`, `amount`,`pay_amount`, `transaction_id`, `commit_tag`, `create_time`, `update_time`, | |||
| `merchant_id`,`merchant_name`, `c_user_id`, `c_user_nick_name`, `c_user_phone`, `earn_points`, `is_refund`, `refund_id`, `refund_amount` | |||
| ) | |||
| VALUES( | |||
| #{id},#{tenantId},#{parentTenantId},#{noticeId},#{noticeCreateTime},#{noticeEventType}, | |||
| #{summary},#{wxMchid},#{wxMerchantName},#{wxShopName},#{wxShopNumber}, | |||
| #{appid},#{openid},#{timeEnd},#{amount},#{payAmount},#{transactionId},#{commitTag},#{createTime},#{updateTime}, | |||
| #{merchantId},#{merchantName},#{cUserId},#{cUserNickName},#{cUserPhone},0,1,#{refundId},#{refundAmount} | |||
| ); | |||
| </insert> | |||
| <update id="updateOrderStatus" parameterType="com.iformall.domain.po.WxBusinessCircleOrder"> | |||
| update wx_business_circle_order set | |||
| `order_status` = #{orderStatus}, | |||
| `update_time` = #{updateTime} | |||
| where `id` = #{id} and `tenant_id` = #{tenantId} | |||
| </update> | |||
| <select id="sumCirclePayment" parameterType="com.iformall.domain.po.BusinessCircleBase" resultType="Integer"> | |||
| select | |||
| IFNULL(SUM(`pay_amount`),0) as sum_pay_amount | |||
| from wx_business_circle_order | |||
| <include refid="dynamicWhereConditions"/> | |||
| and is_refund = 0 | |||
| </select> | |||
| <select id="sumCircleRefundAmount" parameterType="com.iformall.domain.po.BusinessCircleBase" resultType="Integer"> | |||
| select | |||
| IFNULL(SUM(`refund_amount`),0) as sum_refund_amount | |||
| from wx_business_circle_order | |||
| <include refid="dynamicWhereConditions"/> | |||
| and is_refund = 1 | |||
| </select> | |||
| </mapper> | |||
| @@ -1,262 +0,0 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||
| <mapper namespace="com.iformall.mapper.WxThirdPartyOrdersMapper"> | |||
| <resultMap id="BaseResultMap" type="com.iformall.domain.po.WxThirdPartyOrders"> | |||
| <id column="id" jdbcType="BIGINT" property="id"/> | |||
| <result column="tenant_id" jdbcType="VARCHAR" property="tenantId"/> | |||
| <result column="parent_tenant_id" jdbcType="VARCHAR" property="parentTenantId" /> | |||
| <result column="source_app_id" jdbcType="VARCHAR" property="sourceAppId"/> | |||
| <result column="source_type" jdbcType="INTEGER" property="sourceType"/> | |||
| <result column="notice_id" jdbcType="VARCHAR" property="noticeId" /> | |||
| <result column="notice_create_time" jdbcType="TIMESTAMP" property="noticeCreateTime"/> | |||
| <result column="notice_event_type" jdbcType="VARCHAR" property="noticeEventType" /> | |||
| <result column="summary" jdbcType="VARCHAR" property="summary" /> | |||
| <result column="shop_name" jdbcType="VARCHAR" property="shopName" /> | |||
| <result column="shop_number" jdbcType="VARCHAR" property="shopNumber" /> | |||
| <result column="user_phone" jdbcType="VARCHAR" property="userPhone" /> | |||
| <result column="user_number" jdbcType="VARCHAR" property="userNumber" /> | |||
| <result column="time_end" jdbcType="TIMESTAMP" property="timeEnd"/> | |||
| <result column="amount" jdbcType="INTEGER" property="amount"/> | |||
| <result column="pay_amount" jdbcType="INTEGER" property="payAmount"/> | |||
| <result column="transaction_id" jdbcType="VARCHAR" property="transactionId" /> | |||
| <result column="create_time" jdbcType="TIMESTAMP" property="createTime"/> | |||
| <result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/> | |||
| <result column="merchant_id" jdbcType="BIGINT" property="merchantId"/> | |||
| <result column="merchant_name" jdbcType="VARCHAR" property="merchantName" /> | |||
| <result column="c_user_id" jdbcType="BIGINT" property="cUserId"/> | |||
| <result column="c_user_nick_name" jdbcType="VARCHAR" property="cUserNickName" /> | |||
| <result column="c_user_phone" jdbcType="VARCHAR" property="cUserPhone" /> | |||
| <result column="earn_points" jdbcType="TINYINT" property="earnPoints"/> | |||
| <result column="increased_points" jdbcType="INTEGER" property="increasedPoints"/> | |||
| <result column="points_update_time" jdbcType="TIMESTAMP" property="pointsUpdateTime"/> | |||
| <result column="is_refund" jdbcType="TINYINT" property="isRefund"/> | |||
| <result column="order_status" jdbcType="TINYINT" property="orderStatus"/> | |||
| <result column="refund_id" jdbcType="VARCHAR" property="refundId" /> | |||
| <result column="refund_amount" jdbcType="INTEGER" property="refundAmount"/> | |||
| </resultMap> | |||
| <sql id="allColumns"> | |||
| `id`, `tenant_id`, `parent_tenant_id`, `source_app_id`, `source_type`,`notice_id`, `notice_create_time`, `notice_event_type`, | |||
| `summary`,`shop_name`, `shop_number`, `user_phone`, `user_number`, | |||
| `time_end`, `amount`, `pay_amount`, `transaction_id`, `create_time`, `update_time`, | |||
| `merchant_id`,`merchant_name`, `c_user_id`, `c_user_nick_name`, `c_user_phone`, | |||
| `earn_points`, `increased_points`, `points_update_time`, | |||
| `is_refund`, `order_status`, `refund_id`, `refund_amount` | |||
| </sql> | |||
| <sql id="dynamicWhereConditions"> | |||
| where 1 = 1 | |||
| <if test=" null != id "> | |||
| and `id` = #{id} | |||
| </if> | |||
| <if test=" null != tenantId and '' != tenantId"> | |||
| and `tenant_id` = #{tenantId} | |||
| </if> | |||
| <if test=" null != parentTenantId and '' != parentTenantId"> | |||
| and `parent_tenant_id` = #{parentTenantId} | |||
| </if> | |||
| <if test=" null != sourceAppId and '' != sourceAppId"> | |||
| and `source_app_id` = #{sourceAppId} | |||
| </if> | |||
| <if test=" null != sourceType and '' != sourceType"> | |||
| and `source_type` = #{sourceType} | |||
| </if> | |||
| <if test=" null != shopName "> | |||
| and `shop_name` like concat('%', #{shopName},'%') | |||
| </if> | |||
| <if test=" null != shopNumber and '' != shopNumber"> | |||
| and `shop_number` = #{shopNumber} | |||
| </if> | |||
| <if test=" null != userPhone and '' != userPhone"> | |||
| and `user_phone` = #{userPhone} | |||
| </if> | |||
| <if test=" null != userNumber and '' != userNumber"> | |||
| and `user_number` = #{userNumber} | |||
| </if> | |||
| <if test=" null != noticeId and '' != noticeId"> | |||
| and `notice_id` = #{noticeId} | |||
| </if> | |||
| <if test=" null != startTime "> | |||
| and `time_end` >= #{startTime} | |||
| </if> | |||
| <if test=" null != endTime"> | |||
| and `time_end` < #{endTime} | |||
| </if> | |||
| <if test=" null != transactionId and '' != transactionId"> | |||
| and `transaction_id` = #{transactionId} | |||
| </if> | |||
| <if test=" null != merchantId "> | |||
| and `merchant_id` = #{merchantId} | |||
| </if> | |||
| <if test=" null != merchantName and ''!=merchantName"> | |||
| and `merchant_name` like concat('%', #{merchantName},'%') | |||
| </if> | |||
| <if test=" null != cUserId "> | |||
| and `c_user_id` = #{cUserId} | |||
| </if> | |||
| <if test=" null != cUserNickName and ''!=cUserNickName"> | |||
| and `c_user_nick_name` like concat('%', #{cUserNickName},'%') | |||
| </if> | |||
| <if test=" null != cUserPhone and ''!=cUserPhone"> | |||
| and `c_user_phone` like concat('%', #{cUserPhone},'%') | |||
| </if> | |||
| <if test=" null != earnPoints "> | |||
| and `earn_points` = #{earnPoints} | |||
| </if> | |||
| <if test=" null != isRefund "> | |||
| and `is_refund` = #{isRefund} | |||
| </if> | |||
| <if test=" null != orderStatus "> | |||
| and `order_status` = #{orderStatus} | |||
| </if> | |||
| <if test=" null != refundId and '' != refundId"> | |||
| and `refund_id` = #{refundId} | |||
| </if> | |||
| <if test=" null != ids "> | |||
| and `id` in | |||
| <foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")"> | |||
| #{idItem} | |||
| </foreach> | |||
| </if> | |||
| </sql> | |||
| <select id="findList" parameterType="com.iformall.domain.po.WxThirdPartyOrders" resultMap="BaseResultMap"> | |||
| select | |||
| <include refid="allColumns"/> | |||
| from wx_third_party_orders | |||
| <include refid="dynamicWhereConditions"/> | |||
| <if test=" null != sortColumns">order by ${sortColumns}</if> | |||
| </select> | |||
| <select id="findListVo" parameterType="com.iformall.domain.po.WxThirdPartyOrders" resultType="com.iformall.domain.vo.WxThirdPartyOrdersVo"> | |||
| select | |||
| <include refid="allColumns"/> | |||
| from wx_third_party_orders | |||
| <include refid="dynamicWhereConditions"/> | |||
| </select> | |||
| <select id="getById" parameterType="com.iformall.domain.po.WxThirdPartyOrders" resultMap="BaseResultMap"> | |||
| select | |||
| <include refid="allColumns"/> | |||
| from wx_third_party_orders | |||
| where `id` = #{id} | |||
| and tenant_id=#{tenantId} | |||
| </select> | |||
| <select id="getOrderByTransactionId" parameterType="com.iformall.domain.po.WxThirdPartyOrders" resultMap="BaseResultMap"> | |||
| select | |||
| <include refid="allColumns"/> | |||
| from wx_third_party_orders | |||
| where `is_refund` = 0 | |||
| and `source_type` = #{sourceType} | |||
| and `tenant_id` = #{tenantId} | |||
| and `transaction_id` = #{transactionId} | |||
| </select> | |||
| <select id="getRefundOrderByRefundId" parameterType="com.iformall.domain.po.WxThirdPartyOrders" resultMap="BaseResultMap"> | |||
| select | |||
| <include refid="allColumns"/> | |||
| from wx_third_party_orders | |||
| where `is_refund` = 1 | |||
| and `source_type` = #{sourceType} | |||
| and tenant_id = #{tenantId} | |||
| and `refund_id` = #{refundId} | |||
| </select> | |||
| <select id="getRefundOrderByTransactionId" parameterType="com.iformall.domain.po.WxThirdPartyOrders" resultMap="BaseResultMap"> | |||
| select | |||
| <include refid="allColumns"/> | |||
| from wx_third_party_orders | |||
| where `is_refund` = 1 | |||
| and `source_type` = #{sourceType} | |||
| and `tenant_id` = #{tenantId} | |||
| and `transaction_id` = #{transactionId} | |||
| </select> | |||
| <insert id="insertNoticeOrder" parameterType="com.iformall.domain.po.WxThirdPartyOrders" > | |||
| INSERT INTO wx_third_party_orders ( | |||
| `id`, `tenant_id`, `parent_tenant_id`,`source_app_id`, `source_type`, `notice_id`, `notice_create_time`, `notice_event_type`, | |||
| `summary`, `shop_name`, `shop_number`, `user_phone`, `user_number`,`time_end`, `amount`, `pay_amount`, `transaction_id`, `create_time`, `update_time`, | |||
| `merchant_id`,`merchant_name`, `c_user_id`, `c_user_nick_name`, `c_user_phone`, `earn_points`, `is_refund` | |||
| ) | |||
| VALUES( | |||
| #{id},#{tenantId},#{parentTenantId},#{sourceAppId},#{sourceType},#{noticeId},#{noticeCreateTime},#{noticeEventType}, | |||
| #{summary},#{shopName},#{shopNumber},#{userPhone},#{userNumber},#{timeEnd},#{amount},#{payAmount},#{transactionId},#{createTime},#{updateTime}, | |||
| #{merchantId},#{merchantName},#{cUserId},#{cUserNickName},#{cUserPhone},0,0 | |||
| ); | |||
| </insert> | |||
| <update id="updatePoints" parameterType="com.iformall.domain.po.WxThirdPartyOrders"> | |||
| update wx_third_party_orders set | |||
| `earn_points` = 1, `increased_points` = #{increasedPoints}, `points_update_time` = #{pointsUpdateTime}, | |||
| `update_time` = #{updateTime} | |||
| where `id` = #{id} and `tenant_id` = #{tenantId} | |||
| </update> | |||
| <insert id="insertRefundNoticeOrder" parameterType="com.iformall.domain.po.WxThirdPartyOrders" > | |||
| INSERT INTO wx_third_party_orders ( | |||
| `id`, `tenant_id`, `parent_tenant_id`,`source_app_id`, `source_type`, `notice_id`, `notice_create_time`, `notice_event_type`, | |||
| `summary`,`shop_name`, `shop_number`, `user_phone`, `user_number`, `time_end`, `amount`,`pay_amount`, `transaction_id`, `create_time`, `update_time`, | |||
| `merchant_id`,`merchant_name`, `c_user_id`, `c_user_nick_name`, `c_user_phone`, `earn_points`, `is_refund`, `refund_id`, `refund_amount` | |||
| ) | |||
| VALUES( | |||
| #{id},#{tenantId},#{parentTenantId},#{sourceAppId},#{sourceType},#{noticeId},#{noticeCreateTime},#{noticeEventType}, | |||
| #{summary},#{shopName},#{shopNumber},#{userPhone},#{userNumber},#{timeEnd},#{amount},#{payAmount},#{transactionId},#{createTime},#{updateTime}, | |||
| #{merchantId},#{merchantName},#{cUserId},#{cUserNickName},#{cUserPhone},0,1,#{refundId},#{refundAmount} | |||
| ); | |||
| </insert> | |||
| <update id="updateOrderStatus" parameterType="com.iformall.domain.po.WxThirdPartyOrders"> | |||
| update wx_third_party_orders set | |||
| `order_status` = #{orderStatus}, | |||
| `update_time` = #{updateTime} | |||
| where `id` = #{id} and `tenant_id` = #{tenantId} | |||
| </update> | |||
| <select id="sumCirclePayment" parameterType="com.iformall.domain.po.BusinessCircleBase" resultType="Integer"> | |||
| select | |||
| IFNULL(SUM(`pay_amount`),0) as sum_pay_amount | |||
| from wx_third_party_orders | |||
| <include refid="dynamicWhereConditions"/> | |||
| and is_refund = 0 | |||
| </select> | |||
| <select id="sumCircleRefundAmount" parameterType="com.iformall.domain.po.BusinessCircleBase" resultType="Integer"> | |||
| select | |||
| IFNULL(SUM(`refund_amount`),0) as sum_refund_amount | |||
| from wx_third_party_orders | |||
| <include refid="dynamicWhereConditions"/> | |||
| and is_refund = 1 | |||
| </select> | |||
| </mapper> | |||