@@ -55,6 +55,9 @@ public class WxUserGrantController extends BaseController { | |||||
@Autowired | @Autowired | ||||
WxCUserService wxCUserService; | WxCUserService wxCUserService; | ||||
@Autowired | |||||
SysConfigService sysConfigService; | |||||
/** | /** | ||||
@@ -96,20 +99,23 @@ public class WxUserGrantController extends BaseController { | |||||
@AuthIgnore | @AuthIgnore | ||||
@TenantIgnore | @TenantIgnore | ||||
@PostMapping("/login") | @PostMapping("/login") | ||||
@ApiOperation(value = "用户登录", notes = "{\"code\":\"string\"}") | |||||
@ApiOperation(value = "用户登录", notes = "{\"appId\":\"string\",\"code\":\"string\"}") | |||||
public ResultData userLogin(@RequestBody Map<String, String> map) { | public ResultData userLogin(@RequestBody Map<String, String> map) { | ||||
Map resultMap = new HashMap(); | Map resultMap = new HashMap(); | ||||
String code = map.get("code"); | String code = map.get("code"); | ||||
String appId = map.get("appId"); | |||||
if (StringUtils.isBlank(code)) { | if (StringUtils.isBlank(code)) { | ||||
return new ResultData(ErrorCode.PARAM_EMPITY.getCode(), "code不能为空"); | return new ResultData(ErrorCode.PARAM_EMPITY.getCode(), "code不能为空"); | ||||
} | } | ||||
if (StringUtils.isBlank(appId)) { | |||||
return new ResultData(ErrorCode.PARAM_EMPITY.getCode(), "appId不能为空"); | |||||
} | |||||
String session_key = null; | String session_key = null; | ||||
String openId = null; | String openId = null; | ||||
String unionId = null; | String unionId = null; | ||||
try { | try { | ||||
TenantEntity tenantEntity = this.getTenantInfo(); | |||||
WxAppinfo wxAppinfo = wxAppinfoServie.getCAppInfoFromRedis(tenantEntity.getTenantId()); | |||||
WxAppinfo wxAppinfo = wxAppinfoServie.getCAppInfoFromRedis(appId); | |||||
WxMaJscode2SessionResult session = wxWeappService.jsCode2SessionInfo(code, wxAppinfo, false); | WxMaJscode2SessionResult session = wxWeappService.jsCode2SessionInfo(code, wxAppinfo, false); | ||||
logger.info("sessionResult: " + session); | logger.info("sessionResult: " + session); | ||||
if (null != session) { | if (null != session) { | ||||
@@ -26,4 +26,8 @@ public class WxCUser extends TenantEntity { | |||||
private Date updateDate; | private Date updateDate; | ||||
@io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") | @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") | ||||
private Date createDate; | private Date createDate; | ||||
@io.swagger.annotations.ApiModelProperty(value="生效开始时间",name="validStartTime") | |||||
private Date validStartTime; | |||||
@io.swagger.annotations.ApiModelProperty(value="生效结束时间",name="validEndTime") | |||||
private Date validEndTime; | |||||
} | } |
@@ -45,6 +45,10 @@ public class WxPayOrder extends TenantEntity { | |||||
private Date payTime; | private Date payTime; | ||||
@io.swagger.annotations.ApiModelProperty(value="微信生成的订单号",name="transactionId") | @io.swagger.annotations.ApiModelProperty(value="微信生成的订单号",name="transactionId") | ||||
private String transactionId; | private String transactionId; | ||||
@io.swagger.annotations.ApiModelProperty(value="生效开始时间",name="validStartTime") | |||||
private Date validStartTime; | |||||
@io.swagger.annotations.ApiModelProperty(value="生效结束时间",name="validEndTime") | |||||
private Date validEndTime; | |||||
@TableField(exist = false) | @TableField(exist = false) | ||||
@@ -1,5 +1,6 @@ | |||||
package com.iformall.mapper; | package com.iformall.mapper; | ||||
import java.util.Date; | |||||
import java.util.List; | import java.util.List; | ||||
import com.iformall.common.CommonMapper; | import com.iformall.common.CommonMapper; | ||||
@@ -16,4 +17,6 @@ public interface WxCUserMapper extends CommonMapper<WxCUser, Long> { | |||||
WxCUser selectById(@Param("id")Long id,@Param("tenantId")String tenantId); | WxCUser selectById(@Param("id")Long id,@Param("tenantId")String tenantId); | ||||
void updateValidTime(@Param("id")Long id,@Param("tenantId")String tenantId,@Param("validBeginTime")Date validBeginTime,@Param("validEndTime")Date validEndTime); | |||||
} | } |
@@ -18,6 +18,6 @@ public interface WxAppinfoService { | |||||
*/ | */ | ||||
void saveOrUpdate(WxAppinfo record); | void saveOrUpdate(WxAppinfo record); | ||||
WxAppinfo getCAppInfoFromRedis(String tenantId); | |||||
WxAppinfo getCAppInfoFromRedis(String appId); | |||||
} | } |
@@ -15,18 +15,18 @@ public class WxAppInfoCache { | |||||
return key; | return key; | ||||
} | } | ||||
public static WxAppinfo getCacheAppInfo(RedisTemplate<String, Object> wxAppinfoRedisTemplate,String tenantId) { | |||||
String key = getKey(tenantId); | |||||
public static WxAppinfo getCacheAppInfo(RedisTemplate<String, Object> wxAppinfoRedisTemplate,String appId) { | |||||
String key = getKey(appId); | |||||
return RedisCacheUtils.getCacheObject(wxAppinfoRedisTemplate, key, WxAppinfo.class); | return RedisCacheUtils.getCacheObject(wxAppinfoRedisTemplate, key, WxAppinfo.class); | ||||
} | } | ||||
public static void cacheApp(RedisTemplate<String, Object> wxAppinfoRedisTemplate,WxAppinfo appInfo) { | public static void cacheApp(RedisTemplate<String, Object> wxAppinfoRedisTemplate,WxAppinfo appInfo) { | ||||
String key = getKey(appInfo.getTenantId()); | |||||
String key = getKey(appInfo.getAppId()); | |||||
RedisCacheUtils.cache(wxAppinfoRedisTemplate, key, appInfo, 3600*24*7); | RedisCacheUtils.cache(wxAppinfoRedisTemplate, key, appInfo, 3600*24*7); | ||||
} | } | ||||
public static void removeCache(RedisTemplate<String, Object> wxAppinfoRedisTemplate,String tenantId) { | |||||
String key = getKey(tenantId); | |||||
public static void removeCache(RedisTemplate<String, Object> wxAppinfoRedisTemplate,String appId) { | |||||
String key = getKey(appId); | |||||
RedisCacheUtils.removeCache(wxAppinfoRedisTemplate, key); | RedisCacheUtils.removeCache(wxAppinfoRedisTemplate, key); | ||||
} | } | ||||
} | } |
@@ -54,16 +54,16 @@ public class WxAppinfoServiceImpl implements WxAppinfoService { | |||||
} | } | ||||
@Override | @Override | ||||
public WxAppinfo getCAppInfoFromRedis(String tenantId) { | |||||
WxAppinfo record = WxAppInfoCache.getCacheAppInfo(wxAppinfoRedisTemplate, tenantId); | |||||
public WxAppinfo getCAppInfoFromRedis(String appId) { | |||||
WxAppinfo record = WxAppInfoCache.getCacheAppInfo(wxAppinfoRedisTemplate, appId); | |||||
if (null == record) { | if (null == record) { | ||||
TenantEntity tenantEntity = new TenantEntity(); | |||||
tenantEntity.setTenantId(tenantId); | |||||
record = this.getCAppInfo(tenantEntity); | |||||
record = wxAppinfoMapper.findByAppId(appId); | |||||
if(record != null){ | if(record != null){ | ||||
WxAppInfoCache.cacheApp(wxAppinfoRedisTemplate, record); | WxAppInfoCache.cacheApp(wxAppinfoRedisTemplate, record); | ||||
} | } | ||||
} | } | ||||
return record; | return record; | ||||
} | } | ||||
} | } |
@@ -6,18 +6,22 @@ import com.github.pagehelper.PageInfo; | |||||
import com.iformall.common.ErrorCode; | import com.iformall.common.ErrorCode; | ||||
import com.iformall.common.IdWorker; | import com.iformall.common.IdWorker; | ||||
import com.iformall.domain.entity.PayAdapterResult; | import com.iformall.domain.entity.PayAdapterResult; | ||||
import com.iformall.domain.po.SysConfig; | |||||
import com.iformall.domain.po.WxAppinfo; | import com.iformall.domain.po.WxAppinfo; | ||||
import com.iformall.domain.po.WxPayOrder; | import com.iformall.domain.po.WxPayOrder; | ||||
import com.iformall.domain.po.WxPayAccount; | import com.iformall.domain.po.WxPayAccount; | ||||
import com.iformall.domain.po.base.TenantEntity; | import com.iformall.domain.po.base.TenantEntity; | ||||
import com.iformall.exception.MallinkException; | import com.iformall.exception.MallinkException; | ||||
import com.iformall.mapper.WxAppinfoMapper; | import com.iformall.mapper.WxAppinfoMapper; | ||||
import com.iformall.mapper.WxCUserMapper; | |||||
import com.iformall.mapper.WxPayOrderMapper; | import com.iformall.mapper.WxPayOrderMapper; | ||||
import com.iformall.mapper.WxPayAccountMapper; | import com.iformall.mapper.WxPayAccountMapper; | ||||
import com.iformall.service.SysConfigService; | |||||
import com.iformall.service.WxAppinfoService; | import com.iformall.service.WxAppinfoService; | ||||
import com.iformall.service.WxPayAccountService; | import com.iformall.service.WxPayAccountService; | ||||
import com.iformall.utils.DateUtils; | import com.iformall.utils.DateUtils; | ||||
import com.iformall.utils.RedisLock; | import com.iformall.utils.RedisLock; | ||||
import com.iformall.utils.SysConfigConstant; | |||||
import com.iformall.utils.XmlUtil; | import com.iformall.utils.XmlUtil; | ||||
import java.util.Date; | import java.util.Date; | ||||
import java.util.Map; | import java.util.Map; | ||||
@@ -29,6 +33,8 @@ import org.slf4j.LoggerFactory; | |||||
import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
import org.springframework.context.annotation.Lazy; | import org.springframework.context.annotation.Lazy; | ||||
import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||
import org.springframework.transaction.annotation.Propagation; | |||||
import org.springframework.transaction.annotation.Transactional; | |||||
@Service | @Service | ||||
public class WxPayServiceImpl implements WxPayService { | public class WxPayServiceImpl implements WxPayService { | ||||
@@ -58,6 +64,13 @@ public class WxPayServiceImpl implements WxPayService { | |||||
@Autowired | @Autowired | ||||
WxPayAccountService wxPayAccountService; | WxPayAccountService wxPayAccountService; | ||||
@Lazy | |||||
@Autowired | |||||
SysConfigService sysConfigService; | |||||
@Autowired | |||||
WxCUserMapper wxCUserMapper; | |||||
@Override | @Override | ||||
public PageInfo<WxPayOrder> listPayOrderAsPage(WxPayOrder record, Integer pageIndex, Integer pageSize) { | public PageInfo<WxPayOrder> listPayOrderAsPage(WxPayOrder record, Integer pageIndex, Integer pageSize) { | ||||
return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxPayOrderMapper.findList(record)); | return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxPayOrderMapper.findList(record)); | ||||
@@ -132,6 +145,7 @@ public class WxPayServiceImpl implements WxPayService { | |||||
} | } | ||||
} | } | ||||
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | |||||
@Override | @Override | ||||
public void handlePaidSuccess(String tenantId,Long orderId,Long cUserId,Integer fee,Date paidTime,String transcationId, | public void handlePaidSuccess(String tenantId,Long orderId,Long cUserId,Integer fee,Date paidTime,String transcationId, | ||||
String userPhone) throws Exception{ | String userPhone) throws Exception{ | ||||
@@ -151,17 +165,23 @@ public class WxPayServiceImpl implements WxPayService { | |||||
Long id = idworker.nextId(); | Long id = idworker.nextId(); | ||||
payOrder.setId(id); | payOrder.setId(id); | ||||
payOrder.setTenantId(tenantId); | payOrder.setTenantId(tenantId); | ||||
payOrder.setCreateTime(new Date()); | |||||
payOrder.setUpdateTime(new Date()); | |||||
payOrder.setcUserId(cUserId); | payOrder.setcUserId(cUserId); | ||||
payOrder.setPayAmount(fee); | payOrder.setPayAmount(fee); | ||||
payOrder.setPayTime(paidTime); | payOrder.setPayTime(paidTime); | ||||
payOrder.setTransactionId(transcationId); | payOrder.setTransactionId(transcationId); | ||||
payOrder.setcUserPhone(userPhone); | payOrder.setcUserPhone(userPhone); | ||||
SysConfig config = sysConfigService.getByKey(SysConfigConstant.expired_days, payOrder); | |||||
Date curr = new Date(); | |||||
payOrder.setCreateTime(curr); | |||||
payOrder.setUpdateTime(curr); | |||||
payOrder.setValidStartTime(curr); | |||||
Date endtime = DateUtils.getTimeAfterDays(Integer.parseInt(config.getConfigItemValue()), curr); | |||||
payOrder.setValidEndTime(endtime); | |||||
wxPayOrderMapper.insert(payOrder); | wxPayOrderMapper.insert(payOrder); | ||||
wxCUserMapper.updateValidTime(cUserId, tenantId, curr, endtime); | |||||
}catch(Exception e) { | }catch(Exception e) { | ||||
logger.error("handlePaidSuccess fail.",e); | logger.error("handlePaidSuccess fail.",e); | ||||
throw new MallinkException(ErrorCode.SERVER_ERROR.getCode(),"支付失败"+orderId); | |||||
throw new MallinkException(ErrorCode.SERVER_ERROR.getCode(),"支付更新失败"+orderId); | |||||
}finally { | }finally { | ||||
redisLock.unlock("carPayOrderLock_"+orderId, timeStr); | redisLock.unlock("carPayOrderLock_"+orderId, timeStr); | ||||
} | } | ||||
@@ -4,5 +4,6 @@ public class SysConfigConstant { | |||||
public static final String sale_price="salePrice"; | public static final String sale_price="salePrice"; | ||||
public static final String pay_call_back = "payCallBack"; | public static final String pay_call_back = "payCallBack"; | ||||
public static final String expired_days = "expiredDays"; | |||||
} | } |
@@ -109,7 +109,7 @@ | |||||
</select> | </select> | ||||
<select id="findByAppId" parameterType="java.lang.String" resultMap="BaseResultMap"> | <select id="findByAppId" parameterType="java.lang.String" resultMap="BaseResultMap"> | ||||
SELECT * | |||||
SELECT <include refid="allColumns"/> | |||||
FROM wx_appinfo | FROM wx_appinfo | ||||
WHERE `app_id` = #{appId} | WHERE `app_id` = #{appId} | ||||
<if test=" null != tenantId "> | <if test=" null != tenantId "> | ||||
@@ -10,10 +10,12 @@ | |||||
<result column="phone" jdbcType="VARCHAR" property="phone"/> | <result column="phone" jdbcType="VARCHAR" property="phone"/> | ||||
<result column="update_date" jdbcType="TIMESTAMP" property="updateDate"/> | <result column="update_date" jdbcType="TIMESTAMP" property="updateDate"/> | ||||
<result column="create_date" jdbcType="TIMESTAMP" property="createDate"/> | <result column="create_date" jdbcType="TIMESTAMP" property="createDate"/> | ||||
<result column="valid_start_time" jdbcType="TIMESTAMP" property="validStartTime"/> | |||||
<result column="valid_end_time" jdbcType="TIMESTAMP" property="validEndTime"/> | |||||
</resultMap> | </resultMap> | ||||
<sql id="allColumns"> | <sql id="allColumns"> | ||||
`id`,`tenant_id`,`parent_tenant_id`,`open_id`,`union_id`,`phone`,`update_date`,`create_date` | |||||
`id`,`tenant_id`,`parent_tenant_id`,`open_id`,`union_id`,`phone`,`update_date`,`create_date`,`valid_start_time`,`valid_end_time` | |||||
</sql> | </sql> | ||||
<sql id="dynamicWhereConditions"> | <sql id="dynamicWhereConditions"> | ||||
@@ -74,5 +76,10 @@ | |||||
where id = #{id} | where id = #{id} | ||||
and `tenant_id` = #{tenantId} | and `tenant_id` = #{tenantId} | ||||
</select> | </select> | ||||
<update id="updateValidTime" parameterType="map"> | |||||
update wx_c_user set valid_start_time = #{validBeginTime},valid_end_time = #{validEndTime},update_date = NOW() | |||||
where id = #{id} and tenant_id = #{tenantId} | |||||
</update> | |||||
</mapper> | </mapper> |
@@ -12,11 +12,13 @@ | |||||
<result column="pay_amount" jdbcType="INTEGER" property="payAmount"/> | <result column="pay_amount" jdbcType="INTEGER" property="payAmount"/> | ||||
<result column="pay_time" jdbcType="TIMESTAMP" property="payTime"/> | <result column="pay_time" jdbcType="TIMESTAMP" property="payTime"/> | ||||
<result column="transaction_id" jdbcType="VARCHAR" property="transactionId"/> | <result column="transaction_id" jdbcType="VARCHAR" property="transactionId"/> | ||||
<result column="valid_start_time" jdbcType="TIMESTAMP" property="validStartTime"/> | |||||
<result column="valid_end_time" jdbcType="TIMESTAMP" property="validEndTime"/> | |||||
</resultMap> | </resultMap> | ||||
<sql id="allColumns"> | <sql id="allColumns"> | ||||
`id`,`tenant_id`,`parent_tenant_id`,`create_time`,`update_time`,`c_user_id`,`c_user_phone`,`pay_amount`, | `id`,`tenant_id`,`parent_tenant_id`,`create_time`,`update_time`,`c_user_id`,`c_user_phone`,`pay_amount`, | ||||
`pay_time`,`transaction_id` | |||||
`pay_time`,`transaction_id`,`valid_start_time`,`valid_end_time` | |||||
</sql> | </sql> | ||||
<sql id="dynamicWhereConditions"> | <sql id="dynamicWhereConditions"> | ||||