| @@ -1,19 +1,15 @@ | |||
| package com.iformall.controller.basic; | |||
| import com.github.pagehelper.PageInfo; | |||
| import com.iformall.annotation.SystemControllerLog; | |||
| import com.iformall.annotation.TenantIgnore; | |||
| import com.iformall.common.ErrorCode; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.controller.base.BaseController; | |||
| import com.iformall.domain.po.TtCouponChannelPoi; | |||
| import com.iformall.domain.po.TtMerchantPoi; | |||
| import com.iformall.douyin.web.api.TtWebService; | |||
| import com.iformall.douyin.web.bean.PoiPlan; | |||
| import com.iformall.enums.EnumSupplierMathStatus; | |||
| import com.iformall.domain.po.TtPoiTakeRate; | |||
| import com.iformall.domain.po.base.BaseEntity; | |||
| import com.iformall.service.TtCouponGoodsService; | |||
| import com.iformall.service.TtGoodsCategoryService; | |||
| import com.iformall.service.TtMerchantPoiService; | |||
| import io.swagger.annotations.ApiImplicitParam; | |||
| import io.swagger.annotations.ApiImplicitParams; | |||
| import io.swagger.annotations.ApiOperation; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| @@ -110,6 +106,21 @@ public class TtPoiPlanController extends BaseController { | |||
| return ttCouponGoodsService.poiPlanUpdateStatus(getTenantInfo(),planId,status); | |||
| } | |||
| @ApiOperation("分页列表接口") | |||
| @GetMapping("takeRate") | |||
| @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 takeRateList(@ModelAttribute TtPoiTakeRate record, Integer pageNum, Integer pageSize) { | |||
| logger.debug("[" + getIpAddr() + "] TtMerchantPoiController::list"); | |||
| if (null == record) record = new TtPoiTakeRate(); | |||
| record.updateTenantInfo(getTenantInfo()); | |||
| record.setSortColumns(BaseEntity.SortField.UpdateDate_DESC); | |||
| final PageInfo<TtPoiTakeRate> page = ttCouponGoodsService.takeRateListAsPage(record, pageNum, pageSize); | |||
| return new ResultData(page); | |||
| } | |||
| @ApiOperation("商品达人分佣配置") | |||
| @PostMapping("takeRate") | |||
| @SystemControllerLog(description = "更新") | |||
| @@ -7,6 +7,7 @@ import com.iformall.common.ResultData; | |||
| import com.iformall.controller.base.BaseController; | |||
| import com.iformall.domain.po.base.BaseEntity; | |||
| import com.iformall.domain.po.WxMsgModel; | |||
| import com.iformall.enums.EnumMsgModelType; | |||
| import com.iformall.service.WxMsgModelService; | |||
| import io.swagger.annotations.ApiImplicitParam; | |||
| import io.swagger.annotations.ApiImplicitParams; | |||
| @@ -47,6 +48,9 @@ public class WxMsgModelController extends BaseController { | |||
| //Assert.notNull(wxMsgModel.getName(), "角色名不能为空"); | |||
| //Assert.isTrue(!checkUnique(sysRole.getName(), null), "重复的角色名"); | |||
| wxMsgModel.updateTenantInfo(getTenantInfo()); | |||
| if(wxMsgModel.getTemplateType() == null){ | |||
| wxMsgModel.setTemplateType(EnumMsgModelType.TZ.getCode()); | |||
| } | |||
| return wxMsgModelService.saveOrUpdate(wxMsgModel); | |||
| } | |||
| @@ -171,10 +171,10 @@ public class WxOrderController extends BaseController { | |||
| header.setNonce(request.getHeader("Byte-Nonce-Str")); | |||
| header.setSigned(request.getHeader("Byte-Signature")); | |||
| logger.info("支付2.0预下单回调---header{}"+header.toString()); | |||
| // logger.info("支付2.0预下单回调---header{}"+header.toString()); | |||
| String body = ((BodyReaderHttpServletRequestWrapper) request).getBody(); | |||
| logger.info("支付2.0预下单回调---body{}"+body); | |||
| // logger.info("支付2.0预下单回调---body{}"+body); | |||
| try { | |||
| JSONObject jsonObject = JSONObject.parseObject(body); | |||
| String msg = jsonObject.getString("msg"); | |||
| @@ -183,7 +183,7 @@ public class WxOrderController extends BaseController { | |||
| String app_id = msgObject.getString("app_id"); | |||
| String open_id = msgObject.getString("open_id"); | |||
| //透传字段 | |||
| Map<String,String> couponMap = new HashMap<>(); | |||
| Long composeOrderId = null; | |||
| try{ | |||
| String cp_extra = msgObject.getString("cp_extra"); | |||
| if(StringUtils.isBlank(cp_extra)){ | |||
| @@ -191,10 +191,12 @@ public class WxOrderController extends BaseController { | |||
| map.put("err_tips","缺少透传字段"); | |||
| return map; | |||
| } | |||
| couponMap = JSONObject.parseObject(cp_extra, Map.class); | |||
| Map<String,String> couponMap = JSONObject.parseObject(cp_extra, Map.class); | |||
| String idstr = couponMap.get("composeOrderId"); | |||
| composeOrderId = Long.parseLong(idstr); | |||
| }catch(Exception e){ | |||
| } | |||
| if(couponMap.isEmpty()){ | |||
| if(composeOrderId == null){ | |||
| map.put("err_no",ErrorCode.SYS_PARAMETER_NOT_NULL.getCode()); | |||
| map.put("err_tips","透传字段格式不正确"); | |||
| return map; | |||
| @@ -231,23 +233,15 @@ public class WxOrderController extends BaseController { | |||
| TtPayService ttPayService = maUtil.getTtPayService(appinfo, payAccount); | |||
| CreateOrderCallback createOrderCallback = ttPayService.parseOrderNotifyV2Result(body, header); | |||
| JSONObject allExtParam = new JSONObject(); | |||
| allExtParam.put("order_id",createOrderCallback.getOrderId()); | |||
| allExtParam.put("total_amount",createOrderCallback.getTotalAmount()); | |||
| allExtParam.put("discount",createOrderCallback.getDiscount()); | |||
| allExtParam.put("open_id",createOrderCallback.getOpenId()); | |||
| List<PlatPushOrderSaveDto> list = new ArrayList<>(); | |||
| for (CreateOrderCallback.Good good:createOrderCallback.getGoods()) { | |||
| PlatPushOrderSaveDto dto = new PlatPushOrderSaveDto(); | |||
| dto.setCouponChannelId(Long.parseLong(couponMap.get(good.getGoodsId()))); | |||
| dto.setCount(good.getQuantity()); | |||
| dto.setExtParam(JSON.toJSONString(good.getItemOrderInfoList())); | |||
| list.add(dto); | |||
| } | |||
| ResultData resultData = wxOrderService.platPushSaveOrder(true, EnumComposeOrder.ONE_NUMBER_ORDER_BATCH, allExtParam.toJSONString(), list, memberId, EnumPayWay.PAY_WAY_TT, tenantEntity); | |||
| logger.info("resultData{}"+JSON.toJSONString(resultData)); | |||
| ResultData resultData = wxOrderService.handlerPushOrder(tenantEntity,composeOrderId,allExtParam.toString(),createOrderCallback.getGoods()); | |||
| if(resultData.code == 200){ | |||
| WxComposeOrder order = (WxComposeOrder) resultData.data; | |||
| Map<String, Object> data = new HashMap<>(); | |||
| @@ -294,6 +288,141 @@ public class WxOrderController extends BaseController { | |||
| } | |||
| } | |||
| // @AuthIgnore | |||
| // @ApiOperation(value = "抖音支付2.0与下单回调推送订单", notes = "{\"couponChannelId\":\"String\",\"couponId\":\"String\",\"press\":\"String\",\"orderGroupId\":\"String\",\"formId\":\"String\"}") | |||
| // @PostMapping("douyinPushOrder") | |||
| // public Map<String,Object> douyinPushOrder(HttpServletRequest request) { | |||
| // | |||
| // Map<String, Object> map = new HashMap(); | |||
| // | |||
| // SignatureHeader header = new SignatureHeader(); | |||
| // header.setTimeStamp(request.getHeader("Byte-Timestamp")); | |||
| // header.setNonce(request.getHeader("Byte-Nonce-Str")); | |||
| // header.setSigned(request.getHeader("Byte-Signature")); | |||
| // | |||
| // logger.info("支付2.0预下单回调---header{}"+header.toString()); | |||
| // | |||
| // String body = ((BodyReaderHttpServletRequestWrapper) request).getBody(); | |||
| // logger.info("支付2.0预下单回调---body{}"+body); | |||
| // try { | |||
| // JSONObject jsonObject = JSONObject.parseObject(body); | |||
| // String msg = jsonObject.getString("msg"); | |||
| // | |||
| // JSONObject msgObject = JSONObject.parseObject(msg); | |||
| // String app_id = msgObject.getString("app_id"); | |||
| // String open_id = msgObject.getString("open_id"); | |||
| // //透传字段 | |||
| // Map<String,String> couponMap = new HashMap<>(); | |||
| // try{ | |||
| // String cp_extra = msgObject.getString("cp_extra"); | |||
| // if(StringUtils.isBlank(cp_extra)){ | |||
| // map.put("err_no",ErrorCode.SYS_PARAMETER_NOT_NULL.getCode()); | |||
| // map.put("err_tips","缺少透传字段"); | |||
| // return map; | |||
| // } | |||
| // couponMap = JSONObject.parseObject(cp_extra, Map.class); | |||
| // }catch(Exception e){ | |||
| // } | |||
| // if(couponMap.isEmpty()){ | |||
| // map.put("err_no",ErrorCode.SYS_PARAMETER_NOT_NULL.getCode()); | |||
| // map.put("err_tips","透传字段格式不正确"); | |||
| // return map; | |||
| // } | |||
| // | |||
| // //验证app | |||
| // WxAppinfo appinfo = wxAppinfoService.getByAppId(app_id); | |||
| // if(appinfo == null || !EnumAppPlat.TOUTIAO.getCode().equals(appinfo.getPlat()) | |||
| // || !EnumAppType.C.getCode().equals(appinfo.getType())){ | |||
| // map.put("err_no",ErrorCode.APP_ID_NOT_FOUND.getCode()); | |||
| // map.put("err_tips",ErrorCode.APP_ID_NOT_FOUND.getMessage()); | |||
| // return map; | |||
| // } | |||
| // WxPayAccount payAccount = wxPayAccountService.getById(appinfo.getPayId()); | |||
| // if(payAccount == null){ | |||
| // map.put("err_no",ErrorCode.API_KEY_NOT_FOUND.getCode()); | |||
| // map.put("err_tips","未找到支付配置"); | |||
| // return map; | |||
| // } | |||
| // TenantEntity tenantEntity = new TenantEntity(); | |||
| // tenantEntity.updateTenantInfo(appinfo); | |||
| // //验证用户 | |||
| // Long memberId = null; | |||
| // TtCUser cuser = (TtCUser) cuserFactory.getCUserService(EnumAppPlat.TOUTIAO).getByOpenId(open_id, tenantEntity.getTenantId()); | |||
| // if(cuser != null && cuser.getUserId() != null){ | |||
| // memberId = cuser.getUserId(); | |||
| // } | |||
| // if(memberId == null){ | |||
| // map.put("err_no",ErrorCode.USER_NOT_MEMBER.getCode()); | |||
| // map.put("err_tips",ErrorCode.USER_NOT_MEMBER.getMessage()); | |||
| // return map; | |||
| // } | |||
| // | |||
| // | |||
| // TtPayService ttPayService = maUtil.getTtPayService(appinfo, payAccount); | |||
| // CreateOrderCallback createOrderCallback = ttPayService.parseOrderNotifyV2Result(body, header); | |||
| // JSONObject allExtParam = new JSONObject(); | |||
| // allExtParam.put("order_id",createOrderCallback.getOrderId()); | |||
| // allExtParam.put("total_amount",createOrderCallback.getTotalAmount()); | |||
| // allExtParam.put("discount",createOrderCallback.getDiscount()); | |||
| // allExtParam.put("open_id",createOrderCallback.getOpenId()); | |||
| // | |||
| // List<PlatPushOrderSaveDto> list = new ArrayList<>(); | |||
| // for (CreateOrderCallback.Good good:createOrderCallback.getGoods()) { | |||
| // PlatPushOrderSaveDto dto = new PlatPushOrderSaveDto(); | |||
| // dto.setCouponChannelId(Long.parseLong(couponMap.get(good.getGoodsId()))); | |||
| // dto.setCount(good.getQuantity()); | |||
| // dto.setExtParam(JSON.toJSONString(good.getItemOrderInfoList())); | |||
| // list.add(dto); | |||
| // } | |||
| // | |||
| // ResultData resultData = wxOrderService.platPushSaveOrder(true, EnumComposeOrder.ONE_NUMBER_ORDER_BATCH, allExtParam.toJSONString(), list, memberId, EnumPayWay.PAY_WAY_TT, tenantEntity); | |||
| // logger.info("resultData{}"+JSON.toJSONString(resultData)); | |||
| // if(resultData.code == 200){ | |||
| // WxComposeOrder order = (WxComposeOrder) resultData.data; | |||
| // Map<String, Object> data = new HashMap<>(); | |||
| // data.put("out_order_no",order.getMainOrderId().toString()); | |||
| // data.put("pay_expire_seconds",15*60); | |||
| // data.put("order_entry_schema",wxOrderService.getOrderEntrySchema(order.getMainOrderId())); | |||
| //// List<Map<String,Object>> goodsValid = new ArrayList<>(); | |||
| //// for (Long couponChannelId:order.getCouponChannelMap().keySet()) { | |||
| //// Map<String,Object> goodsValidMap = new HashMap<>(); | |||
| //// WxCouponChannel couponChannel = order.getCouponChannelMap().get(couponChannelId); | |||
| //// goodsValidMap.put("goods_id",couponChannel.getTtSpuId()); | |||
| //// WxCoupon wxCoupon = order.getCouponMap().get(couponChannel.getCouponId()); | |||
| //// if(EnumCouponValidType.BETWEEN_TWO_TIME.getCode().equals(wxCoupon.getValidType())){ | |||
| //// goodsValidMap.put("valid_start_time",wxCoupon.getValidStartDate().getTime()); | |||
| //// goodsValidMap.put("valid_end_time",wxCoupon.getValidEndDate().getTime()); | |||
| //// }else{ | |||
| //// goodsValidMap.put("valid_duration",(long)wxCoupon.getValidDays()*24*3600*1000); | |||
| //// } | |||
| //// goodsValid.add(goodsValidMap); | |||
| //// } | |||
| //// data.put("order_valid_time",goodsValid); | |||
| // | |||
| // map.put("data",data); | |||
| // map.put("err_no",0); | |||
| // map.put("err_tips",resultData.message); | |||
| // logger.info("resultData{}"+JSON.toJSONString(map)); | |||
| // return map; | |||
| // }else{ | |||
| // map.put("err_no",resultData.code); | |||
| // map.put("err_tips",resultData.message); | |||
| // return map; | |||
| // } | |||
| // | |||
| // } catch (TtPayException e) { | |||
| // logger.error(e.getMessage()); | |||
| // map.put("err_no",ErrorCode.SYS_BEAN_EMPTY_PROPERTY_ERROR.getCode()); | |||
| // map.put("err_tips",e.getMessage()); | |||
| // return map; | |||
| // } catch (Exception e){ | |||
| // logger.error(e.getMessage()); | |||
| // map.put("err_no",ErrorCode.SYS_SERVER_ERROR.getCode()); | |||
| // map.put("err_tips",e.getMessage()); | |||
| // return map; | |||
| // } | |||
| // } | |||
| @ApiOperation(value = "继续支付", notes = "{\"composeOrderId\":\"string\"}") | |||
| @PostMapping("/continueToPay") | |||
| public ResultData continueToPay(@RequestBody Map<String, Object> paramMap) { | |||
| @@ -0,0 +1,82 @@ | |||
| package com.iformall.schedule; | |||
| import com.alibaba.fastjson.JSONObject; | |||
| import com.iformall.domain.po.WxMsgConfig; | |||
| import com.iformall.domain.po.WxMsgModel; | |||
| import com.iformall.enums.EnumMsgModelStatus; | |||
| import com.iformall.mapper.WxMsgConfigMapper; | |||
| import com.iformall.mapper.WxMsgModelMapper; | |||
| import com.iformall.sms.SMSFactory; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.scheduling.annotation.Async; | |||
| import org.springframework.scheduling.annotation.Scheduled; | |||
| import org.springframework.stereotype.Component; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| import static java.util.stream.Collectors.groupingBy; | |||
| @Component | |||
| public class WxMsgModelSchedule { | |||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||
| @Autowired | |||
| WxMsgModelMapper WxMsgModelMapper; | |||
| @Autowired | |||
| WxMsgConfigMapper wxMsgConfigMapper; | |||
| @Async | |||
| @Scheduled(cron = "0 * 1/* * * ?") // | |||
| public void querySmsTemplate() { | |||
| WxMsgModel msgModel = new WxMsgModel(); | |||
| msgModel.setStatus(EnumMsgModelStatus.AUDITING.getCode()); | |||
| List<WxMsgModel> aliYunList = WxMsgModelMapper.findAliYunList(msgModel); | |||
| if(!aliYunList.isEmpty()){ | |||
| Map<String, List<WxMsgModel>> collect = aliYunList.stream().collect(groupingBy(WxMsgModel::getTenantId)); | |||
| for (String tenantId:collect.keySet()) { | |||
| WxMsgConfig wxMsgConfig = new WxMsgConfig(); | |||
| wxMsgConfig.setTenantId(tenantId); | |||
| List<WxMsgConfig> wxMsgConfigs = wxMsgConfigMapper.findList(wxMsgConfig); | |||
| if (wxMsgConfigs.size() == 0){ | |||
| logger.error("您还未接入短信运营商,请联系平台管理员"); | |||
| }else{ | |||
| wxMsgConfig = wxMsgConfigs.get(0); | |||
| List<WxMsgModel> wxMsgModels = collect.get(tenantId); | |||
| for (WxMsgModel model:wxMsgModels) { | |||
| try{ | |||
| String result = SMSFactory.querySmsTemplate(wxMsgConfig, model.getModelCode()); | |||
| if(StringUtils.isNotBlank(result)){ | |||
| JSONObject jsonObjectResult = JSONObject.parseObject(result); | |||
| String templateCode = jsonObjectResult.getString("templateCode"); | |||
| Integer templateStatus = jsonObjectResult.getInteger("templateStatus"); | |||
| String reason = jsonObjectResult.getString("reason"); | |||
| if(templateStatus.intValue() == 1 || templateStatus.intValue() == 2) {//0:审核中。1:审核通过。2:审核失败 | |||
| WxMsgModel updModel = new WxMsgModel(); | |||
| updModel.setTenantId(tenantId); | |||
| updModel.setStatus(templateStatus.intValue() == 1?EnumMsgModelStatus.SUCCESS.getCode():EnumMsgModelStatus.FAIL.getCode()); | |||
| updModel.setReason(reason); | |||
| updModel.setModelCode(templateCode); | |||
| WxMsgModelMapper.updateByCode(updModel); | |||
| } | |||
| } | |||
| }catch (Exception e){ | |||
| logger.error("查询模板审核状态失败"+e.getMessage()); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -54,6 +54,13 @@ public class BaseMyBatisConfiguration { | |||
| wxCouponrSharding.setRule(EnumShardingRule.HASH.getCode()); | |||
| shardingList.add(wxCouponrSharding); | |||
| ShardingSphere ttPoiTakeRateSharding = new ShardingSphere(); | |||
| ttPoiTakeRateSharding.setColumn("tenant_id"); | |||
| ttPoiTakeRateSharding.setTableName("tt_poi_take_rate"); | |||
| ttPoiTakeRateSharding.setCount(100); | |||
| ttPoiTakeRateSharding.setRule(EnumShardingRule.HASH.getCode()); | |||
| shardingList.add(ttPoiTakeRateSharding); | |||
| ShardingSphere wxCouponrMerchantSharding = new ShardingSphere(); | |||
| wxCouponrMerchantSharding.setColumn("tenant_id"); | |||
| wxCouponrMerchantSharding.setTableName("wx_coupon_merchant"); | |||
| @@ -0,0 +1,36 @@ | |||
| package com.iformall.domain.po; | |||
| import com.baomidou.mybatisplus.annotation.TableName; | |||
| import com.iformall.domain.po.base.TenantEntity; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| import lombok.ToString; | |||
| import java.util.Date; | |||
| @TableName(value = "tt_poi_take_rate") | |||
| @Data | |||
| @ToString(callSuper = true) | |||
| @EqualsAndHashCode(callSuper = true) | |||
| public class TtPoiTakeRate extends TenantEntity { | |||
| protected Long id; | |||
| @io.swagger.annotations.ApiModelProperty(value="商品ID",name="couponId") | |||
| private Long couponId; | |||
| @io.swagger.annotations.ApiModelProperty(value="抖音ID",name="douyinId") | |||
| private String douyinId; | |||
| @io.swagger.annotations.ApiModelProperty(value="分佣率",name="takeRate") | |||
| private Integer takeRate; | |||
| @io.swagger.annotations.ApiModelProperty(value="状态",name="status") | |||
| private Integer status; | |||
| @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") | |||
| private Date createDate; | |||
| @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") | |||
| private Date updateDate; | |||
| } | |||
| @@ -28,8 +28,14 @@ public class WxMsgModel extends TenantEntity { | |||
| @io.swagger.annotations.ApiModelProperty(value="审核状态 0未通过 1 通过 2审核中",name="status") | |||
| private Integer status; | |||
| @io.swagger.annotations.ApiModelProperty(value="reason",name="reason") | |||
| private String reason; | |||
| @io.swagger.annotations.ApiModelProperty(value="modelid",name="modelId") | |||
| private Integer modelId; | |||
| @io.swagger.annotations.ApiModelProperty(value="templateType",name="templateType") | |||
| private Integer templateType; | |||
| @io.swagger.annotations.ApiModelProperty(value="aliyun模板code",name="modelCode") | |||
| private String modelCode; | |||
| @@ -57,6 +57,8 @@ public class WxPayOrder extends TenantEntity { | |||
| private String payOrderNo; | |||
| @io.swagger.annotations.ApiModelProperty(value="支付状态: 0-支付中;1-支付成功;2-支付失败",name="payOrderStatus") | |||
| private Integer payOrderStatus; | |||
| @TableField(exist = false) | |||
| private boolean creatPay; | |||
| @io.swagger.annotations.ApiModelProperty(value="支付额外参数",name="payParam") | |||
| private String payParam; | |||
| @io.swagger.annotations.ApiModelProperty(value="分账状态: 0-未分账;1-分账",name="payOrderStatus") | |||
| @@ -4,8 +4,9 @@ package com.iformall.enums; | |||
| * Created by Stormeye on 2018/08/09. | |||
| */ | |||
| public enum EnumMsgModelStatus { | |||
| SUCCESS(1, "创建模板成功"), | |||
| FAIL(0, "创建模板失败"), | |||
| SUCCESS(1, "已通过"), | |||
| FAIL(0, "失败"), | |||
| AUDITING(2, "审核中"), | |||
| REPEAT(-6, "模板已存在"), | |||
| NOT_FOUND(-5, "短信模板不存在"), | |||
| SINATURE_CONTENT_ERROR(-4, "短信签名或内容错误"), | |||
| @@ -0,0 +1,40 @@ | |||
| package com.iformall.enums; | |||
| /** | |||
| * Created by Stormeye on 2018/08/09. | |||
| */ | |||
| public enum EnumMsgModelType { | |||
| //说明推广短信和国际/港澳台消息仅支持企业用户。 | |||
| YZM(0, "验证码"), | |||
| TZ(1, "短信通知"), | |||
| TG(2, "推广短信"), | |||
| GJ(3, "国际/港澳台消息"), | |||
| ; | |||
| public static EnumMsgModelType getEnum(Integer code) { | |||
| for (EnumMsgModelType value : values()) { | |||
| if (value.getCode().equals(code)) { | |||
| return value; | |||
| } | |||
| } | |||
| return null; | |||
| } | |||
| private Integer code; | |||
| private String message; | |||
| EnumMsgModelType(Integer code, String message) { | |||
| this.code = code; | |||
| this.message = message; | |||
| } | |||
| public Integer getCode() { | |||
| return code; | |||
| } | |||
| public String getMessage() { | |||
| return message; | |||
| } | |||
| } | |||
| @@ -0,0 +1,16 @@ | |||
| package com.iformall.mapper; | |||
| import com.iformall.common.CommonMapper; | |||
| import com.iformall.domain.po.OrderCps; | |||
| import com.iformall.domain.po.TtPoiTakeRate; | |||
| import org.apache.ibatis.annotations.Param; | |||
| import java.util.List; | |||
| public interface TtPoiTakeRateMapper extends CommonMapper<TtPoiTakeRate, Long> { | |||
| TtPoiTakeRate selectByCouponAndDouyin(@Param("tenantId")String tenantId,@Param("couponId")Long couponId,@Param("douyinId")String douyinId); | |||
| List<TtPoiTakeRate> findList(TtPoiTakeRate takeRate); | |||
| } | |||
| @@ -8,9 +8,13 @@ public interface WxMsgModelMapper extends CommonMapper<WxMsgModel, String> { | |||
| List<WxMsgModel> findList(WxMsgModel wxMsgModel); | |||
| List<WxMsgModel> findAliYunList(WxMsgModel msgModel); | |||
| WxMsgModel findOneByModelId(WxMsgModel wxMsgModel); | |||
| void updateByCode(WxMsgModel wxMsgModel); | |||
| int updateByCode(WxMsgModel wxMsgModel); | |||
| } | |||
| @@ -1,7 +1,9 @@ | |||
| package com.iformall.service; | |||
| import com.github.pagehelper.PageInfo; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.domain.po.TtCouponChannelPoi; | |||
| import com.iformall.domain.po.TtPoiTakeRate; | |||
| import com.iformall.domain.po.WxCoupon; | |||
| import com.iformall.domain.po.base.TenantEntity; | |||
| import com.iformall.domain.vo.TtCouponChannelVo; | |||
| @@ -36,4 +38,6 @@ public interface TtCouponGoodsService { | |||
| ResultData poiPlanUpdateStatus(TenantEntity tenantInfo, Long planId, Integer status); | |||
| ResultData poiTakeRate(TenantEntity tenantInfo, Long couponId, String douyinId, Integer takeRate, Integer status); | |||
| PageInfo<TtPoiTakeRate> takeRateListAsPage(TtPoiTakeRate record, Integer pageNum, Integer pageSize); | |||
| } | |||
| @@ -19,6 +19,7 @@ import com.iformall.domain.vo.WxCouponSendVo; | |||
| import com.iformall.domain.vo.WxOrderCouponPressVo; | |||
| import com.iformall.domain.vo.WxOrderCouponVo; | |||
| import com.iformall.domain.vo.WxOrderQueryVo; | |||
| import com.iformall.douyin.payv2.result.CreateOrderCallback; | |||
| import com.iformall.enums.EnumComposeOrder; | |||
| import com.iformall.enums.EnumOrderStatus; | |||
| import com.iformall.enums.EnumPayWay; | |||
| @@ -267,4 +268,6 @@ public interface WxOrderService { | |||
| Map<String,String> getOrderEntrySchema(Long mainOrderId); | |||
| int updateCpsStatus(WxOrder order); | |||
| ResultData handlerPushOrder(TenantEntity tenantEntity, Long composeOrderId, String batchExtParam, List<CreateOrderCallback.Good> goods); | |||
| } | |||
| @@ -38,7 +38,7 @@ public interface WxPayOrderService { | |||
| */ | |||
| ResultData createPayOrder(WxAppinfo appInfo, WxCUserBasicInfo user, WxPayOrder record, EnumPayWay payWay,PayExtraParam params,boolean isCreatePay); | |||
| PayAdapterResult createPayOrder(WxAppinfo appInfo, WxCUserBasicInfo user,WxPayOrder record,WxComposeOrder composeOrder, | |||
| PayAdapterResult createPayOrder(WxAppinfo appInfo, WxCUserBasicInfo user,WxPayOrder record,WxComposeOrder composeOrder,List<WxOrder> childOrders, | |||
| String productName, EnumPayWay payWay,PayExtraParam params,boolean isCreatePay); | |||
| /** | |||
| @@ -63,6 +63,9 @@ public class TtCouponGoodsServiceImpl implements TtCouponGoodsService { | |||
| @Autowired | |||
| WxAppinfoService wxAppinfoService; | |||
| @Autowired | |||
| TtPoiTakeRateMapper ttPoiTakeRateMapper; | |||
| @Override | |||
| public ResultData couponList(TtCouponVo ttCouponVo, Integer pageNum, Integer pageSize) { | |||
| PageInfo<TtCouponVo> pageInfo = PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> wxCouponMapper.ttCouponList(ttCouponVo)); | |||
| @@ -538,6 +541,13 @@ public class TtCouponGoodsServiceImpl implements TtCouponGoodsService { | |||
| String spu_id = ttMerchantPoiService.getTtWebService(tenantInfo).getPoiPlanService().poiTakeRate(poiTakeRate); | |||
| if(StringUtils.isNotBlank(spu_id) && spu_id.equals(ttCouponChannelPoi.getSpuId())){ | |||
| TtPoiTakeRate ttPoiTakeRate = new TtPoiTakeRate(); | |||
| ttPoiTakeRate.updateTenantInfo(tenantInfo); | |||
| ttPoiTakeRate.setCouponId(couponId); | |||
| ttPoiTakeRate.setDouyinId(douyinId); | |||
| ttPoiTakeRate.setTakeRate(takeRate); | |||
| ttPoiTakeRate.setStatus(status); | |||
| this.saveorupdate(ttPoiTakeRate); | |||
| return new ResultData(); | |||
| }else{ | |||
| return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(),"设置达人分佣错误"); | |||
| @@ -548,5 +558,29 @@ public class TtCouponGoodsServiceImpl implements TtCouponGoodsService { | |||
| } | |||
| } | |||
| @Override | |||
| public PageInfo<TtPoiTakeRate> takeRateListAsPage(TtPoiTakeRate record, Integer pageNum, Integer pageSize) { | |||
| return PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> ttPoiTakeRateMapper.findList(record)); | |||
| } | |||
| private int saveorupdate(TtPoiTakeRate takeRate){ | |||
| TtPoiTakeRate ttPoiTakeRate = ttPoiTakeRateMapper.selectByCouponAndDouyin(takeRate.getTenantId(), takeRate.getCouponId(), takeRate.getDouyinId()); | |||
| Date now = new Date(); | |||
| if(ttPoiTakeRate == null){ | |||
| final IdWorker idWorker = IdWorker.get(); | |||
| takeRate.setId(idWorker.nextId()); | |||
| takeRate.setCreateDate(now); | |||
| takeRate.setUpdateDate(now); | |||
| return ttPoiTakeRateMapper.insert(takeRate); | |||
| }else{ | |||
| ttPoiTakeRate.setTakeRate(takeRate.getTakeRate()); | |||
| ttPoiTakeRate.setStatus(takeRate.getStatus()); | |||
| ttPoiTakeRate.setUpdateDate(new Date()); | |||
| return ttPoiTakeRateMapper.updateById(ttPoiTakeRate); | |||
| } | |||
| } | |||
| } | |||
| @@ -6,6 +6,7 @@ import com.github.pagehelper.PageInfo; | |||
| import com.iformall.common.IdWorker; | |||
| import com.iformall.domain.po.*; | |||
| import com.iformall.enums.EnumCouponPasswordStatus; | |||
| import com.iformall.enums.EnumMsgModelStatus; | |||
| import com.iformall.enums.EnumMsgSendStatus; | |||
| import com.iformall.mapper.*; | |||
| import com.iformall.service.WxMsgCallbackService; | |||
| @@ -174,15 +175,19 @@ public class WxMsgCallbackServiceImpl implements WxMsgCallbackService { | |||
| //approved:审核通过 | |||
| //rejected:审核未通过 | |||
| String templateStatus = param.get("template_status"); | |||
| String reason = param.get("reason"); | |||
| if("approving".equalsIgnoreCase(templateStatus)){ | |||
| wxMsgModel.setStatus(2); | |||
| return; | |||
| // wxMsgModel.setStatus(2); | |||
| }else if("approved".equalsIgnoreCase(templateStatus)){ | |||
| wxMsgModel.setStatus(1); | |||
| wxMsgModel.setStatus(EnumMsgModelStatus.SUCCESS.getCode()); | |||
| }else if("rejected".equalsIgnoreCase(templateStatus)){ | |||
| wxMsgModel.setStatus(0); | |||
| wxMsgModel.setStatus(EnumMsgModelStatus.FAIL.getCode()); | |||
| }else{ | |||
| wxMsgModel.setStatus(-1); | |||
| } | |||
| wxMsgModel.setReason(reason); | |||
| wxMsgModelMapper.updateByCode(wxMsgModel); | |||
| WxMsgValidationcodeModel wxMsgValidationcodeModel = new WxMsgValidationcodeModel(); | |||
| @@ -74,7 +74,7 @@ public class WxMsgModelServiceImpl implements WxMsgModelService { | |||
| } | |||
| String result = SMSFactory.addTemplate(wxMsgConfig, signature,content, EnumVerifyCode.NO.getCode().toString(), | |||
| wxMsgModel.getName(),1,wxMsgModel.getName()); | |||
| wxMsgModel.getName(),wxMsgModel.getTemplateType(),wxMsgModel.getName()); | |||
| JSONObject jsonObjectResult = JSONObject.parseObject(result); | |||
| String ret = jsonObjectResult.get("ret").toString(); | |||
| logger.info("短信模板创建结果:" + result); | |||
| @@ -90,7 +90,7 @@ public class WxMsgModelServiceImpl implements WxMsgModelService { | |||
| wxMsgModel.setModelCode(jsonObjectResult.get("aliyunModelCode").toString()); | |||
| } | |||
| wxMsgModel.setCreatetime(new Date()); | |||
| wxMsgModel.setStatus(2);//审核中 | |||
| wxMsgModel.setStatus(EnumMsgModelStatus.AUDITING.getCode());//审核中 | |||
| wxMsgModelMapper.insert(wxMsgModel); | |||
| } else { | |||
| if(jsonObjectResult.get("data") != null){ | |||
| @@ -100,7 +100,7 @@ public class WxMsgModelServiceImpl implements WxMsgModelService { | |||
| if(jsonObjectResult.get("aliyunModelCode") != null){ | |||
| wxMsgModel.setModelCode(jsonObjectResult.get("aliyunModelCode").toString()); | |||
| } | |||
| wxMsgModel.setStatus(2);//审核中 | |||
| wxMsgModel.setStatus(EnumMsgModelStatus.AUDITING.getCode());//审核中 | |||
| wxMsgModelMapper.updateById(wxMsgModel); | |||
| } | |||
| return new ResultData(Result.SUCCESS, "创建模板成功"); | |||
| @@ -109,7 +109,7 @@ public class WxMsgModelServiceImpl implements WxMsgModelService { | |||
| final IdWorker idWorker = IdWorker.get(); | |||
| wxMsgModel.setId(idWorker.nextId()); | |||
| wxMsgModel.setCreatetime(new Date()); | |||
| wxMsgModel.setStatus(1); | |||
| wxMsgModel.setStatus(EnumMsgModelStatus.SUCCESS.getCode()); | |||
| wxMsgModelMapper.insert(wxMsgModel); | |||
| } else { | |||
| wxMsgModelMapper.updateById(wxMsgModel); | |||
| @@ -138,7 +138,7 @@ public class WxMsgModelServiceImpl implements WxMsgModelService { | |||
| public ResultData getModelList(TenantEntity tenantEntity) { | |||
| WxMsgModel wxMsgModel = new WxMsgModel(); | |||
| wxMsgModel.updateTenantInfo(tenantEntity); | |||
| wxMsgModel.setStatus(1); | |||
| wxMsgModel.setStatus(EnumMsgModelStatus.SUCCESS.getCode()); | |||
| List<WxMsgModel> list = wxMsgModelMapper.findList(wxMsgModel); | |||
| return new ResultData(list); | |||
| } | |||
| @@ -11,6 +11,7 @@ import java.util.List; | |||
| import java.util.Map; | |||
| import java.util.Objects; | |||
| import java.util.concurrent.TimeUnit; | |||
| import java.util.function.Function; | |||
| import java.util.stream.Collectors; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| @@ -23,6 +24,7 @@ import com.iformall.domain.po.*; | |||
| import com.iformall.domain.po.msg.*; | |||
| import com.iformall.domain.po.tt.TtCUser; | |||
| import com.iformall.domain.vo.*; | |||
| import com.iformall.douyin.payv2.result.CreateOrderCallback; | |||
| import com.iformall.enums.*; | |||
| import com.iformall.mapper.*; | |||
| import com.iformall.service.*; | |||
| @@ -66,6 +68,8 @@ import com.iformall.domain.po.base.TenantEntity; | |||
| import com.iformall.exception.MallinkException; | |||
| import com.iformall.mq.MqBaseProducer; | |||
| import static java.util.stream.Collectors.groupingBy; | |||
| @Service | |||
| public class WxOrderServiceImpl implements WxOrderService { | |||
| @@ -197,6 +201,9 @@ public class WxOrderServiceImpl implements WxOrderService { | |||
| @Autowired | |||
| WxBatchOrderMapper wxBatchOrderMapper; | |||
| @Autowired | |||
| TtCouponChannelPoiMapper ttCouponChannelPoiMapper; | |||
| @Autowired | |||
| @Qualifier("couponDetailRedisTemplate") | |||
| RedisTemplate<String, WxCouponCVo> cdRedisTemplate; | |||
| @@ -2831,6 +2838,7 @@ public class WxOrderServiceImpl implements WxOrderService { | |||
| if (EnumComposeOrder.isSingle(composeOrderType.getCode())) { | |||
| composeOrder.setSingleOrder(lastOrder); | |||
| } | |||
| List<WxOrder> orderList = orderAdapterService.getChildOrders(composeOrder, tenantEntity.getTenantId()); | |||
| WxPayOrder record = new WxPayOrder(); | |||
| record.updateTenantInfo(tenantEntity); | |||
| record.setOrderId(composeOrder.getMainOrderId()); | |||
| @@ -2838,7 +2846,7 @@ public class WxOrderServiceImpl implements WxOrderService { | |||
| record.setOpenId((String) composeOrder.getMainOrder().getExpParamValue("open_id")); | |||
| String productName = orderAdapterService.getPayProductName(lastCoupon); | |||
| WxAppinfo cAppInfo = wxAppinfoService.getCAppInfo(tenantEntity, payWay.getPlat()); | |||
| PayAdapterResult payResult = wxPayOrderService.createPayOrder(cAppInfo, user, record,composeOrder,productName, payWay, new PayExtraParam("openId",record.getOpenId()),false); | |||
| PayAdapterResult payResult = wxPayOrderService.createPayOrder(cAppInfo, user, record,composeOrder,orderList,productName, payWay, new PayExtraParam("openId",record.getOpenId()),false); | |||
| if(payResult.isSuccess()){ | |||
| return composeOrder; | |||
| }else{ | |||
| @@ -3614,6 +3622,53 @@ public class WxOrderServiceImpl implements WxOrderService { | |||
| return wxOrderMapper.updateById(refOrder); | |||
| } | |||
| @Override | |||
| public ResultData handlerPushOrder(TenantEntity tenantEntity, Long composeOrderId, String batchExtParam, List<CreateOrderCallback.Good> goods) { | |||
| WxBatchOrder wxBatchOrder = this.getWxBatchOrder(tenantEntity, composeOrderId); | |||
| if(wxBatchOrder == null){ | |||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"未找到订单"); | |||
| } | |||
| WxBatchOrder updBatchOrder = new WxBatchOrder(); | |||
| updBatchOrder.updateTenantInfo(tenantEntity); | |||
| updBatchOrder.setId(wxBatchOrder.getId()); | |||
| updBatchOrder.setExtParam(batchExtParam); | |||
| updBatchOrder.setUpdateDate(new Date()); | |||
| wxBatchOrderMapper.updateById(updBatchOrder); | |||
| OrderAdapterService orderAdapterService = orderFactory.getOrderAdapterService(wxBatchOrder.getOrderType()); | |||
| WxComposeOrder composeOrder = orderAdapterService.getComposeOrder(wxBatchOrder.getId(), tenantEntity.getTenantId()); | |||
| List<WxOrder> childOrders = orderAdapterService.getChildOrders(composeOrder, tenantEntity.getTenantId()); | |||
| Map<Long, List<WxOrder>> collect = childOrders.stream().collect(groupingBy(WxOrder::getCouponChannelId)); | |||
| Map<String, CreateOrderCallback.Good> maps = goods.stream().collect(Collectors.toMap(CreateOrderCallback.Good::getGoodsId, Function.identity())); | |||
| if(collect.keySet().size() == goods.size()){ | |||
| for (Long key: collect.keySet()) { | |||
| List<WxOrder> wxOrders = collect.get(key); | |||
| TtCouponChannelPoi ttCouponChannelPoi = ttCouponChannelPoiMapper.selectByChannelId(tenantEntity.getTenantId(),key); | |||
| CreateOrderCallback.Good good = maps.get(ttCouponChannelPoi.getSpuId()); | |||
| if(wxOrders.size() == good.getItemOrderInfoList().size()){ | |||
| for(int i=0;i<wxOrders.size();i++){ | |||
| WxOrder updOrder = new WxOrder(); | |||
| updOrder.updateTenantInfo(tenantEntity); | |||
| updOrder.setId(wxOrders.get(i).getId()); | |||
| updOrder.setExtParam(JSON.toJSONString(good.getItemOrderInfoList().get(i))); | |||
| wxOrderMapper.updateById(updOrder); | |||
| } | |||
| }else if(wxOrders.size() == 1){ | |||
| WxOrder updOrder = new WxOrder(); | |||
| updOrder.updateTenantInfo(tenantEntity); | |||
| updOrder.setId(wxOrders.get(0).getId()); | |||
| updOrder.setExtParam(JSON.toJSONString(good.getItemOrderInfoList())); | |||
| wxOrderMapper.updateById(updOrder); | |||
| }else{ | |||
| return new ResultData(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(),"数据异常"); | |||
| } | |||
| } | |||
| return new ResultData(composeOrder); | |||
| }else{ | |||
| return new ResultData(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(),"数据异常"); | |||
| } | |||
| } | |||
| private Map<Long,List<WxOrderCouponVo>> getBatchOrderMap(TenantEntity tenantEntity,List<Long> batchOrderIds){ | |||
| WxOrder recordQ = new WxOrder(); | |||
| recordQ.updateTenantInfo(tenantEntity); | |||
| @@ -12,6 +12,7 @@ import com.iformall.common.Result; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.domain.po.*; | |||
| import com.iformall.domain.po.base.TenantEntity; | |||
| import com.iformall.douyin.payv2.request.TtPayUnifiedOrderV2Request; | |||
| import com.iformall.douyin.payv2.result.TtPayOrderQueryV2Result; | |||
| import com.iformall.enums.*; | |||
| import com.iformall.exception.MallinkException; | |||
| @@ -49,6 +50,8 @@ import org.springframework.transaction.annotation.Transactional; | |||
| import java.text.ParseException; | |||
| import java.util.*; | |||
| import static java.util.stream.Collectors.groupingBy; | |||
| @Service | |||
| public class WxPayOrderServiceImpl implements WxPayOrderService { | |||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||
| @@ -77,6 +80,12 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||
| @Autowired | |||
| WxCouponMapper wxCouponMapper; | |||
| @Autowired | |||
| WxCouponChannelMapper wxCouponChannelMapper; | |||
| @Autowired | |||
| TtCouponChannelPoiMapper ttCouponChannelPoiMapper; | |||
| @Autowired | |||
| WxPayOrderMapper wxPayOrderMapper; | |||
| @@ -224,7 +233,20 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||
| } | |||
| } | |||
| return oldRecord; | |||
| } | |||
| }else if(EnumPayStatus.PAY_STATUS_ORDER_NOT_EXISTS.getCode()==wxpaystatus){ | |||
| oldRecord.setCreatPay(true); | |||
| if (repeatPay) { | |||
| if (oldRecord.getPayOrderStatus()!=EnumPayStatus.PAY_STATUS_WAIT.getCode()) { | |||
| oldRecord.setPayOrderStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode()); | |||
| int sqlRow0 =wxPayOrderMapper.updateById(oldRecord); | |||
| if (sqlRow0 != 1) { | |||
| logger.error("pay order update error: " + oldRecord.toString()); | |||
| throw new MallinkException(ErrorCode.DB_FAIL); | |||
| } | |||
| } | |||
| } | |||
| return oldRecord; | |||
| } | |||
| return null; | |||
| } | |||
| @@ -248,7 +270,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||
| lastCoupon = checkSinglePayOrder(o, user, payWay); | |||
| } | |||
| String productName = orderAdapterService.getPayProductName(lastCoupon); | |||
| PayAdapterResult payResult = createPayOrder(appInfo, user, record,composeOrder,productName, payWay, params,isCreatePay); | |||
| PayAdapterResult payResult = createPayOrder(appInfo, user, record,composeOrder,orderList,productName, payWay, params,isCreatePay); | |||
| if (payResult.isSuccess()) { | |||
| // wxOrderService.sendInsideOrderPushMsg(composeOrder,composeOrder.getMainOrderId()); | |||
| return new ResultData(Result.SUCCESS,"创建支付单成功",payResult.getData()); | |||
| @@ -323,8 +345,8 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||
| return wxCoupon; | |||
| } | |||
| @Override | |||
| public PayAdapterResult createPayOrder(WxAppinfo appInfo, WxCUserBasicInfo user,WxPayOrder record,WxComposeOrder composeOrder, | |||
| String productName, EnumPayWay payWay,PayExtraParam params,boolean isCreatePay) { | |||
| public PayAdapterResult createPayOrder(WxAppinfo appInfo, WxCUserBasicInfo user,WxPayOrder record,WxComposeOrder composeOrder,List<WxOrder> childOrders, | |||
| String productName,EnumPayWay payWay,PayExtraParam params,boolean isCreatePay) { | |||
| IdWorker idworker = IdWorker.get(); | |||
| EnumPayShare isShare = EnumPayShare.NO; | |||
| @@ -435,8 +457,31 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||
| if(!isCreatePay){ | |||
| PayAdapterResult par = new PayAdapterResult(); | |||
| par.setSuccess(true); | |||
| Map<String,String> map = new HashMap<>(); | |||
| map.put("outOrderNo",record.getOrderId().toString()); | |||
| Map<String,Object> map = new HashMap<>(); | |||
| map.put("outOrderNo",record.getOrderId()); | |||
| map.put("createPay",record.isCreatPay()); | |||
| if(record.isCreatPay()){ | |||
| Map<String,Integer> payment = new HashMap(); | |||
| payment.put("totalAmount",composeOrder.getPayment()); | |||
| map.put("payment",payment); | |||
| List<Map<String,Object>> goodsList = new ArrayList<>(); | |||
| Map<Long, List<WxOrder>> collect = childOrders.stream().collect(groupingBy(WxOrder::getCouponChannelId)); | |||
| for (Long key: collect.keySet()) { | |||
| Map<String,Object> good = new HashMap<>(); | |||
| Long couponId = wxCouponChannelMapper.findCouponIdById(key, record.getTenantId()); | |||
| WxCoupon wxCoupon = wxCouponMapper.selectById(couponId, record.getTenantId()); | |||
| TtCouponChannelPoi ttCouponChannelPoi = ttCouponChannelPoiMapper.selectById(appInfo.getTenantId(), couponId); | |||
| int quantity = collect.get(key).size(); | |||
| good.put("quantity",quantity); | |||
| good.put("price",wxCoupon.getSalePrice()*quantity); | |||
| good.put("goodsName",wxCoupon.getTitle()); | |||
| good.put("goodsPhoto",wxCoupon.getCoverImg()); | |||
| good.put("goodsId",ttCouponChannelPoi.getSpuId()); | |||
| good.put("goodsType",1); | |||
| goodsList.add(good); | |||
| } | |||
| map.put("goodsList",goodsList); | |||
| } | |||
| par.setData(map); | |||
| return par; | |||
| } | |||
| @@ -67,7 +67,11 @@ public class TtMiniAppPayAdapterService extends BaseTtPayAdapterService implemen | |||
| @Override | |||
| public PayAdapterResult pay(WxPayAccount payAccount, WxPayOrder record,WxComposeOrder composeOrder,String productName,EnumPayShare isShare,WxAppinfo appInfo,Date currentDate, PayExtraParam params) throws Exception { | |||
| if(StringUtils.isNotBlank(record.getPayParam())){ | |||
| if(!record.isCreatPay()){ | |||
| if(StringUtils.isBlank(record.getPayParam())){ | |||
| throw new MallinkException(ErrorCode.SYS_AUTH_ERROR.getCode(),"请升级抖音版本"); | |||
| } | |||
| record.setUpdateTime(new Date()); | |||
| PayAdapterResult par = new PayAdapterResult(); | |||
| par.setSuccess(true); | |||
| @@ -11,5 +11,5 @@ public interface SMSExcutor { | |||
| String remark); | |||
| String querySmsTemplate(String templateCode); | |||
| } | |||
| @@ -64,4 +64,8 @@ public class SMSFactory { | |||
| verifysms,templateName,templateType,remark); | |||
| } | |||
| public static String querySmsTemplate(WxMsgConfig wxMsgConfig, String templateCode) { | |||
| return getSendExcutor(wxMsgConfig).querySmsTemplate(templateCode); | |||
| } | |||
| } | |||
| @@ -1,6 +1,7 @@ | |||
| package com.iformall.sms.aliyun; | |||
| import com.alibaba.fastjson.JSON; | |||
| import com.alibaba.fastjson.JSONObject; | |||
| import com.aliyuncs.DefaultAcsClient; | |||
| import com.aliyuncs.IAcsClient; | |||
| import com.aliyuncs.dysmsapi.model.v20170525.*; | |||
| @@ -63,6 +64,21 @@ public class AliyunSMS implements SMSExcutor { | |||
| return JSON.toJSONString(SMSResult); | |||
| } | |||
| @Override | |||
| public String querySmsTemplate(String templateCode) { | |||
| SMSTemplate smsTemplate = new SMSTemplate(); | |||
| smsTemplate.setTemplateCode(templateCode); | |||
| QuerySmsTemplateResponse querySmsTemplateResponse = this.querySmsTemplate(smsTemplate); | |||
| if(querySmsTemplateResponse.getCode() != null && querySmsTemplateResponse.getCode().equalsIgnoreCase("ok")){ | |||
| JSONObject obj = new JSONObject(); | |||
| obj.put("templateCode",querySmsTemplateResponse.getTemplateCode()); | |||
| obj.put("templateStatus",querySmsTemplateResponse.getTemplateStatus());//0:审核中。1:审核通过。2:审核失败 | |||
| obj.put("reason",querySmsTemplateResponse.getReason()); | |||
| return obj.toJSONString(); | |||
| } | |||
| return null; | |||
| } | |||
| /** | |||
| * 发送短信 | |||
| * @param sms | |||
| @@ -317,7 +333,7 @@ public class AliyunSMS implements SMSExcutor { | |||
| e.getErrCode(), e.getMessage(), e.getRequestId(), e.getErrMsg(), e.getErrorType()); | |||
| } | |||
| QuerySmsTemplateRequest request = new QuerySmsTemplateRequest(); | |||
| request.setTemplateCode("SMS_244430122"); | |||
| request.setTemplateCode("SMS_244585929"); | |||
| DefaultAcsClient acsClient = new DefaultAcsClient(profile); | |||
| QuerySmsTemplateResponse response = null; | |||
| @@ -36,6 +36,11 @@ public class WiwideUtil implements SMSExcutor { | |||
| return addTemplate(secret, bid, publickey, signature, content, notifyUrl,verifysms); | |||
| } | |||
| @Override | |||
| public String querySmsTemplate(String templateCode) { | |||
| return null; | |||
| } | |||
| public static String addTemplate(String secret, String bid, String publickey, String signature, String content, String notifyUrl, String verifysms) { | |||
| //请求api数据排序 | |||
| TreeMap<String, String> message = new TreeMap<>(); | |||
| @@ -0,0 +1,72 @@ | |||
| <?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.TtPoiTakeRateMapper"> | |||
| <resultMap id="BaseResultMap" type="com.iformall.domain.po.TtPoiTakeRate"> | |||
| <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="coupon_id" jdbcType="BIGINT" property="couponId"/> | |||
| <result column="douyin_id" jdbcType="VARCHAR" property="douyinId" /> | |||
| <result column="take_rate" jdbcType="INTEGER" property="takeRate"/> | |||
| <result column="status" jdbcType="INTEGER" property="status"/> | |||
| <result column="create_date" jdbcType="TIMESTAMP" property="createDate"/> | |||
| <result column="update_date" jdbcType="TIMESTAMP" property="updateDate"/> | |||
| </resultMap> | |||
| <sql id="allColumns"> | |||
| `id`,`tenant_id`,`parent_tenant_id`,`coupon_id`,`douyin_id`, | |||
| `take_rate`,`status`, | |||
| `create_date`,`update_date` | |||
| </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 != couponId "> | |||
| and `coupon_id` = #{couponId} | |||
| </if> | |||
| <if test=" null != douyinId and '' != douyinId"> | |||
| and `douyin_id` = #{douyinId} | |||
| </if> | |||
| <if test=" null != status "> | |||
| and `status` = #{status} | |||
| </if> | |||
| <if test=" null != ids "> | |||
| and id in | |||
| <foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")"> | |||
| #{idItem} | |||
| </foreach> | |||
| </if> | |||
| <if test=" null != sortColumns">order by ${sortColumns}</if> | |||
| </sql> | |||
| <select id="selectByCouponAndDouyin" parameterType="java.util.HashMap" resultMap="BaseResultMap"> | |||
| select <include refid="allColumns"/> | |||
| from tt_poi_take_rate | |||
| where tenant_id = #{tenantId} | |||
| and `coupon_id` = #{couponId} | |||
| and `douyin_id` = #{douyinId} | |||
| </select> | |||
| <select id="findList" parameterType="com.iformall.domain.po.TtPoiTakeRate" resultMap="BaseResultMap"> | |||
| select | |||
| <include refid="allColumns"/> | |||
| from tt_poi_take_rate | |||
| <include refid="dynamicWhereConditions"/> | |||
| </select> | |||
| </mapper> | |||
| @@ -10,13 +10,15 @@ | |||
| <result column="content" jdbcType="VARCHAR" property="content"/> | |||
| <result column="createtime" jdbcType="TIMESTAMP" property="createtime"/> | |||
| <result column="status" jdbcType="INTEGER" property="status"/> | |||
| <result column="reason" jdbcType="INTEGER" property="reason"/> | |||
| <result column="model_id" jdbcType="INTEGER" property="modelId"/> | |||
| <result column="template_type" jdbcType="INTEGER" property="templateType"/> | |||
| <result column="model_code" jdbcType="VARCHAR" property="modelCode"/> | |||
| </resultMap> | |||
| <sql id="allColumns"> | |||
| `id`,`tenant_id`,`parent_tenant_id`,`name`,`signature`,`content`,`createtime`,`status`,`model_id`,`model_code` | |||
| `id`,`tenant_id`,`parent_tenant_id`,`name`,`signature`,`content`,`createtime`,`status`,`reason`,`model_id`,`template_type`,`model_code` | |||
| </sql> | |||
| <sql id="dynamicWhereConditions"> | |||
| @@ -55,6 +57,9 @@ | |||
| <if test=" null != modelId"> | |||
| and `model_id` = #{modelId} | |||
| </if> | |||
| <if test=" null != templateType"> | |||
| and `template_type` = #{templateType} | |||
| </if> | |||
| <if test=" null != modelCode"> | |||
| and `model_code` = #{modelCode} | |||
| </if> | |||
| @@ -74,6 +79,15 @@ | |||
| <include refid="dynamicWhereConditions"/> | |||
| </select> | |||
| <select id="findAliYunList" parameterType="com.iformall.domain.po.WxMsgModel" resultMap="BaseResultMap"> | |||
| select | |||
| <include refid="allColumns"/> | |||
| from wx_msg_model | |||
| where ifnull(model_code,'') != ''; | |||
| and `status` = #{status} | |||
| </select> | |||
| <select id="findOneByModelId" parameterType="com.iformall.domain.po.WxMsgModel" resultMap="BaseResultMap"> | |||
| select | |||
| <include refid="allColumns"/> | |||
| @@ -92,7 +106,7 @@ | |||
| </select> | |||
| <update id="updateByCode" parameterType="com.iformall.domain.po.WxMsgModel"> | |||
| update wx_msg_model set status=#{status} where `model_code` = #{modelCode} | |||
| update wx_msg_model set status=#{status},reason=#{reason} where `model_code` = #{modelCode} | |||
| </update> | |||
| </mapper> | |||