pom.xml
@@ -893,7 +893,7 @@ <id>install-facade-goldcorn</id> <phase>clean</phase> <configuration> <file>${basedir}/libs/facade-goldcorn-0.0.1.jar</file> <file>${basedir}/src/main/webapp/WEB-INF/lib/facade-goldcorn-0.0.1.jar</file> <repositoryLayout>default</repositoryLayout> <groupId>com.ks</groupId> <artifactId>facade-goldcorn</artifactId> src/main/java/com/yeshi/buwan/controller/api/GoldCornController.java
New file @@ -0,0 +1,246 @@ package com.yeshi.buwan.controller.api; import com.google.common.base.Function; import com.google.common.collect.Maps; import com.google.gson.Gson; import com.ks.goldcorn.exception.GoldAppException; import com.ks.goldcorn.exception.GoldTradeException; import com.ks.goldcorn.exception.GoldUserException; import com.ks.goldcorn.pojo.DO.GoldCornGetSource; import com.ks.goldcorn.pojo.DO.GoldCornRecord; import com.ks.goldcorn.pojo.DO.GoldCornRecordCountMap; import com.ks.goldcorn.pojo.Query.GoldCornRecordQuery; import com.yeshi.buwan.domain.goldcorn.CodeCornGetSourceType; import com.yeshi.buwan.domain.goldcorn.GoldCornTaskActionDetail; import com.yeshi.buwan.domain.jump.JumpDetail; import com.yeshi.buwan.domain.jump.JumpTypeEnum; import com.yeshi.buwan.dto.goldcorn.SignInGoldCornDateData; import com.yeshi.buwan.service.inter.goldcorn.GoldCornTaskActionDetailService; import com.yeshi.buwan.service.inter.goldcorn.SignInService; import com.yeshi.buwan.service.inter.system.SystemConfigService; import com.yeshi.buwan.service.manager.GoldCornManager; import com.yeshi.buwan.util.Constant; import com.yeshi.buwan.util.JsonUtil; import com.yeshi.buwan.util.StringUtil; import com.yeshi.buwan.util.TimeUtil; import com.yeshi.buwan.vo.AcceptData; import com.yeshi.buwan.vo.goldcorn.GoldCornCouponVideoVO; import com.yeshi.buwan.vo.goldcorn.GoldCornRecordVO; import com.yeshi.buwan.vo.goldcorn.GoldCornTaskVO; import com.yeshi.buwan.vo.goldcorn.SignInInfoVO; import net.sf.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; import java.util.*; @Controller @RequestMapping("api/v2/goldcorn") public class GoldCornController { Logger logger = LoggerFactory.getLogger(GoldCornController.class); @Resource private GoldCornManager goldCornManager; @Resource private SignInService signInService; @Resource private SystemConfigService systemConfigService; @Resource private GoldCornTaskActionDetailService goldCornTaskActionDetailService; /** * 挣金币 * * @param acceptData * @param code * @param loginUid * @param param1 * @param param2 * @return */ @RequestMapping("makeGoldCorn") @ResponseBody public String makeGoldCorn(AcceptData acceptData, String code, String loginUid, String param1, String param2) { JSONObject jsonObject = new JSONObject(); jsonObject.put("goldCorn", 1); return JsonUtil.loadTrueJson(jsonObject.toString()); } @RequestMapping("signIn") @ResponseBody public String signIn(AcceptData acceptData, String loginUid) { try { GoldCornGetSource source = goldCornManager.getGoldCornGetSource(CodeCornGetSourceType.signIn); goldCornManager.addGoldCorn(loginUid, CodeCornGetSourceType.signIn, null, "签到", null); JSONObject jsonObject = new JSONObject(); jsonObject.put("goldCorn", source.getGoldCorn()); return JsonUtil.loadTrueJson(jsonObject.toString()); } catch (GoldUserException e) { return JsonUtil.loadFalseJson(e.getMessage()); } catch (GoldAppException e) { return JsonUtil.loadFalseJson(e.getMessage()); } catch (GoldTradeException e) { return JsonUtil.loadFalseJson(e.getMessage()); } catch (Exception e) { return JsonUtil.loadFalseJson("签到失败"); } } @RequestMapping("getSignInData") @ResponseBody public String getSignInData(AcceptData acceptData, String loginUid) { try { SignInInfoVO signInInfo = new SignInInfoVO(); List<SignInGoldCornDateData> recordList = signInService.getContinueSignInList(loginUid); signInInfo.setDateList(recordList); signInInfo.setSignDay(signInService.getContinueSignDayCount(loginUid)); signInInfo.setBalance((int) goldCornManager.getBalance(loginUid)); SignInInfoVO.SignInConfig config = new SignInInfoVO.SignInConfig(); config.setRecordUrl(systemConfigService.getConfigValueByKeyCache("goldCornRecordUrl")); config.setRuleUrl(systemConfigService.getConfigValueByKeyCache("goldCornRuleUrl")); signInInfo.setSignInConfig(config); signInInfo.setCanSignIn(!signInService.isTodaySignIned(loginUid, new Date())); return JsonUtil.loadTrueJson(new Gson().toJson(signInInfo)); } catch (Exception e) { e.printStackTrace(); } return JsonUtil.loadFalseJson("服务器内部错误"); } /** * 获取金币记录 * * @param acceptData * @param loginUid * @param page * @return */ @RequestMapping("getRecordList") @ResponseBody public String getRecordList(AcceptData acceptData, String loginUid, int page) { GoldCornRecordQuery recordQuery = new GoldCornRecordQuery(); recordQuery.setPageSize(Constant.pageCount); recordQuery.setPage(page); try { List<GoldCornRecord> list = goldCornManager.getRecordList(recordQuery, loginUid); List<GoldCornRecordVO> voList = new ArrayList<>(); for (GoldCornRecord record : list) { voList.add(new GoldCornRecordVO(record.getTitle(), TimeUtil.getGernalTime(record.getCreateTime().getTime(), "yyyy.MM.dd HH:mm"), record.getType() == GoldCornRecord.TYPE_CONSUME ? 0 - record.getGoldCorn() : record.getGoldCorn())); } long count = goldCornManager.getRecordCount(recordQuery, loginUid); JSONObject data = new JSONObject(); data.put("list", new Gson().toJson(voList)); data.put("count", count); return JsonUtil.loadTrueJson(data.toString()); } catch (Exception e) { e.printStackTrace(); } return JsonUtil.loadFalseJson("服务器内部错误"); } @RequestMapping("getCouponVideoList") @ResponseBody public String getCouponVideoList(AcceptData acceptData) { List<GoldCornCouponVideoVO> voList = new ArrayList<>(); JumpDetail jumpDetail = new JumpDetail(); jumpDetail.setType(JumpTypeEnum.web); JSONObject params = new JSONObject(); params.put("url", "https://www.baidu.com"); voList.add(new GoldCornCouponVideoVO("https://r1.ykimg.com/058400005FA60E6A14187C0791817503?x-oss-process=image/resize,w_290/interlace,1/quality,Q_80", jumpDetail, params.toString().replace("\"", "\\" + "\""))); voList.add(new GoldCornCouponVideoVO("https://r1.ykimg.com/058400005F2BA59B6AEB660E907A2B99?x-oss-process=image/resize,w_290/interlace,1/quality,Q_80", jumpDetail, params.toString().replace("\"", "\\" + "\""))); voList.add(new GoldCornCouponVideoVO("https://r1.ykimg.com/052700005DC9247B1B769182B50A8C21?x-oss-process=image/resize,w_290/interlace,1/quality,Q_80", jumpDetail, params.toString().replace("\"", "\\" + "\""))); // if (voList.size() < 3) voList.clear(); JSONObject data = new JSONObject(); data.put("list", new Gson().toJson(voList)); data.put("count", voList.size()); data.put("exchangeUrl", "http://www.baidu.com"); return JsonUtil.loadTrueJson(data.toString()); } @RequestMapping("getTaskList") @ResponseBody public String getTaskList(AcceptData acceptData, String loginUid) { List<GoldCornTaskVO> voList = new ArrayList<>(); try { //登录 List<GoldCornGetSource> list = goldCornManager.listGetCornSource(1, 20); List<String> sourceCodes = new ArrayList<>(); for (GoldCornGetSource source : list) { sourceCodes.add(source.getSourceCode()); } List<GoldCornTaskActionDetail> details = goldCornTaskActionDetailService.list(sourceCodes); Map<String, GoldCornTaskActionDetail> detailMap = Maps.uniqueIndex(details.iterator(), new Function<GoldCornTaskActionDetail, String>() { @Override public String apply(GoldCornTaskActionDetail detail) { return detail.getSourceCode(); } }); //加载已完成数据 Date maxCreateTime = new Date(); Date minCreateTime = new Date(TimeUtil.convertGernalTime(TimeUtil.getGernalTime(maxCreateTime.getTime(), "yyyyMMdd"), "yyyyMMdd")); List<GoldCornRecordCountMap> mapList = goldCornManager.countRecordByGetSource(loginUid, sourceCodes, minCreateTime, maxCreateTime); Map<String, GoldCornRecordCountMap> map = new HashMap<>(); if (mapList != null) for (GoldCornRecordCountMap m : mapList) { map.put(m.getSourceCode(), m); } String[] hiddens = new String[]{CodeCornGetSourceType.elme.name(), CodeCornGetSourceType.meituan.name()}; List<String> hiddenList = Arrays.asList(hiddens); for (GoldCornGetSource source : list) { GoldCornTaskVO vo = GoldCornTaskVO.create(source); //详细的信息 GoldCornTaskActionDetail detail = detailMap.get(source.getSourceCode()); if (detail != null) { vo.setJumpDetail(detail.getJumpDetail()); vo.setParams(detail.getParams()); vo.setActionName(detail.getActionName()); } if (!hiddenList.contains(source.getSourceCode())) { if (map.get(source.getSourceCode()) == null) { source.setSourceDesc(String.format("今日已完成%s/%s", 0, source.getMaxDayCount())); } else { vo.setEnable(map.get(source.getSourceCode()).getCount() < source.getMaxDayCount()); source.setSourceDesc(String.format("今日已完成%s/%s", map.get(source.getSourceCode()).getCount(), source.getMaxDayCount())); } } else { vo.setGoldCorn("实付款*" + source.getGoldCorn()); } voList.add(vo); } } catch (Exception e) { } JSONObject data = new JSONObject(); data.put("list", new Gson().toJson(voList)); data.put("count", voList.size()); return JsonUtil.loadTrueJson(data.toString()); } } src/main/java/com/yeshi/buwan/controller/api/VideoInfoController.java
@@ -1,44 +1,31 @@ package com.yeshi.buwan.controller.api; import com.google.gson.*; import com.ks.goldcorn.service.remote.GoldCornBalanceService; import com.yeshi.buwan.domain.VideoInfo; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.yeshi.buwan.domain.user.LoginUser; import com.yeshi.buwan.domain.vip.*; import com.yeshi.buwan.domain.vip.OrderRecord; import com.yeshi.buwan.domain.vip.OrderType; import com.yeshi.buwan.dto.order.PPTVVideoPrice; import com.yeshi.buwan.exception.goldcorn.GoldCornException; import com.yeshi.buwan.exception.order.OrderException; import com.yeshi.buwan.exception.order.PayException; import com.yeshi.buwan.pptv.PPTVUtil; import com.yeshi.buwan.pptv.entity.PPTVSeries; import com.yeshi.buwan.pptv.entity.VideoPPTVMap; import com.yeshi.buwan.service.inter.LoginUserService; import com.yeshi.buwan.service.inter.juhe.PPTVService; import com.yeshi.buwan.service.inter.order.OrderService; import com.yeshi.buwan.service.inter.system.SystemConfigService; import com.yeshi.buwan.service.inter.vip.VIPPriceService; import com.yeshi.buwan.service.inter.vip.VIPService; import com.yeshi.buwan.service.manager.GoldCornManager; import com.yeshi.buwan.util.*; import com.yeshi.buwan.util.factory.VideoInfoFactory; import com.yeshi.buwan.util.user.VipUtil; import com.yeshi.buwan.util.vip.VIPOrderUtil; import com.yeshi.buwan.util.JsonUtilV2; import com.yeshi.buwan.vo.AcceptData; import com.yeshi.buwan.vo.client.user.UserInfoVO; import net.sf.json.JSONObject; import org.apache.dubbo.config.annotation.Reference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.yeshi.utils.StringUtil; import org.yeshi.utils.annotation.RequestSerializableByKey; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.lang.reflect.Type; import java.util.*; import java.util.HashSet; import java.util.Set; @Controller @RequestMapping("api/v2/videoinfo") src/main/java/com/yeshi/buwan/dao/goldcorn/GoldCornTaskActionDetailDao.java
New file @@ -0,0 +1,34 @@ package com.yeshi.buwan.dao.goldcorn; import com.yeshi.buwan.domain.goldcorn.GoldCornTaskActionDetail; import com.yeshi.buwan.dao.base.MongodbBaseDao; 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; @Repository public class GoldCornTaskActionDetailDao extends MongodbBaseDao<GoldCornTaskActionDetail> { public void updateSelective(GoldCornTaskActionDetail bean) { Query query = new Query(); Update update = new Update(); query.addCriteria(Criteria.where("sourceCode").is(bean.getSourceCode())); if (bean.getJumpDetail() != null) { update.set("jumpDetail", bean.getJumpDetail()); } if (bean.getParams() != null) { update.set("params", bean.getParams()); } if (bean.getActionName() != null) { update.set("actionName", bean.getActionName()); } if (bean.getCreateTime() != null) { update.set("createTime", bean.getCreateTime()); } update.set("updateTime", new Date()); update(query, update); } } src/main/java/com/yeshi/buwan/domain/goldcorn/CodeCornConsumeSourceType.java
New file @@ -0,0 +1,8 @@ package com.yeshi.buwan.domain.goldcorn; public enum CodeCornConsumeSourceType { } src/main/java/com/yeshi/buwan/domain/goldcorn/CodeCornGetSourceType.java
New file @@ -0,0 +1,10 @@ package com.yeshi.buwan.domain.goldcorn; public enum CodeCornGetSourceType { watchHighVideo, elme, meituan, searchVideo, watchRewardAd, signIn; } src/main/java/com/yeshi/buwan/domain/goldcorn/GoldCornTaskActionDetail.java
New file @@ -0,0 +1,67 @@ package com.yeshi.buwan.domain.goldcorn; import com.yeshi.buwan.domain.jump.JumpDetail; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; import java.util.Date; @Document(collection = "goldCornTaskActionDetail") public class GoldCornTaskActionDetail { @Id private String sourceCode; private JumpDetail jumpDetail; private String params; private String actionName; private Date createTime; private Date updateTime; public String getSourceCode() { return sourceCode; } public void setSourceCode(String sourceCode) { this.sourceCode = sourceCode; } public JumpDetail getJumpDetail() { return jumpDetail; } public void setJumpDetail(JumpDetail jumpDetail) { this.jumpDetail = jumpDetail; } public String getParams() { return params; } public void setParams(String params) { this.params = params; } public String getActionName() { return actionName; } public void setActionName(String actionName) { this.actionName = actionName; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public Date getUpdateTime() { return updateTime; } public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; } } src/main/java/com/yeshi/buwan/domain/jump/JumpTypeEnum.java
@@ -2,7 +2,7 @@ public enum JumpTypeEnum { baichuan("百川"), web("网页"),clazz("类"); baichuan("百川"), web("网页"),clazz("类"),rewardVideo("激励视频"),wxxcx("微信小程序"); private String name; src/main/java/com/yeshi/buwan/dto/goldcorn/SignInGoldCornDateData.java
New file @@ -0,0 +1,31 @@ package com.yeshi.buwan.dto.goldcorn; public class SignInGoldCornDateData { private String goldCorn; private String date; private boolean selected; public String getGoldCorn() { return goldCorn; } public void setGoldCorn(String goldCorn) { this.goldCorn = goldCorn; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } public boolean isSelected() { return selected; } public void setSelected(boolean selected) { this.selected = selected; } } src/main/java/com/yeshi/buwan/exception/goldcorn/SignInException.java
New file @@ -0,0 +1,14 @@ package com.yeshi.buwan.exception.goldcorn; public class SignInException extends Exception { private int code; private String msg; public SignInException(int code, String msg) { this.code = code; this.msg = msg; } } src/main/java/com/yeshi/buwan/service/imp/goldcorn/GoldCornTaskActionDetailServiceImpl.java
New file @@ -0,0 +1,33 @@ package com.yeshi.buwan.service.imp.goldcorn; import com.yeshi.buwan.dao.goldcorn.GoldCornTaskActionDetailDao; import com.yeshi.buwan.domain.goldcorn.GoldCornTaskActionDetail; import com.yeshi.buwan.service.inter.goldcorn.GoldCornTaskActionDetailService; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; @Service public class GoldCornTaskActionDetailServiceImpl implements GoldCornTaskActionDetailService { @Resource private GoldCornTaskActionDetailDao goldCornTaskActionDetailDao; @Override public List<GoldCornTaskActionDetail> list(List<String> sourceCodes) { Query query = new Query(); List<Criteria> criteriaList = new ArrayList<>(); for (String code : sourceCodes) { criteriaList.add(Criteria.where("_id").is(code)); } Criteria[] cs = new Criteria[criteriaList.size()]; criteriaList.toArray(cs); query.addCriteria(new Criteria().orOperator(cs)); return goldCornTaskActionDetailDao.findList(query); } } src/main/java/com/yeshi/buwan/service/imp/goldcorn/SignInServiceImpl.java
New file @@ -0,0 +1,184 @@ package com.yeshi.buwan.service.imp.goldcorn; import com.ks.goldcorn.exception.GoldAppException; import com.ks.goldcorn.exception.GoldTradeException; import com.ks.goldcorn.exception.GoldUserException; import com.ks.goldcorn.pojo.DO.GoldCornGetSource; import com.ks.goldcorn.pojo.DO.GoldCornRecord; import com.ks.goldcorn.pojo.Query.GoldCornRecordQuery; import com.yeshi.buwan.domain.goldcorn.CodeCornGetSourceType; import com.yeshi.buwan.dto.goldcorn.SignInGoldCornDateData; import com.yeshi.buwan.exception.goldcorn.SignInException; import com.yeshi.buwan.exception.user.LoginUserException; import com.yeshi.buwan.service.inter.goldcorn.SignInService; import com.yeshi.buwan.service.manager.GoldCornManager; import com.yeshi.buwan.util.StringUtil; import com.yeshi.buwan.util.TimeUtil; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.*; @Service public class SignInServiceImpl implements SignInService { @Resource private GoldCornManager goldCornManager; @Override public Integer signIn(String uid) throws LoginUserException, SignInException { try { GoldCornGetSource source = goldCornManager.getGoldCornGetSource(CodeCornGetSourceType.signIn); int dayCount = getContinueSignDayCount(uid); dayCount = dayCount == 6 ? 6 : dayCount % 6; int goldCorn = (dayCount + 1) * source.getGoldCorn(); goldCornManager.addGoldCorn(uid, CodeCornGetSourceType.signIn, goldCorn, "签到", String.format("连续%s天签到", (dayCount + 1))); return goldCorn; } catch (GoldUserException e) { throw new LoginUserException(e.getCode(), e.getMsg()); } catch (GoldAppException e) { throw new SignInException(1, "服务器内部出错"); } catch (GoldTradeException e) { throw new SignInException(e.getCode(), e.getMsg()); } catch (Exception e) { throw new SignInException(1, "服务器内部出错"); } } @Override public int getContinueSignDayCount(String uid) throws Exception { if (StringUtil.isNullOrEmpty(uid)) { return 0; } GoldCornRecordQuery query = new GoldCornRecordQuery(); query.setType(GoldCornRecord.TYPE_GET); query.setSourceCodes(Arrays.asList(new String[]{CodeCornGetSourceType.signIn.name()})); query.setPage(1); query.setPageSize(200); List<GoldCornRecord> recordList = goldCornManager.getRecordList(query, uid); return getContinueSignDayCount(recordList) + (isTodaySignIned(uid, new Date()) ? 1 : 0); } @Override public List<SignInGoldCornDateData> getContinueSignInList(String uid) throws GoldAppException { GoldCornRecordQuery query = new GoldCornRecordQuery(); query.setType(GoldCornRecord.TYPE_GET); query.setSourceCodes(Arrays.asList(new String[]{CodeCornGetSourceType.signIn.name()})); query.setPage(1); query.setPageSize(7); GoldCornGetSource source = goldCornManager.getGoldCornGetSource(CodeCornGetSourceType.signIn); int goldCorn = source.getGoldCorn(); List<SignInGoldCornDateData> list = new ArrayList<>(); for (int i = 0; i < 7; i++) { SignInGoldCornDateData dateData = new SignInGoldCornDateData(); dateData.setGoldCorn("+" + (i + 1) * goldCorn); list.add(dateData); } int dayCount = 0; //填充用户数据 if (!StringUtil.isNullOrEmpty(uid)) { try { List<GoldCornRecord> recordList = goldCornManager.getRecordList(query, uid); Map<Integer, Integer> dayCountMap = getContinueSignDayCountMap(recordList); dayCount = dayCountMap.size() == 6 ? 6 : dayCountMap.size() % 6; //设置金币与选中 for (int i = 0; i < dayCount; i++) { list.get(i).setGoldCorn("+" + dayCountMap.get(dayCount - i - 1)); list.get(i).setSelected(true); } } catch (Exception e) { e.printStackTrace(); } } //设置日期 long now = System.currentTimeMillis(); boolean isTodaySigned = isTodaySignIned(uid, new Date(now)); for (int i = 0; i < list.size(); i++) { list.get(i).setDate(TimeUtil.getGernalTime(now - (dayCount - i - (isTodaySigned ? 1 : 0)) * 1000 * 60 * 60 * 24L, "M.d")); if (i == dayCount - (isTodaySigned ? 1 : 0)) { list.get(i).setDate("今天"); } } return list; } @Override public boolean isTodaySignIned(String uid, Date time) { if (StringUtil.isNullOrEmpty(uid)) { return false; } GoldCornRecordQuery query = new GoldCornRecordQuery(); query.setType(GoldCornRecord.TYPE_GET); query.setSourceCodes(Arrays.asList(new String[]{CodeCornGetSourceType.signIn.name()})); query.setPage(1); query.setPageSize(1); try { List<GoldCornRecord> recordList = goldCornManager.getRecordList(query, uid); if (recordList == null || recordList.size() == 0) return false; if (TimeUtil.getGernalTime(recordList.get(0).getCreateTime().getTime(), "yyyyMMdd").equalsIgnoreCase(TimeUtil.getGernalTime(time.getTime(), "yyyyMMdd"))) { return true; } } catch (Exception e) { e.printStackTrace(); } return false; } /** * 获取是第几次签到 * * @param recordList * @return */ private int getContinueSignDayCount(List<GoldCornRecord> recordList) { int position = 0; long lastTime = TimeUtil.convertGernalTime(TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyy-MM-dd"), "yyyy-MM-dd"); if (recordList != null) for (int i = 0; i < recordList.size(); i++) { long time = TimeUtil.convertGernalTime(TimeUtil.getGernalTime(recordList.get(i).getCreateTime().getTime(), "yyyy-MM-dd"), "yyyy-MM-dd"); if (lastTime - time == 1000 * 60 * 60 * 24L) { position++; lastTime = time; } else if (lastTime - time < 1000 * 60 * 60 * 24L) { continue; } else { break; } } return position; } private Map<Integer, Integer> getContinueSignDayCountMap(List<GoldCornRecord> recordList) { Map<Integer, Integer> map = new TreeMap<>(); int position = 0; long lastTime = TimeUtil.convertGernalTime(TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyy-MM-dd"), "yyyy-MM-dd"); if (recordList != null) for (int i = 0; i < recordList.size(); i++) { long time = TimeUtil.convertGernalTime(TimeUtil.getGernalTime(recordList.get(i).getCreateTime().getTime(), "yyyy-MM-dd"), "yyyy-MM-dd"); if (lastTime - time == 1000 * 60 * 60 * 24L) { position++; lastTime = time; map.put(position, recordList.get(i).getGoldCorn()); } else if (lastTime - time < 1000 * 60 * 60 * 24L) { map.put(position, recordList.get(i).getGoldCorn()); continue; } else { break; } } return map; } } src/main/java/com/yeshi/buwan/service/inter/goldcorn/GoldCornTaskActionDetailService.java
New file @@ -0,0 +1,11 @@ package com.yeshi.buwan.service.inter.goldcorn; import com.yeshi.buwan.domain.goldcorn.GoldCornTaskActionDetail; import java.util.List; public interface GoldCornTaskActionDetailService { public List<GoldCornTaskActionDetail> list(List<String> sourceCodes); } src/main/java/com/yeshi/buwan/service/inter/goldcorn/SignInService.java
New file @@ -0,0 +1,35 @@ package com.yeshi.buwan.service.inter.goldcorn; import com.ks.goldcorn.exception.GoldAppException; import com.yeshi.buwan.dto.goldcorn.SignInGoldCornDateData; import com.yeshi.buwan.exception.goldcorn.SignInException; import com.yeshi.buwan.exception.user.LoginUserException; import java.util.Date; import java.util.List; public interface SignInService { /** * 签到 * * @param uid * @return * @throws SignInException */ public Integer signIn(String uid) throws LoginUserException, SignInException; public int getContinueSignDayCount(String uid) throws Exception; public List<SignInGoldCornDateData> getContinueSignInList(String uid) throws GoldAppException; /** * 今日是否签到 * @param uid * @param time * @return */ public boolean isTodaySignIned(String uid, Date time); } src/main/java/com/yeshi/buwan/service/manager/GoldCornManager.java
@@ -3,8 +3,15 @@ import com.ks.goldcorn.exception.GoldAppException; import com.ks.goldcorn.exception.GoldTradeException; import com.ks.goldcorn.exception.GoldUserException; import com.ks.goldcorn.pojo.DO.GoldCornGetSource; import com.ks.goldcorn.pojo.DO.GoldCornRecord; import com.ks.goldcorn.pojo.DO.GoldCornRecordCountMap; import com.ks.goldcorn.pojo.Query.GoldCornRecordQuery; import com.ks.goldcorn.service.remote.GoldCornBalanceService; import com.ks.goldcorn.service.remote.GoldCornGetSourceService; import com.ks.goldcorn.service.remote.GoldCornRecordService; import com.ks.goldcorn.service.remote.GoldCornTradeService; import com.yeshi.buwan.domain.goldcorn.CodeCornGetSourceType; import com.yeshi.buwan.domain.vip.OrderType; import com.yeshi.buwan.domain.vip.OrderRecord; import com.yeshi.buwan.exception.goldcorn.GoldCornException; @@ -14,6 +21,9 @@ import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.List; @Component public class GoldCornManager { @@ -26,7 +36,13 @@ private GoldCornTradeService goldCornTradeService; @Reference(version = "1.0", check = false) private GoldCornRecordService goldCornRecordService; @Reference(version = "1.0", check = false) private GoldCornBalanceService goldCornBalanceService; @Reference(version = "1.0", check = false) private GoldCornGetSourceService goldCornGetSourceService; public void init(String uid) throws Exception { goldCornBalanceService.init(getAppCode(), getUid(uid)); @@ -57,6 +73,8 @@ } public long getBalance(String uid) { if (StringUtil.isNullOrEmpty(uid)) return 0; try { Long count = goldCornBalanceService.getBalance(getAppCode(), getUid(uid)); if (count == null) { @@ -94,6 +112,28 @@ consumeGoldCorn(appCode, tuid, sourceCode, goldCornCount, title, desc); } /** * 添加金币 * * @param uid * @param source * @param goldCorn * @param title * @param desc * @throws GoldUserException * @throws GoldAppException * @throws GoldTradeException * @throws Exception */ public void addGoldCorn(String uid, CodeCornGetSourceType source, Integer goldCorn, String title, String desc) throws GoldUserException, GoldAppException, GoldTradeException, Exception { addGoldCorn(getAppCode(), getUid(uid), source.name(), goldCorn, title, desc); } public GoldCornGetSource getGoldCornGetSource(CodeCornGetSourceType source) throws GoldAppException { return goldCornGetSourceService.selectByAppAndCode(getAppCode(), source.name()); } /** * 返回影视豆 * @@ -117,6 +157,19 @@ addGoldCorn(appCode, tuid, sourceCode, record.getGoldCorn(), title, desc); } public List<GoldCornRecord> getRecordList(GoldCornRecordQuery query, String uid) throws Exception { query.setAppCode(getAppCode()); query.setUid(getUid(uid)); return goldCornRecordService.listUserRecord(query); } public long getRecordCount(GoldCornRecordQuery query, String uid) throws Exception { query.setAppCode(getAppCode()); query.setUid(getUid(uid)); return goldCornRecordService.countUserRecord(query); } private void addGoldCorn(String appCode, String uid, String sourceCode, Integer goldCornCount, String title, String desc) throws GoldUserException, GoldAppException, GoldTradeException { goldCornTradeService.addGoldCorn(appCode, uid, sourceCode, goldCornCount, title, desc); } @@ -127,4 +180,23 @@ } public List<GoldCornGetSource> listGetCornSource(int page, int pageSize) throws GoldAppException { return goldCornGetSourceService.listShow(getAppCode(), page, pageSize); } public List<GoldCornRecordCountMap> countRecordByGetSource(String uid, List<String> sourceCodes, Date minCreateTime, Date maxCreateTime) throws Exception { if (StringUtil.isNullOrEmpty(uid)) { return new ArrayList<>(); } GoldCornRecordQuery query = new GoldCornRecordQuery(); query.setUid(getUid(uid)); query.setAppCode(getAppCode()); query.setSourceCodes(sourceCodes); query.setMinCreateTime(minCreateTime); query.setMaxCreateTime(maxCreateTime); query.setType(GoldCornRecord.TYPE_GET); return goldCornRecordService.countUserRecordBySource(query); } } src/main/java/com/yeshi/buwan/vo/goldcorn/GoldCornCouponVideoVO.java
New file @@ -0,0 +1,40 @@ package com.yeshi.buwan.vo.goldcorn; import com.yeshi.buwan.domain.jump.JumpDetail; public class GoldCornCouponVideoVO { private String picture; private JumpDetail jumpDetail; private String params; public GoldCornCouponVideoVO(String picture, JumpDetail jumpDetail, String params) { this.picture = picture; this.jumpDetail = jumpDetail; this.params = params; } public String getPicture() { return picture; } public void setPicture(String picture) { this.picture = picture; } public JumpDetail getJumpDetail() { return jumpDetail; } public void setJumpDetail(JumpDetail jumpDetail) { this.jumpDetail = jumpDetail; } public String getParams() { return params; } public void setParams(String params) { this.params = params; } } src/main/java/com/yeshi/buwan/vo/goldcorn/GoldCornRecordVO.java
New file @@ -0,0 +1,37 @@ package com.yeshi.buwan.vo.goldcorn; public class GoldCornRecordVO { private String title; private String date; private int goldCorn; public GoldCornRecordVO(String title, String date, int goldCorn) { this.title = title; this.date = date; this.goldCorn = goldCorn; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } public int getGoldCorn() { return goldCorn; } public void setGoldCorn(int goldCorn) { this.goldCorn = goldCorn; } } src/main/java/com/yeshi/buwan/vo/goldcorn/GoldCornTaskVO.java
New file @@ -0,0 +1,92 @@ package com.yeshi.buwan.vo.goldcorn; import com.ks.goldcorn.pojo.DO.GoldCornGetSource; import com.yeshi.buwan.domain.jump.JumpDetail; public class GoldCornTaskVO { private String icon; private String title; private String goldCorn; private String desc; private String actionName; private JumpDetail jumpDetail; private String params; private boolean enable; public String getIcon() { return icon; } public void setIcon(String icon) { this.icon = icon; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getGoldCorn() { return goldCorn; } public void setGoldCorn(String goldCorn) { this.goldCorn = goldCorn; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } public String getActionName() { return actionName; } public void setActionName(String actionName) { this.actionName = actionName; } public JumpDetail getJumpDetail() { return jumpDetail; } public void setJumpDetail(JumpDetail jumpDetail) { this.jumpDetail = jumpDetail; } public String getParams() { return params; } public void setParams(String params) { this.params = params; } public boolean isEnable() { return enable; } public void setEnable(boolean enable) { this.enable = enable; } public static GoldCornTaskVO create(GoldCornGetSource source) { GoldCornTaskVO vo = new GoldCornTaskVO(); vo.setActionName("去看看"); vo.setDesc(source.getSourceDesc()); vo.setEnable(true); vo.setIcon(source.getIcon()); vo.setTitle(source.getSourceName()); vo.setGoldCorn("+" + source.getGoldCorn() ); return vo; } } src/main/java/com/yeshi/buwan/vo/goldcorn/SignInInfoVO.java
New file @@ -0,0 +1,74 @@ package com.yeshi.buwan.vo.goldcorn; import com.yeshi.buwan.dto.goldcorn.SignInGoldCornDateData; import java.util.List; public class SignInInfoVO { private int balance; private SignInConfig signInConfig; private List<SignInGoldCornDateData> dateList; private int signDay; private boolean canSignIn; public boolean isCanSignIn() { return canSignIn; } public void setCanSignIn(boolean canSignIn) { this.canSignIn = canSignIn; } public int getBalance() { return balance; } public void setBalance(int balance) { this.balance = balance; } public SignInConfig getSignInConfig() { return signInConfig; } public void setSignInConfig(SignInConfig signInConfig) { this.signInConfig = signInConfig; } public List<SignInGoldCornDateData> getDateList() { return dateList; } public void setDateList(List<SignInGoldCornDateData> dateList) { this.dateList = dateList; } public int getSignDay() { return signDay; } public void setSignDay(int signDay) { this.signDay = signDay; } public static class SignInConfig { private String recordUrl; private String ruleUrl; public String getRecordUrl() { return recordUrl; } public void setRecordUrl(String recordUrl) { this.recordUrl = recordUrl; } public String getRuleUrl() { return ruleUrl; } public void setRuleUrl(String ruleUrl) { this.ruleUrl = ruleUrl; } } } src/main/webapp/WEB-INF/lib/facade-goldcorn-0.0.1.jarBinary files differ
src/test/java/com/hxh/spring/test/ConfigTest.java
@@ -64,10 +64,24 @@ systemConfig = new SystemConfig(); systemConfig.setBeizhu(""); systemConfig.setKey("videoPrice"); systemConfig.setName("单片价格"); systemConfig.setKey("goldCornRecordUrl"); systemConfig.setName("影视豆记录链接"); try { systemConfig.setValue(new Gson().toJson(new PPTVVideoPrice(new BigDecimal("5"), new BigDecimal(3), "6折"))); systemConfig.setValue("http://www.baidu.com"); } catch (Exception e) { e.printStackTrace(); } systemConfig.setCreateTime(new Date()); systemConfig.setId(SystemConfig.createId(systemConfig.getKey())); systemConfigDao.save(systemConfig); systemConfig = new SystemConfig(); systemConfig.setBeizhu(""); systemConfig.setKey("goldCornRuleUrl"); systemConfig.setName("影视豆规则"); try { systemConfig.setValue("http://www.baidu.com"); } catch (Exception e) { e.printStackTrace(); } src/test/java/com/hxh/spring/test/GeneralTest.java
@@ -1,7 +1,10 @@ package com.hxh.spring.test; import com.ks.goldcorn.pojo.Query.GoldCornRecordQuery; import com.yeshi.buwan.dao.base.MongodbBaseDao; import com.yeshi.buwan.dao.goldcorn.GoldCornTaskActionDetailDao; import com.yeshi.buwan.dao.video.VideoResourceVersionMapDao; import com.yeshi.buwan.domain.goldcorn.GoldCornTaskActionDetail; import com.yeshi.buwan.domain.video.VideoResourceVersionMap; import com.yeshi.buwan.service.inter.video.VideoResourceVersionMapService; import com.yeshi.buwan.tencent.entity.TencentSearchVideoMap; @@ -14,7 +17,7 @@ @org.junit.Test public void createDao() { try { SpringComponentGenerater.createMongoDao(new MongoDBDaoData.Builder().setBaseDaoClass(MongodbBaseDao.class).setDaoPackageName("com.yeshi.buwan.dao.juhe.youku").setEntityClass(TencentSearchVideoMap.class).create(), "D:\\workspace\\BuWan\\src\\main\\java\\com\\yeshi\\buwan\\dao\\juhe\\tencent\\"); SpringComponentGenerater.createMongoDao(new MongoDBDaoData.Builder().setBaseDaoClass(MongodbBaseDao.class).setDaoPackageName("com.yeshi.buwan.dao.goldcorn").setEntityClass(GoldCornTaskActionDetail.class).create(), "D:\\workspace\\BuWan\\src\\main\\java\\com\\yeshi\\buwan\\dao\\goldcorn\\"); } catch (Exception e) { e.printStackTrace(); } @@ -24,7 +27,7 @@ @org.junit.Test public void createService() { try { SpringComponentGenerater.createService(new ServiceData.Builder().setPackageName("com.yeshi.buwan.service.inter.video").setDaoClass(VideoResourceVersionMapDao.class).setEntityClass(VideoResourceVersionMap.class).build(), "D:\\workspace\\BuWan\\src\\main\\java\\com\\yeshi\\buwan\\service\\inter\\video\\"); SpringComponentGenerater.createService(new ServiceData.Builder().setPackageName("com.yeshi.buwan.service.inter.goldcorn").setDaoClass(GoldCornTaskActionDetailDao.class).setEntityClass(GoldCornTaskActionDetail.class).build(), "D:\\workspace\\BuWan\\src\\main\\java\\com\\yeshi\\buwan\\service\\inter\\goldcorn\\"); } catch (Exception e) { e.printStackTrace(); } src/test/java/com/hxh/spring/test/goldcorn/GoldCornTest.java
New file @@ -0,0 +1,78 @@ package com.hxh.spring.test.goldcorn; import com.ks.goldcorn.pojo.DO.GoldCornGetSource; import com.yeshi.buwan.dao.goldcorn.GoldCornTaskActionDetailDao; import com.yeshi.buwan.domain.goldcorn.CodeCornGetSourceType; import com.yeshi.buwan.domain.goldcorn.GoldCornTaskActionDetail; import com.yeshi.buwan.domain.jump.JumpDetail; import com.yeshi.buwan.domain.jump.JumpTypeEnum; import org.json.JSONObject; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import javax.annotation.Resource; import java.util.Date; @RunWith(SpringJUnit4ClassRunner.class) //使用junit4进行测试 @ContextConfiguration(locations = {"classpath:spring.xml"}) @WebAppConfiguration public class GoldCornTest { @Resource private GoldCornTaskActionDetailDao goldCornTaskActionDetailDao; @Test public void addDetail() { JumpDetail jumpDetail = new JumpDetail(); jumpDetail.setNeedLogin(true); jumpDetail.setType(JumpTypeEnum.clazz); jumpDetail.setActivity("com.weikou.beibeivideo.ui.main.MainActivity"); JSONObject params = new JSONObject(); params.put("position", 0); params.put("cposition", 2); params.put("goldcorn", CodeCornGetSourceType.watchHighVideo.name()); GoldCornTaskActionDetail detail = new GoldCornTaskActionDetail(); detail.setActionName("去看看"); detail.setCreateTime(new Date()); detail.setJumpDetail(jumpDetail); detail.setParams(params.toString().replace("\"", "\\" + "\"")); detail.setSourceCode(CodeCornGetSourceType.watchHighVideo.name()); goldCornTaskActionDetailDao.save(detail); params = new JSONObject(); params.put("goldcorn", CodeCornGetSourceType.searchVideo.name()); jumpDetail.setActivity("com.weikou.beibeivideo.ui.recommend.SearchActivity"); jumpDetail.setType(JumpTypeEnum.clazz); detail = new GoldCornTaskActionDetail(); detail.setActionName("去搜索"); detail.setCreateTime(new Date()); detail.setJumpDetail(jumpDetail); detail.setParams(params.toString().replace("\"", "\\" + "\"")); detail.setSourceCode(CodeCornGetSourceType.searchVideo.name()); goldCornTaskActionDetailDao.save(detail); params = new JSONObject(); params.put("goldcorn", CodeCornGetSourceType.watchRewardAd.name()); params.put("adType", "csj"); params.put("pid","945914112"); jumpDetail.setActivity(""); jumpDetail.setType(JumpTypeEnum.rewardVideo); detail = new GoldCornTaskActionDetail(); detail.setActionName("去看看"); detail.setCreateTime(new Date()); detail.setJumpDetail(jumpDetail); detail.setParams(params.toString().replace("\"", "\\" + "\"")); detail.setSourceCode(CodeCornGetSourceType.watchRewardAd.name()); goldCornTaskActionDetailDao.save(detail); } }