| | |
| | | /** |
| | | * 更新 |
| | | * |
| | | * @param material |
| | | * @param bean |
| | | */ |
| | | public void updateSelective(LuckyActivityAwardMaterial material) { |
| | | public void updateSelective(LuckyActivityAwardMaterial bean) { |
| | | Query query = new Query(); |
| | | query.addCriteria(Criteria.where("id").is(material.getId())); |
| | | query.addCriteria(Criteria.where("id").is(bean.getId())); |
| | | Update update = new Update(); |
| | | if (material.getType() != null) { |
| | | update.set("type", material.getType()); |
| | | if (bean.getType() != null) { |
| | | update.set("type", bean.getType()); |
| | | } |
| | | if (material.getImgList() != null) { |
| | | update.set("imgList", material.getImgList()); |
| | | if (bean.getImgList() != null) { |
| | | update.set("imgList", bean.getImgList()); |
| | | } |
| | | update.set("updateTime", new Date()); |
| | | update(query, update); |
| | | } |
| | | |
| | | } |
| | |
| | | import com.ks.lib.common.dao.MongodbBaseDao; |
| | | import com.ks.lucky.pojo.DO.LuckySponsorAd; |
| | | import com.ks.lucky.query.LuckySponsorAdQuery; |
| | | import org.springframework.data.mongodb.core.query.Criteria; |
| | | import org.springframework.data.mongodb.core.query.Query; |
| | | import org.springframework.data.mongodb.core.query.Update; |
| | | import org.springframework.stereotype.Repository; |
| | | |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | @Repository |
| | | public class LuckySponsorAdDao extends MongodbBaseDao<LuckySponsorAd> { |
| | | |
| | | public void updateSelective(LuckySponsorAd bean) { |
| | | Query query = new Query(); |
| | | query.addCriteria(Criteria.where("id").is(bean.getId())); |
| | | Update update = new Update(); |
| | | if (bean.getAdType() != null) { |
| | | update.set("adType", bean.getAdType()); |
| | | } |
| | | if (bean.getSponsorId() != null) { |
| | | update.set("sponsorId", bean.getSponsorId()); |
| | | } |
| | | if (bean.getState() != null) { |
| | | update.set("state", bean.getState()); |
| | | } |
| | | if (bean.getStateDesc() != null) { |
| | | update.set("stateDesc", bean.getStateDesc()); |
| | | } |
| | | if (bean.getVerifyTime() != null) { |
| | | update.set("verifyTime", bean.getVerifyTime()); |
| | | } |
| | | if (bean.getVerifySuccessTime() != null) { |
| | | update.set("verifySuccessTime", bean.getVerifySuccessTime()); |
| | | } |
| | | update.set("updateTime", new Date()); |
| | | update(query, update); |
| | | } |
| | | |
| | | public List<LuckySponsorAd> list(LuckySponsorAdQuery query) { |
| | | |
| | |
| | | return 0; |
| | | } |
| | | |
| | | |
| | | public void updateSelective(LuckySponsorAd ad) { |
| | | |
| | | } |
| | | |
| | | public List<LuckySponsorAd> list(List<String> ids) { |
| | | return null; |
| | |
| | | |
| | | public interface LuckyActivityAwardResultExtraMapper extends BaseMapper<LuckyActivityAwardResultExtra> { |
| | | |
| | | LuckyActivityAwardResultExtra selectByAwardResultId(Long resultId); |
| | | |
| | | } |
| | |
| | | |
| | | long count(@Param("query") ActivityAwardResultQuery query); |
| | | |
| | | LuckyActivityAwardResult selectByPrimaryKeyForUpdate(Long id); |
| | | |
| | | int setStateByActivityId(Long activityId,Integer state,String stateDesc); |
| | | |
| | | |
| | | } |
| | |
| | | |
| | | List<LuckyActivityJoinRecord> list(ActivityJoinRecordQuery query); |
| | | |
| | | long count(ActivityJoinRecordQuery query); |
| | | |
| | | void addWeight(Long id, int weight); |
| | | |
| | | } |
| | |
| | | |
| | | public interface LuckyActivityOpenInfoMapper extends BaseMapper<LuckyActivityOpenInfo> { |
| | | |
| | | LuckyActivityOpenInfo selectByActivityId(Long activityId); |
| | | } |
| | |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public AppInfo getAppDetail(Long appId) { |
| | | AppInfo info = appService.getAppDetail(appId); |
| | | return info; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ks.lucky.service.impl; |
| | | |
| | | import com.alipay.api.AlipayApiException; |
| | | import com.google.gson.Gson; |
| | | import com.ks.app.entity.AppAlipayInfoWithBLOBs; |
| | | import com.ks.app.entity.AppInfo; |
| | | import com.ks.lucky.exception.LuckyActivityAwardException; |
| | | import com.ks.lucky.exception.LuckyActivityAwardResultException; |
| | | import com.ks.lucky.mapper.LuckyActivityAwardResultExtraMapper; |
| | | import com.ks.lucky.mapper.LuckyActivityAwardResultMapper; |
| | | import com.ks.lucky.pojo.DO.LuckyActivityAwardResult; |
| | | import com.ks.lucky.pojo.DO.LuckyActivityAwardResultExtra; |
| | | import com.ks.lucky.pojo.DO.LuckyActivityAwards; |
| | | import com.ks.lucky.pojo.DTO.ActivityAwardParams; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.yeshi.utils.StringUtil; |
| | | import org.yeshi.utils.alipay.AlipayUtil; |
| | | import org.yeshi.utils.entity.alipay.AlipayAppInfo; |
| | | import org.yeshi.utils.entity.alipay.AlipayCertInfo; |
| | | import org.yeshi.utils.entity.alipay.AlipayTransferAccount; |
| | | import org.yeshi.utils.entity.alipay.AlipayTransferInfo; |
| | | import org.yeshi.utils.exception.AlipayTransferException; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.io.ByteArrayInputStream; |
| | | import java.io.InputStream; |
| | | import java.math.BigDecimal; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Set; |
| | | |
| | | /** |
| | | * 奖项管理 |
| | | */ |
| | | @Component |
| | | public class LuckyActivityAwardResultManager { |
| | | |
| | | @Resource |
| | | private LuckyActivityAwardManager luckyActivityAwardManager; |
| | | |
| | | @Resource |
| | | private AppManager appManager; |
| | | |
| | | @Resource |
| | | private LuckyActivityAwardResultMapper luckyActivityAwardResultMapper; |
| | | |
| | | @Resource |
| | | private LuckyActivityAwardResultExtraMapper luckyActivityAwardResultExtraMapper; |
| | | |
| | | |
| | | /** |
| | | * 添加记录 |
| | | * |
| | | * @param uids |
| | | * @param activityId |
| | | * @param awardId |
| | | */ |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void addRecord(Set<String> uids, Long activityId, long awardId) { |
| | | |
| | | for (String uidStr : uids) { |
| | | long appId = Long.parseLong(uidStr.split("#")[0]); |
| | | String uid = uidStr.split("#")[1]; |
| | | LuckyActivityAwardResult result = new LuckyActivityAwardResult(); |
| | | result.setState(LuckyActivityAwardResult.STATE_NOT_SHOW); |
| | | result.setStateDesc("未显示"); |
| | | result.setActivityId(activityId); |
| | | result.setAwardId(awardId); |
| | | result.setAppId(appId); |
| | | result.setUid(uid); |
| | | result.setCreateTime(new Date()); |
| | | |
| | | luckyActivityAwardResultMapper.insertSelective(result); |
| | | |
| | | LuckyActivityAwardResultExtra extra = new LuckyActivityAwardResultExtra(); |
| | | extra.setAwardResultId(result.getId()); |
| | | extra.setCreateTime(new Date()); |
| | | luckyActivityAwardResultExtraMapper.insertSelective(extra); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 发奖 |
| | | * |
| | | * @param result |
| | | * @throws LuckyActivityAwardException |
| | | */ |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void sendAward(LuckyActivityAwardResult result, LuckyActivityAwardResultExtra extra) throws LuckyActivityAwardException, LuckyActivityAwardResultException { |
| | | LuckyActivityAwards awards = luckyActivityAwardManager.getAwardDetail(result.getAwardId()); |
| | | if (awards == null) { |
| | | throw new LuckyActivityAwardException(LuckyActivityAwardException.CODE_NOT_EXIST, "奖项不存在"); |
| | | } |
| | | String paramsStr = awards.getAwardParams(); |
| | | ActivityAwardParams params = new Gson().fromJson(paramsStr, ActivityAwardParams.class); |
| | | AppInfo app = appManager.getAppDetail(result.getAppId()); |
| | | |
| | | if (params.getType() == ActivityAwardParams.ActivityAwardTypeEnum.alipayRedPackage) { |
| | | //发支付宝红包 |
| | | AppAlipayInfoWithBLOBs alipayInfo = app.getAlipayInfo(); |
| | | if (alipayInfo == null) { |
| | | throw new LuckyActivityAwardResultException(LuckyActivityAwardResultException.CODE_NOT_EXIST, "支付宝信息不存在"); |
| | | } |
| | | //参数不完整 |
| | | if (extra == null || extra.getRedPackage() == null || StringUtil.isNullOrEmpty(extra.getAlipyUid())) { |
| | | throw new LuckyActivityAwardResultException(LuckyActivityAwardResultException.CODE_PARAMS_NOT_ENOUGH, "参数不完整,缺少alipayUid与redPackage参数"); |
| | | } |
| | | |
| | | |
| | | String orderId = alipayInfo.getAlipayAppId() + "_award_" + result.getId(); |
| | | BigDecimal money = extra.getRedPackage(); |
| | | String alipayUid = extra.getAlipyUid(); |
| | | |
| | | try { |
| | | sendAlipayRedPackage(orderId, alipayUid, "", money, alipayInfo); |
| | | } catch (AlipayTransferException e) { |
| | | throw new LuckyActivityAwardResultException(e.getCode(), e.getMsg()); |
| | | } catch (AlipayApiException e) { |
| | | throw new LuckyActivityAwardResultException(1, e.getErrMsg()); |
| | | } |
| | | |
| | | LuckyActivityAwardResult update = new LuckyActivityAwardResult(); |
| | | update.setId(result.getId()); |
| | | update.setState(LuckyActivityAwardResult.STATE_RECIEVED); |
| | | update.setStateDesc("已领取"); |
| | | update.setUpdateTime(new Date()); |
| | | } else if (params.getType() == ActivityAwardParams.ActivityAwardTypeEnum.wxRedPackage) { |
| | | //TODO 微信发红包 |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 发支付宝红包 |
| | | */ |
| | | private void sendAlipayRedPackage(String outBizNo, String alipayUid, String orderTitle, BigDecimal money, AppAlipayInfoWithBLOBs alipayInfo) throws AlipayTransferException, AlipayApiException { |
| | | InputStream appCert = new ByteArrayInputStream(alipayInfo.getAlipayAppCertPublicKey()); |
| | | InputStream publicCert = new ByteArrayInputStream(alipayInfo.getAlipayPublicCert()); |
| | | InputStream rootCert = new ByteArrayInputStream(alipayInfo.getAlipayRootCert()); |
| | | |
| | | AlipayAppInfo appInfo = new AlipayAppInfo(alipayInfo.getAlipayAppId(), alipayInfo.getAlipayPrivateKey(), new AlipayCertInfo(appCert, publicCert, rootCert)); |
| | | AlipayTransferInfo transferInfo = new AlipayTransferInfo(); |
| | | transferInfo.setAccount(new AlipayTransferAccount(alipayUid)); |
| | | transferInfo.setMoney(money); |
| | | transferInfo.setOrderTitle(orderTitle); |
| | | transferInfo.setPayerName("*"); |
| | | transferInfo.setOutBizNo(outBizNo); |
| | | transferInfo.setProductCode(AlipayTransferInfo.AlipayProductCodeEnum.STD_RED_PACKET); |
| | | transferInfo.setBizScene(AlipayTransferInfo.AlipayBizSceneEnum.DIRECT_TRANSFER); |
| | | AlipayUtil.alipayFundTransUniTransfer(appInfo, transferInfo); |
| | | } |
| | | |
| | | |
| | | @Transactional |
| | | public void setResultShow(Long activityId) { |
| | | luckyActivityAwardResultMapper.setStateByActivityId(activityId, LuckyActivityAwardResult.STATE_NOT_RECIEVE, "等待领取"); |
| | | } |
| | | |
| | | } |
| | |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * 活动奖项管理 |
| | |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * 获取参与数据 |
| | | * @param activityId |
| | | * @return |
| | | */ |
| | | public Map<String, Integer> getJoinData(Long activityId) { |
| | | Map<String, Integer> map = new HashMap<>(); |
| | | ActivityJoinRecordQuery query = new ActivityJoinRecordQuery(); |
| | | query.activityId = activityId; |
| | | long count = luckyActivityJoinRecordMapper.count(query); |
| | | int pageSize = 200; |
| | | int page = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1); |
| | | for (int i = 0; i < page; i++) { |
| | | query.start = i * pageSize; |
| | | query.count = query.start + pageSize > count ? (int) (count - query.start) : pageSize; |
| | | List<LuckyActivityJoinRecord> list = luckyActivityJoinRecordMapper.list(query); |
| | | if (list != null) { |
| | | for (LuckyActivityJoinRecord record : list) { |
| | | //APPID与用户ID采用#链接 |
| | | map.put(record.getAppId() + "#" + record.getUid(), record.getWeight()); |
| | | } |
| | | } |
| | | } |
| | | return map; |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 按主键查询 |
| | | * |
| | | * @param id |
| | | * @return |
| | | */ |
| | | public LuckyActivity selectByPrimaryKey(Long id) { |
| | | return luckyActivityMapper.selectByPrimaryKey(id); |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | package com.ks.lucky.service.impl; |
| | | |
| | | import com.ks.lucky.exception.LuckyActivityOpenInfoException; |
| | | import com.ks.lucky.mapper.LuckyActivityOpenInfoMapper; |
| | | import com.ks.lucky.pojo.DO.LuckyActivityOpenInfo; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * 活动开奖信息管理 |
| | |
| | | @Component |
| | | public class LuckyActivityOpenInfoManager { |
| | | |
| | | @Resource |
| | | private LuckyActivityOpenInfoMapper luckyActivityOpenInfoMapper; |
| | | |
| | | |
| | | /** |
| | | * 添加开奖信息 |
| | | * |
| | | * @param OpenInfo |
| | | * @param openInfo |
| | | * @throws LuckyActivityOpenInfoException |
| | | */ |
| | | public void addOpenInfo(LuckyActivityOpenInfo OpenInfo) throws LuckyActivityOpenInfoException { |
| | | |
| | | @Validated |
| | | public Long addOpenInfo(LuckyActivityOpenInfo openInfo) throws LuckyActivityOpenInfoException { |
| | | if (openInfo.getCreateTime() == null) { |
| | | openInfo.setCreateTime(new Date()); |
| | | } |
| | | luckyActivityOpenInfoMapper.insertSelective(openInfo); |
| | | return openInfo.getId(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 修改开奖信息 |
| | | * |
| | | * @param OpenInfo |
| | | * @param openInfo |
| | | * @throws LuckyActivityOpenInfoException |
| | | */ |
| | | public void updateOpenInfo(LuckyActivityOpenInfo OpenInfo) throws LuckyActivityOpenInfoException { |
| | | |
| | | public void updateOpenInfo(LuckyActivityOpenInfo openInfo) throws LuckyActivityOpenInfoException { |
| | | openInfo.setUpdateTime(new Date()); |
| | | luckyActivityOpenInfoMapper.updateByPrimaryKeySelective(openInfo); |
| | | } |
| | | |
| | | |
| | |
| | | public LuckyActivityOpenInfo getOpenInfo(Long activityId) { |
| | | |
| | | |
| | | return null; |
| | | return luckyActivityOpenInfoMapper.selectByActivityId(activityId); |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | public LuckyActivityOpenInfo getOpenInfoDetail(Long id) { |
| | | |
| | | return null; |
| | | return luckyActivityOpenInfoMapper.selectByPrimaryKey(id); |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | |
| | | public void deleteOpenInfo(Long id) { |
| | | |
| | | luckyActivityOpenInfoMapper.deleteByPrimaryKey(id); |
| | | } |
| | | |
| | | |
| | |
| | | private LuckySponsorAdDao luckySponsorAdDao; |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | |
| | | package com.ks.lucky.service.impl.remote; |
| | | |
| | | import com.aliyun.tea.Validation; |
| | | import com.ks.lucky.dao.LuckyActivityAwardMaterialDao; |
| | | import com.ks.lucky.exception.LuckyActivityAwardMaterialException; |
| | | import com.ks.lucky.pojo.DO.LuckyActivityAwardMaterial; |
| | |
| | | package com.ks.lucky.service.impl.remote; |
| | | |
| | | import com.ks.lucky.exception.LuckyActivityAwardException; |
| | | import com.ks.lucky.exception.LuckyActivityAwardResultException; |
| | | import com.ks.lucky.exception.LuckyActivityException; |
| | | import com.ks.lucky.mapper.LuckyActivityAwardResultExtraMapper; |
| | | import com.ks.lucky.mapper.LuckyActivityAwardResultMapper; |
| | | import com.ks.lucky.pojo.DO.LuckyActivity; |
| | | import com.ks.lucky.pojo.DO.LuckyActivityAwardResult; |
| | | import com.ks.lucky.pojo.DO.LuckyActivityAwardResultExtra; |
| | | import com.ks.lucky.query.ActivityAwardResultQuery; |
| | | import com.ks.lucky.remote.service.LuckyActivityAwardResultService; |
| | | import com.ks.lucky.service.impl.AppManager; |
| | | import com.ks.lucky.service.impl.LuckyActivityAwardResultManager; |
| | | import com.ks.lucky.service.impl.LuckyActivityManager; |
| | | import org.apache.dubbo.config.annotation.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.List; |
| | |
| | | private LuckyActivityAwardResultMapper luckyActivityAwardResultMapper; |
| | | |
| | | @Resource |
| | | private LuckyActivityAwardResultExtraMapper luckyActivityAwardResultExtraMapper; |
| | | |
| | | @Resource |
| | | private LuckyActivityAwardResultManager luckyActivityAwardResultManager; |
| | | |
| | | @Resource |
| | | private AppManager appManager; |
| | | |
| | | @Resource |
| | | private LuckyActivityManager luckyActivityManager; |
| | | |
| | | |
| | | @Override |
| | |
| | | return null; |
| | | } |
| | | |
| | | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Override |
| | | public void recieveAward(String appKey, String uid, Long activityId) { |
| | | //TODO 领奖 |
| | | public void recieveAward(String appKey, String uid, Long activityId) throws LuckyActivityException, LuckyActivityAwardException, LuckyActivityAwardResultException { |
| | | //----------验证开始----------- |
| | | Long appId = appManager.getAppId(appKey); |
| | | LuckyActivity activity = luckyActivityManager.selectByPrimaryKey(activityId); |
| | | if (activity == null) { |
| | | //不存在 |
| | | throw new LuckyActivityException(LuckyActivityException.CODE_NOT_EXIST, "活动不存在"); |
| | | } |
| | | if (activity.getState() != LuckyActivity.STATE_OPENED) { |
| | | throw new LuckyActivityAwardException(1, "活动尚未开奖"); |
| | | } |
| | | |
| | | ActivityAwardResultQuery query = new ActivityAwardResultQuery(); |
| | | query.uid = uid; |
| | | query.appId = appId; |
| | | query.activityId = activityId; |
| | | List<LuckyActivityAwardResult> list = luckyActivityAwardResultMapper.list(query); |
| | | if (list == null || list.size() == 0) { |
| | | throw new LuckyActivityAwardException(LuckyActivityAwardException.CODE_NOT_EXIST, "尚未中奖"); |
| | | } |
| | | |
| | | Long id = list.get(0).getId(); |
| | | LuckyActivityAwardResult result = luckyActivityAwardResultMapper.selectByPrimaryKeyForUpdate(id); |
| | | if (result.getState() != LuckyActivityAwardResult.STATE_NOT_RECIEVE) { |
| | | throw new LuckyActivityAwardException(1, "尚未处于可领取状态"); |
| | | } |
| | | LuckyActivityAwardResultExtra extra = luckyActivityAwardResultExtraMapper.selectByAwardResultId(result.getId()); |
| | | |
| | | //----------验证结束----------- |
| | | //发奖 |
| | | luckyActivityAwardResultManager.sendAward(result, extra); |
| | | } |
| | | } |
| | |
| | | private LuckyActivityAwardManager luckyActivityAwardManager; |
| | | |
| | | @Override |
| | | public void addAward(LuckyActivityAwards award) throws LuckyActivityAwardException { |
| | | public Long addAward(LuckyActivityAwards award) throws LuckyActivityAwardException { |
| | | luckyActivityAwardManager.addAward(award); |
| | | return award.getId(); |
| | | } |
| | | |
| | | @Override |
| | |
| | | import com.ks.lucky.exception.LuckyActivityOpenInfoException; |
| | | import com.ks.lucky.pojo.DO.LuckyActivityOpenInfo; |
| | | import com.ks.lucky.remote.service.LuckyActivityOpenInfoService; |
| | | import com.ks.lucky.service.impl.LuckyActivityOpenInfoManager; |
| | | import org.apache.dubbo.config.annotation.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | |
| | | @Service(version = "1.0") |
| | | public class LuckyActivityOpenInfoServiceImpl implements LuckyActivityOpenInfoService { |
| | | @Override |
| | | public void addOpenInfo(LuckyActivityOpenInfo OpenInfo) throws LuckyActivityOpenInfoException { |
| | | |
| | | @Resource |
| | | private LuckyActivityOpenInfoManager luckyActivityOpenInfoManager; |
| | | |
| | | @Override |
| | | public Long addOpenInfo(LuckyActivityOpenInfo openInfo) throws LuckyActivityOpenInfoException { |
| | | luckyActivityOpenInfoManager.addOpenInfo(openInfo); |
| | | return openInfo.getId(); |
| | | } |
| | | |
| | | @Override |
| | | public void updateOpenInfo(LuckyActivityOpenInfo OpenInfo) throws LuckyActivityOpenInfoException { |
| | | |
| | | public void updateOpenInfo(LuckyActivityOpenInfo openInfo) throws LuckyActivityOpenInfoException { |
| | | luckyActivityOpenInfoManager.updateOpenInfo(openInfo); |
| | | } |
| | | |
| | | @Override |
| | | public LuckyActivityOpenInfo getOpenInfo(Long activityId) { |
| | | return null; |
| | | return luckyActivityOpenInfoManager.getOpenInfo(activityId); |
| | | } |
| | | |
| | | @Override |
| | | public LuckyActivityOpenInfo getOpenInfoDetail(Long id) { |
| | | return null; |
| | | return luckyActivityOpenInfoManager.getOpenInfoDetail(id); |
| | | } |
| | | |
| | | @Override |
| | | public void deleteOpenInfo(Long id) { |
| | | |
| | | luckyActivityOpenInfoManager.deleteOpenInfo(id); |
| | | } |
| | | } |
| | |
| | | package com.ks.lucky.service.impl.remote; |
| | | |
| | | import com.ks.lucky.exception.LuckyActivityAwardException; |
| | | import com.ks.lucky.exception.LuckyActivityException; |
| | | import com.ks.lucky.mapper.LuckyActivityMapper; |
| | | import com.ks.lucky.pojo.DO.LuckyActivity; |
| | | import com.ks.lucky.pojo.DO.LuckyActivityAwards; |
| | | import com.ks.lucky.pojo.DO.LuckyActivityOpenInfo; |
| | | import com.ks.lucky.remote.service.LuckyActivityOpenService; |
| | | import com.ks.lucky.service.impl.LuckyActivityAwardManager; |
| | | import com.ks.lucky.service.impl.LuckyActivityAwardResultManager; |
| | | import com.ks.lucky.service.impl.LuckyActivityJoinManager; |
| | | import com.ks.lucky.service.impl.LuckyActivityOpenInfoManager; |
| | | import com.ks.lucky.util.LuckyRunUtil; |
| | | import org.apache.dubbo.config.annotation.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | @Service(version = "1.0") |
| | | public class LuckyActivityOpenServiceImpl implements LuckyActivityOpenService { |
| | | @Override |
| | | public List<LuckyActivity> listValidActivity(String appKey, int page, int pageSize) { |
| | | return null; |
| | | |
| | | @Resource |
| | | private LuckyActivityAwardManager luckyActivityAwardManager; |
| | | |
| | | @Resource |
| | | private LuckyActivityMapper luckyActivityMapper; |
| | | |
| | | @Resource |
| | | private LuckyActivityOpenInfoManager luckyActivityOpenInfoManager; |
| | | |
| | | @Resource |
| | | private LuckyActivityJoinManager luckyActivityJoinManager; |
| | | |
| | | @Resource |
| | | private LuckyActivityAwardResultManager luckyActivityAwardResultManager; |
| | | |
| | | |
| | | /** |
| | | * 是否可以开奖了 |
| | | * |
| | | * @param activity |
| | | * @return |
| | | */ |
| | | private boolean canOpen(LuckyActivity activity) throws LuckyActivityException { |
| | | long now = System.currentTimeMillis(); |
| | | |
| | | if (activity.getState() != LuckyActivity.STATE_FINISH) { |
| | | throw new LuckyActivityException(1, "活动尚未结束"); |
| | | } |
| | | |
| | | LuckyActivityOpenInfo openInfo = luckyActivityOpenInfoManager.getOpenInfo(activity.getId()); |
| | | |
| | | //未达到最低开奖人数 |
| | | if (activity.getCurrentPersonCount() < openInfo.getMinPersonCount()) { |
| | | throw new LuckyActivityException(2, "尚未达到最低开奖人数"); |
| | | } |
| | | |
| | | //到达最低开奖人数就开奖 |
| | | if (activity.getPreOpenTime() != null) { |
| | | if (activity.getPreOpenTime().getTime() > now) { |
| | | throw new LuckyActivityException(2, "尚未达到开奖时间"); |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Override |
| | | public long countValidActivity(String appKey) { |
| | | return 0; |
| | | public void preOpenAward(Long activityId) throws LuckyActivityException, LuckyActivityAwardException { |
| | | //判断活动状态 |
| | | LuckyActivity activity = luckyActivityMapper.selectByPrimaryKeyForUpdate(activityId); |
| | | if (activity == null) { |
| | | throw new LuckyActivityException(LuckyActivityException.CODE_NOT_EXIST, "活动不存在"); |
| | | } |
| | | |
| | | |
| | | //判断是否达到开奖条件 |
| | | canOpen(activity); |
| | | //------------计算开奖------------- |
| | | |
| | | //获取奖项数据 |
| | | List<LuckyActivityAwards> awardsList = luckyActivityAwardManager.getAwardList(activityId); |
| | | if (awardsList == null || awardsList.size() == 0) { |
| | | throw new LuckyActivityAwardException(LuckyActivityAwardException.CODE_NOT_EXIST, "无奖项信息"); |
| | | } |
| | | |
| | | //获取用户数据 |
| | | Map<String, Integer> data = luckyActivityJoinManager.getJoinData(activityId); |
| | | for (LuckyActivityAwards awards : awardsList) { |
| | | //获取中奖用户ID |
| | | Set<String> uids = LuckyRunUtil.compute(data, awards.getCount()); |
| | | //保存开奖结果 |
| | | luckyActivityAwardResultManager.addRecord(uids, awards.getActivityId(), awards.getId()); |
| | | } |
| | | |
| | | |
| | | //更新状态 |
| | | LuckyActivity update = new LuckyActivity(); |
| | | update.setId(activityId); |
| | | update.setState(LuckyActivity.STATE_PRE_OPEND); |
| | | update.setStateRemarks("预开奖成功"); |
| | | update.setUpdateTime(new Date()); |
| | | luckyActivityMapper.updateByPrimaryKeySelective(update); |
| | | } |
| | | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Override |
| | | public void createActivity(LuckyActivity activity) throws LuckyActivityException { |
| | | public void showOpenAward(Long activityId) throws LuckyActivityException { |
| | | LuckyActivity activity = luckyActivityMapper.selectByPrimaryKeyForUpdate(activityId); |
| | | if (activity.getState() != LuckyActivity.STATE_PRE_OPEND) { |
| | | throw new LuckyActivityException(1, "尚未开奖"); |
| | | } |
| | | |
| | | LuckyActivity update = new LuckyActivity(); |
| | | update.setId(activityId); |
| | | update.setUpdateTime(new Date()); |
| | | update.setState(LuckyActivity.STATE_OPENED); |
| | | update.setStateRemarks("已开奖"); |
| | | luckyActivityMapper.updateByPrimaryKeySelective(update); |
| | | luckyActivityAwardResultManager.setResultShow(activityId); |
| | | } |
| | | |
| | | @Override |
| | | public LuckyActivity getActivityDetail(Long id) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public void updateActivity(LuckyActivity activity) throws LuckyActivityException { |
| | | |
| | | } |
| | | } |
| | |
| | | @Validated |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void createActivity(LuckyActivity activity) throws LuckyActivityException { |
| | | |
| | | if (activity.getAwardsList() == null || activity.getAwardsList().size() == 0) { |
| | | throw new LuckyActivityException(LuckyActivityException.CODE_PARAMS_NOT_ENOUGH, "请设置奖项信息"); |
| | | } |
| | | |
| | | if (activity.getOpenInfo() == null) { |
| | | throw new LuckyActivityException(LuckyActivityException.CODE_PARAMS_NOT_ENOUGH, "请设置开奖信息"); |
| | | } |
| | | if (activity.getSponsorInfo() == null) { |
| | | throw new LuckyActivityException(LuckyActivityException.CODE_PARAMS_NOT_ENOUGH, "请设置赞助信息"); |
| | | } |
| | | |
| | | |
| | | // luckyActivityOpenInfoManager.addOpenInfo(activity.getOpenInfo()); |
| | | // |
| | | // |
| | | // luckyActivitySponsorInfoManager.addOpenInfo(); |
| | | |
| | | //TODO 添加其他信息 |
| | | |
| | | |
| | | public Long createActivity(LuckyActivity activity) throws LuckyActivityException { |
| | | luckyActivityMapper.insertSelective(activity); |
| | | return activity.getId(); |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | |
| | | @Override |
| | | public void addSponsorInfo(LuckyActivitySponsorInfo sponsorInfo) throws LuckyActivitySponsorInfoException { |
| | | public Long addSponsorInfo(LuckyActivitySponsorInfo sponsorInfo) throws LuckyActivitySponsorInfoException { |
| | | luckyActivitySponsorInfoManager.addSponsorInfo(sponsorInfo); |
| | | return sponsorInfo.getId(); |
| | | } |
| | | |
| | | @Override |
| | |
| | | |
| | | @Validated |
| | | @Override |
| | | public void addSponsor(LuckySponsors sponsor) throws LuckySponsorException { |
| | | public Long addSponsor(LuckySponsors sponsor) throws LuckySponsorException { |
| | | LuckySponsorQuery query = new LuckySponsorQuery(); |
| | | query.account = sponsor.getAccount(); |
| | | List<LuckySponsors> list = luckySponsorsMapper.list(query); |
| | |
| | | |
| | | sponsor.setState(LuckySponsors.STATE_NORMAL); |
| | | luckySponsorsMapper.insertSelective(sponsor); |
| | | return sponsor.getId(); |
| | | } |
| | | |
| | | @Override |
| | |
| | | public class LuckyRunUtil { |
| | | |
| | | |
| | | private static Set<Long> run(Map<Long, Integer> map, int number) { |
| | | /** |
| | | * 计算开奖的人 |
| | | * |
| | | * @param map |
| | | * @param number |
| | | * @return |
| | | */ |
| | | public static Set<String> compute(Map<String, Integer> map, int number) { |
| | | |
| | | List<Long> mList = new ArrayList<>(); |
| | | for (Iterator<Long> its = map.keySet().iterator(); its.hasNext(); ) { |
| | | Long uid = its.next(); |
| | | List<String> mList = new ArrayList<>(); |
| | | for (Iterator<String> its = map.keySet().iterator(); its.hasNext(); ) { |
| | | String uid = its.next(); |
| | | int c = map.get(uid); |
| | | for (int i = 0; i < c; i++) { |
| | | mList.add(uid); |
| | | } |
| | | } |
| | | |
| | | Set<Long> luckyUids = new HashSet<>(); |
| | | Set<String> luckyUids = new HashSet<>(); |
| | | for (int i = 0; i < number; i++) { |
| | | if (mList.size() == 0) |
| | | break; |
| | | long startTime = System.currentTimeMillis(); |
| | | int p = (int) (mList.size() * Math.random()); |
| | | long uid = mList.get(p); |
| | | String uid = mList.get(p); |
| | | luckyUids.add(uid); |
| | | |
| | | //移除列表右面的相同uid |
| | |
| | | |
| | | //查询相同uid的列表左侧起点 |
| | | for (int j = p - 1; j >= 0; j--) { |
| | | if (mList.get(j).longValue() != uid) { |
| | | if (!mList.get(j).equalsIgnoreCase(uid)) { |
| | | p = j + 1; |
| | | break; |
| | | } else if (j == 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.ks.lucky.mapper.LuckyActivityAwardResultExtraMapper"> |
| | | <resultMap id="BaseResultMap" type="com.ks.lucky.pojo.DO.LuckyActivityAwardResultExtra"> |
| | | <id column="id" jdbcType="BIGINT" property="id" /> |
| | | <result column="award_result_id" jdbcType="BIGINT" property="awardResultId" /> |
| | | <result column="name" jdbcType="VARCHAR" property="name" /> |
| | | <result column="phone" jdbcType="VARCHAR" property="phone" /> |
| | | <result column="address" jdbcType="VARCHAR" property="address" /> |
| | | <result column="create_time" jdbcType="TIMESTAMP" property="createTime" /> |
| | | </resultMap> |
| | | <sql id="Base_Column_List"> |
| | | id, award_result_id, name, phone, address, create_time |
| | | </sql> |
| | | <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap"> |
| | | select |
| | | <include refid="Base_Column_List" /> |
| | | from lucky_activity_award_result_extra |
| | | where id = #{id,jdbcType=BIGINT} |
| | | </select> |
| | | <delete id="deleteByPrimaryKey" parameterType="java.lang.Long"> |
| | | delete from lucky_activity_award_result_extra |
| | | where id = #{id,jdbcType=BIGINT} |
| | | </delete> |
| | | <insert id="insert" parameterType="com.ks.lucky.pojo.DO.LuckyActivityAwardResultExtra"> |
| | | insert into lucky_activity_award_result_extra (id, award_result_id, name, |
| | | phone, address, create_time |
| | | ) |
| | | values (#{id,jdbcType=BIGINT}, #{awardResultId,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR}, |
| | | #{phone,jdbcType=VARCHAR}, #{address,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP} |
| | | ) |
| | | </insert> |
| | | <insert id="insertSelective" parameterType="com.ks.lucky.pojo.DO.LuckyActivityAwardResultExtra"> |
| | | insert into lucky_activity_award_result_extra |
| | | <trim prefix="(" suffix=")" suffixOverrides=","> |
| | | <if test="id != null"> |
| | | id, |
| | | </if> |
| | | <if test="awardResultId != null"> |
| | | award_result_id, |
| | | </if> |
| | | <if test="name != null"> |
| | | name, |
| | | </if> |
| | | <if test="phone != null"> |
| | | phone, |
| | | </if> |
| | | <if test="address != null"> |
| | | address, |
| | | </if> |
| | | <if test="createTime != null"> |
| | | create_time, |
| | | </if> |
| | | </trim> |
| | | <trim prefix="values (" suffix=")" suffixOverrides=","> |
| | | <if test="id != null"> |
| | | #{id,jdbcType=BIGINT}, |
| | | </if> |
| | | <if test="awardResultId != null"> |
| | | #{awardResultId,jdbcType=BIGINT}, |
| | | </if> |
| | | <if test="name != null"> |
| | | #{name,jdbcType=VARCHAR}, |
| | | </if> |
| | | <if test="phone != null"> |
| | | #{phone,jdbcType=VARCHAR}, |
| | | </if> |
| | | <if test="address != null"> |
| | | #{address,jdbcType=VARCHAR}, |
| | | </if> |
| | | <if test="createTime != null"> |
| | | #{createTime,jdbcType=TIMESTAMP}, |
| | | </if> |
| | | </trim> |
| | | </insert> |
| | | <update id="updateByPrimaryKeySelective" parameterType="com.ks.lucky.pojo.DO.LuckyActivityAwardResultExtra"> |
| | | update lucky_activity_award_result_extra |
| | | <set> |
| | | <if test="awardResultId != null"> |
| | | award_result_id = #{awardResultId,jdbcType=BIGINT}, |
| | | </if> |
| | | <if test="name != null"> |
| | | name = #{name,jdbcType=VARCHAR}, |
| | | </if> |
| | | <if test="phone != null"> |
| | | phone = #{phone,jdbcType=VARCHAR}, |
| | | </if> |
| | | <if test="address != null"> |
| | | address = #{address,jdbcType=VARCHAR}, |
| | | </if> |
| | | <if test="createTime != null"> |
| | | create_time = #{createTime,jdbcType=TIMESTAMP}, |
| | | </if> |
| | | </set> |
| | | where id = #{id,jdbcType=BIGINT} |
| | | </update> |
| | | <update id="updateByPrimaryKey" parameterType="com.ks.lucky.pojo.DO.LuckyActivityAwardResultExtra"> |
| | | update lucky_activity_award_result_extra |
| | | set award_result_id = #{awardResultId,jdbcType=BIGINT}, |
| | | name = #{name,jdbcType=VARCHAR}, |
| | | phone = #{phone,jdbcType=VARCHAR}, |
| | | address = #{address,jdbcType=VARCHAR}, |
| | | create_time = #{createTime,jdbcType=TIMESTAMP} |
| | | where id = #{id,jdbcType=BIGINT} |
| | | </update> |
| | | </mapper> |
| | | <resultMap id="BaseResultMap" type="com.ks.lucky.pojo.DO.LuckyActivityAwardResultExtra"> |
| | | <id column="id" jdbcType="BIGINT" property="id"/> |
| | | <result column="award_result_id" jdbcType="BIGINT" property="awardResultId"/> |
| | | <result column="name" jdbcType="VARCHAR" property="name"/> |
| | | <result column="phone" jdbcType="VARCHAR" property="phone"/> |
| | | <result column="address" jdbcType="VARCHAR" property="address"/> |
| | | <result column="red_package" jdbcType="DICIMAL" property="redPackage"/> |
| | | <result column="create_time" jdbcType="TIMESTAMP" property="createTime"/> |
| | | <result column="alipay_uid" property="alipyUid" jdbcType="VARCHAR"/> |
| | | </resultMap> |
| | | <sql id="Base_Column_List">id, award_result_id,red_package, name, phone, address, create_time,alipay_uid</sql> |
| | | <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">select |
| | | <include refid="Base_Column_List"/> |
| | | from lucky_activity_award_result_extra where id = #{id,jdbcType=BIGINT} |
| | | </select> |
| | | <delete id="deleteByPrimaryKey" |
| | | parameterType="java.lang.Long">delete from lucky_activity_award_result_extra where id = #{id,jdbcType=BIGINT}</delete> |
| | | <insert id="insert" |
| | | parameterType="com.ks.lucky.pojo.DO.LuckyActivityAwardResultExtra">insert into lucky_activity_award_result_extra (id, award_result_id, name, phone, address, create_time,red_package,alipay_uid) values (#{id,jdbcType=BIGINT}, #{awardResultId,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR}, #{phone,jdbcType=VARCHAR}, #{address,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP},#{redPackage,jdbcType=DECIMAL} ,#{alipyUid,jdbcType=VARCHAR})</insert> |
| | | <insert id="insertSelective" parameterType="com.ks.lucky.pojo.DO.LuckyActivityAwardResultExtra">insert into |
| | | lucky_activity_award_result_extra |
| | | <trim prefix="(" suffix=")" suffixOverrides=","> |
| | | <if test="id != null">id,</if> |
| | | <if test="awardResultId != null">award_result_id,</if> |
| | | <if test="name != null">name,</if> |
| | | <if test="phone != null">phone,</if> |
| | | <if test="address != null">address,</if> |
| | | <if test="createTime != null">create_time,</if> |
| | | <if test="redPackage != null">red_package,</if> |
| | | <if test="alipyUid != null">alipay_uid,</if> |
| | | </trim> |
| | | <trim prefix="values (" suffix=")" suffixOverrides=","> |
| | | <if test="id != null">#{id,jdbcType=BIGINT},</if> |
| | | <if test="awardResultId != null">#{awardResultId,jdbcType=BIGINT},</if> |
| | | <if test="name != null">#{name,jdbcType=VARCHAR},</if> |
| | | <if test="phone != null">#{phone,jdbcType=VARCHAR},</if> |
| | | <if test="address != null">#{address,jdbcType=VARCHAR},</if> |
| | | <if test="createTime != null">#{createTime,jdbcType=TIMESTAMP},</if> |
| | | <if test="redPackage != null">#{redPackage,jdbcType=DECIMAL},</if> |
| | | <if test="alipyUid != null">#{alipyUid,jdbcType=VARCHAR},</if> |
| | | </trim> |
| | | </insert> |
| | | <update id="updateByPrimaryKeySelective" parameterType="com.ks.lucky.pojo.DO.LuckyActivityAwardResultExtra">update |
| | | lucky_activity_award_result_extra |
| | | <set> |
| | | <if test="awardResultId != null">award_result_id = #{awardResultId,jdbcType=BIGINT},</if> |
| | | <if test="name != null">name = #{name,jdbcType=VARCHAR},</if> |
| | | <if test="phone != null">phone = #{phone,jdbcType=VARCHAR},</if> |
| | | <if test="address != null">address = #{address,jdbcType=VARCHAR},</if> |
| | | <if test="createTime != null">create_time = #{createTime,jdbcType=TIMESTAMP},</if> |
| | | <if test="redPackage != null">red_package = #{redPackage,jdbcType=DECIMAL},</if> |
| | | <if test="alipyUid !=null">alipay_uid =#{alipyUid,jdbcType=VARCHAR},</if> |
| | | </set> |
| | | where id = #{id,jdbcType=BIGINT} |
| | | </update> |
| | | <update id="updateByPrimaryKey" |
| | | parameterType="com.ks.lucky.pojo.DO.LuckyActivityAwardResultExtra">update lucky_activity_award_result_extra set award_result_id = #{awardResultId,jdbcType=BIGINT}, name = #{name,jdbcType=VARCHAR}, phone = #{phone,jdbcType=VARCHAR}, address = #{address,jdbcType=VARCHAR}, create_time = #{createTime,jdbcType=TIMESTAMP}, red_package = #{redPackage,jdbcType=DECIMAL} ,alipay_uid =#{alipyUid,jdbcType=VARCHAR} where id = #{id,jdbcType=BIGINT}</update> |
| | | </mapper> |
New file |
| | |
| | | package com.ks; |
| | | |
| | | import com.ks.lucky.pojo.DO.LuckyActivityAwardResultExtra; |
| | | import org.junit.jupiter.api.Test; |
| | | import org.yeshi.utils.mybatis.ColumnParseUtil; |
| | | |
| | | public class MyBatisTest { |
| | | |
| | | @Test |
| | | public void test(){ |
| | | ColumnParseUtil.parseColumn(LuckyActivityAwardResultExtra.class,"D:\\workspace\\DayBuy\\service-lucky\\src\\main\\resources\\mapper\\LuckyActivityAwardResultExtraMapper.xml"); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ks.lucky; |
| | | |
| | | import com.ks.lucky.pojo.DO.LuckyActivityAwardMaterial; |
| | | import com.ks.lucky.pojo.DO.LuckySponsorAd; |
| | | import org.junit.jupiter.api.Test; |
| | | import org.yeshi.utils.mongo.MongoDaoUtil; |
| | | |
| | | public class DaoTest { |
| | | |
| | | @Test |
| | | public void test1() { |
| | | |
| | | System.out.println(MongoDaoUtil.createUpdateSelective(LuckySponsorAd.class)); |
| | | |
| | | } |
| | | |
| | | |
| | | } |