|
|
|
@@ -3,8 +3,11 @@ package com.simple.service.impl; |
|
|
|
import cn.afterturn.easypoi.excel.ExcelExportUtil; |
|
|
|
import cn.afterturn.easypoi.excel.entity.ExportParams; |
|
|
|
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; |
|
|
|
import cn.binarywang.wx.miniapp.api.WxMaService; |
|
|
|
import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage; |
|
|
|
import com.github.pagehelper.PageHelper; |
|
|
|
import com.github.pagehelper.PageInfo; |
|
|
|
import com.google.common.collect.Lists; |
|
|
|
import com.simple.common.ErrorCode; |
|
|
|
import com.simple.common.IdWorker; |
|
|
|
import com.simple.common.ResultData; |
|
|
|
@@ -13,15 +16,16 @@ import com.simple.domain.vo.CUserDateAmountVo; |
|
|
|
import com.simple.domain.vo.WxCouponOrderBVo; |
|
|
|
import com.simple.domain.vo.WxCouponOrderCVo; |
|
|
|
import com.simple.domain.vo.WxCouponOrderCarCVo; |
|
|
|
import com.simple.enums.EnumCouponOrderStatus; |
|
|
|
import com.simple.enums.EnumCouponSendType; |
|
|
|
import com.simple.enums.EnumPayShare; |
|
|
|
import com.simple.enums.EnumPayStatus; |
|
|
|
import com.simple.enums.*; |
|
|
|
import com.simple.exception.MallinkException; |
|
|
|
import com.simple.mapper.*; |
|
|
|
import com.simple.service.*; |
|
|
|
import com.simple.utils.DataUtil; |
|
|
|
import com.simple.service.WxCouponOrderService; |
|
|
|
import com.simple.service.WxCouponSendService; |
|
|
|
import com.simple.service.WxOrderService; |
|
|
|
import com.simple.service.WxProfitSharingOrderService; |
|
|
|
import com.simple.utils.DateUtils; |
|
|
|
import com.simple.utils.MaUtil; |
|
|
|
import me.chanjar.weixin.common.error.WxErrorException; |
|
|
|
import org.apache.log4j.Logger; |
|
|
|
import org.apache.poi.ss.usermodel.Workbook; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
@@ -40,7 +44,7 @@ import java.util.*; |
|
|
|
public class WxCouponOrderServiceImpl implements WxCouponOrderService { |
|
|
|
private Logger logger = Logger.getLogger(WxCouponOrderServiceImpl.class); |
|
|
|
|
|
|
|
@Autowired |
|
|
|
@Autowired |
|
|
|
WxCouponOrderMapper wxCouponOrderMapper; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
@@ -70,6 +74,12 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { |
|
|
|
@Autowired |
|
|
|
WxMallMapper wxMallMapper; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
WxTemplateMsgMapper wxTemplateMsgMapper; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
WxCouponMapper wxCouponMapper; |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
public PageInfo<WxCouponOrder> listAsPage(WxCouponOrder record, Integer pageIndex, Integer pageSize) { |
|
|
|
@@ -86,7 +96,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { |
|
|
|
if (record.getId() == null) { |
|
|
|
//record.setId(UUID.randomUUID().toString().replaceAll("-", "")); |
|
|
|
final IdWorker idWorker = IdWorker.get(); |
|
|
|
record.setId(idWorker.nextId()); |
|
|
|
record.setId(idWorker.nextId()); |
|
|
|
wxCouponOrderMapper.insertSelective(record); |
|
|
|
} else { |
|
|
|
wxCouponOrderMapper.updateByPrimaryKeySelective(record); |
|
|
|
@@ -135,8 +145,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { |
|
|
|
} catch (ParseException e) { |
|
|
|
return new ResultData(ErrorCode.SYS_PARAMETER_CAST_ERROR); |
|
|
|
} |
|
|
|
} |
|
|
|
else { |
|
|
|
} else { |
|
|
|
try { |
|
|
|
startDate = fmt.parse(date); |
|
|
|
} catch (ParseException e) { |
|
|
|
@@ -144,7 +153,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { |
|
|
|
} |
|
|
|
Calendar cal = Calendar.getInstance(); |
|
|
|
cal.setTime(startDate); |
|
|
|
cal.add(Calendar.DATE,1); |
|
|
|
cal.add(Calendar.DATE, 1); |
|
|
|
endDate = cal.getTime(); |
|
|
|
} |
|
|
|
|
|
|
|
@@ -157,7 +166,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { |
|
|
|
|
|
|
|
if (pageIndex == null || pageSize == null) { |
|
|
|
List<WxCouponOrder> list; |
|
|
|
if(isVerified) |
|
|
|
if (isVerified) |
|
|
|
list = wxCouponOrderMapper.findListOfVerifiedByDate(dateMap); |
|
|
|
else |
|
|
|
list = wxCouponOrderMapper.findListOfOrderedByDate(dateMap); |
|
|
|
@@ -167,8 +176,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { |
|
|
|
total_price = total_price + couponOrder.getCouponPrice(); |
|
|
|
} |
|
|
|
resultMap.put("amount", total_price); |
|
|
|
} |
|
|
|
else { |
|
|
|
} else { |
|
|
|
if (isVerified) |
|
|
|
resultMap.put("list", PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCouponOrderMapper.findListOfVerifiedByDateForBUser(dateMap))); |
|
|
|
else |
|
|
|
@@ -196,8 +204,8 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { |
|
|
|
@Override |
|
|
|
public ResultData detailCUserVo(Long cUserId, String couponOrderId) { |
|
|
|
WxCUser wxCuser = wxCUserMapper.selectByPrimaryKey(cUserId); |
|
|
|
if(wxCuser == null){ |
|
|
|
logger.error("用户不存在:"+ cUserId); |
|
|
|
if (wxCuser == null) { |
|
|
|
logger.error("用户不存在:" + cUserId); |
|
|
|
throw new MallinkException(ErrorCode.USER_IS_EMPTY); |
|
|
|
} |
|
|
|
|
|
|
|
@@ -215,8 +223,8 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { |
|
|
|
@Override |
|
|
|
public ResultData detailBUserVo(Long bUserId, String couponOrderId) { |
|
|
|
WxMerchantBUser wxMerchantBUser = wxMerchantBUserMapper.selectByPrimaryKey(bUserId); |
|
|
|
if(wxMerchantBUser == null){ |
|
|
|
logger.error("用户不存在:"+ bUserId); |
|
|
|
if (wxMerchantBUser == null) { |
|
|
|
logger.error("用户不存在:" + bUserId); |
|
|
|
throw new MallinkException(ErrorCode.USER_IS_EMPTY); |
|
|
|
} |
|
|
|
|
|
|
|
@@ -250,21 +258,21 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { |
|
|
|
WxMall wxMall = new WxMall(); |
|
|
|
wxMall.setTenantId(tenantId); |
|
|
|
wxMall = wxMallMapper.findList(wxMall).get(0); |
|
|
|
String filepath="./uploads/"; |
|
|
|
String filepath = "./uploads/"; |
|
|
|
File savefile = new File(filepath); |
|
|
|
if (!savefile.exists()) { |
|
|
|
savefile.mkdirs(); |
|
|
|
} |
|
|
|
|
|
|
|
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("","",ExcelType.XSSF), WxCouponOrderBVo.class, list); |
|
|
|
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("", "", ExcelType.XSSF), WxCouponOrderBVo.class, list); |
|
|
|
FileOutputStream fos = null; |
|
|
|
try { |
|
|
|
String filename=wxMall.getName()+ DateUtils.getSystemTime("yyyyMMDDHHmmss") +".xlsx"; |
|
|
|
filepath=filepath+filename; |
|
|
|
String filename = wxMall.getName() + DateUtils.getSystemTime("yyyyMMDDHHmmss") + ".xlsx"; |
|
|
|
filepath = filepath + filename; |
|
|
|
fos = new FileOutputStream(filepath); |
|
|
|
workbook.write(fos); |
|
|
|
fos.close(); |
|
|
|
downFile(filepath,filename,response,request); |
|
|
|
downFile(filepath, filename, response, request); |
|
|
|
} catch (Exception e) { |
|
|
|
e.printStackTrace(); |
|
|
|
} |
|
|
|
@@ -273,8 +281,8 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public void downFile(String filePath,String filename, HttpServletResponse response, |
|
|
|
HttpServletRequest req) throws IOException { |
|
|
|
public void downFile(String filePath, String filename, HttpServletResponse response, |
|
|
|
HttpServletRequest req) throws IOException { |
|
|
|
try { |
|
|
|
response.reset(); |
|
|
|
response.setContentType("bin"); |
|
|
|
@@ -308,21 +316,21 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { |
|
|
|
public WxCouponOrder verify(Long couponOrderId, Long bUserId) { |
|
|
|
|
|
|
|
WxCouponOrder wxCouponOrder = wxCouponOrderMapper.selectByPrimaryKey(couponOrderId); |
|
|
|
if(wxCouponOrder == null){ |
|
|
|
logger.error("券ID不存在:"+ couponOrderId); |
|
|
|
if (wxCouponOrder == null) { |
|
|
|
logger.error("券ID不存在:" + couponOrderId); |
|
|
|
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL); |
|
|
|
} |
|
|
|
|
|
|
|
WxMerchantBUser wxMerchantBUser = wxMerchantBUserMapper.selectByPrimaryKey(bUserId.longValue()); |
|
|
|
if(wxMerchantBUser == null){ |
|
|
|
logger.error("核销员ID不存在:"+ bUserId); |
|
|
|
WxMerchantBUser wxMerchantBUser = wxMerchantBUserMapper.selectByPrimaryKey(bUserId.longValue()); |
|
|
|
if (wxMerchantBUser == null) { |
|
|
|
logger.error("核销员ID不存在:" + bUserId); |
|
|
|
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL); |
|
|
|
} |
|
|
|
|
|
|
|
WxOrder wxOrder = wxOrderMapper.selectByPrimaryKey(wxCouponOrder.getOrderId()); |
|
|
|
|
|
|
|
if (!wxOrder.getMerchantId().equals(wxMerchantBUser.getMerchantId())){ |
|
|
|
logger.error("券: couponMerchantId-" + wxOrder.getMerchantId()+"核销: couponMerchantId-"+wxMerchantBUser.getMerchantId()); |
|
|
|
if (!wxOrder.getMerchantId().equals(wxMerchantBUser.getMerchantId())) { |
|
|
|
logger.error("券: couponMerchantId-" + wxOrder.getMerchantId() + "核销: couponMerchantId-" + wxMerchantBUser.getMerchantId()); |
|
|
|
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL); |
|
|
|
} |
|
|
|
if (wxCouponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_OVER_TIME.getCode()) { |
|
|
|
@@ -381,16 +389,134 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 微信模板消息 |
|
|
|
* |
|
|
|
* @param appInfo, couponOrder, bUser |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public void sendVerifyMsg(WxAppinfo appInfo, WxCouponOrder couponOrder, WxMerchantBUser bUser) { |
|
|
|
// 1. get template id |
|
|
|
WxTemplateMsg msgQ = new WxTemplateMsg(); |
|
|
|
msgQ.setTenantId(couponOrder.getTenantId()); |
|
|
|
msgQ.setType(EnumTemplateType.VERIFY_FAIL.getCode()); |
|
|
|
WxTemplateMsg msg = null; |
|
|
|
List<WxTemplateMsg> list = wxTemplateMsgMapper.select(msgQ); |
|
|
|
if (list.size() > 0) { |
|
|
|
msg = list.get(0); |
|
|
|
} |
|
|
|
if (msg == null) { |
|
|
|
logger.error("找不到模板Id"); |
|
|
|
throw new MallinkException(ErrorCode.TEMPLATE_NOT_FOUND); |
|
|
|
} |
|
|
|
// 2. get order info |
|
|
|
WxOrder order = wxOrderMapper.selectByPrimaryKey(couponOrder.getOrderId()); |
|
|
|
if (order == null) { |
|
|
|
logger.error("找不到订单信息"); |
|
|
|
throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND); |
|
|
|
} |
|
|
|
// 3. get coupon info |
|
|
|
WxCoupon coupon = wxCouponMapper.selectByPrimaryKey(couponOrder.getCouponId()); |
|
|
|
if (coupon == null) { |
|
|
|
logger.error("找不到券信息"); |
|
|
|
throw new MallinkException(ErrorCode.COUPON_IS_EMPTY); |
|
|
|
} |
|
|
|
// 4. merchant info |
|
|
|
WxMerchant merchant = wxMerchantMapper.selectByPrimaryKey(bUser.getId()); |
|
|
|
if (merchant == null) { |
|
|
|
logger.error("找不到商户信息"); |
|
|
|
throw new MallinkException(ErrorCode.MERCHANT_INFO_NOT_FOUND); |
|
|
|
} |
|
|
|
// 5. get user info |
|
|
|
WxCUser user = wxCUserMapper.selectByPrimaryKey(order.getCUserId()); |
|
|
|
if (user == null) { |
|
|
|
logger.error("找不到C端用户"); |
|
|
|
throw new MallinkException(ErrorCode.USER_IS_EMPTY); |
|
|
|
} |
|
|
|
// 6. get payOrder info |
|
|
|
WxPayOrder payOrder = null; |
|
|
|
WxPayOrder payOrderQ = new WxPayOrder(); |
|
|
|
payOrderQ.setTenantId(appInfo.getTenantId()); |
|
|
|
payOrderQ.setOrderId(order.getId()); |
|
|
|
payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_WAY_SUCCESS.getCode()); |
|
|
|
List<WxPayOrder> payList = wxPayOrderMapper.select(payOrderQ); |
|
|
|
if (payList.size() > 0) { |
|
|
|
payOrder = payList.get(0); |
|
|
|
} |
|
|
|
|
|
|
|
WxMaService wxMaService = MaUtil.getWeappService(appInfo); |
|
|
|
|
|
|
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); |
|
|
|
String couponDetail = ""; |
|
|
|
if (coupon.getType() == EnumCouponType.COUPON_MANJIAN.getCode()) { |
|
|
|
couponDetail = "满" + coupon.getUsePriceStr() + "减" + coupon.getPriceStr(); |
|
|
|
} |
|
|
|
|
|
|
|
WxMaTemplateMessage templateMessage = null; |
|
|
|
if (couponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()) { |
|
|
|
/** |
|
|
|
* 核销成功 |
|
|
|
* 核销金额 {{keyword1.DATA}} |
|
|
|
* 商家名称 {{keyword2.DATA}} |
|
|
|
* 商品 {{keyword3.DATA}} |
|
|
|
* 核销时间 {{keyword4.DATA}} |
|
|
|
* 商品描述 {{keyword5.DATA}} |
|
|
|
*/ |
|
|
|
templateMessage = WxMaTemplateMessage.builder() |
|
|
|
.toUser(user.getOpenId()) |
|
|
|
.formId(payOrder.getPrepayId()) // 微信支付的formId是prepayId |
|
|
|
.page("pages/index/index") |
|
|
|
.data(Lists.newArrayList( |
|
|
|
new WxMaTemplateMessage.Data("keyword1", String.valueOf(coupon.getPrice() * 1.0 / 100) + "元", "#173177"), |
|
|
|
new WxMaTemplateMessage.Data("keyword2", merchant.getName(), "#173177"), |
|
|
|
new WxMaTemplateMessage.Data("keyword3", coupon.getTitle(), "#173177"), |
|
|
|
new WxMaTemplateMessage.Data("keyword4", dateFormat.format(new Date()), "#173177"), |
|
|
|
new WxMaTemplateMessage.Data("keyword5", merchant.getName(), "#173177")) |
|
|
|
) |
|
|
|
.templateId(msg.getTemplateId()) |
|
|
|
.emphasisKeyword("keyword1.DATA") |
|
|
|
.build(); |
|
|
|
} else { |
|
|
|
/** |
|
|
|
* 核销失败 |
|
|
|
* 商品名称 {{keyword1.DATA}} |
|
|
|
* 核销时间 {{keyword2.DATA}} |
|
|
|
* 失败原因 {{keyword3.DATA}} |
|
|
|
* 备注 {{keyword4.DATA}} |
|
|
|
*/ |
|
|
|
templateMessage = WxMaTemplateMessage.builder() |
|
|
|
.toUser(user.getOpenId()) |
|
|
|
.formId(payOrder.getPrepayId()) // 微信支付的formId是prepayId |
|
|
|
.page("pages/index/index") |
|
|
|
.data(Lists.newArrayList( |
|
|
|
new WxMaTemplateMessage.Data("keyword1", coupon.getTitle(), "#173177"), |
|
|
|
new WxMaTemplateMessage.Data("keyword2", dateFormat.format(new Date()), "#173177"), |
|
|
|
new WxMaTemplateMessage.Data("keyword3", "未知"), |
|
|
|
new WxMaTemplateMessage.Data("keyword4", couponDetail)) |
|
|
|
) |
|
|
|
.templateId(msg.getTemplateId()) |
|
|
|
.emphasisKeyword("keyword1.DATA") |
|
|
|
.build(); |
|
|
|
} |
|
|
|
|
|
|
|
//templateMessage.addData( new WxMaTemplateMessage.Data("keyword1", "339208499", "#173177")); |
|
|
|
try { |
|
|
|
wxMaService.getMsgService().sendTemplateMsg(templateMessage); |
|
|
|
} catch (WxErrorException e) { |
|
|
|
logger.error("支付通知发送失败: " + e.getMessage()); |
|
|
|
throw new MallinkException(ErrorCode.TEMPLATE_SEND_FAILED); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public List<CUserDateAmountVo> queryPriceTotalGroup(String tenantId, Date startTime, Date endTime) { |
|
|
|
return wxCouponOrderMapper.queryPriceTotalGroup(tenantId, startTime, endTime); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public int queryPriceTotal(String tenantId, Date startTime, Date endTime) { |
|
|
|
return wxCouponOrderMapper.queryPriceTotal(tenantId, startTime, endTime); |
|
|
|
} |
|
|
|
@Override |
|
|
|
public List<CUserDateAmountVo> queryPriceTotalGroup(String tenantId, Date startTime, Date endTime) { |
|
|
|
return wxCouponOrderMapper.queryPriceTotalGroup(tenantId, startTime, endTime); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public int queryPriceTotal(String tenantId, Date startTime, Date endTime) { |
|
|
|
return wxCouponOrderMapper.queryPriceTotal(tenantId, startTime, endTime); |
|
|
|
} |
|
|
|
|
|
|
|
} |