diff --git a/pom.xml b/pom.xml index cae0a17..2088496 100644 --- a/pom.xml +++ b/pom.xml @@ -303,6 +303,7 @@ wxpay-sdk + ruoyi-segchk-test diff --git a/ruoyi-admin/src/main/java/com/ruoyi/security/SecurityConfig.java b/ruoyi-admin/src/main/java/com/ruoyi/security/SecurityConfig.java index f6592ef..20fafc8 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/security/SecurityConfig.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/security/SecurityConfig.java @@ -87,7 +87,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { // 过滤请求 .authorizeRequests() // 对于登录login 验证码captchaImage 允许匿名访问 - .antMatchers("/login", "/captchaImage").anonymous() + .antMatchers("/login", "/captchaImage", "/test/user/**").anonymous() .antMatchers( HttpMethod.GET, "/*.html", diff --git a/ruoyi-admin/src/main/java/com/ruoyi/security/web/service/AdminSchedule.java b/ruoyi-admin/src/main/java/com/ruoyi/security/web/service/AdminSchedule.java new file mode 100644 index 0000000..2a419ed --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/security/web/service/AdminSchedule.java @@ -0,0 +1,10 @@ +package com.ruoyi.security.web.service; + +public interface AdminSchedule { + + /** + * 将redis中商家流量缓存到数据库中 + * @author seg_yinzy + */ + int flushCount2DB(); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/security/web/service/AdminScheduleImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/security/web/service/AdminScheduleImpl.java new file mode 100644 index 0000000..9cbb50e --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/security/web/service/AdminScheduleImpl.java @@ -0,0 +1,254 @@ +package com.ruoyi.security.web.service; + +import com.alibaba.fastjson.JSON; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.RedisUtil; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.segchk.domain.SegchkFlushCnt; +import com.ruoyi.segchk.domain.SegchkProviderMgt; +import com.ruoyi.segchk.domain.SegchkStoreCntCtrl; +import com.ruoyi.segchk.domain.SimpleListObj; +import com.ruoyi.segchk.service.ISegchkProviderMgtService; +import com.ruoyi.segchk.service.ISegchkStoreBasicInfoService; +import com.ruoyi.segchk.service.ISegchkStoreCntCtrlService; +import com.ruoyi.segchk.utils.RateRandomNumber; +import javafx.util.Pair; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ObjectUtils; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import java.util.*; +import java.util.concurrent.ConcurrentMap; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static java.util.stream.Collectors.*; + +@Component +public class AdminScheduleImpl implements AdminSchedule { + private static final Logger log = LoggerFactory.getLogger(AdminScheduleImpl.class); + + @Resource + private RedisUtil redisUtil; + + @Resource + private ISegchkProviderMgtService segchkProviderMgtService; + + @Resource + private ISegchkStoreBasicInfoService segchkStoreBasicInfoService; + + @Resource + private ISegchkStoreCntCtrlService segchkStoreCntCtrlService; + + @PostConstruct + public void init(){ + loadAllWechatCnt(); + } + + private void loadAllWechatCnt() { + log.debug("loadAllWechatCnt is called"); + List segchkStoreCntCtrls = segchkStoreCntCtrlService.selectSegchkStoreCntCtrlListByRecent(); + int ret = segchkStoreCntCtrlService.invalidateByOutId(segchkStoreCntCtrls.parallelStream().map(v -> v.getCntId()).collect(toList())); + Map collectMap = get2RedisMap(segchkStoreCntCtrls, 0); + redisUtil.hmset("wechatCount", collectMap); + collectMap = get2RedisMap(segchkStoreCntCtrls, 1); + redisUtil.hmset("wechatCount1", collectMap); + } + + private Map get2RedisMap(List segchkStoreCntCtrls, int flag) { + List mapList = segchkStoreCntCtrls.parallelStream().map(v -> v.getRedisMap(flag)).collect(Collectors.toList()); + return (Map) mapList + .stream() + .flatMap(v -> v.entrySet().stream()) + .map(v -> (Map.Entry) v) + .collect(Collectors.toMap( + v1 -> ((Map.Entry) v1).getKey() + , v1 -> ((Map.Entry) v1).getValue() + , (m, n) -> m >= n ? m : n)) + ; + } + + public AjaxResult dealOpt(int flag, String params){ + switch (flag) { + case 1: + case 2: + case 3: + case 4: { +// 刷次数 + SegchkFlushCnt segchkFlushCnt = JSON.parseObject(params, SegchkFlushCnt.class); + if(segchkFlushCnt.getProviderId() == 0L){ + return AjaxResult.error(StringUtils.format("指定运营商{}", segchkFlushCnt)); + } + return flushCount(flag, segchkFlushCnt) > 0 ? AjaxResult.success() : AjaxResult.error(); + } + case 5: { +// 刷新次数缓存到数据库中 + return flushCount2DB() > 0 ? AjaxResult.success() : AjaxResult.error(); + } + default: + throw new IllegalStateException("Unexpected value: " + flag); + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public int flushCount2DB() { +// SegchkStoreCntCtrl + Map wechatCount = redisUtil.hmget("wechatCount"); + Map wechatCount1 = redisUtil.hmget("wechatCount1"); + ConcurrentMap> collect2 = Stream.concat(wechatCount.entrySet().stream(), wechatCount1.entrySet().stream()).map(v -> { + String[] split = v.getKey().toString().split(":", -1); + Integer cnt = (Integer) v.getValue(); + Long providerId = Long.valueOf(split[1]); + Long storeId = Long.valueOf(split[2]); + SegchkStoreCntCtrl tmp = new SegchkStoreCntCtrl(); + tmp.setProviderId(providerId); + tmp.setStoreId(storeId); + if (split[0].equalsIgnoreCase("browse_cnt")) { + tmp.setBrowseCnt(cnt); + } else if (split[0].equalsIgnoreCase("collect_cnt")) { + tmp.setCollectCnt(cnt); + } else if (split[0].equalsIgnoreCase("book_cnt")) { + tmp.setBookCnt(cnt); + } else if (split[0].equalsIgnoreCase("browse_cnt1")) { + tmp.setBrowseCnt1(cnt); + } else if (split[0].equalsIgnoreCase("collect_cnt1")) { + tmp.setCollectCnt1(cnt); + } else if (split[0].equalsIgnoreCase("book_cnt1")) { + tmp.setBookCnt1(cnt); + } + return tmp; + }).parallel().collect(Collectors.groupingByConcurrent(v -> v.getStoreId(), Collectors.toList())); + List segchkStoreCntCtrlList = collect2.entrySet().parallelStream().map(entry -> { + Optional reduce = entry.getValue().stream().reduce((ret, item) -> { + SegchkStoreCntCtrl tmp = ObjectUtils.isEmpty(ret) ? new SegchkStoreCntCtrl() : ret; + if (!ObjectUtils.isEmpty(item.getProviderId())) { + tmp.setProviderId(item.getProviderId()); + } + if (!ObjectUtils.isEmpty(item.getStoreId())) { + tmp.setStoreId(item.getStoreId()); + } + if (!ObjectUtils.isEmpty(item.getBookCnt())) { + tmp.setBookCnt(item.getBookCnt()); + } + if (!ObjectUtils.isEmpty(item.getBrowseCnt())) { + tmp.setBrowseCnt(item.getBrowseCnt()); + } + if (!ObjectUtils.isEmpty(item.getCollectCnt())) { + tmp.setCollectCnt(item.getCollectCnt()); + } + if (!ObjectUtils.isEmpty(item.getBookCnt1())) { + tmp.setBookCnt1(item.getBookCnt1()); + } + if (!ObjectUtils.isEmpty(item.getBrowseCnt1())) { + tmp.setBrowseCnt1(item.getBrowseCnt1()); + } + if (!ObjectUtils.isEmpty(item.getCollectCnt1())) { + tmp.setCollectCnt1(item.getCollectCnt1()); + } + return tmp; + }); + return reduce; + }).filter(opt -> opt.isPresent()).map(opt -> opt.get()).collect(Collectors.toList()); +// Set wechatCountRecord = redisUtil.sGet("wechatCountRecord"); +// return segchkStoreCntCtrlService.flushCount2DB(segchkStoreCntCtrlList); + Pair ret = segchkStoreCntCtrlService.addWechatCntBatch(segchkStoreCntCtrlList); + int update_ret = 1; + if(!ObjectUtils.isEmpty(ret.getValue())) { + Map map = (Map) ret.getValue(); + update_ret = segchkStoreCntCtrlService.invalidateByStore(map); + } + return ret.getKey();/**/ + } + + /** + * @param flag 刷新标识 1、浏览次数, 2、收藏次数,3、预约次数 + * @param segchkFlushCnt 从接口层获取的请求参数。运营商,商家列表,单次刷新次数,概率 + * @return + */ + private int flushCount(int flag, SegchkFlushCnt segchkFlushCnt) { + Long providerId = segchkFlushCnt.getProviderId(); + SegchkProviderMgt segchkProviderMgt = segchkProviderMgtService.selectSegchkProviderMgtByProviderId(providerId); + if(ObjectUtils.isEmpty(segchkProviderMgt)){ + log.error(StringUtils.format("刷新指定的运营商未找到 {}", providerId)); + return 0; + } + List storeList = segchkStoreBasicInfoService.selectSegchkStoreSimpleList(providerId); + ArrayList stores = segchkFlushCnt.getField(); + if(ObjectUtils.isEmpty(storeList)){ + log.warn(StringUtils.format("运营商【{}】无在线商家", providerId)); + return 0; + } + List storeIdsDB = storeList.parallelStream().map(v -> Long.valueOf(v.getKey())).collect(toList()); + List storeNotDB = ObjectUtils.isEmpty(stores) ? null : stores.stream().filter(v -> !storeIdsDB.contains(v)).collect(toList()); + if(!ObjectUtils.isEmpty(storeNotDB)){ + log.error(StringUtils.format("运营商【{}】无商家 {}", providerId, StringUtils.join(storeNotDB, ","))); + return 0; + } + stores = ObjectUtils.isEmpty(stores) ? (ArrayList) storeIdsDB : stores; + switch (flag) { + case 1: { +// 刷新浏览数 + List wechatCount = stores.parallelStream().filter(v -> { + boolean flushOpt = true; + if (Double.doubleToLongBits(segchkFlushCnt.getProbability()) < Double.doubleToLongBits(100.00)) { + double v1 = RateRandomNumber.produceRandomNumber(0.01, 1.00); + flushOpt = Double.doubleToLongBits(v1) >= Double.doubleToLongBits(segchkFlushCnt.getProbability() / 100.00) ? true : false; + } + if (flushOpt) { + long ret = (long) redisUtil.hincr("wechatCount1", "browse_cnt1:" + providerId + ":" + v, segchkFlushCnt.getStep()); + long ret1 = redisUtil.sSet("wechatCountRecord", v); + } + return flushOpt; + }).collect(toList()); + log.debug(StringUtils.format("flushCount browse_cnt with provider[{}] for stores[{}]", providerId, StringUtils.join(wechatCount))); + return wechatCount.size(); + } + case 2: { +// 刷新收藏数 + List wechatCount = stores.parallelStream().filter(v -> { + boolean flushOpt = true; + if (Double.doubleToLongBits(segchkFlushCnt.getProbability()) < Double.doubleToLongBits(100.00)) { + double v1 = RateRandomNumber.produceRandomNumber(0.01, 1.00); + flushOpt = Double.doubleToLongBits(v1) >= Double.doubleToLongBits(segchkFlushCnt.getProbability() / 100.00) ? true : false; + } + if (flushOpt) { + long ret = (long) redisUtil.hincr("wechatCount1", "collect_cnt1:" + providerId + ":" + v, segchkFlushCnt.getStep()); + long ret1 = redisUtil.sSet("wechatCountRecord", v); + } + return flushOpt; + }).collect(toList()); + log.debug(StringUtils.format("flushCount collect_cnt with provider[{}] for stores[{}]", providerId, StringUtils.join(wechatCount))); + return wechatCount.size(); + } + case 3: { +// 刷新预约数 + List wechatCount = stores.parallelStream().filter(v -> { + boolean flushOpt = true; + if (Double.doubleToLongBits(segchkFlushCnt.getProbability()) < Double.doubleToLongBits(100.00)) { + double v1 = RateRandomNumber.produceRandomNumber(0.01, 1.00); + flushOpt = Double.doubleToLongBits(v1) >= Double.doubleToLongBits(segchkFlushCnt.getProbability() / 100.00) ? true : false; + } + if (flushOpt) { + long ret = (long) redisUtil.hincr("wechatCount1", "book_cnt1:" + providerId + ":" + v, segchkFlushCnt.getStep()); + long ret1 = redisUtil.sSet("wechatCountRecord", v); + } + return flushOpt; + }).collect(toList()); + log.debug(StringUtils.format("flushCount book_cnt with provider[{}] for stores[{}]", providerId, StringUtils.join(wechatCount))); + return wechatCount.size(); + } + case 4: { +// 刷新核销次数 + log.debug("will open flush check"); + return 1; + } + } + return 0; + } + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkProviderCntCtrlController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkProviderCntCtrlController.java new file mode 100644 index 0000000..812b728 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkProviderCntCtrlController.java @@ -0,0 +1,103 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkProviderCntCtrl; +import com.ruoyi.segchk.service.ISegchkProviderCntCtrlService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 运营商流量管控Controller + * + * @author yinzhiying + * @date 2022-07-17 + */ +@RestController +@RequestMapping("/segchk/segchk_provider_cnt_ctrl") +public class SegchkProviderCntCtrlController extends BaseController +{ + @Autowired + private ISegchkProviderCntCtrlService segchkProviderCntCtrlService; + + /** + * 查询运营商流量管控列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_provider_cnt_ctrl:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkProviderCntCtrl segchkProviderCntCtrl) + { + startPage(); + List list = segchkProviderCntCtrlService.selectSegchkProviderCntCtrlList(segchkProviderCntCtrl); + return getDataTable(list); + } + + /** + * 导出运营商流量管控列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_provider_cnt_ctrl:export')") + @Log(title = "运营商流量管控", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkProviderCntCtrl segchkProviderCntCtrl) + { + List list = segchkProviderCntCtrlService.selectSegchkProviderCntCtrlList(segchkProviderCntCtrl); + ExcelUtil util = new ExcelUtil(SegchkProviderCntCtrl.class); + return util.exportExcel(list, "运营商流量管控数据"); + } + + /** + * 获取运营商流量管控详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_provider_cnt_ctrl:query')") + @GetMapping(value = "/{cntId}") + public AjaxResult getInfo(@PathVariable("cntId") Long cntId) + { + return AjaxResult.success(segchkProviderCntCtrlService.selectSegchkProviderCntCtrlByCntId(cntId)); + } + + /** + * 新增运营商流量管控 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_provider_cnt_ctrl:add')") + @Log(title = "运营商流量管控", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkProviderCntCtrl segchkProviderCntCtrl) + { + return toAjax(segchkProviderCntCtrlService.insertSegchkProviderCntCtrl(segchkProviderCntCtrl)); + } + + /** + * 修改运营商流量管控 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_provider_cnt_ctrl:edit')") + @Log(title = "运营商流量管控", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkProviderCntCtrl segchkProviderCntCtrl) + { + return toAjax(segchkProviderCntCtrlService.updateSegchkProviderCntCtrl(segchkProviderCntCtrl)); + } + + /** + * 删除运营商流量管控 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_provider_cnt_ctrl:remove')") + @Log(title = "运营商流量管控", businessType = BusinessType.DELETE) + @DeleteMapping("/{cntIds}") + public AjaxResult remove(@PathVariable Long[] cntIds) + { + return toAjax(segchkProviderCntCtrlService.deleteSegchkProviderCntCtrlByCntIds(cntIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkSimpleListController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkSimpleListController.java index 3a0651b..e6b58c0 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkSimpleListController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkSimpleListController.java @@ -1,24 +1,16 @@ package com.ruoyi.web.controller.segchk; -import com.ruoyi.common.annotation.Log; import com.ruoyi.common.annotation.UnAuth; import com.ruoyi.common.core.controller.BaseController; -import com.ruoyi.common.core.domain.AjaxResult; -import com.ruoyi.common.core.domain.BaseEntity; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.page.TableDataInfo; -import com.ruoyi.common.enums.BusinessType; -import com.ruoyi.common.utils.StringUtils; -import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.segchk.domain.*; import com.ruoyi.segchk.service.*; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.stream.Collectors; -import java.util.stream.Stream; /** * seg首页轮播图管理Controller @@ -252,53 +244,4 @@ public class SegchkSimpleListController extends BaseController return getDataTable(collect); } - - private class SimpleListObj extends BaseEntity { - private String providerId; - private String key; - private String value; - private String imgUrl; - - public String getProviderId() { - return providerId; - } - - public void setProviderId(String providerId) { - this.providerId = providerId; - } - - public String getKey() { - return key; - } - - public void setKey(String key) { - this.key = key; - } - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - - public String getImgUrl() { - return imgUrl; - } - - public void setImgUrl(String imgUrl) { - this.imgUrl = imgUrl; - } - - @Override - public String toString() { - return "SimpleListObj{" + - "providerId='" + providerId + '\'' + - ", key='" + key + '\'' + - ", value='" + value + '\'' + - ", imgUrl='" + imgUrl + '\'' + - '}'; - } - } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreBasicInfoController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreBasicInfoController.java index bd89d10..b650490 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreBasicInfoController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreBasicInfoController.java @@ -1,13 +1,14 @@ package com.ruoyi.web.controller.segchk; -import java.util.Arrays; import java.util.List; -import java.util.stream.Collectors; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.segchk.domain.SegchkStoreCntCtrl; +import com.ruoyi.segchk.domain.SegchkStoreVrInfo; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; @@ -37,7 +38,7 @@ public class SegchkStoreBasicInfoController extends BaseController { @Autowired private ISegchkStoreBasicInfoService segchkStoreBasicInfoService; - + /** * 查询seg商家基础信息列表 */ @@ -59,7 +60,7 @@ public class SegchkStoreBasicInfoController extends BaseController System.out.println("segchk:segchk_store_basic_info:list userinfo:" + sysUser.getRoleId()); sysUser.getRoles().forEach(it -> System.out.println(it.toString())); startPage(); - List list = segchkStoreBasicInfoService.selectSegchkStoreBasicInfoList(segchkStoreBasicInfo); + List list = segchkStoreBasicInfoService.selectSegchkStoreBasicInfoListWithCnt(segchkStoreBasicInfo); return getDataTable(list); } @@ -210,4 +211,85 @@ public class SegchkStoreBasicInfoController extends BaseController { return toAjax(segchkStoreBasicInfoService.deleteSegchkStoreBasicInfoByStoreIds(storeIds)); } + + /** + * 修改seg商家VR + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_basic_info:edit')") +// @UnAuth + @Log(title = "seg商家基础信息", businessType = BusinessType.UPDATE) + @PutMapping("update_vr") + public AjaxResult update_vr(@RequestBody SegchkStoreVrInfo segchkStoreVrInfo) + { + if(StringUtils.isEmpty(segchkStoreVrInfo.getRemark())) { + SysUser sysUser = getLoginUser().getUser(); + if (sysUser.getUserId() == 1) { +// 说明是超级管理员 + ; + } else { + segchkStoreVrInfo.setProviderId(sysUser.getProviderId()); + } + } + logger.debug("update vr with: {}", segchkStoreVrInfo.toString()); + return toAjax(segchkStoreBasicInfoService.updateSegchkStoreVr(segchkStoreVrInfo)); + } + + /** + * 添加seg商家VR + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_basic_info:edit')") +// @UnAuth + @Log(title = "seg商家VR信息", businessType = BusinessType.INSERT) + @PutMapping("add_vr") + public AjaxResult AddVR(@RequestBody SegchkStoreVrInfo segchkStoreVrInfo) + { + if(StringUtils.isEmpty(segchkStoreVrInfo.getRemark())) { + SysUser sysUser = getLoginUser().getUser(); + if (sysUser.getUserId() == 1) { +// 说明是超级管理员 + ; + } else { + segchkStoreVrInfo.setProviderId(sysUser.getProviderId()); + } + } + logger.debug("add vr with: {}", segchkStoreVrInfo.toString()); + return toAjax(segchkStoreBasicInfoService.addSegchkStoreVr(segchkStoreVrInfo)); + } + + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_basic_info:edit')") + @Log(title = "seg商家基础信息", businessType = BusinessType.DELETE) +// @PutMapping("delete_vr") + @DeleteMapping("delete_vr/{storeId}") + public AjaxResult DeleteVr(@PathVariable Long storeId) + { + SegchkStoreVrInfo segchkStoreVrInfo = new SegchkStoreVrInfo(); + SysUser sysUser = getLoginUser().getUser(); + if (sysUser.getUserId() == 1) { +// 说明是超级管理员 + ; + } else { + segchkStoreVrInfo.setProviderId(sysUser.getProviderId()); + } + logger.debug("delete vr with: {}", storeId); + segchkStoreVrInfo.setStoreId(storeId); + return toAjax(segchkStoreBasicInfoService.deleteSegchkStoreVr(segchkStoreVrInfo)); + } + + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_basic_info:edit')") + @Log(title = "seg商家基础信息", businessType = BusinessType.UPDATE) +// @PutMapping("delete_vr") + @PutMapping("update_count") + public AjaxResult updateCount(@RequestBody SegchkStoreCntCtrl segchkStoreCntCtrl) + { + SysUser sysUser = getLoginUser().getUser(); + if (sysUser.getUserId() == 1) { +// 说明是超级管理员 + ; + } else { + segchkStoreCntCtrl.setProviderId(sysUser.getProviderId()); + } + logger.debug("update store count with: {}", segchkStoreCntCtrl.toString()); + + return toAjax(segchkStoreBasicInfoService.updateSegchkStoreCnt2Redis(segchkStoreCntCtrl)); + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java index 381ab13..544c04c 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java @@ -1,17 +1,12 @@ package com.ruoyi.web.controller.tool; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import java.util.*; + +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.security.web.service.AdminScheduleImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.StringUtils; @@ -32,6 +27,12 @@ import io.swagger.annotations.ApiOperation; @RequestMapping("/test/user") public class TestController extends BaseController { + @Autowired + private RedisCache redisService; + + @Autowired + private AdminScheduleImpl schedule; + private final static Map users = new LinkedHashMap(); { users.put(1, new UserEntity(1, "admin", "admin123", "15888888888")); @@ -109,6 +110,37 @@ public class TestController extends BaseController return error("用户不存在"); } } + + @RepeatSubmit + @ApiOperation("更新redis缓存") + @PutMapping("/updateredis") + @ResponseBody + public AjaxResult updateredis(String key, String db, String value) throws ClassNotFoundException { + if(db.equals("PROVIDER_INFO:FIRST_CHECK_REWARD") || db.equals("BASE_INFO_SET:")){ + + redisService.setCacheObject(db + ":" + key, new Boolean(value)); + } +// redisService.setCacheObject(key, value); + return AjaxResult.success(); + } + + @ApiOperation("获取Redis") + @GetMapping("/getredis") + public AjaxResult getredis(String key, String db) + { + if(db.equals("PROVIDER_INFO:FIRST_CHECK_REWARD") || db.equals("BASE_INFO_SET:")){ + Object cacheObject = redisService.getCacheObject(db + ":" + key); + Boolean aBoolean = new Boolean(String.valueOf(cacheObject)); + return AjaxResult.success(aBoolean); + } + return AjaxResult.success(); + } + + @PostMapping("/testquartz") + public AjaxResult testquartz(Integer reqFlag, String params){ + logger.debug("testquartz get req with {} {}", reqFlag, params); + return schedule.dealOpt(reqFlag, params); + } } @ApiModel(value = "UserEntity", description = "用户实体") diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml new file mode 100644 index 0000000..b4cf033 --- /dev/null +++ b/ruoyi-admin/src/main/resources/application-dev.yml @@ -0,0 +1,123 @@ +# 项目相关配置 +ruoyi: + # 名称 + name: RuoYi + # 版本 + version: 3.6.0 + # 版权年份 + copyrightYear: 2021 + # 实例演示开关 + demoEnabled: true + # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath) + profile: C:/ruoyi/uploadPath + # 获取ip地址开关 + addressEnabled: false + # 验证码类型 math 数组计算 char 字符验证 + captchaType: math + +# 开发环境配置 +server: + # 服务器的HTTP端口,默认为8080 + port: 7070 + servlet: + # 应用的访问路径 + context-path: / + tomcat: + # tomcat的URI编码 + uri-encoding: UTF-8 + # tomcat最大线程数,默认为200 + max-threads: 800 + # Tomcat启动初始化的线程数,默认值25 + min-spare-threads: 30 + +# 日志配置 +logging: + level: + com.ruoyi: debug + org.springframework: warn + + +# 数据源配置 +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.cj.jdbc.Driver + druid: + # 主库数据源 + master: + url: jdbc:mysql://192.168.2.30:8306/kaletest?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true + username: kaletest_yinzy + password: XMG2-Rel.2 + # 从库数据源 + slave: + # 从数据源开关/默认关闭 + enabled: false + url: + username: + password: + # 初始连接数 + initialSize: 5 + # 最小连接池数量 + minIdle: 10 + # 最大连接池数量 + maxActive: 20 + # 配置获取连接等待超时的时间 + maxWait: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 300000 + # 配置一个连接在池中最大生存的时间,单位是毫秒 + maxEvictableIdleTimeMillis: 900000 + # 配置检测连接是否有效 + validationQuery: SELECT 1 FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + webStatFilter: + enabled: true + statViewServlet: + enabled: true + # 设置白名单,不填则允许所有访问 + allow: + url-pattern: /druid/* + # 控制台管理用户名和密码 + login-username: ruoyi + login-password: 123456 + filter: + stat: + enabled: true + # 慢SQL记录 + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true + # redis 配置 + redis: + # 地址 + host: 192.168.2.40 + # 端口,默认为6379 + port: 63795 + # 数据库索引 + database: 3 + # 密码 + password: seg_123456 + # 连接超时时间 + timeout: 10s + lettuce: + pool: + # 连接池中的最小空闲连接 + min-idle: 0 + # 连接池中的最大空闲连接 + max-idle: 8 + # 连接池的最大数据库连接数 + max-active: 8 + # #连接池最大阻塞等待时间(使用负值表示没有限制) + max-wait: -1ms + + +segchk: + ctrl: + dbbatch: 100 \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/application-kaleprod.yml b/ruoyi-admin/src/main/resources/application-prod.yml similarity index 100% rename from ruoyi-admin/src/main/resources/application-kaleprod.yml rename to ruoyi-admin/src/main/resources/application-prod.yml diff --git a/ruoyi-admin/src/main/resources/application-test.yml b/ruoyi-admin/src/main/resources/application-test.yml index 080cdc5..c644b6a 100644 --- a/ruoyi-admin/src/main/resources/application-test.yml +++ b/ruoyi-admin/src/main/resources/application-test.yml @@ -18,7 +18,7 @@ ruoyi: # 开发环境配置 server: # 服务器的HTTP端口,默认为8080 - port: 7070 + port: 7170 servlet: # 应用的访问路径 context-path: / diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 536a0f8..cc4d0b5 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -43,7 +43,7 @@ spring: # 国际化资源文件路径 basename: i18n/messages profiles: - active: druid + active: dev # 文件上传 servlet: multipart: diff --git a/ruoyi-admin/src/main/resources/http-client.env.json b/ruoyi-admin/src/main/resources/http-client.env.json new file mode 100644 index 0000000..9e585cd --- /dev/null +++ b/ruoyi-admin/src/main/resources/http-client.env.json @@ -0,0 +1,5 @@ +{ + "dev": { + "name": "value" + } +} \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java index 536cb3c..fd1176f 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java @@ -4,6 +4,8 @@ import java.lang.management.ManagementFactory; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.concurrent.TimeUnit; + import org.apache.commons.lang3.time.DateFormatUtils; /** @@ -152,4 +154,31 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils // long sec = diff % nd % nh % nm / ns; return day + "天" + hour + "小时" + min + "分钟"; } + + /** + * 计算两个时间差 + */ + public static Long getDatePoor(Date endDate, Date nowDate, int type) + { + long nd = 1000 * 24 * 60 * 60; + long nh = 1000 * 60 * 60; + long nm = 1000 * 60; + long ns = 1000; + // 获得两个时间的毫秒时间差异 + long diff = endDate.getTime() - nowDate.getTime(); + // 计算差多少天 + long day = diff / nd; + // 计算差多少小时 + long hour = diff % nd / nh; + // 计算差多少分钟 + long min = diff % nd % nh / nm; + // 计算差多少秒//输出结果 + long sec = diff % nd % nh % nm / ns; + switch (type){ + case 0 : return day; + case 1 : return hour; + case 2 : return min; + default: return sec; + } + } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/RedisCahceKey.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/RedisCahceKey.java index 9888118..fb5dcc3 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/RedisCahceKey.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/RedisCahceKey.java @@ -88,4 +88,19 @@ public interface RedisCahceKey { * 社区推广 */ String COMMUNITY_BUY_INDEX = "COMMUNITY_BUY_INDEX"; + /** + * 商家状态 + */ + String STORE_STATUS = "STORE_STATUS"; + /** + * 商家状态 + */ + String PROVIDER_INFO = "PROVIDER_INFO"; + /** + * 商家状态 + */ + String ORDER_INFO = "ORDER_INFO"; + +// 商家可赠卡标识。只要存在即可赠卡 + String GIVE_FREE_CARD = "GIVE_FREE_CARD"; } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/RedisUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/RedisUtil.java new file mode 100644 index 0000000..b14f2c6 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/RedisUtil.java @@ -0,0 +1,591 @@ +package com.ruoyi.common.utils; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.connection.RedisConnection; +import org.springframework.data.redis.core.Cursor; +import org.springframework.data.redis.core.RedisCallback; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ScanOptions; +import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.stereotype.Component; + +import java.util.*; +import java.util.concurrent.TimeUnit; + +/** + * redis 工具类 + * @Author Scott + * + */ +@Component +public class RedisUtil { + + @Autowired + public RedisTemplate redisTemplate; +// private RedisTemplate redisTemplate; + + /** + * 指定缓存失效时间 + * + * @param key 键 + * @param time 时间(秒) + * @return + */ + public boolean expire(String key, long time) { + try { + if (time > 0) { + redisTemplate.expire(key, time, TimeUnit.SECONDS); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 根据key 获取过期时间 + * + * @param key 键 不能为null + * @return 时间(秒) 返回0代表为永久有效 + */ + public long getExpire(String key) { + return redisTemplate.getExpire(key, TimeUnit.SECONDS); + } + + /** + * 判断key是否存在 + * + * @param key 键 + * @return true 存在 false不存在 + */ + public boolean hasKey(String key) { + try { + return redisTemplate.hasKey(key); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 删除缓存 + * + * @param key 可以传一个值 或多个 + */ + @SuppressWarnings("unchecked") + public void del(String... key) { + if (key != null && key.length > 0) { + if (key.length == 1) { + redisTemplate.delete(key[0]); + } else { + //springboot2.4后用法 + redisTemplate.delete(Arrays.asList(key)); + } + } + } + + // ============================String============================= + /** + * 普通缓存获取 + * + * @param key 键 + * @return 值 + */ + public Object get(String key) { + return key == null ? null : redisTemplate.opsForValue().get(key); + } + + /** + * 普通缓存放入 + * + * @param key 键 + * @param value 值 + * @return true成功 false失败 + */ + public boolean set(String key, Object value) { + try { + redisTemplate.opsForValue().set(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + + } + + /** + * 普通缓存放入并设置时间 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期 + * @return true成功 false 失败 + */ + public boolean set(String key, Object value, long time) { + try { + if (time > 0) { + redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS); + } else { + set(key, value); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 递增 + * + * @param key 键 + * @param delta 要增加几(大于0) + * @return + */ + public long incr(String key, long delta) { + if (delta < 0) { + throw new RuntimeException("递增因子必须大于0"); + } + return redisTemplate.opsForValue().increment(key, delta); + } + + /** + * 递减 + * + * @param key 键 + * @param delta 要减少几(小于0) + * @return + */ + public long decr(String key, long delta) { + if (delta < 0) { + throw new RuntimeException("递减因子必须大于0"); + } + return redisTemplate.opsForValue().increment(key, -delta); + } + + // ================================Map================================= + /** + * HashGet + * + * @param key 键 不能为null + * @param item 项 不能为null + * @return 值 + */ + public Object hget(String key, String item) { + return redisTemplate.opsForHash().get(key, item); + } + + /** + * 获取hashKey对应的所有键值 + * + * @param key 键 + * @return 对应的多个键值 + */ + public Map hmget(String key) { + return redisTemplate.opsForHash().entries(key); + } + + /** + * HashSet + * + * @param key 键 + * @param map 对应多个键值 + * @return true 成功 false 失败 + */ + public boolean hmset(String key, Map map) { + try { + redisTemplate.opsForHash().putAll(key, map); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * HashSet 并设置时间 + * + * @param key 键 + * @param map 对应多个键值 + * @param time 时间(秒) + * @return true成功 false失败 + */ + public boolean hmset(String key, Map map, long time) { + try { + redisTemplate.opsForHash().putAll(key, map); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 向一张hash表中放入数据,如果不存在将创建 + * + * @param key 键 + * @param item 项 + * @param value 值 + * @return true 成功 false失败 + */ + public boolean hset(String key, String item, Object value) { + try { + redisTemplate.opsForHash().put(key, item, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 向一张hash表中放入数据,如果不存在将创建 + * + * @param key 键 + * @param item 项 + * @param value 值 + * @param time 时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间 + * @return true 成功 false失败 + */ + public boolean hset(String key, String item, Object value, long time) { + try { + redisTemplate.opsForHash().put(key, item, value); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 删除hash表中的值 + * + * @param key 键 不能为null + * @param item 项 可以使多个 不能为null + */ + public void hdel(String key, Object... item) { + redisTemplate.opsForHash().delete(key, item); + } + + /** + * 判断hash表中是否有该项的值 + * + * @param key 键 不能为null + * @param item 项 不能为null + * @return true 存在 false不存在 + */ + public boolean hHasKey(String key, String item) { + return redisTemplate.opsForHash().hasKey(key, item); + } + + /** + * hash递增 如果不存在,就会创建一个 并把新增后的值返回 + * + * @param key 键 + * @param item 项 + * @param by 要增加几(大于0) + * @return + */ + public double hincr(String key, String item, double by) { + return redisTemplate.opsForHash().increment(key, item, by); + } + + public double hincr(String key, String item, long by) { + return redisTemplate.opsForHash().increment(key, item, by); + } + + /** + * hash递减 + * + * @param key 键 + * @param item 项 + * @param by 要减少记(小于0) + * @return + */ + public double hdecr(String key, String item, double by) { + return redisTemplate.opsForHash().increment(key, item, -by); + } + + // ============================set============================= + /** + * 根据key获取Set中的所有值 + * + * @param key 键 + * @return + */ + public Set sGet(String key) { + try { + return redisTemplate.opsForSet().members(key); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 根据value从一个set中查询,是否存在 + * + * @param key 键 + * @param value 值 + * @return true 存在 false不存在 + */ + public boolean sHasKey(String key, Object value) { + try { + return redisTemplate.opsForSet().isMember(key, value); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将数据放入set缓存 + * + * @param key 键 + * @param values 值 可以是多个 + * @return 成功个数 + */ + public long sSet(String key, Object... values) { + try { + return redisTemplate.opsForSet().add(key, values); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 将set数据放入缓存 + * + * @param key 键 + * @param time 时间(秒) + * @param values 值 可以是多个 + * @return 成功个数 + */ + public long sSetAndTime(String key, long time, Object... values) { + try { + Long count = redisTemplate.opsForSet().add(key, values); + if (time > 0) { + expire(key, time); + } + return count; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 获取set缓存的长度 + * + * @param key 键 + * @return + */ + public long sGetSetSize(String key) { + try { + return redisTemplate.opsForSet().size(key); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 移除值为value的 + * + * @param key 键 + * @param values 值 可以是多个 + * @return 移除的个数 + */ + public long setRemove(String key, Object... values) { + try { + Long count = redisTemplate.opsForSet().remove(key, values); + return count; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + // ===============================list================================= + + /** + * 获取list缓存的内容 + * + * @param key 键 + * @param start 开始 + * @param end 结束 0 到 -1代表所有值 + * @return + */ + public List lGet(String key, long start, long end) { + try { + return redisTemplate.opsForList().range(key, start, end); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 获取list缓存的长度 + * + * @param key 键 + * @return + */ + public long lGetListSize(String key) { + try { + return redisTemplate.opsForList().size(key); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 通过索引 获取list中的值 + * + * @param key 键 + * @param index 索引 index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推 + * @return + */ + public Object lGetIndex(String key, long index) { + try { + return redisTemplate.opsForList().index(key, index); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @return + */ + public boolean lSet(String key, Object value) { + try { + redisTemplate.opsForList().rightPush(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) + * @return + */ + public boolean lSet(String key, Object value, long time) { + try { + redisTemplate.opsForList().rightPush(key, value); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @return + */ + public boolean lSet(String key, List value) { + try { + redisTemplate.opsForList().rightPushAll(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) + * @return + */ + public boolean lSet(String key, List value, long time) { + try { + redisTemplate.opsForList().rightPushAll(key, value); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 根据索引修改list中的某条数据 + * + * @param key 键 + * @param index 索引 + * @param value 值 + * @return + */ + public boolean lUpdateIndex(String key, long index, Object value) { + try { + redisTemplate.opsForList().set(key, index, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 移除N个值为value + * + * @param key 键 + * @param count 移除多少个 + * @param value 值 + * @return 移除的个数 + */ + public long lRemove(String key, long count, Object value) { + try { + Long remove = redisTemplate.opsForList().remove(key, count, value); + return remove; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + + /** + * 删除指定前缀的一系列key + * @param keyPrefix + */ + public void removeAll(String keyPrefix) { + try { + Set keys = redisTemplate.keys(keyPrefix); + redisTemplate.delete(keys); + } catch (Throwable e) { + e.printStackTrace(); + } + } +} diff --git a/ruoyi-framework/pom.xml b/ruoyi-framework/pom.xml index 15f13e8..ffaeea0 100644 --- a/ruoyi-framework/pom.xml +++ b/ruoyi-framework/pom.xml @@ -23,8 +23,28 @@ org.springframework.boot spring-boot-starter-web + + + + + + org.springframework.boot diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java index 3c3185e..900a092 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java @@ -4,9 +4,13 @@ import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.cache.RedisCacheConfiguration; +import org.springframework.data.redis.cache.RedisCacheManager; +import org.springframework.data.redis.cache.RedisCacheWriter; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.script.DefaultRedisScript; +import org.springframework.data.redis.serializer.RedisSerializationContext; import org.springframework.data.redis.serializer.StringRedisSerializer; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonTypeInfo; @@ -49,6 +53,16 @@ public class RedisConfig extends CachingConfigurerSupport return template; } + @Bean + public RedisCacheManager redisCacheManager(RedisTemplate redisTemplate) { + RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(redisTemplate.getConnectionFactory()); + + RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisTemplate.getValueSerializer())); + + return new RedisCacheManager(redisCacheWriter, redisCacheConfiguration); + + } + @Bean public DefaultRedisScript limitScript() { diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SegchkTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SegchkTask.java index 97177ad..2a426f4 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SegchkTask.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SegchkTask.java @@ -1,6 +1,11 @@ package com.ruoyi.quartz.task; import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.http.HttpUtils; +import com.ruoyi.common.utils.spring.SpringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; /** @@ -11,11 +16,27 @@ import org.springframework.stereotype.Component; @Component("SegchkTask") public class SegchkTask { + private static final Logger log = LoggerFactory.getLogger(SegchkTask.class); + public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i) { System.out.println(StringUtils.format("执行多参方法: 字符串类型{},布尔类型{},长整型{},浮点型{},整形{}", s, b, l, d, i)); } + public void segchkMultipleParams(String s, Integer port, String path, Integer flag, String params) + { + log.debug(StringUtils.format("执行segchk多参方法: 字符串类型{},整形{}, 字符串类型{} 标志{} 具体参数{}", s, port, path, flag, params)); + String url = "http://localhost:" + port + path; + if(s.equalsIgnoreCase("admin")){ + String s2 = params.replaceAll("\\|", ","); + String s1 = HttpUtils.sendPost(url, "reqFlag=" + flag + "¶ms=" + s2); + log.trace("HttpUtils.sendPost with {}{} get ret: {}", url, flag, s1); + } + else{ + log.warn("segchkMultipleParams invalid request!!!{}", s); + } + } + public void ryParams(String params) { System.out.println("执行有参方法:" + params); diff --git a/ruoyi-segchk-test/pom.xml b/ruoyi-segchk-test/pom.xml new file mode 100644 index 0000000..8061424 --- /dev/null +++ b/ruoyi-segchk-test/pom.xml @@ -0,0 +1,64 @@ + + + + ruoyi + com.ruoyi + 3.6.0 + + 4.0.0 + + ruoyi-segchk-test + + + 8 + 8 + + + + + org.junit.jupiter + junit-jupiter-api + + + org.junit.jupiter + junit-jupiter-engine + + + org.springframework.boot + spring-boot-starter-test + + + com.vaadin.external.google + android-json + + + + + com.ruoyi + ruoyi-framework + + + junit + junit + + + + mysql + mysql-connector-java + + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + ${mybatis-spring-boot.version} + + + + org.mybatis.spring.boot + mybatis-spring-boot-starter-test + ${mybatis-spring-boot.version} + + + \ No newline at end of file diff --git a/ruoyi-segchk-test/src/main/java/test/core/ut/BaseDbAndRedisUnitTest.java b/ruoyi-segchk-test/src/main/java/test/core/ut/BaseDbAndRedisUnitTest.java new file mode 100644 index 0000000..6fc7e61 --- /dev/null +++ b/ruoyi-segchk-test/src/main/java/test/core/ut/BaseDbAndRedisUnitTest.java @@ -0,0 +1,73 @@ +package test.core.ut; + +import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; +import com.ruoyi.framework.config.DruidConfig; +import com.ruoyi.framework.config.MyBatisConfig; +import com.ruoyi.framework.config.RedisConfig; +import com.ruoyi.framework.config.properties.DruidProperties; +import org.assertj.core.internal.bytebuddy.build.ToStringPlugin; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.runner.RunWith; +import org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration; +import org.mybatis.spring.boot.test.autoconfigure.MybatisTest; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration; +import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Import; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.jdbc.Sql; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.web.WebAppConfiguration; + +import javax.sql.DataSource; + +/** + * 依赖内存 DB + Redis 的单元测试 + * + * + * @author 芋道源码 + */ +//@RunWith(SpringRunner.class) +//@RunWith(JUnitPlatform.class) +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseDbAndRedisUnitTest.Application.class) +@ExtendWith(SpringExtension.class) +//@ActiveProfiles(profiles = {"unit-test"}) // 设置使用 application-unit-test 配置文件 +//@Sql(scripts = "/sql/clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) // 每个单元测试结束后,清理 DB +//@WebAppConfiguration +//@MybatisTest +//@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) + +public class BaseDbAndRedisUnitTest { + + @Import({ + // DB 配置类 +// DataSource.class, +// DruidProperties.class, +// DruidConfig.class, +// YudaoDataSourceAutoConfiguration.class, // 自己的 DB 配置类 +// DataSourceAutoConfiguration.class, // Spring DB 自动配置类 +// DataSourceTransactionManagerAutoConfiguration.class, // Spring 事务自动配置类 +// DruidDataSourceAutoConfigure.class, // Druid 自动配置类 +// SqlInitializationTestConfiguration.class, // SQL 初始化 + // MyBatis 配置类 +// MyBatisConfig.class, // 自己的 MyBatis 配置类 +// MybatisAutoConfiguration.class, +// MybatisPlusAutoConfiguration.class, // MyBatis 的自动配置类 + + // Redis 配置类 +// RedisConfig.class, // Redis 测试配置类,用于启动 RedisServer +// RedisAutoConfiguration.class, // Spring Redis 自动配置类 + }) + public static class Application { +// public static void main(String[] args){ +// SpringApplication.run(Application.class, args); +// } + } + +} diff --git a/ruoyi-segchk-test/src/main/resources/mybatis/mybatis-config.xml b/ruoyi-segchk-test/src/main/resources/mybatis/mybatis-config.xml new file mode 100644 index 0000000..5500599 --- /dev/null +++ b/ruoyi-segchk-test/src/main/resources/mybatis/mybatis-config.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + diff --git a/ruoyi-segchk-web/src/main/java/com/ruoyi/aspect/SegchkAppApiAspect.java b/ruoyi-segchk-web/src/main/java/com/ruoyi/aspect/SegchkAppApiAspect.java new file mode 100644 index 0000000..b702ff9 --- /dev/null +++ b/ruoyi-segchk-web/src/main/java/com/ruoyi/aspect/SegchkAppApiAspect.java @@ -0,0 +1,384 @@ +package com.ruoyi.aspect; + +import com.alibaba.fastjson.JSON; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.enums.BusinessStatus; +import com.ruoyi.common.enums.HttpMethod; +import com.ruoyi.common.utils.RedisUtil; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.ServletUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.ip.IpUtils; +import com.ruoyi.framework.manager.AsyncManager; +import com.ruoyi.framework.manager.factory.AsyncFactory; +import com.ruoyi.segchk.domain.SegchkStoreWebReq; +import com.ruoyi.segchk.domain.SegchkUserCollect; +import com.ruoyi.segchk.domain.SegchkUserLikego; +import com.ruoyi.system.domain.SysOperLog; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.*; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import org.springframework.validation.BindingResult; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.HandlerMapping; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.lang.reflect.Method; +import java.util.Collection; +import java.util.Iterator; +import java.util.Map; + +/** + * 核销平台接口切面 + * + * @author ruoyi + */ +@Aspect +@Component +public class SegchkAppApiAspect +{ + private static final Logger log = LoggerFactory.getLogger(SegchkAppApiAspect.class); + + @Resource + private RedisUtil redisUtil; + + // 配置织入点 + @Pointcut("execution(* com.ruoyi.segchk.*Controller.*(..)) ") + public void segchkAppPointCut() + { + } + + + /*@Around("segchkAppPointCut()") + public Object around(ProceedingJoinPoint pjp) throws Throwable{ + pjp. + }*/ + + /** + * 处理完请求后执行 + * + * @param joinPoint 切点 + */ + @AfterReturning(pointcut = "segchkAppPointCut()", returning = "jsonResult") + public void doAfterReturning(JoinPoint joinPoint, Object jsonResult) + { + Signature signature = joinPoint.getSignature(); + MethodSignature methodSignature = (MethodSignature) signature; + Method method = methodSignature.getMethod(); + methodSignature.getParameterNames(); + String methodName = method.getName(); + // 获取当前的用户 +// LoginUser loginUser = SecurityUtils.getLoginUser(); + Object arg0 = joinPoint.getArgs()[0]; + switch (methodName){ + case "list_by_provider": { +// 首页推荐列表 SegchkRecommenderStoreWebReq + break; + } + case "store_search": { +// 商家搜索 SegchkStoreWebReq + break; + } + case "store_details": { +// 商家详情 SegchkStoreWebReq +// SegchkStoreWebReq segchkStoreWebReq = (SegchkStoreWebReq) arg0; +// long ret = (long) redisUtil.hincr("wechatCount", "browse_cnt:" + segchkStoreWebReq.getProviderId() + ":" + segchkStoreWebReq.getStoreId(), 1L); + break; + } + case "add_user_collect": { +// 收藏商家 SegchkUserCollect +// SegchkStoreWebReq segchkStoreWebReq = (SegchkStoreWebReq) arg0; +// long ret = (long) redisUtil.hincr("wechatCount", "collect_cnt:" + segchkStoreWebReq.getProviderId() + ":" + segchkStoreWebReq.getStoreId(), 1L); + break; + } + case "add_order_user_likego": { +// 预约 SegchkUserLikego +// SegchkUserLikego segchkStoreWebReq = (SegchkUserLikego) arg0; +// long ret = (long) redisUtil.hincr("wechatCount", "collect_cnt:" + segchkStoreWebReq.getProviderId() + ":" + segchkStoreWebReq.getStoreId(), 1L); + break; + } + case "user_like_go_qr": { +// 查询预约二维码 String likegoId, String remark, Integer qrw, Integer qrh, HttpServletRequest request, HttpServletResponse response + break; + } + case "userChargeReq": { +// 充值请求 SegchkUserCharge + break; + } + case "userCashReq": { +// 提现请求 SegchkUserCashOpsReq + break; + } + case "giveFreeCard": { +// 商家赠卡 StoreSelfCard + break; + } + case "service_check_test": { +// 商家核销 Long likegoId, String storeId, String remark, HttpServletRequest request + break; + } + default: break; + } + + log.debug("doAfterReturning {} params: {}, args: {}", methodName, StringUtils.join(methodSignature.getParameterNames(), "|"), StringUtils.join(joinPoint.getArgs(), "|")); +// handleApiCount(joinPoint, null, jsonResult); + } + + @Before("segchkAppPointCut()") + public void doBefore(JoinPoint joinPoint) throws Throwable { + Signature signature = joinPoint.getSignature(); + MethodSignature methodSignature = (MethodSignature) signature; + Method method = methodSignature.getMethod(); + methodSignature.getParameterNames(); + String methodName = method.getName(); + // 获取当前的用户 +// LoginUser loginUser = SecurityUtils.getLoginUser(); + Object arg0 = joinPoint.getArgs()[0]; + switch (methodName){ + case "list_by_provider": { +// 首页推荐列表 SegchkRecommenderStoreWebReq + break; + } + case "store_search": { +// 商家搜索 SegchkStoreWebReq + break; + } + case "store_details": { +// 商家详情 SegchkStoreWebReq + SegchkStoreWebReq segchkStoreWebReq = (SegchkStoreWebReq) arg0; + long ret = (long) redisUtil.hincr("wechatCount", "browse_cnt:" + segchkStoreWebReq.getProviderId() + ":" + segchkStoreWebReq.getStoreId(), 1L); + long ret1 = redisUtil.sSet("wechatCountRecord", segchkStoreWebReq.getStoreId()); + break; + } + case "add_user_collect": { +// 收藏商家 SegchkUserCollect + SegchkUserCollect segchkUserCollect = (SegchkUserCollect) arg0; + long ret = (long) redisUtil.hincr("wechatCount", "collect_cnt:" + segchkUserCollect.getProviderId() + ":" + segchkUserCollect.getStoreId(), 1L); + long ret1 = redisUtil.sSet("wechatCountRecord", segchkUserCollect.getStoreId()); + break; + } + case "add_order_user_likego": { +// 预约 SegchkUserLikego + SegchkUserLikego segchkUserLikego = (SegchkUserLikego) arg0; + long ret = (long) redisUtil.hincr("wechatCount", "book_cnt:" + segchkUserLikego.getProviderId() + ":" + segchkUserLikego.getStoreId(), 1L); + long ret1 = redisUtil.sSet("wechatCountRecord", segchkUserLikego.getStoreId()); + break; + } + case "user_like_go_qr": { +// 查询预约二维码 String likegoId, String remark, Integer qrw, Integer qrh, HttpServletRequest request, HttpServletResponse response + break; + } + case "userChargeReq": { +// 充值请求 SegchkUserCharge + break; + } + case "userCashReq": { +// 提现请求 SegchkUserCashOpsReq + break; + } + case "giveFreeCard": { +// 商家赠卡 StoreSelfCard + break; + } + case "service_check_test": { +// 商家核销 Long likegoId, String storeId, String remark, HttpServletRequest request + break; + } + default: break; + } + } + + /** + * 拦截异常操作 + * + * @param joinPoint 切点 + * @param e 异常 + */ + @AfterThrowing(value = "segchkAppPointCut()", throwing = "e") + public void doAfterThrowing(JoinPoint joinPoint, Exception e) + { + Signature signature = joinPoint.getSignature(); + MethodSignature methodSignature = (MethodSignature) signature; + Method method = methodSignature.getMethod(); + + log.debug("doAfterThrowing {}", method.getName()); +// handleApiCount(joinPoint, e, null); + } + + protected void handleApiCount(final JoinPoint joinPoint, final Exception e, Object jsonResult) + { + try + { + // 获得注解 + Log controllerLog = getAnnotationLog(joinPoint); + if (controllerLog == null) + { + return; + } + + // 获取当前的用户 + LoginUser loginUser = SecurityUtils.getLoginUser(); + + // *========数据库日志=========*// + SysOperLog operLog = new SysOperLog(); + operLog.setStatus(BusinessStatus.SUCCESS.ordinal()); + // 请求的地址 + String ip = IpUtils.getIpAddr(ServletUtils.getRequest()); + operLog.setOperIp(ip); + // 返回参数 + operLog.setJsonResult(JSON.toJSONString(jsonResult)); + + operLog.setOperUrl(ServletUtils.getRequest().getRequestURI()); + if (loginUser != null) + { + operLog.setOperName(loginUser.getUsername()); + } + + if (e != null) + { + operLog.setStatus(BusinessStatus.FAIL.ordinal()); + operLog.setErrorMsg(StringUtils.substring(e.getMessage(), 0, 2000)); + } + // 设置方法名称 + String className = joinPoint.getTarget().getClass().getName(); + String methodName = joinPoint.getSignature().getName(); + operLog.setMethod(className + "." + methodName + "()"); + // 设置请求方式 + operLog.setRequestMethod(ServletUtils.getRequest().getMethod()); + // 处理设置注解上的参数 + getControllerMethodDescription(joinPoint, controllerLog, operLog); + // 保存数据库 + AsyncManager.me().execute(AsyncFactory.recordOper(operLog)); + } + catch (Exception exp) + { + // 记录本地异常日志 + log.error("==前置通知异常=="); + log.error("异常信息:{}", exp.getMessage()); + exp.printStackTrace(); + } + } + + /** + * 获取注解中对方法的描述信息 用于Controller层注解 + * + * @param log 日志 + * @param operLog 操作日志 + * @throws Exception + */ + public void getControllerMethodDescription(JoinPoint joinPoint, Log log, SysOperLog operLog) throws Exception + { + // 设置action动作 + operLog.setBusinessType(log.businessType().ordinal()); + // 设置标题 + operLog.setTitle(log.title()); + // 设置操作人类别 + operLog.setOperatorType(log.operatorType().ordinal()); + // 是否需要保存request,参数和值 + if (log.isSaveRequestData()) + { + // 获取参数的信息,传入到数据库中。 + setRequestValue(joinPoint, operLog); + } + } + + /** + * 获取请求的参数,放到log中 + * + * @param operLog 操作日志 + * @throws Exception 异常 + */ + private void setRequestValue(JoinPoint joinPoint, SysOperLog operLog) throws Exception + { + String requestMethod = operLog.getRequestMethod(); + if (HttpMethod.PUT.name().equals(requestMethod) || HttpMethod.POST.name().equals(requestMethod)) + { + String params = argsArrayToString(joinPoint.getArgs()); + operLog.setOperParam(StringUtils.substring(params, 0, 2000)); + } + else + { + Map paramsMap = (Map) ServletUtils.getRequest().getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE); + operLog.setOperParam(StringUtils.substring(paramsMap.toString(), 0, 2000)); + } + } + + /** + * 是否存在注解,如果存在就获取 + */ + private Log getAnnotationLog(JoinPoint joinPoint) throws Exception + { + Signature signature = joinPoint.getSignature(); + MethodSignature methodSignature = (MethodSignature) signature; + Method method = methodSignature.getMethod(); + + if (method != null) + { + return method.getAnnotation(Log.class); + } + return null; + } + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) + { + String params = ""; + if (paramsArray != null && paramsArray.length > 0) + { + for (int i = 0; i < paramsArray.length; i++) + { + if (StringUtils.isNotNull(paramsArray[i]) && !isFilterObject(paramsArray[i])) + { + Object jsonObj = JSON.toJSON(paramsArray[i]); + params += jsonObj.toString() + " "; + } + } + } + return params.trim(); + } + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + @SuppressWarnings("rawtypes") + public boolean isFilterObject(final Object o) + { + Class clazz = o.getClass(); + if (clazz.isArray()) + { + return clazz.getComponentType().isAssignableFrom(MultipartFile.class); + } + else if (Collection.class.isAssignableFrom(clazz)) + { + Collection collection = (Collection) o; + for (Iterator iter = collection.iterator(); iter.hasNext();) + { + return iter.next() instanceof MultipartFile; + } + } + else if (Map.class.isAssignableFrom(clazz)) + { + Map map = (Map) o; + for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) + { + Map.Entry entry = (Map.Entry) iter.next(); + return entry.getValue() instanceof MultipartFile; + } + } + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse + || o instanceof BindingResult; + } +} diff --git a/ruoyi-segchk-web/src/main/java/com/ruoyi/segchk/SegchkDefaultStoreController.java b/ruoyi-segchk-web/src/main/java/com/ruoyi/segchk/SegchkDefaultStoreController.java index 76240bd..bbd9047 100644 --- a/ruoyi-segchk-web/src/main/java/com/ruoyi/segchk/SegchkDefaultStoreController.java +++ b/ruoyi-segchk-web/src/main/java/com/ruoyi/segchk/SegchkDefaultStoreController.java @@ -11,6 +11,7 @@ import com.ruoyi.common.core.domain.BaseEntity; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.RedisCahceKey; import com.ruoyi.common.utils.file.FileUtils; import com.ruoyi.segchk.domain.*; import com.ruoyi.segchk.service.*; @@ -34,7 +35,9 @@ import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.io.OutputStream; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.concurrent.TimeUnit; @@ -274,12 +277,22 @@ public class SegchkDefaultStoreController extends BaseController } if(!storeId.equals(String.valueOf(claims.getUserId()))){ logger.warn("ServiceCheckTest---storeid: {} is not then token: {}", storeId, claims); - return AjaxResult.error(300, "请先登录注册"); + return AjaxResult.error(300, "该预约单非当前商家用户"); } } AjaxResult ajax = new AjaxResult(); logger.debug("ServiceCheckTest with: {}---{}---{}", likegoId.toString(), storeId, remark); - SegchkServiceOrderChkTestResp segchkServiceOrderChkTestResp = segchkUserIndexService.selectUserOrderPredInfo(likegoId); + Map parmMap = new HashMap<>(); + parmMap.put("likegoId", likegoId); + parmMap.put("storeId", storeId); + parmMap.put("remark", remark); + + Object cacheObject = redisService.getCacheObject(RedisCahceKey.BASE_INFO_SET + "::check_version"); + if(!ObjectUtils.isEmpty(cacheObject) && new Boolean(String.valueOf(cacheObject))) { + ajax = segchkStoreIndexService.OrderCheckTransaction(parmMap); + return ajax; + } + SegchkServiceOrderChkTestResp segchkServiceOrderChkTestResp = segchkUserIndexService.selectUserOrderPredInfo(parmMap); segchkServiceOrderChkTestResp.setLikegoId(likegoId); logger.debug("ServiceCheckTest check with: {}", segchkServiceOrderChkTestResp.toString()); if(segchkServiceOrderChkTestResp.getStoreId()!= Long.parseLong(storeId)){ @@ -313,8 +326,9 @@ public class SegchkDefaultStoreController extends BaseController segchkServiceOrderChkTestResp.setSegchkRecommenderStoreLableWebList(null); ajax.put(DATA_TAG, segchkServiceOrderChkTestResp); - StringBuilder sb = new StringBuilder(CommonConstant.APPLET_SERVICE_CHK).append(":").append(storeId).append("-").append(segchkServiceOrderChkTestResp.getUserId()); + StringBuilder sb = new StringBuilder(CommonConstant.APPLET_SERVICE_CHK).append(":").append(storeId).append(":").append(segchkServiceOrderChkTestResp.getUserId()); logger.debug("ServiceCheckTest will store likego : {}:{}", sb.toString(), likegoId); + redisService.setCacheObject(sb.toString(), likegoId, 5, TimeUnit.MINUTES); } else { @@ -335,7 +349,7 @@ public class SegchkDefaultStoreController extends BaseController lables.add(lable); segchkServiceOrderChkTestResp.setSegchkRecommenderStoreLableWebList(lables); ajax.put(DATA_TAG, segchkServiceOrderChkTestResp); - StringBuilder sb = new StringBuilder(CommonConstant.APPLET_SERVICE_CHK).append(":").append(storeId).append("-").append(segchkServiceOrderChkTestResp.getUserId()); + StringBuilder sb = new StringBuilder(CommonConstant.APPLET_SERVICE_CHK).append(":").append(storeId).append(":").append(segchkServiceOrderChkTestResp.getUserId()); logger.debug("ServiceCheckTest will store likego : {}:{}", sb.toString(), likegoId); redisService.setCacheObject(sb.toString(), likegoId, 5, TimeUnit.MINUTES); } @@ -360,28 +374,23 @@ public class SegchkDefaultStoreController extends BaseController segchkStoreSelfMgt.setProviderId(claims.getProviderId()); segchkStoreSelfMgt.setStoreId(claims.getUserId()); } - StringBuilder sb = new StringBuilder(CommonConstant.APPLET_SERVICE_CHK).append(":").append(segchkStoreSelfMgt.getStoreId()).append("-").append(storeSelfCard.getUserId()); - Long likegoId = redisService.getCacheObject(sb.toString()); - if(likegoId == null){ - logger.warn("giveFreeCard cannot get likegoId from redis for ({}:{})", segchkStoreSelfMgt.getStoreId(), storeSelfCard.getUserId()); - return AjaxResult.error(500, "赠卡失败"); + + int ret = segchkStoreIndexService.giveStoreCard(storeSelfCard); + switch (ret){ + case -1: + return new AjaxResult(500, "请求异常"); + case -2 : + return AjaxResult.error(500, "无效订单"); + case -3: + return AjaxResult.error(500, "无效订单"); + case -4: + return AjaxResult.error(500, "非订单商家"); + case 0: + return AjaxResult.error(500, "赠卡失败"); + default: + return AjaxResult.error(200, "赠卡成功"); + } - Long cardId = segchkStoreIndexService.getVipCardFromLikego(likegoId); - segchkStoreSelfMgt.setCardId(cardId); - segchkStoreSelfMgt.setUserId(storeSelfCard.getUserId()); - segchkStoreSelfMgt.setTypeId(storeSelfCard.getTypeId()); - segchkStoreSelfMgt.setFreeCount(storeSelfCard.getTotalCount()); - segchkStoreSelfMgt.setLableId(storeSelfCard.getTypeId() == 2 ? storeSelfCard.getLableId() : 0L); - segchkStoreSelfMgt.setFreeName(storeSelfCard.getTypeId() == 2 ? null : "赠卡"); - segchkStoreSelfMgt.setFreeContent(storeSelfCard.getFreeContent()); - segchkStoreSelfMgt.setLeftCount(storeSelfCard.getTotalCount()); - logger.debug("giveFreeCard with --- {}", segchkStoreSelfMgt.toString()); - Integer ret = segchkStoreIndexService.addStoreSelfCard(segchkStoreSelfMgt); - if(ret == 0){ - logger.error("giveFreeCard failed with --- {}", segchkStoreSelfMgt.toString()); - } - redisService.deleteObject(sb.toString()); - return ret > 0 ? AjaxResult.success("赠卡成功") : AjaxResult.error(500, "赠卡失败"); } /** * 提现结果回调接口,接口微信的支付结果,更新充值结果, ret 0成功,其他失败 未测试 diff --git a/ruoyi-segchk-web/src/main/java/com/ruoyi/segchk/SegchkDefaultUserController.java b/ruoyi-segchk-web/src/main/java/com/ruoyi/segchk/SegchkDefaultUserController.java index c65e830..a4d7923 100644 --- a/ruoyi-segchk-web/src/main/java/com/ruoyi/segchk/SegchkDefaultUserController.java +++ b/ruoyi-segchk-web/src/main/java/com/ruoyi/segchk/SegchkDefaultUserController.java @@ -55,9 +55,6 @@ public class SegchkDefaultUserController extends BaseController @Autowired private ISegchkUserCollectService segchkUserCollectService; - @Autowired - private ISegchkUserLikegoService segchkUserLikegoService; - @Autowired private ISegchkUserIndexService segchkUserIndexService; @@ -227,13 +224,13 @@ public class SegchkDefaultUserController extends BaseController return LoginRequireAjax(); } if(claims.getUserLevel() != 2){ - return AjaxResult.error(400, "未会员用户不允许预约!"); + return AjaxResult.error(400, "非会员用户不允许预约!"); } segchkUserLikego.setUserId(claims.getUserId()); segchkUserLikego.setProviderId(claims.getProviderId()); } logger.debug("add_order_user_likego with: {}", segchkUserLikego.toString()); - return toAjax(segchkUserLikegoService.insertSegchkUserLikego(segchkUserLikego)); + return toAjax(segchkUserIndexService.insertSegchkUserLikego(segchkUserLikego)); } @@ -249,7 +246,7 @@ public class SegchkDefaultUserController extends BaseController @UnAuth @PostMapping("/userLikeGoQr") @ResponseBody - @ApiOperation(value = "查询seg用户预约单列表", notes = "需要鉴权") + @ApiOperation(value = "查询seg用户预约单二维码", notes = "需要鉴权") public AjaxResult user_like_go_qr(String likegoId, String remark, Integer qrw, Integer qrh, HttpServletRequest request, HttpServletResponse response) { SegchkUserLikego segchkUserLikego = new SegchkUserLikego(); @@ -440,7 +437,7 @@ public class SegchkDefaultUserController extends BaseController removeIds.setUserId(claims.getUserId()); } logger.debug("removeOrderUserLikego with: {}", removeIds.toString()); - return toAjax(segchkUserLikegoService.deleteSegchkUserLikegoByLikegoIds(Convert.toLongArray(removeIds.getIds()))); + return toAjax(segchkUserIndexService.deleteSegchkUserLikegoByLikegoIds(Convert.toLongArray(removeIds.getIds()))); } /** diff --git a/ruoyi-segchk-web/src/main/resources/application-dev.yml b/ruoyi-segchk-web/src/main/resources/application-dev.yml index 7288d34..e2b449e 100644 --- a/ruoyi-segchk-web/src/main/resources/application-dev.yml +++ b/ruoyi-segchk-web/src/main/resources/application-dev.yml @@ -48,7 +48,7 @@ spring: druid: # 主库数据源 master: - url: jdbc:mysql://192.168.2.30:8306/segchksaas?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + url: jdbc:mysql://192.168.2.30:8306/kaletest?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: kaletest_yinzy password: XMG2-Rel.2 # 从库数据源 @@ -141,8 +141,8 @@ segchk: distince: 50 qr_path: C:\Users\Public\Desktop\dome.jpg poster_path: F:\ideaproj\RuoYi-Vue\ruoyi-segchk\src\main\resources\templates\posters\bg.jpg -# 核消二维码保存路径,测试使用。正常不打开 - check_qr_path: C:\Users\Public\Desktop\checkqr.jpg +# 核消二维码保存路径,测试使用。正常不打开,开发时不打开 +# check_qr_path: C:\Users\Public\Desktop\checkqr.jpg # 核消二维码背景路径,可有,可无 # check_poster_path: F:\ideaproj\RuoYi-Vue\ruoyi-segchk\src\main\resources\templates\posters\bg.jpg diff --git a/ruoyi-segchk-web/src/main/resources/application-prod.yml b/ruoyi-segchk-web/src/main/resources/application-prod.yml index 84ca494..6bcb506 100644 --- a/ruoyi-segchk-web/src/main/resources/application-prod.yml +++ b/ruoyi-segchk-web/src/main/resources/application-prod.yml @@ -93,7 +93,7 @@ spring: # 端口,默认为6379 port: 63795 # 数据库索引 - database: 2 + database: 3 # 密码 password: seg_123456 # 连接超时时间 diff --git a/ruoyi-segchk-web/src/main/resources/application.yml b/ruoyi-segchk-web/src/main/resources/application.yml index 50dc9d1..e42c34e 100644 --- a/ruoyi-segchk-web/src/main/resources/application.yml +++ b/ruoyi-segchk-web/src/main/resources/application.yml @@ -42,7 +42,7 @@ spring: # 国际化资源文件路径 basename: i18n/messages profiles: - active: kaleprod + active: dev # # 文件上传 # servlet: # multipart: diff --git a/ruoyi-segchk-web/src/main/resources/http-client.private.env.json b/ruoyi-segchk-web/src/main/resources/http-client.private.env.json index 542be06..913aa25 100644 --- a/ruoyi-segchk-web/src/main/resources/http-client.private.env.json +++ b/ruoyi-segchk-web/src/main/resources/http-client.private.env.json @@ -2,6 +2,8 @@ "dev": { "name": "value", "host": "http://localhost:8091", + "hostadmin": "http://localhost:7070", + "tokenadmin": "login_tokens:6c229cfe-7891-4397-b663-c10213b7d097", "bindtoken": "eyJhbGciOiJIUzI1NiIsInppcCI6IkRFRiJ9.eNqqViouTVKyUnIMCPBxDYn38Xf39Iv3do1U0lHKTCxRsjI0MzY0tDCwtLDQUSotTi3yTFGyMjUw1lEqKMovy0yBCBhB5HxSy1JzwLzUigKYVhNTC4taAAAAAP__.diChD7JjY3y8SBNTBE8ACoNWWIuz-r-mHESPfL73eZI", "bindtoken1": "eyJhbGciOiJIUzI1NiIsInppcCI6IkRFRiJ9.eNqqViouTVKyUnIMCPBxDYn38Xf39Iv3do1U0lHKTCxRsjI0MzYyNDQwNDLVUSotTi3yTFGyMjUw1lEqKMovy0yBCBhB5HxSy1JzwLzUigKYVmNzI9NaAAAAAP__.Y5uJzL55q9baNor4ScWmVg9UZyfHkTxZ0Oz79guiXXg", // "token2": "APPLET_LOGIN_KEY_885553054366171136abcdefghijklmnopqrstuvwxyz", @@ -56,5 +58,5 @@ "userLon": 114.123456, "userLat": 43.123456 } - } + }, } \ No newline at end of file diff --git a/ruoyi-segchk-web/src/main/resources/test.http b/ruoyi-segchk-web/src/main/resources/test.http index d506744..47bbd6e 100644 --- a/ruoyi-segchk-web/src/main/resources/test.http +++ b/ruoyi-segchk-web/src/main/resources/test.http @@ -1,3 +1,47 @@ +PUT http://{{hostadmin}}/segchk/segchk_store_basic_info/delete_vr +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{tokenadmin}} + +{ + "storeId": 3, + "vrUrl": "1sdasdasd", + "providerId": 2, + "serviceState": 1, + "remark": "999999" +} + +### +PUT http://{{hostadmin}}/segchk/segchk_store_basic_info/update_vr +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{tokenadmin}} + +{ + "storeId": 3, + "vrUrl": "1sdasdasd", + "providerId": 2, + "serviceState": 1, + "remark": "999999" +} + +### +PUT http://{{hostadmin}}/segchk/segchk_store_basic_info/add_vr +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{tokenadmin}} + +{ + "storeId": 3, + "vrUrl": "demoData", + "providerId": 2, + "remark": "999999" +} + +###重置admin密码 PUT http://{{hostbak}}/system/user/resetadminself Accept: */* Cache-Control: no-ca @@ -62,7 +106,7 @@ Accept: */* Cache-Control: no-cache Content-Type: application/x-www-form-urlencoded -likegoId=4&remark=999999&qrw=300&qrh=500 +likegoId=16996&remark=999999&qrw=300&qrh=500 ### POST http://api.ksd106.com:8088/SMSSend.aspx @@ -92,7 +136,7 @@ Content-Type: application/json ### ############### 商家接口测试 #################### -### 商家核消操作 +###商家赠卡操作 POST {{host}}//default/store/giveFreeCard Accept: */* Cache-Control: no-cache @@ -100,18 +144,38 @@ Content-Type: application/json Authorization: Bearer {{bindtoken}} { - "userId": 243, - "cardId": 242, - "lableId": 10, - "storeId": 144, - "typeId": 2, + "likegoId": 16997, + "storeId": 52, + "typeId": 1, "totalCount": 10, - "freeContent": "demoData", + "freeContent": "第二张卡", "remark": "demoData" } +### 测试查询用户信息 +GET {{hostadmin}}/test/user/list +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{bindtoken}} + +### 修改redis中的key/value +PUT {{hostadmin}}/test/user/updateredis?key=check_version&db=BASE_INFO_SET:&value=true&remark=999999 +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{bindtoken}} + +### 查询redis中的key/value +GET {{hostadmin}}/test/user/getredis?key=check_version&db=BASE_INFO_SET:&remark=999999 +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{bindtoken}} + + ### 商家核消操作 -POST {{host}}//default/store/ServiceCheckTest?likegoId=16877&storeId=128&remark=999999 +POST {{host}}//default/store/ServiceCheckTest?likegoId=17000&storeId=52&remark=999999 Accept: */* Cache-Control: no-cache Content-Type: application/json @@ -481,7 +545,6 @@ Authorization: Bearer {{bindtoken}} "remark": "999999" } -### ### 添加seg用户想去记录 POST {{host}}//default/user/addOrderUserLikego Accept: */* @@ -490,15 +553,14 @@ Content-Type: application/json Authorization: Bearer {{bindtoken}} { - "providerId": 4, - "userId": 245, - "storeId": 128, - "cardId": 244, + "providerId": 2, + "userId": 77, + "storeId": 52, + "cardId": 76, "cardType": 0, "remark": "999999" } -### ### 查询该用户在该商户可使用的会员卡或优惠券,remark为测试标识 #返回结果 #{ @@ -518,7 +580,7 @@ Authorization: Bearer {{bindtoken}} # "code": 200, # "msg": "查询成功" #} -### 查询该用户在该商户可使用的会员卡或优惠券,remark为测试标识 +### 999 查询该用户在该商户可使用的会员卡或优惠券,remark为测试标识 POST {{host}}//default/user/userOrderPredList Accept: */* Cache-Control: no-cache @@ -526,9 +588,9 @@ Content-Type: application/json Authorization: Bearer {{bindtoken}} { - "providerId": 11, - "storeId": 196, - "userId": 768, + "providerId": 2, + "storeId": 52, + "userId": 77, "remark": "999999" } @@ -756,8 +818,8 @@ Cache-Control: no-cache Content-Type: application/json { - "providerId": 4, - "storeId": 124 + "providerId": 2, + "storeId": 5 } ### @@ -786,11 +848,7 @@ Content-Type: application/json "providerId": 3 } -### ### 根据标签id,会员卡类型id,搜索商户列表 -# -# - #{ # "providerId": 2, # "sortType": 1, @@ -800,6 +858,7 @@ Content-Type: application/json # "userLon": 116.25849, # "userLat": 39.684333 #} + POST {{host}}//default/index/listByProviderwithLable Accept: */* Cache-Control: no-cache @@ -812,7 +871,6 @@ Content-Type: application/json "userLat": 39.684333 } -### ### 根据运营商id查询seg首页推荐商户列表 POST {{host}}//default/index/listByProvider Accept: */* @@ -877,12 +935,10 @@ Content-Type: application/json { "providerId": 2, "sortType": 0, - "lableId": 4, - "typeId": 1, - "storeName": "百元尊享", - "lableName": "百元尊享", - "userLon": 114.123456, - "userLat": 43.123456 + "storeName": "2商家名称001", + "lableName": "2商家名称001", + "userLon": 116.266754, + "userLat": 39.678974 } ###查询seg标签列表 diff --git a/ruoyi-segchk/pom.xml b/ruoyi-segchk/pom.xml index eebdb48..f4857fb 100644 --- a/ruoyi-segchk/pom.xml +++ b/ruoyi-segchk/pom.xml @@ -16,7 +16,7 @@ 4.8.10.ALL - system系统模块 + seg核销业务模块 @@ -117,6 +117,12 @@ ruoyi-system + + com.ruoyi + ruoyi-segchk-test + 3.6.0 + test + io.swagger swagger-models diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkChargeRet.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkChargeRet.java deleted file mode 100644 index 0b221a0..0000000 --- a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkChargeRet.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.ruoyi.segchk.domain; - -import com.ruoyi.common.annotation.Excel; -import com.ruoyi.common.core.domain.BaseEntity; - -/** - * seg充值卡管理对象 segchk_charge_card - * - * @author yinzhiying - * @date 2021-07-01 - */ -public class SegchkChargeRet extends BaseEntity -{ - private static final long serialVersionUID = 1L; - - /** 充值id */ - @Excel(name = "充值id") - private Long chargeId; - - /** 卡id */ - @Excel(name = "卡id") - private Long cardId; - - public Long getChargeId() { - return chargeId; - } - - public void setChargeId(Long chargeId) { - this.chargeId = chargeId; - } - - public Long getCardId() { - return cardId; - } - - public void setCardId(Long cardId) { - this.cardId = cardId; - } - - @Override - public String toString() { - return "SegchkChargeRet{" + - "chargeId=" + chargeId + - ", cardId=" + cardId + - '}'; - } -} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkChargeReward.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkChargeReward.java index fbc5a50..873e5d3 100644 --- a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkChargeReward.java +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkChargeReward.java @@ -190,7 +190,7 @@ public class SegchkChargeReward extends BaseEntity { public void mkReward() { switch (this.getTotalChargeCount()){ - case 0: break; + case 0: this.setReward(null);break; case 1: { this.setReward(this.getReward().divide(new BigDecimal("2"), 2, BigDecimal.ROUND_HALF_UP));break; } diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkRecommenderStoreWebResp.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkRecommenderStoreWebResp.java index 85d54ab..d9d48fe 100644 --- a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkRecommenderStoreWebResp.java +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkRecommenderStoreWebResp.java @@ -1,11 +1,13 @@ package com.ruoyi.segchk.domain; import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.BaseEntity; import javax.validation.Valid; import java.math.BigDecimal; import java.util.List; +import java.util.Map; /** * seg返回首页推荐商户对象 segchk_recommender_storeweb @@ -61,7 +63,7 @@ public class SegchkRecommenderStoreWebResp extends BaseEntity @Excel(name = "用户距离") private BigDecimal userDist; - + private SegchkStoreCntResp segchkStoreCntResp = null; /** 商户标签列表 */ @Valid private List lables; @@ -154,24 +156,6 @@ public class SegchkRecommenderStoreWebResp extends BaseEntity this.storeName = storeName; } - @Override - public String toString() { - return "SegchkRecommenderStoreWebResp{" + - "providerId=" + providerId + - ", storeId=" + storeId + - ", storeName=" + storeName + - ", storeSort=" + storeSort + - ", storeIcon='" + storeIcon + '\'' + - ", storeGificon='" + storeGificon + '\'' + - ", storeLon=" + storeLon + - ", storeLat=" + storeLat + - ", chkCount=" + chkCount + - ", starAvg=" + starAvg + - ", lables=" + lables + - ", userDist=" + userDist + - '}'; - } - public BigDecimal getUserDist() { return userDist; } @@ -179,4 +163,37 @@ public class SegchkRecommenderStoreWebResp extends BaseEntity public void setUserDist(BigDecimal userDist) { this.userDist = userDist; } + + @Override + public String toString() { + return "SegchkRecommenderStoreWebResp{" + + "providerId=" + providerId + + ", storeId=" + storeId + + ", storeName='" + storeName + '\'' + + ", storeSort=" + storeSort + + ", storeIcon='" + storeIcon + '\'' + + ", storeGificon='" + storeGificon + '\'' + + ", storeLon=" + storeLon + + ", storeLat=" + storeLat + + ", chkCount=" + chkCount + + ", starAvg=" + starAvg + + ", userDist=" + userDist + + ", lables=" + lables + + '}'; + } + + public void setStoreCount(Long providerId, SegchkProviderCntCtrl segchkProviderCntCtrl, Map wechatCount, Map wechatCount1) { + this.segchkStoreCntResp = new SegchkStoreCntResp(); + this.segchkStoreCntResp.setProviderId(providerId); + this.segchkStoreCntResp.setStoreId(this.storeId); + this.segchkStoreCntResp.setAllCnt(segchkProviderCntCtrl, wechatCount, wechatCount1); + } + + public SegchkStoreCntResp getSegchkStoreCntResp() { + return segchkStoreCntResp; + } + + public void setSegchkStoreCntResp(SegchkStoreCntResp segchkStoreCntResp) { + this.segchkStoreCntResp = segchkStoreCntResp; + } } diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkServiceCommentUserReq.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkServiceCommentUserReq.java deleted file mode 100644 index e3b70a2..0000000 --- a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkServiceCommentUserReq.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.ruoyi.segchk.domain; - -import com.fasterxml.jackson.annotation.JsonFormat; -import com.ruoyi.common.annotation.Excel; -import com.ruoyi.common.core.domain.BaseEntity; - -import java.util.Date; - -/** - * seg评价记录对象 SegchkServiceCommentUserReq - * - * @author yinzhiying - * @date 2021-07-30 - */ -public class SegchkServiceCommentUserReq extends BaseEntity -{ - private static final long serialVersionUID = 1L; - - /** 评价id */ - private Long commentId; - - /** 星级评价 */ - @Excel(name = "星级评价") - private Integer starLevel; - - /** 评价内容 */ - @Excel(name = "评价内容") - private String contentText; - - /** 创建或修改时间 */ - @JsonFormat(pattern = "yyyy-MM-dd") - @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") - private Date modTime; - - /** 核消id,全表唯一 */ - @Excel(name = "核消id,全表唯一") - private Long chkServiceId; - - public Long getCommentId() { - return commentId; - } - - public void setCommentId(Long commentId) { - this.commentId = commentId; - } - - public Integer getStarLevel() { - return starLevel; - } - - public void setStarLevel(Integer starLevel) { - this.starLevel = starLevel; - } - - public String getContentText() { - return contentText; - } - - public void setContentText(String contentText) { - this.contentText = contentText; - } - - public Date getModTime() { - return modTime; - } - - public void setModTime(Date modTime) { - this.modTime = modTime; - } - - public Long getChkServiceId() { - return chkServiceId; - } - - public void setChkServiceId(Long chkServiceId) { - this.chkServiceId = chkServiceId; - } - - @Override - public String toString() { - return "SegchkServiceCommentUserReq{" + - "commentId=" + commentId + - ", starLevel=" + starLevel + - ", contentText='" + contentText + '\'' + - ", modTime=" + modTime + - ", chkServiceId=" + chkServiceId + - '}'; - } -} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkServiceOrderWebReq.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkServiceOrderWebReq.java index 2f4b25f..4a520ba 100644 --- a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkServiceOrderWebReq.java +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkServiceOrderWebReq.java @@ -47,7 +47,11 @@ public class SegchkServiceOrderWebReq extends BaseEntity /** 该商家支持的核销次数 */ @Excel(name = "商家支持次数") - private Integer stoerChkCount; + private Integer storeChkCount; + + /** 该卡在该商家已使用的核销次数 */ + @Excel(name = "已核销次数") + private Integer hadChkCount; public Long getProviderId() { return providerId; @@ -105,6 +109,30 @@ public class SegchkServiceOrderWebReq extends BaseEntity this.cardName = cardName; } + public Integer getLeftCount() { + return leftCount; + } + + public void setLeftCount(Integer leftCount) { + this.leftCount = leftCount; + } + + public Integer getStoreChkCount() { + return storeChkCount; + } + + public void setStoreChkCount(Integer storeChkCount) { + this.storeChkCount = storeChkCount; + } + + public Integer getHadChkCount() { + return hadChkCount; + } + + public void setHadChkCount(Integer hadChkCount) { + this.hadChkCount = hadChkCount; + } + @Override public String toString() { return "SegchkServiceOrderWebReq{" + @@ -115,22 +143,9 @@ public class SegchkServiceOrderWebReq extends BaseEntity ", lableId=" + lableId + ", typeId=" + typeId + ", cardName='" + cardName + '\'' + + ", leftCount=" + leftCount + + ", storeChkCount=" + storeChkCount + + ", hadChkCount=" + hadChkCount + '}'; } - - public Integer getLeftCount() { - return leftCount; - } - - public void setLeftCount(Integer leftCount) { - this.leftCount = leftCount; - } - - public Integer getStoerChkCount() { - return stoerChkCount; - } - - public void setStoerChkCount(Integer stoerChkCount) { - this.stoerChkCount = stoerChkCount; - } } diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkStoreIndexWebResp.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkStoreIndexWebResp.java index 8dd6873..a3ecc74 100644 --- a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkStoreIndexWebResp.java +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkStoreIndexWebResp.java @@ -2,10 +2,12 @@ package com.ruoyi.segchk.domain; import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.core.domain.BaseEntity; +import org.springframework.util.ObjectUtils; import javax.validation.Valid; import java.math.BigDecimal; import java.util.List; +import java.util.Map; /** * seg返回首页推荐商户对象 segchk_recommender_storeweb @@ -68,11 +70,10 @@ public class SegchkStoreIndexWebResp extends BaseEntity /** 在线状态 */ @Excel(name = "对应的销售id") private Integer salerId; - - /** 商户标签列表 */ @Valid private List lables; + private SegchkStoreCntResp segchkStoreCntResp = null; public Long getProviderId() { return providerId; @@ -179,6 +180,14 @@ public class SegchkStoreIndexWebResp extends BaseEntity this.salerId = salerId; } + public BigDecimal getUserDist() { + return userDist; + } + + public void setUserDist(BigDecimal userDist) { + this.userDist = userDist; + } + @Override public String toString() { return "SegchkStoreIndexWebResp{" + @@ -191,19 +200,26 @@ public class SegchkStoreIndexWebResp extends BaseEntity ", storeGificon='" + storeGificon + '\'' + ", storeLon=" + storeLon + ", storeLat=" + storeLat + + ", userDist=" + userDist + ", chkCount=" + chkCount + ", starAvg=" + starAvg + ", salerId=" + salerId + ", lables=" + lables + - ", userDist=" + userDist + '}'; } - public BigDecimal getUserDist() { - return userDist; + public void setStoreCount(Long providerId, SegchkProviderCntCtrl segchkProviderCntCtrl, Map wechatCount, Map wechatCount1) { + this.segchkStoreCntResp = new SegchkStoreCntResp(); + this.segchkStoreCntResp.setProviderId(providerId); + this.segchkStoreCntResp.setStoreId(this.storeId); + this.segchkStoreCntResp.setAllCnt(segchkProviderCntCtrl, wechatCount, wechatCount1); } - public void setUserDist(BigDecimal userDist) { - this.userDist = userDist; + public SegchkStoreCntResp getSegchkStoreCntResp() { + return segchkStoreCntResp; + } + + public void setSegchkStoreCntResp(SegchkStoreCntResp segchkStoreCntResp) { + this.segchkStoreCntResp = segchkStoreCntResp; } } diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserAccountCheck.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserAccountCheck.java deleted file mode 100644 index b2c4024..0000000 --- a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserAccountCheck.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.ruoyi.segchk.domain; - -import com.ruoyi.common.annotation.Excel; -import com.ruoyi.common.core.domain.BaseEntity; - -import java.math.BigDecimal; - -/** - * seg用户余额信息对象 segchk_user_account - * - * @author yinzhiying - * @date 2021-07-01 - */ -public class SegchkUserAccountCheck extends BaseEntity -{ - private static final long serialVersionUID = 1L; - - /** 用户id,全局唯一 */ - @Excel(name = "用户id,全局唯一") - private Long userId; - - /** 余额 */ - @Excel(name = "余额") - private BigDecimal account; - - /** 运营商id,全局唯一 */ - @Excel(name = "运营商id,全局唯一") - private Long providerId; - - /** 余额id */ - @Excel(name = "余额id") - private Long accountId; - - - public Long getUserId() { - return userId; - } - - public void setUserId(Long userId) { - this.userId = userId; - } - - public BigDecimal getAccount() { - return account; - } - - public void setAccount(BigDecimal account) { - this.account = account; - } - - public Long getProviderId() { - return providerId; - } - - public void setProviderId(Long providerId) { - this.providerId = providerId; - } - - public Long getAccountId() { - return accountId; - } - - public void setAccountId(Long accountId) { - this.accountId = accountId; - } - - @Override - public String toString() { - return "SegchkUserAccountCheck{" + - "userId=" + userId + - ", account=" + account + - ", providerId=" + providerId + - ", accountId=" + accountId + - '}'; - } -} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserCashOpsResp.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserCashOpsResp.java deleted file mode 100644 index 76f541d..0000000 --- a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserCashOpsResp.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.ruoyi.segchk.domain; - -import com.ruoyi.common.annotation.Excel; -import com.ruoyi.common.core.domain.BaseEntity; - -import java.math.BigDecimal; - -/** - * seg用户提现记录对象 segchk_user_cash - * - * @author yinzhiying - * @date 2021-07-01 - */ -public class SegchkUserCashOpsResp extends BaseEntity -{ - private static final long serialVersionUID = 1L; - - /** 提现额 */ - @Excel(name = "提现额") - private BigDecimal account; - - /** 提现id,全表唯一 */ - @Excel(name = "提现id,全表唯一") - private Long cashId; - - public BigDecimal getAccount() { - return account; - } - - public void setAccount(BigDecimal account) { - this.account = account; - } - - public Long getCashId() { - return cashId; - } - - public void setCashId(Long cashId) { - this.cashId = cashId; - } - - @Override - public String toString() { - return "SegchkUserCashOpsResp{" + - "account=" + account + - ", cashId=" + cashId + - '}'; - } -} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/StoreSelfCard.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/StoreSelfCard.java index 2c7c288..d8de302 100644 --- a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/StoreSelfCard.java +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/StoreSelfCard.java @@ -1,6 +1,9 @@ package com.ruoyi.segchk.domain; import com.ruoyi.common.core.domain.BaseEntity; +import org.springframework.util.ObjectUtils; + +import java.util.Objects; public class StoreSelfCard extends BaseEntity { @@ -91,4 +94,12 @@ public class StoreSelfCard extends BaseEntity { ", freeContent='" + freeContent + '\'' + '}'; } + + public boolean isValidate() { + return this.likegoId != null + && this.typeId != null + && ((this.typeId == 2 && this.lableId != null) || (this.typeId != 2 && true)) + && this.totalCount != null + && !ObjectUtils.isEmpty(this.freeContent); + } } diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/mapper/SegchkProviderIndexMapper.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/mapper/SegchkProviderIndexMapper.java index 72183f5..5c860c7 100644 --- a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/mapper/SegchkProviderIndexMapper.java +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/mapper/SegchkProviderIndexMapper.java @@ -1,6 +1,7 @@ package com.ruoyi.segchk.mapper; import com.ruoyi.segchk.domain.*; +import org.apache.ibatis.annotations.Mapper; import java.util.List; @@ -10,6 +11,7 @@ import java.util.List; * @author yinzhiying * @date 2021-08-23 */ +@Mapper public interface SegchkProviderIndexMapper { diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreIndexMapper.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreIndexMapper.java index 44dcfdc..3d3c13c 100644 --- a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreIndexMapper.java +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreIndexMapper.java @@ -2,11 +2,15 @@ package com.ruoyi.segchk.mapper; import com.ruoyi.segchk.domain.*; import com.ruoyi.segchk.domain.WeChatCustomerLink; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; import java.util.HashMap; import java.util.List; import java.util.Map; +@Mapper +@Repository public interface SegchkStoreIndexMapper { /** * 以会员卡为主标签,结合其他如关键字标签,优惠券标签显示商家列表 @@ -151,4 +155,8 @@ public interface SegchkStoreIndexMapper { Long getVipCardFromLikego(Long likegoId); public int addCommentAccByComment(Long commentId); + + SegchkStoreStatus getStatus(Map params); + + List getAllStatus(); } diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/mapper/SegchkUserIndexMapper.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/mapper/SegchkUserIndexMapper.java index 90f09fd..477a002 100644 --- a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/mapper/SegchkUserIndexMapper.java +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/mapper/SegchkUserIndexMapper.java @@ -76,13 +76,29 @@ public interface SegchkUserIndexMapper { public List selectUserMsgList(SegchkUserWebReq segchkUserWebReq); /** - * 查询seg用户预约时可用卡列表 + * 查询seg用户预约时可用卡列表,已废弃 * * @param segchkServiceOrderWebReq * @return seg用户扩展信息 */ + @Deprecated public List selectUserOrderPredCardListWebInfo(SegchkServiceOrderWebReq segchkServiceOrderWebReq); + /** + * 查询seg用户预约时可用会员卡列表 + * + * @param parmMap 运营商,商家,用户 + * @return List seg用户扩展信息 + */ + List getUserCanUseVIPforStore(Map parmMap); + + /** + * 查询seg用户预约时可用赠卡列表 + * + * @param parmMap 运营商,商家,用户 + * @return List seg用户扩展信息 + */ + List getUserCanUseSelfCardforStore(Map parmMap); /** * 查询seg用户预约时可用卡列表 * @@ -92,11 +108,12 @@ public interface SegchkUserIndexMapper { public List selecttest(SegchkServiceOrderWebReq segchkServiceOrderWebReq); /** - * 查询seg用户我想去订单的有效信息 + * 查询seg用户我想去订单的有效信息, 第一版本 * * @param likegoId * @return seg用户扩展信息 */ + @Deprecated public SegchkServiceOrderChkTestResp selectUserOrderPredInfo(Long likegoId); /** @@ -133,4 +150,10 @@ public interface SegchkUserIndexMapper { Map getCardInfo(Map paramsMap); SegchkChargeReward selectSegchkRewardInfoForCheck(Map params); + + SegchkServiceOrderChkTestResp getOrderPreInfoWithVip(SegchkUserLikego segchkUserLikego); + + SegchkServiceOrderChkTestResp getOrderPreInfoWithSelf(SegchkUserLikego segchkUserLikego); + + SegchkServiceOrderChkTestResp getOrderPreInfoWithCoupon(SegchkUserLikego segchkUserLikego); } diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkStoreIndexService.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkStoreIndexService.java index a4b7f5e..2f656ea 100644 --- a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkStoreIndexService.java +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkStoreIndexService.java @@ -1,5 +1,6 @@ package com.ruoyi.segchk.service; +import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.segchk.domain.*; import com.ruoyi.segchk.domain.WeChatCustomerLink; @@ -188,4 +189,31 @@ public interface ISegchkStoreIndexService HashMap getCustomService(Long providerId); public int addCommentAccByComment(Long commentId); + + /** + * 获取商家的状态信息 + * + * @param providerId 推荐人id + * @param storeId 推荐人角色 + * @return SegchkStoreStatus 状态信息 + */ + SegchkStoreStatus getStatus(Long providerId, Long storeId); + + void loadingSegchkStoreStatus(); + + /** + * 商家进行核销 + * + * @param parmMap 请求参数:预约id,预约单商家id,remark + * @return AjaxResult 核销结果 + */ + AjaxResult OrderCheckTransaction(Map parmMap); + + /** + * 商家赠卡操作 + * + * @param storeSelfCard 赠卡信息 likegoId, cardtype, .. + * @return AjaxResult 操作结果 + */ + int giveStoreCard(StoreSelfCard storeSelfCard); } diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkUserIndexService.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkUserIndexService.java index b7d487a..c9275b3 100644 --- a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkUserIndexService.java +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkUserIndexService.java @@ -102,7 +102,7 @@ public interface ISegchkUserIndexService */ public void CheckUserServiceChk(SegchkUserLikego segchkUserLikego); - public SegchkServiceOrderChkTestResp selectUserOrderPredInfo(Long likeGoId); + public SegchkServiceOrderChkTestResp selectUserOrderPredInfo(Map params); /** * 根据核查结果进行核消。说明已经满足核消条件 @@ -289,7 +289,68 @@ public interface ISegchkUserIndexService */ public SegchkUserLikego selectUserLikeGo(SegchkUserLikego segchkUserLikego); + int insertSegchkUserCharge(SegchkUserCharge segchkUserCharge); SegchkUserWechat queryWeChatInfoByUserId(Claims claims); + + /** + * 用户新增预约 + * + * @param segchkUserLikego 包含预约单id + * @return 成功数量 + */ + int insertSegchkUserLikego(SegchkUserLikego segchkUserLikego); + + /** + * 用户删除预约 + * + * @param likegoIds 包含预约单id + * @return 成功数量 + */ + int deleteSegchkUserLikegoByLikegoIds(Long[] likegoIds); + + /** + * 根据预约单信息查询用户预约卡信息 + * + * @param segchkUserLikego 预约单信息 + * @return SegchkServiceOrderChkTestResp + */ + SegchkServiceOrderChkTestResp getOrderPreInfo(SegchkUserLikego segchkUserLikego) throws Exception; + + /** + * 根据预约单信息查询用户会员卡信息 + * + * @param segchkUserLikego 预约单信息 + * @return SegchkServiceOrderChkTestResp + */ + SegchkServiceOrderChkTestResp getOrderPreInfoWithVIP(SegchkUserLikego segchkUserLikego); + + /** + * 根据预约单信息查询用户优惠券信息 + * + * @param segchkUserLikego 预约单信息 + * @return SegchkServiceOrderChkTestResp + */ + SegchkServiceOrderChkTestResp getOrderPreInfoWithCoupon(SegchkUserLikego segchkUserLikego); + + /** + * 根据预约单信息查询用户使用的赠卡信息 + * + * @param segchkUserLikego 预约单信息 + * @return SegchkServiceOrderChkTestResp + */ + SegchkServiceOrderChkTestResp getOrderPreInfoWithSelf(SegchkUserLikego segchkUserLikego); + + SegchkUserLikego selectSegchkUserLikegoByLikegoId(Long likeGoId); + + int wetherCanGiveFree(Long reqlikegoId); + + /** + * 根据预约单信息更新信息 + * + * @param segchkUserLikego 预约单信息 + * @return int + */ + int updateSegchkUserLikego(SegchkUserLikego segchkUserLikego); } diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkUserLikegoService.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkUserLikegoService.java deleted file mode 100644 index 087870e..0000000 --- a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkUserLikegoService.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.ruoyi.segchk.service; - -import com.ruoyi.segchk.domain.SegchkUserLikego; - -import java.util.List; - -/** - * seg用户想去记录Service接口 - * - * @author yinzhiying - * @date 2021-08-23 - */ -public interface ISegchkUserLikegoService -{ - /** - * 查询seg用户想去记录 - * - * @param likegoId seg用户想去记录主键 - * @return seg用户想去记录 - */ - public SegchkUserLikego selectSegchkUserLikegoByLikegoId(Long likegoId); - - /** - * 查询seg用户想去记录列表 - * - * @param segchkUserLikego seg用户想去记录 - * @return seg用户想去记录集合 - */ - public List selectSegchkUserLikegoList(SegchkUserLikego segchkUserLikego); - - /** - * 新增seg用户想去记录 - * - * @param segchkUserLikego seg用户想去记录 - * @return 结果 - */ - public int insertSegchkUserLikego(SegchkUserLikego segchkUserLikego); - - /** - * 修改seg用户想去记录 - * - * @param segchkUserLikego seg用户想去记录 - * @return 结果 - */ - public int updateSegchkUserLikego(SegchkUserLikego segchkUserLikego); - - /** - * 批量删除seg用户想去记录 - * - * @param likegoIds 需要删除的seg用户想去记录主键集合 - * @return 结果 - */ - public int deleteSegchkUserLikegoByLikegoIds(Long[] likegoIds); - - /** - * 删除seg用户想去记录信息 - * - * @param likegoId seg用户想去记录主键 - * @return 结果 - */ - public int deleteSegchkUserLikegoByLikegoId(Long likegoId); -} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/ISegchkStoreIndexServiceImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/ISegchkStoreIndexServiceImpl.java index 6ba3dcf..ced5545 100644 --- a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/ISegchkStoreIndexServiceImpl.java +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/ISegchkStoreIndexServiceImpl.java @@ -1,5 +1,10 @@ package com.ruoyi.segchk.service.impl; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.RedisCahceKey; +import com.ruoyi.common.utils.RedisUtil; import com.ruoyi.segchk.domain.*; import com.ruoyi.segchk.mapper.SegchkIndexStoreAccountMapper; import com.ruoyi.segchk.mapper.SegchkStoreCashMapper; @@ -10,42 +15,64 @@ import com.ruoyi.segchk.domain.WeChatCustomerLink; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; +import java.util.stream.Stream; @Service public class ISegchkStoreIndexServiceImpl implements ISegchkStoreIndexService { private static final Logger logger = LoggerFactory.getLogger(ISegchkStoreIndexServiceImpl.class); - @Autowired + @Resource private SegchkStoreIndexMapper segchkStoreIndexMapper; - @Autowired + @Resource private SegchkStoreCashMapper segchkStoreCashMapper; - @Autowired + @Resource private SegchkIndexStoreAccountMapper segchkIndexStoreAccountMapper; - @Autowired + @Resource private SegchkStoreSecurityMapper segchkStoreSecurityMapper; - @Autowired + @Resource private ISegchkUserIndexService segchkUserIndexService; - @Autowired + @Resource private ISegchkProviderMgtService segchkProviderMgtService; - @Autowired + @Resource private ISegchkPreferenceLableService segchkPreferenceLableService; - @Autowired + @Resource private ISegchkStoreSelfMgtService segchkStoreSelfMgtService; + + @Autowired + private ISegchkProviderCntCtrlService segchkProviderCntCtrlService; + + /** + * 注入redis服务 + */ + @Resource + private RedisCache redisService; + + @Autowired + private RedisUtil redisUtil; + + @PostConstruct + public void init() + { + loadingSegchkStoreStatus(); + } + /** * 根据标签id,商户列表 * @@ -60,15 +87,17 @@ public class ISegchkStoreIndexServiceImpl implements ISegchkStoreIndexService { } boolean cardempty = ObjectUtils.isEmpty(segchkStoreWebReq.getCardId()); boolean lableempty = ObjectUtils.isEmpty(segchkStoreWebReq.getTypeId()); + List segchkStoreIndexWebResps = null; + if(cardempty && lableempty) { // 全空,说明查询所有商家列表 logger.debug("selectSegchkStoreList all with: {}", segchkStoreWebReq.toString()); - return segchkStoreIndexMapper.selectSegchkStoreListByAll(segchkStoreWebReq); + segchkStoreIndexWebResps = segchkStoreIndexMapper.selectSegchkStoreListByAll(segchkStoreWebReq); } else if(!lableempty && cardempty){ // 标签不为空,全部会员卡 logger.debug("selectSegchkStoreList one non-card lable with: {}", segchkStoreWebReq.toString()); - return segchkStoreIndexMapper.selectSegchkStoreListByOneLable(segchkStoreWebReq); + segchkStoreIndexWebResps = segchkStoreIndexMapper.selectSegchkStoreListByOneLable(segchkStoreWebReq); } else if(lableempty && !cardempty){ @@ -77,12 +106,97 @@ public class ISegchkStoreIndexServiceImpl implements ISegchkStoreIndexService { segchkStoreWebReq.setTypeId(0); segchkStoreWebReq.setCardId(null); logger.debug("selectSegchkStoreList one card lable with: {}", segchkStoreWebReq.toString()); - return segchkStoreIndexMapper.selectSegchkStoreListByOneLable(segchkStoreWebReq); + segchkStoreIndexWebResps = segchkStoreIndexMapper.selectSegchkStoreListByOneLable(segchkStoreWebReq); } - logger.debug("selectSegchkStoreList some lable with: {}", segchkStoreWebReq.toString()); - return segchkStoreIndexMapper.selectSegchkStoreList(segchkStoreWebReq); + else { + logger.debug("selectSegchkStoreList some lable with: {}", segchkStoreWebReq.toString()); + segchkStoreIndexWebResps = segchkStoreIndexMapper.selectSegchkStoreList(segchkStoreWebReq); +// objects = fillStoreCount(segchkStoreIndexMapper.selectSegchkStoreList(segchkStoreWebReq), SegchkStoreIndexWebResp.class, providerId, segchkProviderCntCtrl, wechatCount, wechatCount1); + } + + if(ObjectUtils.isEmpty(segchkStoreIndexWebResps)){ + return new ArrayList(); + } + + segchkStoreIndexWebResps.parallelStream().forEach(v -> { + v.setStoreCount(segchkStoreWebReq.getProviderId() + , segchkProviderCntCtrlService.selectSegchkProviderCntCtrlByProviderId(segchkStoreWebReq.getProviderId()) + , redisUtil.hmget("wechatCount") + , redisUtil.hmget("wechatCount1")); + }); + + return segchkStoreIndexWebResps; +// return ObjectUtils.isEmpty(objects) ? new ArrayList() +// : objects.parallelStream().map(v -> (SegchkStoreIndexWebResp)v).collect(Collectors.toList()); } + + + public static List fillStoreCount(List list, Class tClass, Long providerId, SegchkProviderCntCtrl segchkProviderCntCtrl, Map map1, Map map2) { + + if(!ObjectUtils.isEmpty(list)){ + int bf = 0, cf = 0, of = 0; + if(!ObjectUtils.isEmpty(segchkProviderCntCtrl)){ + bf = segchkProviderCntCtrl.getBookCnt(); + cf = segchkProviderCntCtrl.getCollectCnt(); + of = segchkProviderCntCtrl.getBookCnt(); + } + String bk1 = "browse_cnt1:" + providerId + ":"; + String bk = "browse_cnt:" + providerId + ":"; + String ck1 = "collect_cnt1:" + providerId + ":"; + String ck = "collect_cnt:" + providerId + ":"; + String ok1 = "book_cnt1:" + providerId + ":"; + String ok = "book_cnt:" + providerId + ":"; + Object[] arr = {bk, bk1, ck, ck1, ok, ok1, bf, cf, of, map1, map2}; + if (tClass == (Class) SegchkStoreIndexWebResp.class) { + return list.parallelStream().map(v -> { + return fillSegchkStoreIndexWebRespCount(v, arr); + }).collect(Collectors.toList()); + } + else if(tClass == (Class) SegchkStoreIndexWebResp.class) { + return list.parallelStream().map(v -> { + return fillSegchkRecommenderStoreWebRespCount(v, arr); + }).collect(Collectors.toList()); + } + else return null; + } + return (List) list; + } + + private static Object fillSegchkRecommenderStoreWebRespCount(T v, Object[] arr) { + // {bk, bk1, ck, ck1, ok, ok1, bf, cf, of, map1, map2}; + SegchkRecommenderStoreWebResp tmp = (SegchkRecommenderStoreWebResp) v; + Long storeId = tmp.getStoreId(); + /*tmp.setBrowseCnt(getCount(storeId, (String) arr[0], (String)arr[1], (Integer) arr[6], (Map)arr[9], (Map)arr[10])); + + tmp.setCollectCnt(getCount(storeId, (String) arr[2], (String)arr[3], (Integer) arr[7], (Map)arr[9], (Map)arr[10])); + + tmp.setBookCnt(getCount(storeId, (String) arr[4], (String)arr[5], (Integer) arr[8], (Map)arr[9], (Map)arr[10]));*/ + + return tmp; + } + + private static Object fillSegchkStoreIndexWebRespCount(T v, Object[] arr) { +// {bk, bk1, ck, ck1, ok, ok1, bf, cf, of, map1, map2}; + SegchkStoreIndexWebResp tmp = (SegchkStoreIndexWebResp) v; + Long storeId = tmp.getStoreId(); + /*tmp.setBrowseCnt(getCount(storeId, (String) arr[0], (String)arr[1], (Integer) arr[6], (Map)arr[9], (Map)arr[10])); + + tmp.setCollectCnt(getCount(storeId, (String) arr[2], (String)arr[3], (Integer) arr[7], (Map)arr[9], (Map)arr[10])); + + tmp.setBookCnt(getCount(storeId, (String) arr[4], (String)arr[5], (Integer) arr[8], (Map)arr[9], (Map)arr[10]));*/ + + return tmp; + } + + private static Integer getCount(Long storeId, String key1, String key2, Integer flag, Map objectMap1, Map objectMap2) { + return (Integer) objectMap1.getOrDefault(key1 + storeId, 0) + + (flag > 0 + ? (Integer) objectMap2.getOrDefault(key2 + storeId, 0) + : 0); + } + + /** * 标签列表 * @@ -126,6 +240,17 @@ public class ISegchkStoreIndexServiceImpl implements ISegchkStoreIndexService { boolean lableflag = lable_empty ? true : lables.parallelStream().anyMatch(lable -> lable.getLableTypeId() == segchkStoreWebReq.getTypeId() && lable.getLableId() == segchkStoreWebReq.getLableId()); return cardflag && lableflag; }).collect(Collectors.toList()); + + if(ObjectUtils.isEmpty(resps)){ + return new ArrayList(); + } + + resps.parallelStream().forEach(v -> { + v.setStoreCount(segchkStoreWebReq.getProviderId() + , segchkProviderCntCtrlService.selectSegchkProviderCntCtrlByProviderId(segchkStoreWebReq.getProviderId()) + , redisUtil.hmget("wechatCount") + , redisUtil.hmget("wechatCount1")); + }); return resps; } @@ -304,9 +429,26 @@ public class ISegchkStoreIndexServiceImpl implements ISegchkStoreIndexService { @Override public List selectSegchkRecommenderStoreListByProvider(SegchkRecommenderStoreWebReq segchkRecommenderStoreWebReq) { logger.debug("selectSegchkRecommenderStoreListByProvider with: {}", segchkRecommenderStoreWebReq.toString()); - return segchkStoreIndexMapper.selectSegchkRecommenderStoreListWeb(segchkRecommenderStoreWebReq); + + List segchkRecommenderStoreWebResps = segchkStoreIndexMapper.selectSegchkRecommenderStoreListWeb(segchkRecommenderStoreWebReq); + + if(ObjectUtils.isEmpty(segchkRecommenderStoreWebResps)) { + return new ArrayList(); + } + + segchkRecommenderStoreWebResps.parallelStream().forEach(v -> v.setStoreCount(segchkRecommenderStoreWebReq.getProviderId() + , segchkProviderCntCtrlService.selectSegchkProviderCntCtrlByProviderId(segchkRecommenderStoreWebReq.getProviderId()) + , redisUtil.hmget("wechatCount") + , redisUtil.hmget("wechatCount1"))); +// List objects = fillStoreCount(segchkRecommenderStoreWebResps, SegchkRecommenderStoreWebResp.class, providerId, segchkProviderCntCtrl, wechatCount, wechatCount1); +// return ObjectUtils.isEmpty(objects) ? new ArrayList() +// : objects.parallelStream().map(v -> (SegchkRecommenderStoreWebResp)v).collect(Collectors.toList()); + return segchkRecommenderStoreWebResps; } + public T fileStoreCnt(Long providerId, SegchkProviderCntCtrl segchkProviderCntCtrl, Map map1, Mapmap2, T t){ + return t; + } /** * 返回商户openid * @@ -390,4 +532,257 @@ public class ISegchkStoreIndexServiceImpl implements ISegchkStoreIndexService { logger.debug("addCommentAccByComment with ({}) {}", commentId, (ret > 0 ? "successed" : "failed")); return ret; } + + /** + * 获取商家的状态信息 + * + * @param providerId 推荐人id + * @param storeId 推荐人角色 + * @return SegchkStoreStatus 状态信息 + */ + @Override + @Cacheable(value = RedisCahceKey.STORE_STATUS, key = "'STORE_STATUS' + #storeId") + public SegchkStoreStatus getStatus(Long providerId, Long storeId) { + Map params = new HashMap<>(); + params.put("providerId", providerId); + params.put("storeId", storeId); + return segchkStoreIndexMapper.getStatus(params); + } + + @Override + public void loadingSegchkStoreStatus(){ + List storeStatusList = segchkStoreIndexMapper.getAllStatus(); + logger.debug("loadingSegchkStoreStatus with ret : ", storeStatusList.size()); + storeStatusList.parallelStream().forEach(v -> { +// SpringUtils.getBean(RedisCache.class).setCacheObject(RedisCahceKey.STORE_STATUS + "::" + RedisCahceKey.STORE_STATUS + v.getStoreId(), v); + redisService.setCacheObject(RedisCahceKey.STORE_STATUS + "::" + RedisCahceKey.STORE_STATUS + v.getStoreId(), v); + }); + } + + /** + * 商家进行核销 + * + * @param parmMap 请求参数:预约id,预约单商家id,remark + * @return AjaxResult 核销结果 + */ + @Override + public AjaxResult OrderCheckTransaction(Map parmMap) { + + Object olikegoId = parmMap.getOrDefault("likegoId", null); + Object ostoreId = parmMap.getOrDefault("storeId", null); + if( ObjectUtils.isEmpty(olikegoId) || ObjectUtils.isEmpty(ostoreId) ){ + logger.error("OrderCheckTransaction error with no likegoId:{} or storeId:{}", olikegoId, ostoreId); + return new AjaxResult(500, "请求异常,请联系客服"); + } + String orderKey = RedisCahceKey.ORDER_INFO + "::" + olikegoId.toString(); +// 查询本次要核销的信息,会员卡或赠卡信息 + Object userLikeGoO = redisService.getCacheObject(orderKey); + SegchkUserLikego segchkUserLikego = null; + Object segchkProviderMgto = null; + if(ObjectUtils.isEmpty(userLikeGoO)){ + logger.warn("OrderCheckTransaction no order cache for {}", olikegoId.toString()); + segchkUserLikego = segchkUserIndexService.selectSegchkUserLikegoByLikegoId(Long.valueOf(String.valueOf(olikegoId))); + if(ObjectUtils.isEmpty(segchkUserLikego)) { + return new AjaxResult(500, "预约单失效,请用户重新添加"); + } + else{ + segchkProviderMgto = segchkProviderMgtService.selectSegchkProviderMgtByProviderId(segchkUserLikego.getProviderId()); + int ttl = ((SegchkProviderMgt)segchkProviderMgto).getBookLiveHour() > 0 ? ((SegchkProviderMgt)segchkProviderMgto).getBookLiveHour() : -1; + if (DateUtils.getDatePoor(DateUtils.getNowDate(), segchkUserLikego.getModTime(), 1) > ttl){ + return new AjaxResult(500, "预约单过期,请用户重新添加"); + } + if(ttl > 0){ + redisService.setCacheObject(RedisCahceKey.ORDER_INFO + "::" + segchkUserLikego.getLikegoId(), segchkUserLikego, ttl, TimeUnit.HOURS); + } + else { + redisService.setCacheObject(RedisCahceKey.ORDER_INFO + "::" + segchkUserLikego.getLikegoId(), segchkUserLikego); + } + } + } + else { + segchkUserLikego = (SegchkUserLikego) userLikeGoO; + } + + Integer cardType = segchkUserLikego.getCardType(); + Long storeId = segchkUserLikego.getStoreId(); + + segchkProviderMgto = segchkProviderMgto == null ? redisService.getCacheObject(RedisCahceKey.PROVIDER_INFO + "::" + segchkUserLikego.getProviderId()): segchkProviderMgto; + SegchkProviderMgt segchkProviderMgt = null; + if(ObjectUtils.isEmpty(segchkProviderMgto)){ + segchkProviderMgt = segchkProviderMgtService.selectSegchkProviderMgtByProviderId(segchkUserLikego.getProviderId()); + } + segchkProviderMgt = (SegchkProviderMgt) segchkProviderMgto; + SegchkServiceOrderChkTestResp segchkServiceOrderChkTestResp = null; + try { + segchkServiceOrderChkTestResp = segchkUserIndexService.getOrderPreInfo(segchkUserLikego); + Integer isExpire = segchkServiceOrderChkTestResp.getIsExpire(); + Integer cardStatus = segchkServiceOrderChkTestResp.getCardStatus(); + Long cardId = segchkServiceOrderChkTestResp.getCardId(); + Integer totalCount = segchkServiceOrderChkTestResp.getTotalCount(); + Integer hasLeftCount = segchkServiceOrderChkTestResp.getHasLeftCount(); + Integer mgtState = segchkServiceOrderChkTestResp.getMgtState(); + Integer canFree = segchkServiceOrderChkTestResp.getCanFree(); + Integer vipLeftCount = segchkServiceOrderChkTestResp.getVipLeftCount(); + + if(isExpire == 1 || cardStatus != 0){ + logger.warn("OrderCheckTransaction the card({}) with likego({}) is expire", cardId, olikegoId.toString()); + lostOrder(segchkUserLikego); + return new AjaxResult(500, "该预约单所用卡已失效"); + } + else if(totalCount == 0){ + logger.warn("OrderCheckTransaction the store({}) no longer support the card({}) with likego({})", storeId, cardId, olikegoId.toString()); + lostOrder(segchkUserLikego); + return new AjaxResult(500, "本店已不支持该类型卡核销"); + } + else if(hasLeftCount <= 0 || vipLeftCount < 1){ + logger.warn("OrderCheckTransaction the card({}) with likego({}) had check over the store", cardId, olikegoId.toString()); + return new AjaxResult(500, "该卡已在本店无可用权益次数"); + } + + Integer canGiveSelf = segchkProviderMgt.getCanGiveSelf(); + if(canGiveSelf == 0) { + segchkServiceOrderChkTestResp.setCanFree(0); + } + + segchkServiceOrderChkTestResp.setLikegoId(segchkUserLikego.getLikegoId()); + segchkServiceOrderChkTestResp.setCardType(cardType); + segchkServiceOrderChkTestResp.setMgtState(segchkUserLikego.getMgtState()); + segchkServiceOrderChkTestResp.setStoreId(segchkUserLikego.getStoreId()); + switch (cardType){ + case 0: { + if(mgtState == 0 && vipLeftCount == 1){ +// 如果用户只有当前会员卡,并且该卡只有当前一次时,说明用户本次核销后不再有可用的会员卡,则不可以赠卡, + segchkServiceOrderChkTestResp.setCanFree(0); + break; + } +// 会员卡的判断处理 + if(canGiveSelf == 1 && canFree >= 1){ +// 如果只允许商家针对一个用户只能有一张卡且该用户已有该商家的可使用赠卡时,不可以再赠卡 + segchkServiceOrderChkTestResp.setCanFree(0); + } + else if((canGiveSelf == 1 && canFree == 0) || canGiveSelf == 2){ + segchkServiceOrderChkTestResp.setCanFree(1); + } + else { + segchkServiceOrderChkTestResp.setCanFree(0); + segchkServiceOrderChkTestResp.setSegchkRecommenderStoreLableWebList(null); + } + break; + } + case 1: + case 2: { +// 当该预约单为赠卡或优惠卡时,首先要判断该用户是否有可用的会员卡,如果没有可用的会员卡,则直接不可赠卡 + if(mgtState < 1) { + segchkServiceOrderChkTestResp.setCanFree(0); + break; + } +// 针对使用赠卡的预约单 + if(canGiveSelf == 1 && hasLeftCount > 1) { +// 如果只允许商家用户持有一张卡,但是已持有的卡除了本次使用的次数,还有剩余的次数,则不允许再赠卡 + segchkServiceOrderChkTestResp.setCanFree(0); + } + else { + segchkServiceOrderChkTestResp.setCanFree(1); + } + break; + } + default: segchkServiceOrderChkTestResp.setCanFree(0);break; + } + } catch (Exception e) { + e.printStackTrace(); + return new AjaxResult(400, "核销异常"); + } +// 结合卡片信息,及运营商管理,判断是否具备赠卡条件 +// 结合赠卡决定,判断是否需要查询该商家可以赠送的卡 + Object cacheObject = redisService.getCacheObject(RedisCahceKey.PROVIDER_INFO + ":FIRST_CHECK_REWARD:" + segchkUserLikego.getProviderId()); + Boolean stoRewardWithChk = ObjectUtils.isEmpty(cacheObject) ? false : new Boolean(String.valueOf(cacheObject)); + +// 进行核销 + int ret = segchkUserIndexService.OrderCheckTransaction(segchkServiceOrderChkTestResp, segchkUserLikego.getLikegoId(), stoRewardWithChk); + + if(segchkServiceOrderChkTestResp.getCanFree() == 0){ + segchkServiceOrderChkTestResp.setSegchkRecommenderStoreLableWebList(null); +// 不能赠卡,则从redis中删除订单信息 + redisService.deleteObject(orderKey); + } + else { + SegchkRecommenderStoreLableWeb lable = new SegchkRecommenderStoreLableWeb(); + lable.setLableId(0); + lable.setLableTypeId(1); + lable.setLableName("本店尊享"); + segchkServiceOrderChkTestResp.setSegchkRecommenderStoreLableWebList(Arrays.asList(lable)); +// 在redis中缓存可以赠卡的订单号 + redisService.setCacheObject(RedisCahceKey.GIVE_FREE_CARD + "::" + segchkServiceOrderChkTestResp.getLikegoId(), olikegoId); +// 如果可以赠卡,则将订单状态进行更新,同时订单允许赠卡 + segchkUserLikego.setMgtState(2); + segchkUserLikego.setCanGiveSelf(1); + redisService.setCacheObject(orderKey, segchkUserLikego); + } + + return ret == 3 ? new AjaxResult(200, "核销成功", segchkServiceOrderChkTestResp) : new AjaxResult(500, "核销失败"); + } + + private void lostOrder(SegchkUserLikego segchkUserLikego) { + segchkUserLikego.setMgtState(1); + int ret = segchkUserIndexService.updateSegchkUserLikego(segchkUserLikego); + if(ret == 1){ + String orderKey = RedisCahceKey.ORDER_INFO + "::" + segchkUserLikego.getLikegoId(); + redisService.deleteObject(orderKey); + } + } + + /** + * 商家赠卡操作 + * + * @param storeSelfCard 赠卡信息 likegoId, cardtype, .. + * @return AjaxResult 操作结果 + */ + @Override + public int giveStoreCard(StoreSelfCard storeSelfCard) { + if(ObjectUtils.isEmpty(storeSelfCard) || !storeSelfCard.isValidate()){ +// 请求参数异常 + logger.error("giveStoreCard request params is wrong with {}", storeSelfCard.toString()); + return -1; + } +// 根据likegoid获取是否可赠卡标识,及订单信息 + Long reqlikegoId = storeSelfCard.getLikegoId(); + Object cacheObject = redisService.getCacheObject(RedisCahceKey.GIVE_FREE_CARD + "::" + reqlikegoId); + if(ObjectUtils.isEmpty(cacheObject)) { + if(segchkUserIndexService.wetherCanGiveFree(reqlikegoId) != 1) return -2; + cacheObject = reqlikegoId; + redisService.setCacheObject(RedisCahceKey.GIVE_FREE_CARD + "::" + reqlikegoId, cacheObject); + } + Long likeGoId = Long.valueOf(String.valueOf(cacheObject)); + + String orderKey = RedisCahceKey.ORDER_INFO + "::" + reqlikegoId; + Object userLikeGoO = redisService.getCacheObject(orderKey); + if(ObjectUtils.isEmpty(userLikeGoO)) { + return -3; + } + + SegchkUserLikego segchkUserLikego = (SegchkUserLikego)userLikeGoO; + + if(segchkUserLikego.getStoreId() != storeSelfCard.getStoreId()){ + return -4; + } + + SegchkStoreSelfMgt segchkStoreSelfMgt = new SegchkStoreSelfMgt(); + segchkStoreSelfMgt.setStoreId(storeSelfCard.getStoreId()); + segchkStoreSelfMgt.setCardId(segchkUserLikego.getCardId()); + segchkStoreSelfMgt.setUserId(segchkUserLikego.getUserId()); + segchkStoreSelfMgt.setTypeId(storeSelfCard.getTypeId()); + segchkStoreSelfMgt.setFreeCount(storeSelfCard.getTotalCount()); + segchkStoreSelfMgt.setLableId(storeSelfCard.getTypeId() == 2 ? storeSelfCard.getLableId() : 0L); + segchkStoreSelfMgt.setFreeName(storeSelfCard.getTypeId() == 2 ? null : "赠卡"); + segchkStoreSelfMgt.setFreeContent(storeSelfCard.getFreeContent()); + segchkStoreSelfMgt.setLeftCount(storeSelfCard.getTotalCount()); + segchkStoreSelfMgt.setProviderId(segchkUserLikego.getProviderId()); + Integer ret = addStoreSelfCard(segchkStoreSelfMgt); + if(ret != 1){ + logger.error("giveStoreCard failed with --- {}", segchkStoreSelfMgt.toString()); + } + redisService.deleteObject(RedisCahceKey.GIVE_FREE_CARD + "::" + reqlikegoId); + redisService.deleteObject(orderKey); + return ret; + } } diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserIndexServiceImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserIndexServiceImpl.java index 4600d24..84fa019 100644 --- a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserIndexServiceImpl.java +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserIndexServiceImpl.java @@ -1,6 +1,9 @@ package com.ruoyi.segchk.service.impl; import com.alibaba.fastjson.JSON; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.utils.RedisCahceKey; +import com.ruoyi.common.utils.RedisUtil; import com.ruoyi.order.service.impl.PaySupplier; //import com.ruoyi.order.service.impl.WechatWithdrawSupplier; import com.ruoyi.segchk.domain.*; @@ -22,12 +25,14 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.ExceptionHandler; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.math.BigDecimal; import java.net.URLEncoder; import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; @@ -113,12 +118,21 @@ public class SegchkUserIndexServiceImpl implements ISegchkUserIndexService @Autowired private ISegchkUserAccountService segchkUserAccountService; + + @Autowired + private ISegchkUserLikegoService segchkUserLikegoService; /** * 注入支付设置服务 */ @Autowired private ILsPaySettingService paySetService; + @Autowired + private RedisUtil redisUtil; + + @Autowired + private RedisCache redisService; + @Value("${segchk.cash.store_threshold:#{0.0}}") private BigDecimal storeThreshold; @@ -255,11 +269,18 @@ public class SegchkUserIndexServiceImpl implements ISegchkUserIndexService */ @Override public List selectUserOrderPredCardListWebInfo(SegchkServiceOrderWebReq segchkServiceOrderWebReq) { + SegchkStoreStatus status = segchkStoreIndexService.getStatus(segchkServiceOrderWebReq.getProviderId(), segchkServiceOrderWebReq.getStoreId()); + + SegchkProviderMgt segchkProviderMgt = (SegchkProviderMgt)redisService.getCacheObject(RedisCahceKey.PROVIDER_INFO + "::" + status.getProviderId()); + logger.debug("get store status {}", status.toString()); + AtomicInteger a = new AtomicInteger(-1); +/* + List segchkServiceOrderWebReqs = segchkUserIndexMapper.selectUserOrderPredCardListWebInfo(segchkServiceOrderWebReq); // 如果返回结果是空,则说明无会员卡或赠卡或用,如果返回的结果中没有会员卡,说明无可用卡;如果返回的结果中,存在会员卡的store_id为空的情况:说明该赠卡可用,但是该会员卡在该商家不可用;如果是会员卡的时候并且card_id也是空的情况:说明该赠卡可用,但是该会员卡在该商家已经超过了商家的核销次数 - AtomicInteger a = new AtomicInteger(-1); + if(CollectionUtils.isEmpty(segchkServiceOrderWebReqs) - || segchkServiceOrderWebReqs.stream().noneMatch(v -> v.getTypeId() == 0)){ + || (status.getUseSelfCardWithNovip() == 0 && segchkServiceOrderWebReqs.stream().noneMatch(v -> v.getTypeId() == 0))){ logger.debug("selectUserOrderPredCardListWebInfo with: {} --- {}", segchkServiceOrderWebReq.toString(), "this user no card can use in this store"); return new ArrayList(); } @@ -286,6 +307,30 @@ public class SegchkUserIndexServiceImpl implements ISegchkUserIndexService logger.debug("selectUserOrderPredCardListWebInfo with: {} --- {}{}", segchkServiceOrderWebReq.toString(), sb.toString(), segchkServiceOrderWebReqs1.size()); return segchkServiceOrderWebReqs1; + +*/ +// 拼接查询参数 + Map parmMap = new HashMap<>(); + parmMap.put("storeId", segchkServiceOrderWebReq.getStoreId()); + parmMap.put("userId", segchkServiceOrderWebReq.getUserId()); + parmMap.put("providerId", segchkServiceOrderWebReq.getProviderId()); + parmMap.put("testFlag", null); + +// 分别查询该用户在该商家可用的会员卡和赠卡 + List userCanUseVIPforStore = segchkUserIndexMapper.getUserCanUseVIPforStore(parmMap); + List userCanUseSelfCardforStore = segchkUserIndexMapper.getUserCanUseSelfCardforStore(parmMap); + boolean no_vip = CollectionUtils.isEmpty(userCanUseVIPforStore); + boolean no_self = CollectionUtils.isEmpty(userCanUseSelfCardforStore); + if(no_vip && ( no_self || (!no_self && status.getUseSelfCardWithNovip() == 0 && segchkProviderMgt.getUseSelfCardWithNovip() == 0))){ + logger.debug("selectUserOrderPredCardListWebInfo with: {} --- {}{}{}", parmMap.entrySet().parallelStream().map(v -> v.getKey() + ":" + v.getValue()).collect(Collectors.joining(",")), no_vip, no_self, "this user no card can use in this store"); + return new ArrayList(); + } +// 如果会员卡中的商家信息空,说明该商家不支持该会员卡; +// 如果该会员卡在该商家核销次数超过该商家针对该卡支持次数; + List userCanUseVIPforStore1 = userCanUseVIPforStore.parallelStream().filter(v -> !ObjectUtils.isEmpty(v.getStoreId()) && v.getHadChkCount() < v.getStoreChkCount()).collect(Collectors.toList()); + + CollectionUtils.mergeArrayIntoCollection((no_self ? new ArrayList().toArray() : userCanUseSelfCardforStore.toArray()), userCanUseVIPforStore1); + return userCanUseVIPforStore1; } /** @@ -313,9 +358,9 @@ public class SegchkUserIndexServiceImpl implements ISegchkUserIndexService } @Override - public SegchkServiceOrderChkTestResp selectUserOrderPredInfo(Long likegoId) { - logger.debug("selectUserOrderPredInfo with: {}", likegoId.toString()); - return segchkUserIndexMapper.selectUserOrderPredInfo(likegoId); + public SegchkServiceOrderChkTestResp selectUserOrderPredInfo(Map params) { + logger.debug("selectUserOrderPredInfo with: {}", params.get("likegoId").toString()); + return segchkUserIndexMapper.selectUserOrderPredInfo((Long)params.get("likegoId")); } /** @@ -393,7 +438,9 @@ public class SegchkUserIndexServiceImpl implements ISegchkUserIndexService SegchkUserLikego segchkUserLikego = new SegchkUserLikego(); segchkUserLikego.setLikegoId(likegoId); segchkUserLikego.setMgtState(2); - +// 针对该订单设置赠卡标识 + segchkUserLikego.setCanGiveSelf(segchkServiceOrderChkTestResp.getCanFree()); +// 更新订单状态 ret += segchkUserLikegoMapper.updateSegchkUserLikego(segchkUserLikego); logger.debug("OrderCheckTransaction update({}) likego({})" , (ret == 3 ? "successed" : "failed") @@ -1307,6 +1354,130 @@ public class SegchkUserIndexServiceImpl implements ISegchkUserIndexService } } + /** + * 用户新增预约 + * + * @param segchkUserLikego 包含预约单id + * @return 成功数量 + */ + @Override + public int insertSegchkUserLikego(SegchkUserLikego segchkUserLikego) { + int ret = segchkUserLikegoService.insertSegchkUserLikego(segchkUserLikego); + if(ret > 0){ + segchkUserLikego = segchkUserLikegoService.selectSegchkUserLikegoByLikegoId(segchkUserLikego.getLikegoId()); + Object cacheObject = redisService.getCacheObject(RedisCahceKey.PROVIDER_INFO + "::" + segchkUserLikego.getProviderId()); + int ttl = -1; + if(!ObjectUtils.isEmpty(cacheObject) && !ObjectUtils.isEmpty(((SegchkProviderMgt)cacheObject).getBookLiveHour())) { + int tmpttl = ((SegchkProviderMgt)cacheObject).getBookLiveHour(); + ttl = tmpttl > 0 ? tmpttl : -1; + } + + if(ttl > 0){ + redisService.setCacheObject(RedisCahceKey.ORDER_INFO + "::" + segchkUserLikego.getLikegoId(), segchkUserLikego, ttl, TimeUnit.HOURS); + } + else { + redisService.setCacheObject(RedisCahceKey.ORDER_INFO + "::" + segchkUserLikego.getLikegoId(), segchkUserLikego); + } + } + return ret; + } + + /** + * 用户删除预约 + * + * @param likegoIds 包含预约单id + * @return 成功数量 + */ + @Override + public int deleteSegchkUserLikegoByLikegoIds(Long[] likegoIds) { + return segchkUserLikegoService.deleteSegchkUserLikegoByLikegoIds(likegoIds); + } + + /** + * 根据预约单信息查询用户预约卡信息 + * + * @param segchkUserLikego 预约单信息 + * @return SegchkServiceOrderChkTestResp + */ + @Override + public SegchkServiceOrderChkTestResp getOrderPreInfo(SegchkUserLikego segchkUserLikego) throws Exception{ + Integer cardType = segchkUserLikego.getCardType(); + switch (cardType) { + case 0: { +// 如果用户使用会员卡预约,则查询该会员卡相关信息 + return getOrderPreInfoWithVIP(segchkUserLikego); + } + case 1: { +// 如果用户使用赠卡预约,则查询该卡相关信息 + return getOrderPreInfoWithSelf(segchkUserLikego); + } + case 2: { +// 如果用户使用赠卡预约,则查询该卡相关信息 + return getOrderPreInfoWithCoupon(segchkUserLikego); + } + default: + throw new IllegalStateException("Unexpected value: " + cardType); + } + } + + /** + * 根据预约单信息查询用户会员卡信息 + * + * @param segchkUserLikego 预约单信息 + * @return SegchkServiceOrderChkTestResp + */ + @Override + public SegchkServiceOrderChkTestResp getOrderPreInfoWithVIP(SegchkUserLikego segchkUserLikego) { + return segchkUserIndexMapper.getOrderPreInfoWithVip(segchkUserLikego); + } + + /** + * 根据预约单信息查询用户优惠券信息 + * + * @param segchkUserLikego 预约单信息 + * @return SegchkServiceOrderChkTestResp + */ + @Override + public SegchkServiceOrderChkTestResp getOrderPreInfoWithCoupon(SegchkUserLikego segchkUserLikego) { + return segchkUserIndexMapper.getOrderPreInfoWithCoupon(segchkUserLikego); + } + + /** + * 根据预约单信息查询用户使用的赠卡信息 + * + * @param segchkUserLikego 预约单信息 + * @return SegchkServiceOrderChkTestResp + */ + @Override + public SegchkServiceOrderChkTestResp getOrderPreInfoWithSelf(SegchkUserLikego segchkUserLikego) { + return segchkUserIndexMapper.getOrderPreInfoWithSelf(segchkUserLikego); + } + + @Override + public SegchkUserLikego selectSegchkUserLikegoByLikegoId(Long likeGoId) { + return segchkUserLikegoService.selectSegchkUserLikegoByLikegoId(likeGoId); + } + + @Override + public int wetherCanGiveFree(Long reqlikegoId) { + SegchkUserLikego segchkUserLikego = segchkUserLikegoService.selectSegchkUserLikegoByLikegoId(reqlikegoId); + if(ObjectUtils.isEmpty(segchkUserLikego) || segchkUserLikego.getCanGiveSelf() == null || segchkUserLikego.getCanGiveSelf() != 1) { + return 0; + } + return 1; + } + + /** + * 根据预约单信息更新信息 + * + * @param segchkUserLikego 预约单信息 + * @return int + */ + @Override + public int updateSegchkUserLikego(SegchkUserLikego segchkUserLikego) { + return segchkUserLikegoService.updateSegchkUserLikego(segchkUserLikego); + } + /** * 微信支付回调 diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserLikegoServiceImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserLikegoServiceImpl.java deleted file mode 100644 index 5c78c47..0000000 --- a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserLikegoServiceImpl.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.ruoyi.segchk.service.impl; - -import com.ruoyi.segchk.domain.SegchkUserLikego; -import com.ruoyi.segchk.mapper.SegchkUserLikegoMapper; -import com.ruoyi.segchk.service.ISegchkUserLikegoService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; - -/** - * seg用户想去记录Service业务层处理 - * - * @author yinzhiying - * @date 2021-08-23 - */ -@Service -public class SegchkUserLikegoServiceImpl implements ISegchkUserLikegoService -{ - @Autowired - private SegchkUserLikegoMapper segchkUserLikegoMapper; - - /** - * 查询seg用户想去记录 - * - * @param likegoId seg用户想去记录主键 - * @return seg用户想去记录 - */ - @Override - public SegchkUserLikego selectSegchkUserLikegoByLikegoId(Long likegoId) - { - return segchkUserLikegoMapper.selectSegchkUserLikegoByLikegoId(likegoId); - } - - /** - * 查询seg用户想去记录列表 - * - * @param segchkUserLikego seg用户想去记录 - * @return seg用户想去记录 - */ - @Override - public List selectSegchkUserLikegoList(SegchkUserLikego segchkUserLikego) - { - return segchkUserLikegoMapper.selectSegchkUserLikegoList(segchkUserLikego); - } - - /** - * 新增seg用户想去记录 - * - * @param segchkUserLikego seg用户想去记录 - * @return 结果 - */ - @Override - public int insertSegchkUserLikego(SegchkUserLikego segchkUserLikego) - { - // 此处根据用户id,卡id,卡类型,卡标签,商户id,及运营商id,生成预约二维码 - segchkUserLikego.setQrCode(String.format("qrcode-%s-%s-%s-%s-%s", segchkUserLikego.getProviderId(), segchkUserLikego.getStoreId(), segchkUserLikego.getUserId(), segchkUserLikego.getCardId(), segchkUserLikego.getCardType())); - return segchkUserLikegoMapper.insertSegchkUserLikego(segchkUserLikego); - } - - /** - * 修改seg用户想去记录 - * - * @param segchkUserLikego seg用户想去记录 - * @return 结果 - */ - @Override - public int updateSegchkUserLikego(SegchkUserLikego segchkUserLikego) - { - return segchkUserLikegoMapper.updateSegchkUserLikego(segchkUserLikego); - } - - /** - * 批量删除seg用户想去记录 - * - * @param likegoIds 需要删除的seg用户想去记录主键 - * @return 结果 - */ - @Override - public int deleteSegchkUserLikegoByLikegoIds(Long[] likegoIds) - { - return segchkUserLikegoMapper.deleteSegchkUserLikegoByLikegoIds(likegoIds); - } - - /** - * 删除seg用户想去记录信息 - * - * @param likegoId seg用户想去记录主键 - * @return 结果 - */ - @Override - public int deleteSegchkUserLikegoByLikegoId(Long likegoId) - { - return segchkUserLikegoMapper.deleteSegchkUserLikegoByLikegoId(likegoId); - } -} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/AppListenHandler.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/AppListenHandler.java new file mode 100644 index 0000000..a750fd6 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/AppListenHandler.java @@ -0,0 +1,63 @@ +package com.ruoyi.util.bean; + +import com.ruoyi.common.core.redis.RedisCache; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.Ordered; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; + +@Component +@Order(Ordered.HIGHEST_PRECEDENCE) +public class AppListenHandler { + private Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private RedisCache redisCache; + + @Autowired + + + public AppListenHandler() { + logger.info("开始进行计数缓存!"); + } + + @PostConstruct + public void init() throws Exception { + //将数据库中的数据写入redis + /*List
articleList = articleService.queryAll(); + articleList.forEach(article -> { + //将浏览量写入redis + //分别有浏览量,点赞数,评论数 + HashMap h1 = new HashMap<>(); + h1.put("viewNum",article.getViewNum()); + h1.put("likeNum",article.getLikeNum()); + h1.put("commentNum",article.getCommentNum()); + redisUtil.zsAdd("commentNum",article.getArticleId().toString(),h1); + redisUtil.zsAdd("viewNum",article.getArticleId().toString(),h1); + redisUtil.zsAdd("likeNum",article.getArticleId().toString(),h1); + });*/ + + this.logger.info("已写入redis"); + } + + //关闭时操作 + @PreDestroy + public void afterDestroy(){ + System.out.println("关闭===================================="); + //将redis中的数据一次性写入数据库 + /*Set viewNum = redisUtil.zsReverseRangeWithScores("viewNum"); + Set commentNum = redisUtil.zsReverseRangeWithScores("commentNum"); + Set likeNum = redisUtil.zsReverseRangeWithScores("likeNum"); + this.writeNum(viewNum,"viewNum"); + this.writeNum(commentNum,"commentNum"); + this.writeNum(likeNum,"likeNum");*/ + + this.logger.info("数据库拿出到redis完毕"); + System.out.println("系统关闭===========reids->数据库更新完毕================="); + } +} diff --git a/ruoyi-segchk/src/main/resources/mapper/segchk/SegchkStoreIndexMapper.xml b/ruoyi-segchk/src/main/resources/mapper/segchk/SegchkStoreIndexMapper.xml index d2f5cbe..5689c17 100644 --- a/ruoyi-segchk/src/main/resources/mapper/segchk/SegchkStoreIndexMapper.xml +++ b/ruoyi-segchk/src/main/resources/mapper/segchk/SegchkStoreIndexMapper.xml @@ -141,6 +141,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + + + + + + select provider_id, store_id, store_carousel, sort_id from segchk_carouse_mgt @@ -553,6 +562,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" (select provider_id, store_id, store_name, store_phone, service_state, saler_id, store_addr, store_lon, store_lat, on_service, detail from segchk_store_basic_info where provider_id = #{providerId} and store_id = #{storeId}) basic left join (select provider_id, store_id, vr_url, thumb_path, service_state from segchk_store_vr_info where provider_id = #{providerId} and store_id = #{storeId} and service_state = 0) vrinfo on vrinfo.store_id = basic.store_id and vrinfo.provider_id = basic.provider_id + left join (select provider_id, store_id, store_carousel1, store_carousel2, store_carousel3, store_carousel4, store_carousel5, store_carousel6 from segchk_store_image where provider_id = #{providerId} and store_id = #{storeId}) img on img.store_id = basic.store_id and img.provider_id = basic.provider_id left join ( @@ -798,4 +808,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + \ No newline at end of file diff --git a/ruoyi-segchk/src/main/resources/mapper/segchk/SegchkUserIndexMapper.xml b/ruoyi-segchk/src/main/resources/mapper/segchk/SegchkUserIndexMapper.xml index f81ab3f..2898838 100644 --- a/ruoyi-segchk/src/main/resources/mapper/segchk/SegchkUserIndexMapper.xml +++ b/ruoyi-segchk/src/main/resources/mapper/segchk/SegchkUserIndexMapper.xml @@ -131,6 +131,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + @@ -155,6 +158,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -782,6 +786,101 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" left join (select * from segchk_store_chk_mgt where store_id = #{storeId}) sscm on suv.card_type_id = sscm.card_type_id; + + + + + insert into segchk_user_wechat diff --git a/ruoyi-segchk/test/com/ruoyi/segchk/TmpTest.java b/ruoyi-segchk/test/com/ruoyi/segchk/TmpTest.java new file mode 100644 index 0000000..d373b91 --- /dev/null +++ b/ruoyi-segchk/test/com/ruoyi/segchk/TmpTest.java @@ -0,0 +1,332 @@ +package com.ruoyi.segchk; + +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.segchk.domain.SegchkFlushCnt; +import com.ruoyi.segchk.domain.SegchkStoreCntCtrl; +import com.ruoyi.segchk.domain.StoreSelfCard; +import com.ruoyi.segchk.utils.RateRandomNumber; +import com.weixin.pay.util.AESUtil; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Import; +import org.springframework.util.ObjectUtils; +import test.core.ut.BaseDbAndRedisUnitTest; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; + +import javax.annotation.Resource; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +@Slf4j +public class TmpTest extends BaseDbAndRedisUnitTest { + + @Test + @DisplayName("测试赠卡验证") + public void test1(){ + StoreSelfCard a = new StoreSelfCard(); + a.setLikegoId(1L); + a.setTypeId(2); + a.setLableId(3L); + a.setTotalCount(10); + a.setFreeContent("aaaaa"); + boolean validate = a.isValidate(); + System.out.println(validate); +// this.likegoId != null && this.typeId != null && (this.typeId == 2 && this.lableId != null) && this.totalCount != null && (this.typeId == 1 && this.freeContent != null); + + } + + @Test + @DisplayName("测试加密") + public void test2() throws Exception { + String encryptData = AESUtil.encryptData("432871"); + System.out.println(encryptData); + + String decryptData = AESUtil.decryptData(encryptData); + System.out.println(decryptData); + System.out.println(decryptData.equals("432871")); + } + + @Test + public void test3() throws Exception { + String a = null; + Map map = JSON.parseObject(null, Map.class); + String b = ""; + Map map1 = JSON.parseObject(b, Map.class); + String c = "{'a': 'qweqweqw'}"; + Map map2 = JSON.parseObject(c, Map.class); + + System.out.println(StringUtils.format("over {}{}{}", map, map1, map2)); + String params = "{\"providerId\":2,\"storeIds\":\"2,3,5\",\"probability\":1.6,\"step\":2L}"; + String params1 = "{\"providerId\":2,\"probability\":1.6,\"step\":2}"; + String params2 = "{\"probability\":1.6,\"step\":2}"; + String params3 = "{\"providerId\":2,\"storeIds\":\"2,3,5\",\"probability\":1.6,\"step\":2,\"field\":[1,2]}"; + String params4 = "{}"; + Map map3 = JSON.parseObject(params2, Map.class); + Long providerId = Long.valueOf(String.valueOf(map3.getOrDefault("providerId", 0))); + String storeIds = String.valueOf(map3.getOrDefault("storeId", null)); + Double probability = Double.valueOf(String.valueOf(map3.getOrDefault("probability", 1.0))); + Long step = Long.valueOf(String.valueOf(map3.getOrDefault("step", 1))); + System.out.println(map3); + System.out.println(StringUtils.format("provider {}, stores {}, probability {}, step {}", providerId, storeIds, probability, step)); + + SegchkFlushCnt segchkFlushCnt = JSON.parseObject(params4, SegchkFlushCnt.class); + System.out.println(StringUtils.format("ret SegchkFlushCnt {}", segchkFlushCnt.toString())); + } + + @Test + public void test4(){ + List separates = new ArrayList(); + separates.add(1.0); + separates.add(10.0); + List percents = new ArrayList(); + percents.add(90); + percents.add(9); + percents.add(1); + for(int i=0;i<100;i++) { + double number = RateRandomNumber.produceRateRandomNumber(0.1, 100, separates, percents); + System.out.println(String.format("%.2f",number)); + } + } + + @Test + public void test5(){ + //Map> + Map> collect = Stream.of(-6, -7, -8, -9, 1, 2, 3, 4, 5, 6) + .collect(Collectors.groupingBy(integer -> { + if (integer < 0) { + return "小于"; + } else if (integer == 0) { + return "等于"; + } else { + return "大于"; + } + } + )); +//Map> +//自定义下游收集器 + Map> collect1 = Stream.of(-6, -7, -8, -9, 1, 2, 3, 4, 5, 6) + .collect(Collectors.groupingBy(integer -> { + if (integer < 0) { + return "小于"; + } else if (integer == 0) { + return "等于"; + } else { + return "大于"; + } + } + , Collectors.toSet())); +//Map> +//自定义map容器 和 下游收集器 + LinkedHashMap> collect2 = Stream.of(-6, -7, -8, -9, 1, 2, 3, 4, 5, 6) + .collect(Collectors.groupingBy(integer -> { + if (integer < 0) { + return "小于"; + } else if (integer == 0) { + return "等于"; + } else { + return "大于"; + } + } + , LinkedHashMap::new, Collectors.toSet())); + System.out.println(collect); + System.out.println(collect1); + System.out.println(collect2); + } + + @Test + public void test6(){ + HashMap map = new HashMap(); + map.put("a:2:1",9); + map.put("a:2:2",6); + map.put("a:2:3",15); + map.put("a:3:4",18); + map.put("a:3:5",16); + map.put("b:2:1",15); + map.put("b:2:3",54); + map.put("b:3:6",54); + + HashMap map1 = new HashMap(); + map1.put("c:3:5",4); + map1.put("c:2:1",5); + map1.put("d:2:3",357); + map1.put("d:3:6",57); + ConcurrentMap> collect = map.entrySet().parallelStream().map(v -> { + String[] split = v.getKey().toString().split(":"); + SegchkStoreCntCtrl tmp = new SegchkStoreCntCtrl(); + tmp.setStoreId(Long.valueOf(split[2])); + tmp.setProviderId(Long.valueOf(split[1])); + if (split[0].equalsIgnoreCase("a")) { + tmp.setBrowseCnt((Integer) v.getValue()); + } else if (split[0].equalsIgnoreCase("b")) { + tmp.setCollectCnt((Integer) v.getValue()); + } + return tmp; + }).collect(Collectors.groupingByConcurrent(SegchkStoreCntCtrl::getStoreId + , Collectors.toList() + /*, Collectors.reducing(new SegchkStoreCntCtrl(), (a, item) -> { + SegchkStoreCntCtrl tmp = ObjectUtils.isEmpty(a) ? new SegchkStoreCntCtrl() : a; + if (!ObjectUtils.isEmpty(item.getProviderId())) { + tmp.setProviderId(item.getProviderId()); + } + if (!ObjectUtils.isEmpty(item.getStoreId())) { + tmp.setStoreId(item.getStoreId()); + } + if (!ObjectUtils.isEmpty(item.getProviderId())) { + tmp.setProviderId(item.getProviderId()); + } + if (!ObjectUtils.isEmpty(item.getBrowseCnt())) { + tmp.setBrowseCnt(item.getBrowseCnt()); + } + if (!ObjectUtils.isEmpty(item.getCollectCnt())) { + tmp.setCollectCnt(item.getCollectCnt()); + } + return tmp; + }*/ + )); + /*collect.forEach((storeId, o) -> { + SegchkStoreCntCtrl segchkStoreCntCtrl = o.parallelStream().reduce((a, item) -> { + SegchkStoreCntCtrl tmp = ObjectUtils.isEmpty(a) ? new SegchkStoreCntCtrl() : a; + if (!ObjectUtils.isEmpty(item.getProviderId())) { + tmp.setProviderId(item.getProviderId()); + } + if (!ObjectUtils.isEmpty(item.getStoreId())) { + tmp.setStoreId(item.getStoreId()); + } + if (!ObjectUtils.isEmpty(item.getProviderId())) { + tmp.setProviderId(item.getProviderId()); + } + if (!ObjectUtils.isEmpty(item.getBrowseCnt())) { + tmp.setBrowseCnt(item.getBrowseCnt()); + } + if (!ObjectUtils.isEmpty(item.getCollectCnt())) { + tmp.setCollectCnt(item.getCollectCnt()); + } + return tmp; + }).get(); + return; + });*/ + System.out.println(collect); + List collect1 = collect.entrySet().parallelStream().map(entry -> { + Optional reduce = entry.getValue().stream().reduce((ret, item) -> { + SegchkStoreCntCtrl tmp = ObjectUtils.isEmpty(ret) ? new SegchkStoreCntCtrl() : ret; + if (!ObjectUtils.isEmpty(item.getProviderId())) { + tmp.setProviderId(item.getProviderId()); + } + if (!ObjectUtils.isEmpty(item.getStoreId())) { + tmp.setStoreId(item.getStoreId()); + } + if (!ObjectUtils.isEmpty(item.getProviderId())) { + tmp.setProviderId(item.getProviderId()); + } + if (!ObjectUtils.isEmpty(item.getBrowseCnt())) { + tmp.setBrowseCnt(item.getBrowseCnt()); + } + if (!ObjectUtils.isEmpty(item.getCollectCnt())) { + tmp.setCollectCnt(item.getCollectCnt()); + } + return tmp; + }); + return reduce; + }).filter(opt -> opt.isPresent()).map(opt -> opt.get()).collect(Collectors.toList()); + System.out.println(collect1); + + ConcurrentMap> collect2 = Stream.concat(map.entrySet().stream(), map1.entrySet().stream()).map(v -> { + String[] split = v.getKey().toString().split(":", -1); + Integer cnt = (Integer) v.getValue(); + Long providerId = Long.valueOf(split[1]); + Long storeId = Long.valueOf(split[2]); + SegchkStoreCntCtrl tmp = new SegchkStoreCntCtrl(); + tmp.setProviderId(providerId); + tmp.setStoreId(storeId); + if (split[0].equalsIgnoreCase("a")) { + tmp.setBrowseCnt(cnt); + } else if (split[0].equalsIgnoreCase("b")) { + tmp.setCollectCnt(cnt); + } else if (split[0].equalsIgnoreCase("c")) { + tmp.setBrowseCnt1(cnt); + } else if (split[0].equalsIgnoreCase("d")) { + tmp.setCollectCnt1(cnt); + } + return tmp; + }).parallel().collect(Collectors.groupingByConcurrent(v -> v.getStoreId(), Collectors.toList())); + + System.out.println(collect2); + List collect3 = collect2.entrySet().parallelStream().map(entry -> { + Optional reduce = entry.getValue().stream().reduce((ret, item) -> { + SegchkStoreCntCtrl tmp = ObjectUtils.isEmpty(ret) ? new SegchkStoreCntCtrl() : ret; + if (!ObjectUtils.isEmpty(item.getProviderId())) { + tmp.setProviderId(item.getProviderId()); + } + if (!ObjectUtils.isEmpty(item.getStoreId())) { + tmp.setStoreId(item.getStoreId()); + } + if (!ObjectUtils.isEmpty(item.getProviderId())) { + tmp.setProviderId(item.getProviderId()); + } + if (!ObjectUtils.isEmpty(item.getBrowseCnt())) { + tmp.setBrowseCnt(item.getBrowseCnt()); + } + if (!ObjectUtils.isEmpty(item.getCollectCnt())) { + tmp.setCollectCnt(item.getCollectCnt()); + } + return tmp; + }); + return reduce; + }).filter(opt -> opt.isPresent()).map(opt -> opt.get()).collect(Collectors.toList()); + System.out.println(collect3); + } + + @Test + @DisplayName("测试对象map聚合") + public void test7(){ + SegchkStoreCntCtrl a = new SegchkStoreCntCtrl(); + a.setProviderId(1L); + a.setStoreId(1L); + a.setBookCnt(2); + a.setBookCnt1(3); + a.setCollectCnt(3); + a.setCollectCnt1(4); + a.setBrowseCnt(5); + + SegchkStoreCntCtrl b = new SegchkStoreCntCtrl(); + b.setProviderId(1L); + b.setStoreId(2L); + b.setBookCnt(6); + b.setBookCnt1(7); + b.setCollectCnt(8); + b.setCollectCnt1(9); + b.setBrowseCnt1(10); + + List list = new ArrayList(); + list.add(a); + list.add(b); + List mapList = list.parallelStream().map(v -> v.getRedisMap(0)).collect(Collectors.toList()); + Map tmpmap = new HashMap(); + tmpmap.put("collect_cnt:1:2", 11); + mapList.add(tmpmap); + + Map collect = (Map) mapList + .stream() + .flatMap(v -> v.entrySet().stream()) + .map(v -> (Map.Entry) v) + .collect(Collectors.toMap( + v1 -> ((Map.Entry) v1).getKey() + , v1 -> ((Map.Entry) v1).getValue() + , (m, n) -> m >= n ? m : n)); + /*.collect(Collectors.toConcurrentMap(v1 -> ((Map.Entry) v1).getKey() + , v1 -> ((Map.Entry) v1).getValue()));*/ + /*.collect(HashMap::new, (x, y) -> { + Map.Entry entry = (Map.Entry) y; + ((HashMap) x).put(entry.getKey(), entry.getValue()); + }, HashMap::putAll);*/ + System.out.println(collect); + } +} diff --git a/ruoyi-segchk/test/com/ruoyi/segchk/mapper/SegchkProviderIndexMapperTest.java b/ruoyi-segchk/test/com/ruoyi/segchk/mapper/SegchkProviderIndexMapperTest.java new file mode 100644 index 0000000..e2784be --- /dev/null +++ b/ruoyi-segchk/test/com/ruoyi/segchk/mapper/SegchkProviderIndexMapperTest.java @@ -0,0 +1,67 @@ +package com.ruoyi.segchk.mapper; + +import com.ruoyi.framework.config.MyBatisConfig; +import com.ruoyi.segchk.domain.SegchkUserWebReq; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Import; +import org.springframework.test.context.ActiveProfiles; +import test.core.ut.BaseDbAndRedisUnitTest; + +import javax.annotation.Resource; + +import static org.junit.jupiter.api.Assertions.*; + +@Import({SegchkProviderIndexMapper.class, SegchkUserWebReq.class, MyBatisConfig.class}) +//@ActiveProfiles("unit-test") +@ComponentScan(basePackages = "com.ruoyi.segchk.**.*Mapper") +class SegchkProviderIndexMapperTest extends BaseDbAndRedisUnitTest { + + @Autowired + private SegchkProviderIndexMapper segchkProviderIndexMapper; + + @BeforeEach + void setUp() { + + } + + @AfterEach + void tearDown() { + } + + @Test + @DisplayName("selectSegchkProviderWebInfo") + void selectSegchkProviderWebInfo() { + SegchkUserWebReq segchkUserWebReq = new SegchkUserWebReq(); + segchkUserWebReq.setProviderId(3L); + segchkProviderIndexMapper.selectSegchkProviderWebInfo(segchkUserWebReq); + } + + @Test + void selectSegchkStoreServiceList() { + } + + @Test + void selectSegchkStoreSaleList() { + } + + @Test + void selectSegchkStoreServiceDetails() { + } + + @Test + void selectSegchkStoreSaleDetails() { + } + + @Test + void selectProviderOpenIdById() { + } + + @Test + void selectSegchkProviderName() { + } +} \ No newline at end of file diff --git a/ruoyi-segchk/test/com/ruoyi/segchk/service/impl/ISegchkStoreIndexServiceImplTest.java b/ruoyi-segchk/test/com/ruoyi/segchk/service/impl/ISegchkStoreIndexServiceImplTest.java new file mode 100644 index 0000000..6d28290 --- /dev/null +++ b/ruoyi-segchk/test/com/ruoyi/segchk/service/impl/ISegchkStoreIndexServiceImplTest.java @@ -0,0 +1,41 @@ +package com.ruoyi.segchk.service.impl; + +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.segchk.domain.SegchkStoreStatus; +import com.ruoyi.segchk.mapper.SegchkStoreIndexMapper; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Test; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Import; +import test.core.ut.BaseDbAndRedisUnitTest; + +import javax.annotation.Resource; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import static org.junit.jupiter.api.Assertions.*; + +@Slf4j +@Import({ISegchkStoreIndexServiceImpl.class, RedisCache.class}) +@ComponentScan(basePackages = {"com.ruoyi.segchk.mapper"}) +class ISegchkStoreIndexServiceImplTest extends BaseDbAndRedisUnitTest { + +// @Resource +// private ISegchkStoreIndexServiceImpl segchkStoreIndexService; + + @Resource + private RedisCache redisService; + + @Test + void testRediswithBoolean() { + Boolean aaa = true; + redisService.setCacheObject("test:boolean:true", aaa); + } + + @Test + void orderCheckTransaction() { + System.out.println("adsfadf"); + } +} \ No newline at end of file diff --git a/ruoyi-segchk/test/com/ruoyi/segchk/service/impl/SegchkProviderIndexServiceImplTest.java b/ruoyi-segchk/test/com/ruoyi/segchk/service/impl/SegchkProviderIndexServiceImplTest.java new file mode 100644 index 0000000..fe9dc80 --- /dev/null +++ b/ruoyi-segchk/test/com/ruoyi/segchk/service/impl/SegchkProviderIndexServiceImplTest.java @@ -0,0 +1,34 @@ +package com.ruoyi.segchk.service.impl; + +import com.ruoyi.common.core.redis.RedisCache; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.springframework.context.annotation.Import; +import test.core.ut.BaseDbAndRedisUnitTest; + +import javax.annotation.Resource; + +@Import({RedisCache.class}) +public class SegchkProviderIndexServiceImplTest extends BaseDbAndRedisUnitTest { + + @Resource + private RedisCache redisService; + + + @Test + public void test1(){ + System.out.println("adfsd"); + Boolean aaa = true; + redisService.setCacheObject("test:boolean:true", aaa); + } + + @Test + public void test2() throws ClassNotFoundException { + String type = "java.lang.Boolean"; + Object a = true; + + Class cast = Class.forName(type).getClass().cast(a); + } +} \ No newline at end of file diff --git a/ruoyi-segchk/test/resources/application-unit-test.yaml b/ruoyi-segchk/test/resources/application-unit-test.yaml new file mode 100644 index 0000000..1c2638f --- /dev/null +++ b/ruoyi-segchk/test/resources/application-unit-test.yaml @@ -0,0 +1,59 @@ +spring: + main: + lazy-initialization: true # 开启懒加载,加快速度 + banner-mode: off # 单元测试,禁用 Banner + +--- #################### 数据库相关配置 #################### + +spring: + # 数据源配置项 + datasource: + name: ruoyi-vue-pro + url: jdbc:mysql://192.168.2.30:8306/kaletest?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true + driver-class-name: com.mysql.cj.jdbc.Driver + username: kaletest_yinzy + password: XMG2-Rel.2 + druid: + async-init: true # 单元测试,异步初始化 Druid 连接池,提升启动速度 + initial-size: 1 # 单元测试,配置为 1,提升启动速度 +# sql: +# init: +# schema-locations: classpath:/sql/create_tables.sql + + # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 + redis: + host: 192.168.2.40 # 地址 + port: 63795 # 端口(单元测试,使用 16379 端口) + database: 3 # 数据库索引 + # 密码 + password: seg_123456 + # 连接超时时间 + timeout: 10s + +mybatis: + lazy-initialization: true # 单元测试,设置 MyBatis Mapper 延迟加载,加速每个单元测试 + + # 搜索指定包别名 + typeAliasesPackage: com.ruoyi.**.domain + # 配置mapper的扫描,找到所有的mapper.xml映射文件 + mapperLocations: classpath*:mapper/**/*Mapper.xml + # 加载全局的配置文件 + configLocation: classpath:mybatis/mybatis-config.xml +--- #################### 定时任务相关配置 #################### + +--- #################### 配置中心相关配置 #################### + +--- #################### 服务保障相关配置 #################### + +# Lock4j 配置项(单元测试,禁用 Lock4j) + +# Resilience4j 配置项 + +--- #################### 监控相关配置 #################### + +--- #################### 芋道相关配置 #################### + +# 芋道配置项,设置当前项目所有自定义的配置 +yudao: + info: + base-package: cn.iocoder.yudao.module diff --git a/ruoyi-segchk/test/resources/logback.xml b/ruoyi-segchk/test/resources/logback.xml new file mode 100644 index 0000000..daf756b --- /dev/null +++ b/ruoyi-segchk/test/resources/logback.xml @@ -0,0 +1,4 @@ + + + + diff --git a/ruoyi-segchk/test/resources/mybatis/mybatis-config.xml b/ruoyi-segchk/test/resources/mybatis/mybatis-config.xml new file mode 100644 index 0000000..5500599 --- /dev/null +++ b/ruoyi-segchk/test/resources/mybatis/mybatis-config.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/core/TestImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/core/TestImpl.java new file mode 100644 index 0000000..1a4e8bb --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/core/TestImpl.java @@ -0,0 +1,4 @@ +package com.ruoyi.segchk.core; + +public @interface TestImpl { +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkFlushCnt.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkFlushCnt.java new file mode 100644 index 0000000..5b1203a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkFlushCnt.java @@ -0,0 +1,63 @@ +package com.ruoyi.segchk.domain; + +import java.util.ArrayList; + +public class SegchkFlushCnt { + private Long providerId = 0L; + private String storeIds = null; + private Double probability = 1.0; + private Integer step = 1; + private ArrayList field = null; + + public String getStoreIds() { + return storeIds; + } + + public ArrayList getField() { + return field; + } + + public void setField(ArrayList field) { + this.field = field; + } + + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public Double getProbability() { + return probability; + } + + public void setProbability(Double probability) { + this.probability = probability; + } + + public Integer getStep() { + return step; + } + + public void setStep(Integer step) { + this.step = step; + } + + public void setStoreIds(String storeIds) { + this.storeIds = storeIds; + } + + @Override + public String toString() { + return "SegchkFlushCnt{" + + "providerId=" + providerId + + ", storeIds='" + storeIds + '\'' + + ", probability=" + probability + + ", step=" + step + + ", field=" + field + + '}'; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkMsgWebResp.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkMsgWebResp.java deleted file mode 100644 index d477638..0000000 --- a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkMsgWebResp.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.ruoyi.segchk.domain; - -import com.fasterxml.jackson.annotation.JsonFormat; -import com.ruoyi.common.annotation.Excel; -import com.ruoyi.common.core.domain.BaseEntity; - -import java.util.Date; - -/** - * seg用户奖励对象 segchk_user_reward - * - * @author yinzhiying - * @date 2021-07-01 - */ -public class SegchkMsgWebResp extends BaseEntity -{ - private static final long serialVersionUID = 1L; - - /** 消息类型,0系统消息,1交易消息,2提醒消息,3评价消息,4核消消息 */ - @Excel(name = "消息类型,0系统消息,1交易消息,2提醒消息,3评价消息,4核消消息") - private String msgType; - - /** 消息内容 */ - @Excel(name = "消息内容") - private String msgContent; - - /** 消息标题 */ - @Excel(name = "消息标题") - private String msgTitle; - - - /** 消息状态,0未发送,1,未读,2已读,3删除 */ - @Excel(name = "消息状态,0未发送,1,未读,2已读,3删除") - private String msgFlag; - - /** 接收时间 */ - @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss") - @Excel(name = "接收时间", width = 30, dateFormat = "yyyy-MM-dd hh:mm:ss") - private Date fromTime; - - public String getMsgType() { - return msgType; - } - - public void setMsgType(String msgType) { - this.msgType = msgType; - } - - public String getMsgContent() { - return msgContent; - } - - public void setMsgContent(String msgContent) { - this.msgContent = msgContent; - } - - public String getMsgTitle() { - return msgTitle; - } - - public void setMsgTitle(String msgTitle) { - this.msgTitle = msgTitle; - } - - public String getMsgFlag() { - return msgFlag; - } - - public void setMsgFlag(String msgFlag) { - this.msgFlag = msgFlag; - } - - public Date getFromTime() { - return fromTime; - } - - public void setFromTime(Date fromTime) { - this.fromTime = fromTime; - } - - @Override - public String toString() { - return "SegchkMsgWebResp{" + - "msgType='" + msgType + '\'' + - ", msgContent='" + msgContent + '\'' + - ", msgTitle='" + msgTitle + '\'' + - ", msgFlag='" + msgFlag + '\'' + - ", fromTime=" + fromTime + - '}'; - } -} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkProviderCntCtrl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkProviderCntCtrl.java new file mode 100644 index 0000000..09671cc --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkProviderCntCtrl.java @@ -0,0 +1,124 @@ +package com.ruoyi.segchk.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg运营商流量管控对象 segchk_provider_cnt_ctrl + * + * @author yinzhiying + * @date 2022-06-26 + */ +public class SegchkProviderCntCtrl extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** vr标识,全局唯一 */ + private Long cntId; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 浏览量,大于0表示生效 */ + @Excel(name = "浏览量,大于0表示生效") + private Integer browseCnt; + + /** 收藏次数,大于0表示生效 */ + @Excel(name = "收藏次数,大于0表示生效") + private Integer collectCnt; + + /** 预约次数,0无效,1有效 */ + @Excel(name = "预约次数,0无效,1有效") + private Integer bookCnt; + + /** 管理状态,0有效,1失效 */ + @Excel(name = "管理状态,0有效,1失效") + private String mgtState; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + public void setCntId(Long cntId) + { + this.cntId = cntId; + } + + public Long getCntId() + { + return cntId; + } + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setBrowseCnt(Integer browseCnt) + { + this.browseCnt = browseCnt; + } + + public Integer getBrowseCnt() + { + return browseCnt; + } + public void setCollectCnt(Integer collectCnt) + { + this.collectCnt = collectCnt; + } + + public Integer getCollectCnt() + { + return collectCnt; + } + public void setBookCnt(Integer bookCnt) + { + this.bookCnt = bookCnt; + } + + public Integer getBookCnt() + { + return bookCnt; + } + public void setMgtState(String mgtState) + { + this.mgtState = mgtState; + } + + public String getMgtState() + { + return mgtState; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("cntId", getCntId()) + .append("providerId", getProviderId()) + .append("browseCnt", getBrowseCnt()) + .append("collectCnt", getCollectCnt()) + .append("bookCnt", getBookCnt()) + .append("mgtState", getMgtState()) + .append("modTime", getModTime()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkProviderMgt.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkProviderMgt.java index 29efd6a..74917b6 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkProviderMgt.java +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkProviderMgt.java @@ -2,6 +2,9 @@ package com.ruoyi.segchk.domain; import java.util.List; import java.util.Date; +import java.util.StringJoiner; +import java.util.stream.Collectors; + import com.fasterxml.jackson.annotation.JsonFormat; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; @@ -50,6 +53,18 @@ public class SegchkProviderMgt extends BaseEntity @Excel(name = "状态,0正常,1失效,2删除") private Integer flagId; + /** 非会员能否使用赠卡,默认否0;能1 */ + @Excel(name = "默认否0;能1") + private Integer useSelfCardWithNovip; + + /** 是否允许商家赠卡,0否1一个用户只能持有一张2用户可持有多张 */ + @Excel(name = "商家赠卡用户") + private Integer canGiveSelf; + + /** 用户预约的有效时长(小时)0长期,正数有效 */ + @Excel(name = "用户预约的有效时长") + private Integer bookLiveHour; + /** 区县行政代码 */ @Excel(name = "区县行政代码") private Integer districtId; @@ -162,6 +177,14 @@ public class SegchkProviderMgt extends BaseEntity this.wechatId = wechatId; } + public Integer getUseSelfCardWithNovip() { + return useSelfCardWithNovip; + } + + public void setUseSelfCardWithNovip(Integer useSelfCardWithNovip) { + this.useSelfCardWithNovip = useSelfCardWithNovip; + } + @Override public String toString() { return "SegchkProviderMgt{" + @@ -173,9 +196,26 @@ public class SegchkProviderMgt extends BaseEntity ", iconUrl='" + iconUrl + '\'' + ", phoneNo='" + phoneNo + '\'' + ", flagId=" + flagId + + ", useSelfCardWithNovip=" + useSelfCardWithNovip + ", districtId=" + districtId + ", delTime=" + delTime + - ", segchkLableMgtList=" + segchkLableMgtList + + ", segchkLableMgtList=" + segchkLableMgtList.stream().map(x -> x.getCardTypeName()).collect(Collectors.joining(",")) + '}'; } + + public Integer getCanGiveSelf() { + return canGiveSelf; + } + + public void setCanGiveSelf(Integer canGiveSelf) { + this.canGiveSelf = canGiveSelf; + } + + public Integer getBookLiveHour() { + return bookLiveHour; + } + + public void setBookLiveHour(Integer bookLiveHour) { + this.bookLiveHour = bookLiveHour; + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkRecommenderStoreWebResp.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkRecommenderStoreWebResp.java deleted file mode 100644 index 85d54ab..0000000 --- a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkRecommenderStoreWebResp.java +++ /dev/null @@ -1,182 +0,0 @@ -package com.ruoyi.segchk.domain; - -import com.ruoyi.common.annotation.Excel; -import com.ruoyi.common.core.domain.BaseEntity; - -import javax.validation.Valid; -import java.math.BigDecimal; -import java.util.List; - -/** - * seg返回首页推荐商户对象 segchk_recommender_storeweb - * - * @author yinzhiying - * @date 2021-07-01 - */ -public class SegchkRecommenderStoreWebResp extends BaseEntity -{ - private static final long serialVersionUID = 1L; - - /** 运营商id,全局唯一 */ - @Excel(name = "运营商id,全局唯一") - private Long providerId; - - /** 商家id,全局唯一 */ - @Excel(name = "商家id,全局唯一") - private Long storeId; - - /** 商家名称 */ - @Excel(name = "商家名称") - private String storeName; - - /** 商户显示序号 */ - @Excel(name = "商户显示序号") - private Integer storeSort; - - /** 商户列表模式时的图标 */ - @Excel(name = "商户列表模式时的图标") - private String storeIcon; - - /** 商户的大图标 */ - @Excel(name = "商户的大图标") - private String storeGificon; - - /** 商户经度 */ - @Excel(name = "商户经度") - private BigDecimal storeLon; - - /** 商户纬度 */ - @Excel(name = "商户纬度") - private BigDecimal storeLat; - - /** 商户累积核消次数 */ - @Excel(name = "商户累积核消次数") - private Integer chkCount; - - /** 商户平均星评 */ - @Excel(name = "商户平均星评") - private BigDecimal starAvg; - - /** 用户距离 */ - @Excel(name = "用户距离") - private BigDecimal userDist; - - - /** 商户标签列表 */ - @Valid - private List lables; - - public Long getProviderId() { - return providerId; - } - - public void setProviderId(Long providerId) { - this.providerId = providerId; - } - - public Long getStoreId() { - return storeId; - } - - public void setStoreId(Long storeId) { - this.storeId = storeId; - } - - public Integer getStoreSort() { - return storeSort; - } - - public void setStoreSort(Integer storeSort) { - this.storeSort = storeSort; - } - - public String getStoreIcon() { - return storeIcon; - } - - public void setStoreIcon(String storeIcon) { - this.storeIcon = storeIcon; - } - - public String getStoreGificon() { - return storeGificon; - } - - public void setStoreGificon(String storeGificon) { - this.storeGificon = storeGificon; - } - - public BigDecimal getStoreLon() { - return storeLon; - } - - public void setStoreLon(BigDecimal storeLon) { - this.storeLon = storeLon; - } - - public BigDecimal getStoreLat() { - return storeLat; - } - - public void setStoreLat(BigDecimal storeLat) { - this.storeLat = storeLat; - } - - public Integer getChkCount() { - return chkCount; - } - - public void setChkCount(Integer chkCount) { - this.chkCount = chkCount; - } - - public BigDecimal getStarAvg() { - return starAvg; - } - - public void setStarAvg(BigDecimal starAvg) { - this.starAvg = starAvg; - } - - public List getLables() { - return lables; - } - - public void setLables(List lables) { - this.lables = lables; - } - - public String getStoreName() { - return storeName; - } - - public void setStoreName(String storeName) { - this.storeName = storeName; - } - - @Override - public String toString() { - return "SegchkRecommenderStoreWebResp{" + - "providerId=" + providerId + - ", storeId=" + storeId + - ", storeName=" + storeName + - ", storeSort=" + storeSort + - ", storeIcon='" + storeIcon + '\'' + - ", storeGificon='" + storeGificon + '\'' + - ", storeLon=" + storeLon + - ", storeLat=" + storeLat + - ", chkCount=" + chkCount + - ", starAvg=" + starAvg + - ", lables=" + lables + - ", userDist=" + userDist + - '}'; - } - - public BigDecimal getUserDist() { - return userDist; - } - - public void setUserDist(BigDecimal userDist) { - this.userDist = userDist; - } -} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceAndSaleDetailWebResp.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceAndSaleDetailWebResp.java deleted file mode 100644 index 4cfe77a..0000000 --- a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceAndSaleDetailWebResp.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.ruoyi.segchk.domain; - -import com.fasterxml.jackson.annotation.JsonFormat; -import com.ruoyi.common.annotation.Excel; -import com.ruoyi.common.core.domain.BaseEntity; - -import java.util.Date; - -/** - * seg用户基本信息对象 segchk_user_basic_info - * - * @author yinzhiying - * @date 2021-07-01 - */ -public class SegchkServiceAndSaleDetailWebResp extends BaseEntity -{ - private static final long serialVersionUID = 1L; - - /** 创建或修改时间 */ - @JsonFormat(pattern = "yyyy-MM-dd") - @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") - private Date modTime; - - /** 会员卡号 */ - @Excel(name = "会员卡号") - private Long cardId; - - /** 卡类型名称 */ - @Excel(name = "卡类型名称") - private String cardName; - - /** 商家名称 */ - @Excel(name = "商家名称") - private String storeName; - - /** 统计结果 */ - @Excel(name = "统计结果") - private Long staticCount; - - public Date getModTime() { - return modTime; - } - - public void setModTime(Date modTime) { - this.modTime = modTime; - } - - public Long getCardId() { - return cardId; - } - - public void setCardId(Long cardId) { - this.cardId = cardId; - } - - public String getCardName() { - return cardName; - } - - public void setCardName(String cardName) { - this.cardName = cardName; - } - - public String getStoreName() { - return storeName; - } - - public void setStoreName(String storeName) { - this.storeName = storeName; - } - - public Long getStaticCount() { - return staticCount; - } - - public void setStaticCount(Long staticCount) { - this.staticCount = staticCount; - } - - @Override - public String toString() { - return "SegchkServiceAndSaleDetailWebResp{" + - "modTime=" + modTime + - ", cardId=" + cardId + - ", cardName='" + cardName + '\'' + - ", storeName='" + storeName + '\'' + - ", staticCount=" + staticCount + - '}'; - } -} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceAndSaleWebReq.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceAndSaleWebReq.java deleted file mode 100644 index a1ebce6..0000000 --- a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceAndSaleWebReq.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.ruoyi.segchk.domain; - -import com.ruoyi.common.annotation.Excel; -import com.ruoyi.common.core.domain.BaseEntity; - -/** - * seg用户基本信息对象 segchk_user_basic_info - * - * @author yinzhiying - * @date 2021-07-01 - */ -public class SegchkServiceAndSaleWebReq extends BaseEntity -{ - private static final long serialVersionUID = 1L; - - /** 运营商id,全局唯一 */ - @Excel(name = "运营商id,全局唯一") - private Long providerId; - - /** 商户id */ - @Excel(name = "商户id") - private Long storeId; - - /** 统计等级,0按月统计,1按月查询统计 */ - @Excel(name = "统计等级") - private Integer staticLevel; - - /** 统计月份,只在staticLevel为1时有效,0时为统计的月数 */ - @Excel(name = "统计月份") - private String staticMonth; - - /** 用户身份,0运营商,1商家 */ - @Excel(name = "用户身份") - private Integer userLevel; - - /** 数据源选择,0核消,1售卡 */ - @Excel(name = "数据源选择") - private Integer srcFlag; - - public Long getProviderId() { - return providerId; - } - - public void setProviderId(Long providerId) { - this.providerId = providerId; - } - - public Long getStoreId() { - return storeId; - } - - public void setStoreId(Long storeId) { - this.storeId = storeId; - } - - public Integer getStaticLevel() { - return staticLevel; - } - - public void setStaticLevel(Integer staticLevel) { - this.staticLevel = staticLevel; - } - - public String getStaticMonth() { - return staticMonth; - } - - public void setStaticMonth(String staticMonth) { - this.staticMonth = staticMonth; - } - - public Integer getUserLevel() { - return userLevel; - } - - public void setUserLevel(Integer userLevel) { - this.userLevel = userLevel; - } - - @Override - public String toString() { - return "SegchkServiceAndSaleWebReq{" + - "providerId=" + providerId + - ", storeId=" + storeId + - ", staticLevel='" + staticLevel + '\'' + - ", staticMonth='" + staticMonth + '\'' + - ", userLevel=" + userLevel + - '}'; - } - - public Integer getSrcFlag() { - return srcFlag; - } - - public void setSrcFlag(Integer srcFlag) { - this.srcFlag = srcFlag; - } -} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceAndSaleWebResp.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceAndSaleWebResp.java deleted file mode 100644 index 245db7b..0000000 --- a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceAndSaleWebResp.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.ruoyi.segchk.domain; - -import com.ruoyi.common.annotation.Excel; -import com.ruoyi.common.core.domain.BaseEntity; - -/** - * seg用户基本信息对象 segchk_user_basic_info - * - * @author yinzhiying - * @date 2021-07-01 - */ -public class SegchkServiceAndSaleWebResp extends BaseEntity -{ - private static final long serialVersionUID = 1L; - - - /** 统计月份,只在staticLevel为1时有效 */ - @Excel(name = "统计月份") - private String staticMonth; - - /** staticMonth与staticMonth同义,只是为yyyy-mm-01使用查询具备详单时使用 */ - @Excel(name = "统计月份") - private String queryMon; - - /** 统计结果 */ - @Excel(name = "统计结果") - private Long staticCount; - - public String getStaticMonth() { - return staticMonth; - } - - public void setStaticMonth(String staticMonth) { - this.staticMonth = staticMonth; - } - - public Long getStaticCount() { - return staticCount; - } - - public void setStaticCount(Long staticCount) { - this.staticCount = staticCount; - } - - public String getQueryMon() { - return queryMon; - } - - public void setQueryMon(String queryMon) { - this.queryMon = queryMon; - } - - @Override - public String toString() { - return "SegchkServiceAndSaleWebResp{" + - "staticMonth='" + staticMonth + '\'' + - ", queryMon='" + queryMon + '\'' + - ", staticCount=" + staticCount + - '}'; - } -} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceCommentWebResp.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceCommentWebResp.java deleted file mode 100644 index 6efaa49..0000000 --- a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceCommentWebResp.java +++ /dev/null @@ -1,116 +0,0 @@ -package com.ruoyi.segchk.domain; - -import com.fasterxml.jackson.annotation.JsonFormat; -import com.ruoyi.common.annotation.Excel; -import com.ruoyi.common.core.domain.BaseEntity; - -import java.util.Date; - -/** - * seg评价记录对象 segchk_service_comment - * - * @author yinzhiying - * @date 2021-07-01 - */ -public class SegchkServiceCommentWebResp extends BaseEntity -{ - private static final long serialVersionUID = 1L; - - /** 商家id,全局唯一 */ - @Excel(name = "商家id,全局唯一") - private Long storeId; - - /** 星级评价 */ - @Excel(name = "星级评价") - private Integer starLevel; - - /** 评价内容 */ - @Excel(name = "评价内容") - private String contentText; - - /** 创建或修改时间 */ - @JsonFormat(pattern = "yyyy-MM-dd") - @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") - private Date modTime; - - /** 运营商id,全局唯一 */ - @Excel(name = "运营商id,全局唯一") - private Long providerId; - - /** 充值卡id */ - @Excel(name = "充值卡名称") - private String cardName; - - /** 用户id,全局唯一 */ - @Excel(name = "用户id,全局唯一") - private String userName; - - public Long getStoreId() { - return storeId; - } - - public void setStoreId(Long storeId) { - this.storeId = storeId; - } - - public Integer getStarLevel() { - return starLevel; - } - - public void setStarLevel(Integer starLevel) { - this.starLevel = starLevel; - } - - public String getContentText() { - return contentText; - } - - public void setContentText(String contentText) { - this.contentText = contentText; - } - - public Date getModTime() { - return modTime; - } - - public void setModTime(Date modTime) { - this.modTime = modTime; - } - - public Long getProviderId() { - return providerId; - } - - public void setProviderId(Long providerId) { - this.providerId = providerId; - } - - public String getCardName() { - return cardName; - } - - public void setCardName(String cardName) { - this.cardName = cardName; - } - - public String getUserName() { - return userName; - } - - public void setUserName(String userName) { - this.userName = userName; - } - - @Override - public String toString() { - return "SegchkServiceCommentWebResp{" + - "storeId=" + storeId + - ", starLevel=" + starLevel + - ", contentText='" + contentText + '\'' + - ", modTime=" + modTime + - ", providerId=" + providerId + - ", cardName='" + cardName + '\'' + - ", userName='" + userName + '\'' + - '}'; - } -} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceOrderChkTestResp.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceOrderChkTestResp.java index 90bee67..08ab4f8 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceOrderChkTestResp.java +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceOrderChkTestResp.java @@ -50,14 +50,18 @@ public class SegchkServiceOrderChkTestResp extends BaseEntity @Excel(name = "我想去订单核消卡名称") private String cardName; - /** 我想去订单核消卡可使用次数 */ + /** 我想去订单核消卡针对该商家可使用次数 */ @Excel(name = "我想去订单核消卡可使用次数") private Integer totalCount; - /** 我想去订单核消卡剩余次数 */ + /** 我想去订单核消卡针对该商家剩余次数 */ @Excel(name = "我想去订单核消卡剩余次数") private Integer hasLeftCount; + /** 我想去订单会员卡剩余次数 */ + @Excel(name = "会员卡剩余次数") + private Integer vipLeftCount; + /** 我想去订单核消卡状态 */ @Excel(name = "我想去订单核消卡状态") private Integer cardStatus; @@ -204,6 +208,7 @@ public class SegchkServiceOrderChkTestResp extends BaseEntity ", cardName='" + cardName + '\'' + ", totalCount=" + totalCount + ", hasLeftCount=" + hasLeftCount + + ", vipLeftCount=" + vipLeftCount + ", cardStatus=" + cardStatus + ", canFree=" + canFree + ", isExpire=" + isExpire + @@ -219,4 +224,12 @@ public class SegchkServiceOrderChkTestResp extends BaseEntity public void setLikegoId(Long likegoId) { this.likegoId = likegoId; } + + public Integer getVipLeftCount() { + return vipLeftCount; + } + + public void setVipLeftCount(Integer vipLeftCount) { + this.vipLeftCount = vipLeftCount; + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceOrderWebReq.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceOrderWebReq.java deleted file mode 100644 index f12f38b..0000000 --- a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceOrderWebReq.java +++ /dev/null @@ -1,112 +0,0 @@ -package com.ruoyi.segchk.domain; - -import com.ruoyi.common.annotation.Excel; -import com.ruoyi.common.core.domain.BaseEntity; - -/** - * seg用户基本信息对象 segchk_user_basic_info - * - * @author yinzhiying - * @date 2021-07-01 - */ -public class SegchkServiceOrderWebReq extends BaseEntity -{ - private static final long serialVersionUID = 1L; - - /** 运营商id */ - @Excel(name = "运营商id") - private Long providerId; - - /** 商户id */ - @Excel(name = "商户id") - private Long storeId; - - /** 用户id */ - @Excel(name = "用户id") - private Long userId; - - /** 卡id */ - @Excel(name = "卡id") - private Long cardId; - - /** 会员卡或优惠券下的标签id */ - @Excel(name = "会员卡或优惠券下的标签id") - private Integer lableId; - - /** 卡类型 0 会员卡,1赠卡,2优惠券 */ - @Excel(name = "卡类型") - private Integer typeId; - - /** 卡名称 */ - @Excel(name = "卡名称") - private String cardName; - - public Long getProviderId() { - return providerId; - } - - public void setProviderId(Long providerId) { - this.providerId = providerId; - } - - public Long getStoreId() { - return storeId; - } - - public void setStoreId(Long storeId) { - this.storeId = storeId; - } - - public Long getUserId() { - return userId; - } - - public void setUserId(Long userId) { - this.userId = userId; - } - - public Long getCardId() { - return cardId; - } - - public void setCardId(Long cardId) { - this.cardId = cardId; - } - - public Integer getLableId() { - return lableId; - } - - public void setLableId(Integer lableId) { - this.lableId = lableId; - } - - public Integer getTypeId() { - return typeId; - } - - public void setTypeId(Integer typeId) { - this.typeId = typeId; - } - - public String getCardName() { - return cardName; - } - - public void setCardName(String cardName) { - this.cardName = cardName; - } - - @Override - public String toString() { - return "SegchkServiceOrderWebReq{" + - "providerId=" + providerId + - ", storeId=" + storeId + - ", userId=" + userId + - ", cardId=" + cardId + - ", lableId=" + lableId + - ", typeId=" + typeId + - ", cardName='" + cardName + '\'' + - '}'; - } -} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreBasicInfo.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreBasicInfo.java index d1a8d9a..8963e35 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreBasicInfo.java +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreBasicInfo.java @@ -3,6 +3,8 @@ package com.ruoyi.segchk.domain; import java.math.BigDecimal; import java.util.List; import java.util.Date; +import java.util.Map; + import com.fasterxml.jackson.annotation.JsonFormat; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; @@ -95,6 +97,10 @@ public class SegchkStoreBasicInfo extends BaseEntity @Excel(name = "是否人工干预,0自动,1人工") private String stateFlag; + /** 非会员能否使用赠卡,默认否0;能1 */ + @Excel(name = "默认否0;能1") + private Integer useSelfCardWithNovip; + /** 商家经度 */ @Excel(name = "商家经度") private BigDecimal storeLon; @@ -111,11 +117,17 @@ public class SegchkStoreBasicInfo extends BaseEntity @Excel(name = "商家描述详情") private String detail; + /** 商家VR地址 */ + @Excel(name = "商家VR地址") + private String vrPath; + /** 创建或修改时间 */ @JsonFormat(pattern = "yyyy-MM-dd") @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") private Date modTime; + private SegchkStoreCntCtrl segchkStoreCntCtrl = null; + /** seg商家图片信息信息 */ private List segchkStoreImageList; @@ -400,15 +412,51 @@ public class SegchkStoreBasicInfo extends BaseEntity ", cashDay=" + cashDay + ", serviceDownThreshold=" + serviceDownThreshold + ", stateFlag='" + stateFlag + '\'' + + ", useSelfCardWithNovip='" + useSelfCardWithNovip + '\'' + ", storeLon=" + storeLon + ", storeLat=" + storeLat + ", onService='" + onService + '\'' + ", detail='" + detail + '\'' + ", modTime=" + modTime + - ", segchkStoreImageList=" + segchkStoreImageList + - ", segchkStoreChkMgtList=" + segchkStoreChkMgtList + - ", segchkStoreLableMgtList=" + segchkStoreLableMgtList + - ", segchkStoreSecurityList=" + segchkStoreSecurityList + '}'; } + + public String getVrPath() { + return vrPath; + } + + public void setVrPath(String vrPath) { + this.vrPath = vrPath; + } + + public String getVRInfo(){ + return "SegchkStoreVRInfo{" + + "providerId=" + providerId + + ", storeId=" + storeId + + ", vrPath='" + vrPath + + '}'; + } + + public Integer getUseSelfCardWithNovip() { + return useSelfCardWithNovip; + } + + public void setUseSelfCardWithNovip(Integer useSelfCardWithNovip) { + this.useSelfCardWithNovip = useSelfCardWithNovip; + } + + public SegchkStoreCntCtrl getSegchkStoreCntCtrl() { + return segchkStoreCntCtrl; + } + + public void setSegchkStoreCntCtrl(SegchkStoreCntCtrl segchkStoreCntCtrl) { + this.segchkStoreCntCtrl = segchkStoreCntCtrl; + } + + public void setStoreCount(Long providerId, SegchkProviderCntCtrl segchkProviderCntCtrl, Map wechatCount, Map wechatCount1) { + this.segchkStoreCntCtrl = new SegchkStoreCntCtrl(); + this.segchkStoreCntCtrl.setProviderId(providerId); + this.segchkStoreCntCtrl.setStoreId(this.storeId); + this.segchkStoreCntCtrl.setAllCnt(segchkProviderCntCtrl, wechatCount, wechatCount1); + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreCntCtrl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreCntCtrl.java new file mode 100644 index 0000000..6e0451f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreCntCtrl.java @@ -0,0 +1,240 @@ +package com.ruoyi.segchk.domain; + +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.utils.StringUtils; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg商家流量管控对象 segchk_store_cnt_ctrl + * + * @author yinzhiying + * @date 2022-06-26 + */ +public class SegchkStoreCntCtrl extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** vr标识,全局唯一 */ + private Long cntId; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 商家ID,全局唯一 */ + @Excel(name = "商家ID,全局唯一") + private Long storeId; + + /** 浏览量,大于0表示生效 */ + @Excel(name = "浏览量,大于0表示生效") + private Integer browseCnt; + + /** 浏览备份 */ + @Excel(name = "浏览备份") + private Integer browseCnt1; + + /** 收藏次数,大于0表示生效 */ + @Excel(name = "收藏次数,大于0表示生效") + private Integer collectCnt; + + /** 收藏备份 */ + @Excel(name = "收藏备份") + private Integer collectCnt1; + + /** 预约次数 */ + @Excel(name = "预约次数") + private Integer bookCnt; + + /** 预约次数 */ + @Excel(name = "预约次数") + private Integer bookCnt1; + + /** 管理状态,0有效,1失效 */ + @Excel(name = "管理状态,0有效,1失效") + private String mgtState; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + public static Integer getRedisStoreCnt(String key, Long providerId, int segchkProviderCntCtrl, Map wechatCount, Map wechatCount1) { + return null; + } + + protected static Integer getRedisStoreCnt(String key, Long providerId, Long storeId, Map map) { + return ObjectUtils.isEmpty(map) ? 0 : (Integer) map.getOrDefault(StringUtils.format("{}:{}:{}", key, providerId, storeId), 0); + } + + public void setCntId(Long cntId) + { + this.cntId = cntId; + } + + public Long getCntId() + { + return cntId; + } + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setStoreId(Long storeId) + { + this.storeId = storeId; + } + + public Long getStoreId() + { + return storeId; + } + public void setBrowseCnt(Integer browseCnt) + { + this.browseCnt = browseCnt; + } + + public Integer getBrowseCnt() + { + return browseCnt; + } + public void setBrowseCnt1(Integer browseCnt1) + { + this.browseCnt1 = browseCnt1; + } + + public Integer getBrowseCnt1() + { + return browseCnt1; + } + public void setCollectCnt(Integer collectCnt) + { + this.collectCnt = collectCnt; + } + + public Integer getCollectCnt() + { + return collectCnt; + } + public void setCollectCnt1(Integer collectCnt1) + { + this.collectCnt1 = collectCnt1; + } + + public Integer getCollectCnt1() + { + return collectCnt1; + } + public void setBookCnt(Integer bookCnt) + { + this.bookCnt = bookCnt; + } + + public Integer getBookCnt() + { + return bookCnt; + } + public void setBookCnt1(Integer bookCnt1) + { + this.bookCnt1 = bookCnt1; + } + + public Integer getBookCnt1() + { + return bookCnt1; + } + public void setMgtState(String mgtState) + { + this.mgtState = mgtState; + } + + public String getMgtState() + { + return mgtState; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("cntId", getCntId()) + .append("providerId", getProviderId()) + .append("storeId", getStoreId()) + .append("browseCnt", getBrowseCnt()) + .append("browseCnt1", getBrowseCnt1()) + .append("collectCnt", getCollectCnt()) + .append("collectCnt1", getCollectCnt1()) + .append("bookCnt", getBookCnt()) + .append("bookCnt1", getBookCnt1()) + .append("mgtState", getMgtState()) + .append("modTime", getModTime()) + .toString(); + } + + public Map getRedisMap(int flag){ + Map map = new HashMap<>(); + if(flag == 0){ + if (!ObjectUtils.isEmpty(this.bookCnt)) { + map.put("book_cnt" + ":" + this.providerId + ":" + this.storeId, this.bookCnt); + } + if (!ObjectUtils.isEmpty(this.browseCnt)) { + map.put("browse_cnt" + ":" + this.providerId + ":" + this.storeId, this.browseCnt); + } + if (!ObjectUtils.isEmpty(this.collectCnt)) { + map.put("collect_cnt" + ":" + this.providerId + ":" + this.storeId, this.collectCnt); + } + } + else { + if (!ObjectUtils.isEmpty(this.bookCnt1)) { + map.put("book_cnt1" + ":" + this.providerId + ":" + this.storeId, this.bookCnt1); + } + if (!ObjectUtils.isEmpty(this.browseCnt1)) { + map.put("browse_cnt1" + ":" + this.providerId + ":" + this.storeId, this.browseCnt1); + } + if (!ObjectUtils.isEmpty(this.collectCnt1)) { + map.put("collect_cnt1" + ":" + this.providerId + ":" + this.storeId, this.collectCnt1); + } + } + + return map; + } + + public void setAllCnt(SegchkProviderCntCtrl segchkProviderCntCtrl, Map wechatCount, Map wechatCount1) { + this.setBrowseCnt(getRedisStoreCnt("browse_cnt", this.providerId, this.storeId, wechatCount)); + this.setCollectCnt(getRedisStoreCnt("collect_cnt", this.providerId, this.storeId, wechatCount)); + this.setBookCnt(getRedisStoreCnt("book_cnt", this.providerId, this.storeId, wechatCount)); + this.setBrowseCnt1(getRedisStoreCnt("browse_cnt1", this.providerId, this.storeId, wechatCount1)); + this.setCollectCnt1(getRedisStoreCnt("collect_cnt1", this.providerId, this.storeId, wechatCount1)); + this.setBookCnt1(getRedisStoreCnt("book_cnt1", this.providerId, this.storeId, wechatCount1)); + } + + public long updateBrowse() { + return this.browseCnt - this.browseCnt1; + } + public long updateCollect() { + return this.collectCnt - this.collectCnt1; + } + public long updateBook() { + return this.bookCnt - this.bookCnt1; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreCntResp.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreCntResp.java new file mode 100644 index 0000000..542a085 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreCntResp.java @@ -0,0 +1,123 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.annotation.Excel; +import org.springframework.util.ObjectUtils; + +import java.util.Map; + +/** + * seg商家流量管控对象 segchk_store_cnt_ctrl + * + * @author yinzhiying + * @date 2022-06-26 + */ +public class SegchkStoreCntResp extends SegchkStoreCntCtrl { + private static final long serialVersionUID = 1L; + + /** + * vr标识,全局唯一 + */ + private Long cntId; + + /** + * 运营商id,全局唯一 + */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** + * 商家ID,全局唯一 + */ + @Excel(name = "商家ID,全局唯一") + private Long storeId; + + /** + * 浏览量,大于0表示生效 + */ + @Excel(name = "浏览量,大于0表示生效") + private Integer browseCnt = 0; + + /** + * 收藏次数,大于0表示生效 + */ + @Excel(name = "收藏次数,大于0表示生效") + private Integer collectCnt = 0; + + /** + * 预约次数 + */ + @Excel(name = "预约次数") + private Integer bookCnt = 0; + + public Long getCntId() { + return this.cntId; + } + + public void setCntId(Long cntId) { + this.cntId = cntId; + } + + public Long getProviderId() { + return this.providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public Long getStoreId() { + return this.storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + public Integer getBrowseCnt() { + return this.browseCnt; + } + + public void setBrowseCnt(Integer browseCnt) { + this.browseCnt = browseCnt; + } + + public Integer getCollectCnt() { + return this.collectCnt; + } + + public void setCollectCnt(Integer collectCnt) { + this.collectCnt = collectCnt; + } + + public Integer getBookCnt() { + return this.bookCnt; + } + + public void setBookCnt(Integer bookCnt) { + this.bookCnt = bookCnt; + } + + @Override + public String toString() { + return "SegchkStoreCntResp{{" + super.toString() + "}, " + + "serialVersionUID=" + serialVersionUID + ", " + + "cntId=" + cntId + ", " + + "providerId=" + providerId + ", " + + "storeId=" + storeId + ", " + + "browseCnt=" + browseCnt + ", " + + "collectCnt=" + collectCnt + ", " + + "bookCnt=" + bookCnt + "}"; + } + + @Override + public void setAllCnt(SegchkProviderCntCtrl segchkProviderCntCtrl, Map wechatCount, Map wechatCount1) { + this.setBrowseCnt(SegchkStoreCntCtrl.getRedisStoreCnt("browse_cnt", this.providerId, this.storeId, wechatCount) + + ((ObjectUtils.isEmpty(segchkProviderCntCtrl) || segchkProviderCntCtrl.getBrowseCnt() == 0) ? 0 : SegchkStoreCntCtrl.getRedisStoreCnt("browse_cnt1", this.providerId, this.storeId, wechatCount1))); + + this.setCollectCnt(SegchkStoreCntCtrl.getRedisStoreCnt("collect_cnt", this.providerId, this.storeId, wechatCount) + + ((ObjectUtils.isEmpty(segchkProviderCntCtrl) || segchkProviderCntCtrl.getCollectCnt() == 0) ? 0 : SegchkStoreCntCtrl.getRedisStoreCnt("collect_cnt1", this.providerId, this.storeId, wechatCount1))); + + this.setBookCnt(SegchkStoreCntCtrl.getRedisStoreCnt("book_cnt", this.providerId, this.storeId, wechatCount) + + ((ObjectUtils.isEmpty(segchkProviderCntCtrl) || segchkProviderCntCtrl.getBookCnt() == 0) ? 0 : SegchkStoreCntCtrl.getRedisStoreCnt("book_cnt1", this.providerId, this.storeId, wechatCount1))); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreIndexWebResp.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreIndexWebResp.java deleted file mode 100644 index 8dd6873..0000000 --- a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreIndexWebResp.java +++ /dev/null @@ -1,209 +0,0 @@ -package com.ruoyi.segchk.domain; - -import com.ruoyi.common.annotation.Excel; -import com.ruoyi.common.core.domain.BaseEntity; - -import javax.validation.Valid; -import java.math.BigDecimal; -import java.util.List; - -/** - * seg返回首页推荐商户对象 segchk_recommender_storeweb - * - * @author yinzhiying - * @date 2021-07-01 - */ -public class SegchkStoreIndexWebResp extends BaseEntity -{ - private static final long serialVersionUID = 1L; - - /** 运营商id,全局唯一 */ - @Excel(name = "运营商id,全局唯一") - private Long providerId; - - /** 商家id,全局唯一 */ - @Excel(name = "商家id,全局唯一") - private Long storeId; - - /** 商家名称 */ - @Excel(name = "商家名称") - private String storeName; - - /** 商家状态 */ - @Excel(name = "商家状态") - private String serviceState; - - /** 商户显示序号 */ - @Excel(name = "商户显示序号") - private Integer storeSort; - - /** 商户列表模式时的图标 */ - @Excel(name = "商户列表模式时的图标") - private String storeIcon; - - /** 商户的大图标 */ - @Excel(name = "商户的大图标") - private String storeGificon; - - /** 商户经度 */ - @Excel(name = "商户经度") - private BigDecimal storeLon; - - /** 商户纬度 */ - @Excel(name = "商户纬度") - private BigDecimal storeLat; - - /** 用户距离 */ - @Excel(name = "用户距离") - private BigDecimal userDist; - - /** 商户累积核消次数 */ - @Excel(name = "商户累积核消次数") - private Integer chkCount; - - /** 商户平均星评 */ - @Excel(name = "商户平均星评") - private BigDecimal starAvg; - - /** 在线状态 */ - @Excel(name = "对应的销售id") - private Integer salerId; - - - /** 商户标签列表 */ - @Valid - private List lables; - - public Long getProviderId() { - return providerId; - } - - public void setProviderId(Long providerId) { - this.providerId = providerId; - } - - public Long getStoreId() { - return storeId; - } - - public void setStoreId(Long storeId) { - this.storeId = storeId; - } - - public Integer getStoreSort() { - return storeSort; - } - - public void setStoreSort(Integer storeSort) { - this.storeSort = storeSort; - } - - public String getStoreIcon() { - return storeIcon; - } - - public void setStoreIcon(String storeIcon) { - this.storeIcon = storeIcon; - } - - public String getStoreGificon() { - return storeGificon; - } - - public void setStoreGificon(String storeGificon) { - this.storeGificon = storeGificon; - } - - public BigDecimal getStoreLon() { - return storeLon; - } - - public void setStoreLon(BigDecimal storeLon) { - this.storeLon = storeLon; - } - - public BigDecimal getStoreLat() { - return storeLat; - } - - public void setStoreLat(BigDecimal storeLat) { - this.storeLat = storeLat; - } - - public Integer getChkCount() { - return chkCount; - } - - public void setChkCount(Integer chkCount) { - this.chkCount = chkCount; - } - - public BigDecimal getStarAvg() { - return starAvg; - } - - public void setStarAvg(BigDecimal starAvg) { - this.starAvg = starAvg; - } - - public List getLables() { - return lables; - } - - public void setLables(List lables) { - this.lables = lables; - } - - public String getStoreName() { - return storeName; - } - - public void setStoreName(String storeName) { - this.storeName = storeName; - } - - - public String getServiceState() { - return serviceState; - } - - public void setServiceState(String serviceState) { - this.serviceState = serviceState; - } - - public Integer getSalerId() { - return salerId; - } - - public void setSalerId(Integer salerId) { - this.salerId = salerId; - } - - @Override - public String toString() { - return "SegchkStoreIndexWebResp{" + - "providerId=" + providerId + - ", storeId=" + storeId + - ", storeName='" + storeName + '\'' + - ", serviceState='" + serviceState + '\'' + - ", storeSort=" + storeSort + - ", storeIcon='" + storeIcon + '\'' + - ", storeGificon='" + storeGificon + '\'' + - ", storeLon=" + storeLon + - ", storeLat=" + storeLat + - ", chkCount=" + chkCount + - ", starAvg=" + starAvg + - ", salerId=" + salerId + - ", lables=" + lables + - ", userDist=" + userDist + - '}'; - } - - public BigDecimal getUserDist() { - return userDist; - } - - public void setUserDist(BigDecimal userDist) { - this.userDist = userDist; - } -} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreSelfMgt.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreSelfMgt.java index 144144d..1b70176 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreSelfMgt.java +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreSelfMgt.java @@ -26,6 +26,11 @@ public class SegchkStoreSelfMgt extends BaseEntity @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") private Date modTime; + /** 截止时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "截止时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date expirationDate; + /** 商家id,全局唯一 */ @Excel(name = "商家id,全局唯一") private Long storeId; @@ -193,6 +198,7 @@ public class SegchkStoreSelfMgt extends BaseEntity return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) .append("freeCardId", getFreeCardId()) .append("modTime", getModTime()) + .append("expirationDate", getExpirationDate()) .append("storeId", getStoreId()) .append("providerId", getProviderId()) .append("userId", getUserId()) @@ -206,4 +212,12 @@ public class SegchkStoreSelfMgt extends BaseEntity .append("status", getStatus()) .toString(); } + + public Date getExpirationDate() { + return expirationDate; + } + + public void setExpirationDate(Date expirationDate) { + this.expirationDate = expirationDate; + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreStatus.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreStatus.java new file mode 100644 index 0000000..edf01a5 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreStatus.java @@ -0,0 +1,103 @@ +package com.ruoyi.segchk.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.util.Date; + +/** + * seg商家状态信息 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkStoreStatus extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 商家id,全局唯一 */ + private Long storeId; + + /** 服务状态,0在线,1下线 */ + @Excel(name = "服务状态,0在线,1下线") + private String serviceState; + + /** 是否发送通知消息,0发送,1不发送 */ + @Excel(name = "是否发送通知消息,0发送,1不发送") + private String withMsg; + + /** 是否人工干预,0自动,1人工 */ + @Excel(name = "是否人工干预,0自动,1人工") + private String stateFlag; + + /** 非会员能否使用赠卡,默认否0;能1 */ + @Excel(name = "默认否0;能1") + private Integer useSelfCardWithNovip; + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + public String getServiceState() { + return serviceState; + } + + public void setServiceState(String serviceState) { + this.serviceState = serviceState; + } + + public String getWithMsg() { + return withMsg; + } + + public void setWithMsg(String withMsg) { + this.withMsg = withMsg; + } + + public String getStateFlag() { + return stateFlag; + } + + public void setStateFlag(String stateFlag) { + this.stateFlag = stateFlag; + } + + public Integer getUseSelfCardWithNovip() { + return useSelfCardWithNovip; + } + + public void setUseSelfCardWithNovip(Integer useSelfCardWithNovip) { + this.useSelfCardWithNovip = useSelfCardWithNovip; + } + + @Override + public String toString() { + return "SegchkStoreStatus{" + + "providerId=" + providerId + + ", storeId=" + storeId + + ", serviceState='" + serviceState + '\'' + + ", withMsg='" + withMsg + '\'' + + ", stateFlag='" + stateFlag + '\'' + + ", useSelfCardWithNovip=" + useSelfCardWithNovip + + '}'; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreVrInfo.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreVrInfo.java new file mode 100644 index 0000000..94ce941 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreVrInfo.java @@ -0,0 +1,123 @@ +package com.ruoyi.segchk.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; +import java.util.StringJoiner; + +/** + * seg商家基础信息对象 segchk_store_basic_info + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkStoreVrInfo extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 商家id,全局唯一 */ + private Long storeId; + + /** VR id,全局唯一 */ + private Long vrId; + + /** VR地址 */ + @Excel(name = "VR地址") + private String vrUrl; + + /** 图标地址 */ + @Excel(name = "图标地址") + private String thumbPath; + + /** 服务状态,0在线,1下线 */ + @Excel(name = "服务状态,0在线,1下线") + private String serviceState; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + public void getfromBasic(SegchkStoreBasicInfo segchkStoreBasicInfo) { + this.providerId = segchkStoreBasicInfo.getProviderId(); + this.storeId = segchkStoreBasicInfo.getStoreId(); + this.vrUrl = segchkStoreBasicInfo.getVrPath(); + } + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + public Long getVrId() { + return vrId; + } + + public void setVrId(Long vrId) { + this.vrId = vrId; + } + + public String getVrUrl() { + return vrUrl; + } + + public void setVrUrl(String vrUrl) { + this.vrUrl = vrUrl; + } + + public String getThumbPath() { + return thumbPath; + } + + public void setThumbPath(String thumbPath) { + this.thumbPath = thumbPath; + } + + public String getServiceState() { + return serviceState; + } + + public void setServiceState(String serviceState) { + this.serviceState = serviceState; + } + + public Date getModTime() { + return modTime; + } + + public void setModTime(Date modTime) { + this.modTime = modTime; + } + + @Override + public String toString() { + return new StringJoiner(", ", SegchkStoreVrInfo.class.getSimpleName() + "[", "]") + .add("providerId=" + providerId) + .add("storeId=" + storeId) + .add("vrId=" + vrId) + .add("vrUrl='" + vrUrl + "'") + .add("thumbPath='" + thumbPath + "'") + .add("serviceState='" + serviceState + "'") + .add("modTime=" + modTime) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserCashWebResp.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserCashWebResp.java deleted file mode 100644 index 2390fee..0000000 --- a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserCashWebResp.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.ruoyi.segchk.domain; - -import com.fasterxml.jackson.annotation.JsonFormat; -import com.ruoyi.common.annotation.Excel; -import com.ruoyi.common.core.domain.BaseEntity; - -import java.math.BigDecimal; -import java.util.Date; - -/** - * seg用户奖励对象 segchk_user_reward - * - * @author yinzhiying - * @date 2021-07-01 - */ -public class SegchkUserCashWebResp extends BaseEntity -{ - private static final long serialVersionUID = 1L; - - /** 用户id,全局唯一 */ - @Excel(name = "用户id,全局唯一") - private BigDecimal cash; - - /** 奖励卡号 */ - @Excel(name = "奖励卡号") - private String retFlag; - - /** 创建或修改时间 */ - @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss") - @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd hh:mm:ss") - private Date modTime; - - - public BigDecimal getCash() { - return cash; - } - - public void setCash(BigDecimal cash) { - this.cash = cash; - } - - public String getRetFlag() { - return retFlag; - } - - public void setRetFlag(String retFlag) { - this.retFlag = retFlag; - } - - public Date getModTime() { - return modTime; - } - - public void setModTime(Date modTime) { - this.modTime = modTime; - } - - @Override - public String toString() { - return "SegchkUserCashWebResp{" + - "cash=" + cash + - ", retFlag='" + retFlag + '\'' + - ", modTime=" + modTime + - '}'; - } -} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserChargeCard.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserChargeCard.java deleted file mode 100644 index b27b0eb..0000000 --- a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserChargeCard.java +++ /dev/null @@ -1,153 +0,0 @@ -package com.ruoyi.segchk.domain; - -import com.ruoyi.common.annotation.Excel; -import com.ruoyi.common.core.domain.BaseEntity; - -import java.math.BigDecimal; - -/** - * seg用户充值可选卡对象 SegchkUserChargeCard - * - * @author yinzhiying - * @date 2021-07-30 - */ -public class SegchkUserChargeCard extends BaseEntity -{ - private static final long serialVersionUID = 1L; - - /** 运营商id */ - @Excel(name = "运营商id") - private Long providerId; - - /** 卡类型id */ - @Excel(name = "卡类型id") - private Long cardTypeId; - - /** 会员卡id */ - @Excel(name = "会员卡id") - private Long cardId; - - /** 会员卡名称 */ - @Excel(name = "会员卡名称") - private String cardTypeName; - - /** 已购买次数 */ - @Excel(name = "已购买次数") - private Integer hadBuy; - - /** 可购买次数 */ - @Excel(name = "可购买次数") - private Integer buyCount; - - /** 会员卡面值 */ - @Excel(name = "会员卡面值") - private BigDecimal cardTypeValue; - - /** 是否可以购买,0可,1有卡正在使用,2购买次数超限 */ - @Excel(name = "是否可以购买") - private Integer canBuy; - - /** 会员卡权益次数 */ - @Excel(name = "会员卡权益次数") - private Integer cardTypeChkcount; - - /** 会员卡有效天数 */ - @Excel(name = "会员卡有效天数") - private Integer effectiveTime; - - public Long getProviderId() { - return providerId; - } - - public void setProviderId(Long providerId) { - this.providerId = providerId; - } - - public Long getCardTypeId() { - return cardTypeId; - } - - public void setCardTypeId(Long cardTypeId) { - this.cardTypeId = cardTypeId; - } - - public Long getCardId() { - return cardId; - } - - public void setCardId(Long cardId) { - this.cardId = cardId; - } - - public String getCardTypeName() { - return cardTypeName; - } - - public void setCardTypeName(String cardTypeName) { - this.cardTypeName = cardTypeName; - } - - public Integer getHadBuy() { - return hadBuy; - } - - public void setHadBuy(Integer hadBuy) { - this.hadBuy = hadBuy; - } - - public Integer getBuyCount() { - return buyCount; - } - - public void setBuyCount(Integer buyCount) { - this.buyCount = buyCount; - } - - public BigDecimal getCardTypeValue() { - return cardTypeValue; - } - - public void setCardTypeValue(BigDecimal cardTypeValue) { - this.cardTypeValue = cardTypeValue; - } - - public Integer getCanBuy() { - return canBuy; - } - - public void setCanBuy(Integer canBuy) { - this.canBuy = canBuy; - } - - public Integer getCardTypeChkcount() { - return cardTypeChkcount; - } - - public void setCardTypeChkcount(Integer cardTypeChkcount) { - this.cardTypeChkcount = cardTypeChkcount; - } - - public Integer getEffectiveTime() { - return effectiveTime; - } - - public void setEffectiveTime(Integer effectiveTime) { - this.effectiveTime = effectiveTime; - } - - @Override - public String toString() { - return "SegchkUserChargeCard{" + - "providerId=" + providerId + - ", cardTypeId=" + cardTypeId + - ", cardId=" + cardId + - ", cardTypeName='" + cardTypeName + '\'' + - ", hadBuy=" + hadBuy + - ", buyCount=" + buyCount + - ", cardTypeValue=" + cardTypeValue + - ", canBuy=" + canBuy + - ", cardTypeChkcount=" + cardTypeChkcount + - ", effectiveTime=" + effectiveTime + - '}'; - } -} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserChargeWebResp.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserChargeWebResp.java deleted file mode 100644 index 201c238..0000000 --- a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserChargeWebResp.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.ruoyi.segchk.domain; - -import com.fasterxml.jackson.annotation.JsonFormat; -import com.ruoyi.common.annotation.Excel; -import com.ruoyi.common.core.domain.BaseEntity; - -import java.math.BigDecimal; -import java.util.Date; - -/** - * seg用户奖励对象 segchk_user_reward - * - * @author yinzhiying - * @date 2021-07-01 - */ -public class SegchkUserChargeWebResp extends BaseEntity -{ - private static final long serialVersionUID = 1L; - - /** 用户id,全局唯一 */ - @Excel(name = "用户id,全局唯一") - private BigDecimal charge; - - /** 奖励类型 */ - @Excel(name = "奖励类型") - private String cardName; - - /** 奖励卡号 */ - @Excel(name = "奖励卡号") - private String retFlag; - - /** 创建或修改时间 */ - @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss") - @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd hh:mm:ss") - private Date modTime; - - public BigDecimal getCharge() { - return charge; - } - - public void setCharge(BigDecimal charge) { - this.charge = charge; - } - - public String getCardName() { - return cardName; - } - - public void setCardName(String cardName) { - this.cardName = cardName; - } - - public String getRetFlag() { - return retFlag; - } - - public void setRetFlag(String retFlag) { - this.retFlag = retFlag; - } - - public Date getModTime() { - return modTime; - } - - public void setModTime(Date modTime) { - this.modTime = modTime; - } - - @Override - public String toString() { - return "SegchkUserChargeWebResp{" + - "charge=" + charge + - ", cardName='" + cardName + '\'' + - ", retFlag=" + retFlag + - ", modTime=" + modTime + - '}'; - } -} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserCollectWebResp.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserCollectWebResp.java deleted file mode 100644 index 259ca96..0000000 --- a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserCollectWebResp.java +++ /dev/null @@ -1,185 +0,0 @@ -package com.ruoyi.segchk.domain; - -import com.fasterxml.jackson.annotation.JsonFormat; -import com.ruoyi.common.annotation.Excel; -import com.ruoyi.common.core.domain.BaseEntity; - -import javax.validation.Valid; -import java.math.BigDecimal; -import java.util.Date; -import java.util.List; - -/** - * seg会员卡对象 segchk_user_vip - * - * @author yinzhiying - * @date 2021-07-01 - */ -public class SegchkUserCollectWebResp extends BaseEntity -{ - private static final long serialVersionUID = 1L; - - /** 收藏id */ - @Excel(name = "收藏id") - private Long collectId; - - /** 运营商id,全局唯一 */ - @Excel(name = "运营商id,全局唯一") - private Long providerId; - - /** 商家id */ - @Excel(name = "商家id,全局惟一") - private Long storeId; - - /** 商家名称 */ - @Excel(name = "商家名称") - private String storeName; - - /** 商家图标 */ - @Excel(name = "会员卡类型,0--9块9,1---99") - private String storeIcon; - - /** 用户id,全局唯一 */ - @Excel(name = "用户id,全局唯一") - private Long serviceState; - - /** 用户id,全局唯一 */ - @Excel(name = "用户id,全局唯一") - private BigDecimal storeLon; - - /** 用户id,全局唯一 */ - @Excel(name = "用户id,全局唯一") - private BigDecimal storeLat; - - /** 用户id,全局唯一 */ - @Excel(name = "用户id,全局唯一") - private Long chkCount; - - /** 用户id,全局唯一 */ - @Excel(name = "用户id,全局唯一") - private BigDecimal starAvg; - - - /** 创建或修改时间 */ - @JsonFormat(pattern = "yyyy-MM-dd") - @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") - private Date modTime; - - /** 商户标签列表 */ - @Valid - private List segchkRecommenderStoreLableWebList; - - public Long getCollectId() { - return collectId; - } - - public void setCollectId(Long collectId) { - this.collectId = collectId; - } - - public Long getProviderId() { - return providerId; - } - - public void setProviderId(Long providerId) { - this.providerId = providerId; - } - - public Long getStoreId() { - return storeId; - } - - public void setStoreId(Long storeId) { - this.storeId = storeId; - } - - public String getStoreName() { - return storeName; - } - - public void setStoreName(String storeName) { - this.storeName = storeName; - } - - public String getStoreIcon() { - return storeIcon; - } - - public void setStoreIcon(String storeIcon) { - this.storeIcon = storeIcon; - } - - public Long getServiceState() { - return serviceState; - } - - public void setServiceState(Long serviceState) { - this.serviceState = serviceState; - } - - public BigDecimal getStoreLon() { - return storeLon; - } - - public void setStoreLon(BigDecimal storeLon) { - this.storeLon = storeLon; - } - - public BigDecimal getStoreLat() { - return storeLat; - } - - public void setStoreLat(BigDecimal storeLat) { - this.storeLat = storeLat; - } - - public Long getChkCount() { - return chkCount; - } - - public void setChkCount(Long chkCount) { - this.chkCount = chkCount; - } - - public BigDecimal getStarAvg() { - return starAvg; - } - - public void setStarAvg(BigDecimal starAvg) { - this.starAvg = starAvg; - } - - public Date getModTime() { - return modTime; - } - - public void setModTime(Date modTime) { - this.modTime = modTime; - } - - public List getSegchkRecommenderStoreLableWebList() { - return segchkRecommenderStoreLableWebList; - } - - public void setSegchkRecommenderStoreLableWebList(List segchkRecommenderStoreLableWebList) { - this.segchkRecommenderStoreLableWebList = segchkRecommenderStoreLableWebList; - } - - @Override - public String toString() { - return "SegchkUserCollectWebResp{" + - "collectId=" + collectId + - ", providerId=" + providerId + - ", storeId=" + storeId + - ", storeName='" + storeName + '\'' + - ", storeIcon='" + storeIcon + '\'' + - ", serviceState=" + serviceState + - ", storeLon=" + storeLon + - ", storeLat=" + storeLat + - ", chkCount=" + chkCount + - ", starAvg=" + starAvg + - ", modTime=" + modTime + - ", segchkRecommenderStoreLableWebList=" + segchkRecommenderStoreLableWebList + - '}'; - } -} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserLikeGoWebResp.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserLikeGoWebResp.java deleted file mode 100644 index c2fde46..0000000 --- a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserLikeGoWebResp.java +++ /dev/null @@ -1,237 +0,0 @@ -package com.ruoyi.segchk.domain; - -import com.fasterxml.jackson.annotation.JsonFormat; -import com.ruoyi.common.annotation.Excel; -import com.ruoyi.common.core.domain.BaseEntity; - -import javax.validation.Valid; -import java.math.BigDecimal; -import java.util.Date; -import java.util.List; - -/** - * seg会员卡对象 segchk_user_vip - * - * @author yinzhiying - * @date 2021-07-01 - */ -public class SegchkUserLikeGoWebResp extends BaseEntity -{ - private static final long serialVersionUID = 1L; - - /** 想去id */ - @Excel(name = "想去id") - private Long likegoId; - - /** 运营商id,全局唯一 */ - @Excel(name = "运营商id,全局唯一") - private Long providerId; - - /** 商家id */ - @Excel(name = "商家id,全局惟一") - private Long storeId; - - /** 会员卡id */ - @Excel(name = "会员卡id,充值卡或自定义卡") - private Long cardId; - - /** 用户id */ - @Excel(name = "用户id,全局惟一") - private Long userId; - - /** 商家名称 */ - @Excel(name = "商家名称") - private String storeName; - - /** 卡名称 */ - @Excel(name = "卡名称") - private String cardName; - - /** 二维码 */ - @Excel(name = "二维码") - private String qrCode; - - /** 商家小图标 */ - @Excel(name = "商家小图标") - private String storeIcon; - - /** 商家服务状态,是否在线 */ - @Excel(name = "商家服务状态") - private Long serviceState; - - /** 商家经度 */ - @Excel(name = "商家经度") - private BigDecimal storeLon; - - /** 商家纬度 */ - @Excel(name = "商家纬度") - private BigDecimal storeLat; - - /** 商家累积核次数 */ - @Excel(name = "商家累积核次数") - private Long chkCount; - - /** 用户id,全局唯一 */ - @Excel(name = "用户id,全局唯一") - private BigDecimal starAvg; - - - /** 预约时间 */ - @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss") - @Excel(name = "预约时间", width = 30, dateFormat = "yyyy-MM-dd hh:mm:ss") - private Date modTime; - - /** 商户标签列表 */ - @Valid - private List segchkRecommenderStoreLableWebList; - - public Long getLikegoId() { - return likegoId; - } - - public void setLikegoId(Long likegoId) { - this.likegoId = likegoId; - } - - public Long getProviderId() { - return providerId; - } - - public void setProviderId(Long providerId) { - this.providerId = providerId; - } - - public Long getStoreId() { - return storeId; - } - - public void setStoreId(Long storeId) { - this.storeId = storeId; - } - - public Long getCardId() { - return cardId; - } - - public void setCardId(Long cardId) { - this.cardId = cardId; - } - - public Long getUserId() { - return userId; - } - - public void setUserId(Long userId) { - this.userId = userId; - } - - public String getStoreName() { - return storeName; - } - - public void setStoreName(String storeName) { - this.storeName = storeName; - } - - public String getCardName() { - return cardName; - } - - public void setCardName(String cardName) { - this.cardName = cardName; - } - - public String getQrCode() { - return qrCode; - } - - public void setQrCode(String qrCode) { - this.qrCode = qrCode; - } - - public String getStoreIcon() { - return storeIcon; - } - - public void setStoreIcon(String storeIcon) { - this.storeIcon = storeIcon; - } - - public Long getServiceState() { - return serviceState; - } - - public void setServiceState(Long serviceState) { - this.serviceState = serviceState; - } - - public BigDecimal getStoreLon() { - return storeLon; - } - - public void setStoreLon(BigDecimal storeLon) { - this.storeLon = storeLon; - } - - public BigDecimal getStoreLat() { - return storeLat; - } - - public void setStoreLat(BigDecimal storeLat) { - this.storeLat = storeLat; - } - - public Long getChkCount() { - return chkCount; - } - - public void setChkCount(Long chkCount) { - this.chkCount = chkCount; - } - - public BigDecimal getStarAvg() { - return starAvg; - } - - public void setStarAvg(BigDecimal starAvg) { - this.starAvg = starAvg; - } - - public Date getModTime() { - return modTime; - } - - public void setModTime(Date modTime) { - this.modTime = modTime; - } - - public List getSegchkRecommenderStoreLableWebList() { - return segchkRecommenderStoreLableWebList; - } - - public void setSegchkRecommenderStoreLableWebList(List segchkRecommenderStoreLableWebList) { - this.segchkRecommenderStoreLableWebList = segchkRecommenderStoreLableWebList; - } - - @Override - public String toString() { - return "SegchkUserLikeGoWebResp{" + - "likegoId=" + likegoId + - ", providerId=" + providerId + - ", storeId=" + storeId + - ", cardId=" + cardId + - ", userId=" + userId + - ", storeName='" + storeName + '\'' + - ", cardName='" + cardName + '\'' + - ", qrCode='" + qrCode + '\'' + - ", storeIcon='" + storeIcon + '\'' + - ", serviceState=" + serviceState + - ", storeLon=" + storeLon + - ", storeLat=" + storeLat + - ", chkCount=" + chkCount + - ", starAvg=" + starAvg + - ", modTime=" + modTime + - ", segchkRecommenderStoreLableWebList=" + segchkRecommenderStoreLableWebList + - '}'; - } -} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserLikego.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserLikego.java index a3685ea..b9161f2 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserLikego.java +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserLikego.java @@ -41,6 +41,10 @@ public class SegchkUserLikego extends BaseEntity @Excel(name = "卡类型id,0充值卡,1商家赠卡,2优惠券卡") private Integer cardType; + /** 子标签id, cardType为1时为0无效,其他有效 */ + @Excel(name = "子标签id") + private Integer lableId; + /** 预约二维码 */ @Excel(name = "预约二维码") private String qrCode; @@ -54,6 +58,10 @@ public class SegchkUserLikego extends BaseEntity @Excel(name = "管理状态,0有效,1失效,2已使用") private Integer mgtState; + /** 赠卡标识,0否,1可,2已赠,只有在mgtState为2时有效 */ + @Excel(name = "赠卡标识") + private Integer canGiveSelf; + public void setLikegoId(Long likegoId) { this.likegoId = likegoId; @@ -148,6 +156,23 @@ public class SegchkUserLikego extends BaseEntity .append("qrCode", getQrCode()) .append("modTime", getModTime()) .append("mgtState", getMgtState()) + .append("canGiveSelf", getCanGiveSelf()) .toString(); } + + public Integer getLableId() { + return lableId; + } + + public void setLableId(Integer lableId) { + this.lableId = lableId; + } + + public Integer getCanGiveSelf() { + return canGiveSelf; + } + + public void setCanGiveSelf(Integer canGiveSelf) { + this.canGiveSelf = canGiveSelf; + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserSetInfoReq.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserSetInfoReq.java deleted file mode 100644 index 60658e6..0000000 --- a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserSetInfoReq.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.ruoyi.segchk.domain; - -import com.ruoyi.common.annotation.Excel; -import com.ruoyi.common.core.domain.BaseEntity; - -/** - * seg用户修改信息对象 SegchkUserSetInfoReq - * - * @author yinzhiying - * @date 2021-07-01 - */ -public class SegchkUserSetInfoReq extends BaseEntity -{ - private static final long serialVersionUID = 1L; - - /** 用户id,全局唯一 */ - @Excel(name = "用户id,全局唯一") - private Long userId; - - /** 密码 */ - @Excel(name = "密码") - private String passwd; - - /** 密码id,全表唯一 */ - @Excel(name = "密码id,全表唯一") - private Long pwdId; - - /** 运营商id,全局唯一 */ - @Excel(name = "运营商id,全局唯一") - private Long providerId; - - /** 用户手机号 */ - @Excel(name = "用户手机号") - private String phoneNo; - - /** 用户等级 */ - @Excel(name = "用户等级") - private Integer userLevel; - - public void setUserId(Long userId) - { - this.userId = userId; - } - - public Long getUserId() - { - return userId; - } - public void setPasswd(String passwd) - { - this.passwd = passwd; - } - - public void setPwdId(Long pwdId) - { - this.pwdId = pwdId; - } - - public Long getPwdId() - { - return pwdId; - } - public void setProviderId(Long providerId) - { - this.providerId = providerId; - } - - public Long getProviderId() - { - return providerId; - } - - public String getPasswd() { - return passwd; - } - - public String getPhoneNo() { - return phoneNo; - } - - public void setPhoneNo(String phoneNo) { - this.phoneNo = phoneNo; - } - - public Integer getUserLevel() { - return userLevel; - } - - public void setUserLevel(Integer userLevel) { - this.userLevel = userLevel; - } - - @Override - public String toString() { - return "SegchkUserSetInfoReq{" + - "userId=" + userId + - ", passwd='" + passwd + '\'' + - ", pwdId=" + pwdId + - ", providerId=" + providerId + - ", phoneNo='" + phoneNo + '\'' + - ", userLevel=" + userLevel + - '}'; - } -} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SimpleListObj.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SimpleListObj.java new file mode 100644 index 0000000..338a8d4 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SimpleListObj.java @@ -0,0 +1,53 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.core.domain.BaseEntity; + +public class SimpleListObj extends BaseEntity { + private String providerId; + private String key; + private String value; + private String imgUrl; + + public String getProviderId() { + return providerId; + } + + public void setProviderId(String providerId) { + this.providerId = providerId; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getImgUrl() { + return imgUrl; + } + + public void setImgUrl(String imgUrl) { + this.imgUrl = imgUrl; + } + + @Override + public String toString() { + return "SimpleListObj{" + + "providerId='" + providerId + '\'' + + ", key='" + key + '\'' + + ", value='" + value + '\'' + + ", imgUrl='" + imgUrl + '\'' + + '}'; + } +} + diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkIndexUserVipMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkIndexUserVipMapper.java index 333ceea..3814d49 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkIndexUserVipMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkIndexUserVipMapper.java @@ -1,9 +1,6 @@ package com.ruoyi.segchk.mapper; import com.ruoyi.segchk.domain.SegchkChargeRet; -import com.ruoyi.segchk.domain.SegchkUserVip; - -import java.util.List; /** * seg会员卡Mapper接口 diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkProviderCntCtrlMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkProviderCntCtrlMapper.java new file mode 100644 index 0000000..5a59fc7 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkProviderCntCtrlMapper.java @@ -0,0 +1,63 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkProviderCntCtrl; + +/** + * seg运营商流量管控Mapper接口 + * + * @author yinzhiying + * @date 2022-06-26 + */ +public interface SegchkProviderCntCtrlMapper +{ + /** + * 查询seg运营商流量管控 + * + * @param cntId seg运营商流量管控主键 + * @return seg运营商流量管控 + */ + public SegchkProviderCntCtrl selectSegchkProviderCntCtrlByCntId(Long cntId); + + /** + * 查询seg运营商流量管控列表 + * + * @param segchkProviderCntCtrl seg运营商流量管控 + * @return seg运营商流量管控集合 + */ + public List selectSegchkProviderCntCtrlList(SegchkProviderCntCtrl segchkProviderCntCtrl); + + /** + * 新增seg运营商流量管控 + * + * @param segchkProviderCntCtrl seg运营商流量管控 + * @return 结果 + */ + public int insertSegchkProviderCntCtrl(SegchkProviderCntCtrl segchkProviderCntCtrl); + + /** + * 修改seg运营商流量管控 + * + * @param segchkProviderCntCtrl seg运营商流量管控 + * @return 结果 + */ + public int updateSegchkProviderCntCtrl(SegchkProviderCntCtrl segchkProviderCntCtrl); + + /** + * 删除seg运营商流量管控 + * + * @param cntId seg运营商流量管控主键 + * @return 结果 + */ + public int deleteSegchkProviderCntCtrlByCntId(Long cntId); + + /** + * 批量删除seg运营商流量管控 + * + * @param cntIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkProviderCntCtrlByCntIds(Long[] cntIds); + + SegchkProviderCntCtrl selectSegchkProviderCntCtrlByProviderId(Long providerId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkRecommenderIndexMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkRecommenderIndexMapper.java index 8b5542b..f780005 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkRecommenderIndexMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkRecommenderIndexMapper.java @@ -1,8 +1,6 @@ package com.ruoyi.segchk.mapper; import com.ruoyi.segchk.domain.SegchkRecommenderStore; -import com.ruoyi.segchk.domain.SegchkRecommenderStoreWebReq; -import com.ruoyi.segchk.domain.SegchkRecommenderStoreWebResp; import java.util.List; diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreBasicInfoMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreBasicInfoMapper.java index c29e601..87401b8 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreBasicInfoMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreBasicInfoMapper.java @@ -157,12 +157,19 @@ public interface SegchkStoreBasicInfoMapper /** * 修改seg商家服务状态 * - * @param segchkStoreBasicInfo seg商家基础信息 + * @param segchkStoreStatus seg商家基础信息 * @return 结果 */ - public int updateSegchkStoreServiceStatus(SegchkStoreBasicInfo segchkStoreBasicInfo); + public int updateSegchkStoreServiceStatus(SegchkStoreStatus segchkStoreStatus); public Long selectStoreIdByPhone(String phone); int updateSegchkStoreDetail(SegchkStoreBasicInfo segchkStoreBasicInfo); + + int updateSegchkStoreVr(SegchkStoreVrInfo segchkStoreVrInfo); + int addSegchkStoreVr(SegchkStoreVrInfo segchkStoreVrInfo); + + int deleteSegchkStoreVr(SegchkStoreVrInfo segchkStoreVrInfo); + + List selectSegchkStoreSimpleList(Long providerId); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreCntCtrlMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreCntCtrlMapper.java new file mode 100644 index 0000000..9697141 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreCntCtrlMapper.java @@ -0,0 +1,87 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkStoreCntCtrl; +import org.apache.ibatis.annotations.Param; + +/** + * seg商家流量管控Mapper接口 + * + * @author yinzhiying + * @date 2022-06-26 + */ +public interface SegchkStoreCntCtrlMapper +{ + /** + * 查询seg商家流量管控 + * + * @param cntId seg商家流量管控主键 + * @return seg商家流量管控 + */ + public SegchkStoreCntCtrl selectSegchkStoreCntCtrlByCntId(Long cntId); + + /** + * 查询seg商家流量管控列表 + * + * @param segchkStoreCntCtrl seg商家流量管控 + * @return seg商家流量管控集合 + */ + public List selectSegchkStoreCntCtrlList(SegchkStoreCntCtrl segchkStoreCntCtrl); + + /** + * 新增seg商家流量管控 + * + * @param segchkStoreCntCtrl seg商家流量管控 + * @return 结果 + */ + public int insertSegchkStoreCntCtrl(SegchkStoreCntCtrl segchkStoreCntCtrl); + + /** + * 修改seg商家流量管控 + * + * @param segchkStoreCntCtrl seg商家流量管控 + * @return 结果 + */ + public int updateSegchkStoreCntCtrl(SegchkStoreCntCtrl segchkStoreCntCtrl); + + /** + * 删除seg商家流量管控 + * + * @param cntId seg商家流量管控主键 + * @return 结果 + */ + public int deleteSegchkStoreCntCtrlByCntId(Long cntId); + + /** + * 批量删除seg商家流量管控 + * + * @param cntIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkStoreCntCtrlByCntIds(Long[] cntIds); + + /** + * 将商家流量统计刷新进数据库 + * + * @param segchkStoreCntCtrlList 待增加的对象 + * @return 新增的数量 + */ + int addWechatCntBatch(List segchkStoreCntCtrlList); + + /** + * 查询有流量的商家最近一次流量计数 + * + * @return 商家流量计数 + */ + List selectSegchkStoreCntCtrlListByRecent(); + + /** + * 反转状态 + * + * @param cntIds id list + * @return 计数 + */ + int invalidateByOutId(List cntIds); + + int invalidateByStore(@Param("cntId") Long cntId, @Param("storeId") Long storeId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkProviderCntCtrlService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkProviderCntCtrlService.java new file mode 100644 index 0000000..f00ef8b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkProviderCntCtrlService.java @@ -0,0 +1,69 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkProviderCntCtrl; + +/** + * seg运营商流量管控Service接口 + * + * @author yinzhiying + * @date 2022-06-26 + */ +public interface ISegchkProviderCntCtrlService +{ + /** + * 查询seg运营商流量管控 + * + * @param cntId seg运营商流量管控主键 + * @return seg运营商流量管控 + */ + public SegchkProviderCntCtrl selectSegchkProviderCntCtrlByCntId(Long cntId); + + /** + * 查询seg运营商流量管控列表 + * + * @param segchkProviderCntCtrl seg运营商流量管控 + * @return seg运营商流量管控集合 + */ + public List selectSegchkProviderCntCtrlList(SegchkProviderCntCtrl segchkProviderCntCtrl); + + /** + * 新增seg运营商流量管控 + * + * @param segchkProviderCntCtrl seg运营商流量管控 + * @return 结果 + */ + public int insertSegchkProviderCntCtrl(SegchkProviderCntCtrl segchkProviderCntCtrl); + + /** + * 修改seg运营商流量管控 + * + * @param segchkProviderCntCtrl seg运营商流量管控 + * @return 结果 + */ + public int updateSegchkProviderCntCtrl(SegchkProviderCntCtrl segchkProviderCntCtrl); + + /** + * 批量删除seg运营商流量管控 + * + * @param cntIds 需要删除的seg运营商流量管控主键集合 + * @return 结果 + */ + public int deleteSegchkProviderCntCtrlByCntIds(Long[] cntIds); + + /** + * 删除seg运营商流量管控信息 + * + * @param cntId seg运营商流量管控主键 + * @return 结果 + */ + public int deleteSegchkProviderCntCtrlByCntId(Long cntId); + + /** + * 根据运营商id查询运营商流量控制信息 + * + * @param providerId seg运营商id + * @return 结果 + */ + SegchkProviderCntCtrl selectSegchkProviderCntCtrlByProviderId(Long providerId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkProviderMgtService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkProviderMgtService.java index 6fba952..5229371 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkProviderMgtService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkProviderMgtService.java @@ -12,6 +12,8 @@ import com.ruoyi.segchk.domain.SegchkProviderMgt; */ public interface ISegchkProviderMgtService { + void loadAllProviderInfo(); + /** * 查询seg运营商管理 * diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkRecommenderIndexService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkRecommenderIndexService.java index 41df076..52538cf 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkRecommenderIndexService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkRecommenderIndexService.java @@ -1,8 +1,6 @@ package com.ruoyi.segchk.service; import com.ruoyi.segchk.domain.SegchkRecommenderStore; -import com.ruoyi.segchk.domain.SegchkRecommenderStoreWebReq; -import com.ruoyi.segchk.domain.SegchkRecommenderStoreWebResp; import java.util.List; diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreBasicInfoService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreBasicInfoService.java index 9769b64..8c4da14 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreBasicInfoService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreBasicInfoService.java @@ -1,7 +1,8 @@ package com.ruoyi.segchk.service; import java.util.List; -import com.ruoyi.segchk.domain.SegchkStoreBasicInfo; + +import com.ruoyi.segchk.domain.*; /** * seg商家基础信息Service接口 @@ -27,6 +28,8 @@ public interface ISegchkStoreBasicInfoService */ public List selectSegchkStoreBasicInfoList(SegchkStoreBasicInfo segchkStoreBasicInfo); + List selectSegchkStoreBasicInfoListWithCnt(SegchkStoreBasicInfo segchkStoreBasicInfo); + /** * 新增seg商家基础信息 * @@ -67,7 +70,56 @@ public interface ISegchkStoreBasicInfoService */ public int updateSegchkStoreServiceStatus(SegchkStoreBasicInfo segchkStoreBasicInfo); + /** + * 修改seg商家状态 + * + * @param segchkStoreStatus seg商家状态 + * @return 结果 + */ + int updateSegchkStoreStatus(SegchkStoreStatus segchkStoreStatus); + int updateSegchkStoreDetail(SegchkStoreBasicInfo segchkStoreBasicInfo); -// int addSegchkStoreVR(); + /** + * 修改seg商家VR路径 + * + * @param segchkStoreVrInfo seg商家基础信息(只包含商家id,运营商id,vr路径) + * @return 结果 + */ + int updateSegchkStoreVr(SegchkStoreVrInfo segchkStoreVrInfo); + int addSegchkStoreVr(SegchkStoreVrInfo segchkStoreVrInfo); + + int deleteSegchkStoreVr(SegchkStoreVrInfo segchkStoreVrInfo); + + /** + * 查找运营商下所有有效商家列表 + * + * @param providerId 运营商id + * @return 结果 + */ + List selectSegchkStoreSimpleList(Long providerId); + + /** + * 根据商家信息,修改指定商家的流量值 + * + * @param segchkStoreCntCtrl 商家流量信息 + * @return 结果 + */ + int updateSegchkStoreCnt(SegchkStoreCntCtrl segchkStoreCntCtrl); + + /** + * 根据商家信息,修改指定商家的缓存流量值 + * + * @param segchkStoreCntCtrl 商家流量信息 + * @return 结果 + */ + int updateSegchkStoreCnt2Redis(SegchkStoreCntCtrl segchkStoreCntCtrl); + + /** + * 将所有商家流量统计刷新进数据库 + * + * @param segchkStoreCntCtrlList 待增加的对象 + * @return 新增的数量 + */ +// int addWechatCntBatch(List segchkStoreCntCtrlList); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreCntCtrlService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreCntCtrlService.java new file mode 100644 index 0000000..784ba36 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreCntCtrlService.java @@ -0,0 +1,103 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import java.util.Map; + +import com.ruoyi.segchk.domain.SegchkStoreCntCtrl; +import javafx.util.Pair; + +/** + * seg商家流量管控Service接口 + * + * @author yinzhiying + * @date 2022-06-26 + */ +public interface ISegchkStoreCntCtrlService +{ + /** + * 查询seg商家流量管控 + * + * @param cntId seg商家流量管控主键 + * @return seg商家流量管控 + */ + public SegchkStoreCntCtrl selectSegchkStoreCntCtrlByCntId(Long cntId); + + /** + * 查询seg商家流量管控列表 + * + * @param segchkStoreCntCtrl seg商家流量管控 + * @return seg商家流量管控集合 + */ + public List selectSegchkStoreCntCtrlList(SegchkStoreCntCtrl segchkStoreCntCtrl); + + /** + * 新增seg商家流量管控 + * + * @param segchkStoreCntCtrl seg商家流量管控 + * @return 结果 + */ + public int insertSegchkStoreCntCtrl(SegchkStoreCntCtrl segchkStoreCntCtrl); + + /** + * 修改seg商家流量管控 + * + * @param segchkStoreCntCtrl seg商家流量管控 + * @return 结果 + */ + public int updateSegchkStoreCntCtrl(SegchkStoreCntCtrl segchkStoreCntCtrl); + + /** + * 批量删除seg商家流量管控 + * + * @param cntIds 需要删除的seg商家流量管控主键集合 + * @return 结果 + */ + public int deleteSegchkStoreCntCtrlByCntIds(Long[] cntIds); + + /** + * 删除seg商家流量管控信息 + * + * @param cntId seg商家流量管控主键 + * @return 结果 + */ + public int deleteSegchkStoreCntCtrlByCntId(Long cntId); + + /** + * 将商家流量统计刷新进数据库 + * + * @param segchkStoreCntCtrlList 待增加的对象 + * @return 新增的数量 + */ + Pair addWechatCntBatch(List segchkStoreCntCtrlList); + + /** + * 查询有流量的商家最近一次流量计数 + * + * @return 商家流量计数 + */ + List selectSegchkStoreCntCtrlListByRecent(); + + /** + * 根据id,将非id列表中的所有记录无效 + * + * @param cntIds id list + * @return 计数 + */ + int invalidateByOutId(List cntIds); + + /** + * 针对 商家,将其非本id的所有记录无效 + * + * @param entryList store list + * @return 计数 + */ + int invalidateByStore(Map entryList); + + /** + * 将redis中的商家流量缓存进数据库 + * + * @param segchkStoreCntCtrlList 商家流量信息 + * @return 计数 + */ +// int flushCount2DB(List segchkStoreCntCtrlList); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkProviderCntCtrlServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkProviderCntCtrlServiceImpl.java new file mode 100644 index 0000000..327ec5c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkProviderCntCtrlServiceImpl.java @@ -0,0 +1,104 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkProviderCntCtrlMapper; +import com.ruoyi.segchk.domain.SegchkProviderCntCtrl; +import com.ruoyi.segchk.service.ISegchkProviderCntCtrlService; + +/** + * seg运营商流量管控Service业务层处理 + * + * @author yinzhiying + * @date 2022-06-26 + */ +@Service +public class SegchkProviderCntCtrlServiceImpl implements ISegchkProviderCntCtrlService +{ + @Autowired + private SegchkProviderCntCtrlMapper segchkProviderCntCtrlMapper; + + /** + * 查询seg运营商流量管控 + * + * @param cntId seg运营商流量管控主键 + * @return seg运营商流量管控 + */ + @Override + public SegchkProviderCntCtrl selectSegchkProviderCntCtrlByCntId(Long cntId) + { + return segchkProviderCntCtrlMapper.selectSegchkProviderCntCtrlByCntId(cntId); + } + + /** + * 查询seg运营商流量管控列表 + * + * @param segchkProviderCntCtrl seg运营商流量管控 + * @return seg运营商流量管控 + */ + @Override + public List selectSegchkProviderCntCtrlList(SegchkProviderCntCtrl segchkProviderCntCtrl) + { + return segchkProviderCntCtrlMapper.selectSegchkProviderCntCtrlList(segchkProviderCntCtrl); + } + + /** + * 新增seg运营商流量管控 + * + * @param segchkProviderCntCtrl seg运营商流量管控 + * @return 结果 + */ + @Override + public int insertSegchkProviderCntCtrl(SegchkProviderCntCtrl segchkProviderCntCtrl) + { + return segchkProviderCntCtrlMapper.insertSegchkProviderCntCtrl(segchkProviderCntCtrl); + } + + /** + * 修改seg运营商流量管控 + * + * @param segchkProviderCntCtrl seg运营商流量管控 + * @return 结果 + */ + @Override + public int updateSegchkProviderCntCtrl(SegchkProviderCntCtrl segchkProviderCntCtrl) + { + return segchkProviderCntCtrlMapper.updateSegchkProviderCntCtrl(segchkProviderCntCtrl); + } + + /** + * 批量删除seg运营商流量管控 + * + * @param cntIds 需要删除的seg运营商流量管控主键 + * @return 结果 + */ + @Override + public int deleteSegchkProviderCntCtrlByCntIds(Long[] cntIds) + { + return segchkProviderCntCtrlMapper.deleteSegchkProviderCntCtrlByCntIds(cntIds); + } + + /** + * 删除seg运营商流量管控信息 + * + * @param cntId seg运营商流量管控主键 + * @return 结果 + */ + @Override + public int deleteSegchkProviderCntCtrlByCntId(Long cntId) + { + return segchkProviderCntCtrlMapper.deleteSegchkProviderCntCtrlByCntId(cntId); + } + + /** + * 根据运营商id查询运营商流量控制信息 + * + * @param providerId seg运营商id + * @return 结果 + */ + @Override + public SegchkProviderCntCtrl selectSegchkProviderCntCtrlByProviderId(Long providerId) { + return segchkProviderCntCtrlMapper.selectSegchkProviderCntCtrlByProviderId(providerId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkProviderMgtServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkProviderMgtServiceImpl.java index 3b4e26d..7535755 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkProviderMgtServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkProviderMgtServiceImpl.java @@ -1,17 +1,29 @@ package com.ruoyi.segchk.service.impl; +import java.util.Arrays; import java.util.HashMap; import java.util.List; + +import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.RedisCahceKey; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.stream.Collectors; + import com.ruoyi.common.utils.StringUtils; import org.springframework.transaction.annotation.Transactional; import com.ruoyi.segchk.domain.SegchkLableMgt; import com.ruoyi.segchk.mapper.SegchkProviderMgtMapper; import com.ruoyi.segchk.domain.SegchkProviderMgt; import com.ruoyi.segchk.service.ISegchkProviderMgtService; +import org.springframework.util.ObjectUtils; + +import javax.annotation.PostConstruct; /** * seg运营商管理Service业务层处理 @@ -22,9 +34,26 @@ import com.ruoyi.segchk.service.ISegchkProviderMgtService; @Service public class SegchkProviderMgtServiceImpl implements ISegchkProviderMgtService { + private static final Logger logger = LoggerFactory.getLogger(SegchkProviderMgtServiceImpl.class); + @Autowired private SegchkProviderMgtMapper segchkProviderMgtMapper; + @Autowired + private RedisCache redisService; + + @PostConstruct + public void init(){ + loadAllProviderInfo(); + } + + @Override + public void loadAllProviderInfo() { + SegchkProviderMgt segchkProviderMgt = new SegchkProviderMgt(); + List segchkProviderMgts = selectSegchkProviderMgtList(segchkProviderMgt); + segchkProviderMgts.parallelStream().forEach(v -> redisService.setCacheObject(RedisCahceKey.PROVIDER_INFO + "::" + v.getProviderId(), v)); + } + /** * 查询seg运营商管理 * @@ -34,7 +63,17 @@ public class SegchkProviderMgtServiceImpl implements ISegchkProviderMgtService @Override public SegchkProviderMgt selectSegchkProviderMgtByProviderId(Long providerId) { - return segchkProviderMgtMapper.selectSegchkProviderMgtByProviderId(providerId); + logger.debug("selectSegchkProviderMgtByProviderId with {}", providerId); + Object cacheObject = redisService.getCacheObject(RedisCahceKey.PROVIDER_INFO + "::" + providerId); + if(!ObjectUtils.isEmpty(cacheObject)){ + return (SegchkProviderMgt)cacheObject; + } + SegchkProviderMgt segchkProviderMgt = segchkProviderMgtMapper.selectSegchkProviderMgtByProviderId(providerId); + if(ObjectUtils.isEmpty(segchkProviderMgt)){ + return null; + } + redisService.setCacheObject(RedisCahceKey.PROVIDER_INFO + "::" + providerId, segchkProviderMgt); + return segchkProviderMgt; } /** @@ -46,7 +85,9 @@ public class SegchkProviderMgtServiceImpl implements ISegchkProviderMgtService @Override public List selectSegchkProviderMgtList(SegchkProviderMgt segchkProviderMgt) { - return segchkProviderMgtMapper.selectSegchkProviderMgtList(segchkProviderMgt); + List segchkProviderMgts = segchkProviderMgtMapper.selectSegchkProviderMgtList(segchkProviderMgt); + segchkProviderMgts.parallelStream().forEach(v -> redisService.setCacheObject(RedisCahceKey.PROVIDER_INFO + "::" + v.getProviderId(), v)); + return segchkProviderMgts; } /** @@ -60,8 +101,10 @@ public class SegchkProviderMgtServiceImpl implements ISegchkProviderMgtService public int insertSegchkProviderMgt(SegchkProviderMgt segchkProviderMgt) { segchkProviderMgt.setCreateTime(DateUtils.getNowDate()); + redisService.setCacheObject(RedisCahceKey.PROVIDER_INFO + "::" + segchkProviderMgt.getProviderId(), segchkProviderMgt); int rows = segchkProviderMgtMapper.insertSegchkProviderMgt(segchkProviderMgt); insertSegchkLableMgt(segchkProviderMgt); + return rows; } @@ -76,6 +119,7 @@ public class SegchkProviderMgtServiceImpl implements ISegchkProviderMgtService public int updateSegchkProviderMgt(SegchkProviderMgt segchkProviderMgt) { segchkProviderMgt.setUpdateTime(DateUtils.getNowDate()); + redisService.setCacheObject(RedisCahceKey.PROVIDER_INFO + "::" + segchkProviderMgt.getProviderId(), segchkProviderMgt); // segchkProviderMgtMapper.deleteSegchkLableMgtByProviderId(segchkProviderMgt.getProviderId()); // insertSegchkLableMgt(segchkProviderMgt); return segchkProviderMgtMapper.updateSegchkProviderMgt(segchkProviderMgt); @@ -91,6 +135,9 @@ public class SegchkProviderMgtServiceImpl implements ISegchkProviderMgtService @Override public int deleteSegchkProviderMgtByProviderIds(Long[] providerIds) { + + redisService.deleteObject(Arrays.stream(providerIds).map(v -> RedisCahceKey.PROVIDER_INFO + "::" + v).collect(Collectors.toList())); +// Arrays.stream(providerIds).parallel().forEach(v -> redisService.deleteObject(RedisCahceKey.PROVIDER_INFO + "::" + v)); // segchkProviderMgtMapper.deleteSegchkLableMgtByProviderIds(providerIds); return segchkProviderMgtMapper.deleteSegchkProviderMgtByProviderIds(providerIds); } @@ -104,6 +151,7 @@ public class SegchkProviderMgtServiceImpl implements ISegchkProviderMgtService @Override public int deleteSegchkProviderMgtByProviderId(Long providerId) { + redisService.deleteObject(RedisCahceKey.PROVIDER_INFO + "::" + providerId); segchkProviderMgtMapper.deleteSegchkLableMgtByProviderId(providerId); return segchkProviderMgtMapper.deleteSegchkProviderMgtByProviderId(providerId); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkRecommenderIndexServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkRecommenderIndexServiceImpl.java index cfccc49..d8aff53 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkRecommenderIndexServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkRecommenderIndexServiceImpl.java @@ -2,10 +2,7 @@ package com.ruoyi.segchk.service.impl; import com.ruoyi.common.core.text.Convert; import com.ruoyi.segchk.domain.SegchkRecommenderStore; -import com.ruoyi.segchk.domain.SegchkRecommenderStoreWebReq; -import com.ruoyi.segchk.domain.SegchkRecommenderStoreWebResp; import com.ruoyi.segchk.mapper.SegchkRecommenderIndexMapper; -import com.ruoyi.segchk.mapper.SegchkRecommenderStoreMapper; import com.ruoyi.segchk.service.ISegchkRecommenderIndexService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreBasicInfoServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreBasicInfoServiceImpl.java index 8183476..d996875 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreBasicInfoServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreBasicInfoServiceImpl.java @@ -2,9 +2,11 @@ package com.ruoyi.segchk.service.impl; import java.util.List; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.utils.RedisCahceKey; +import com.ruoyi.common.utils.RedisUtil; import com.ruoyi.segchk.domain.*; -import com.ruoyi.segchk.service.ISegchkCarouseMgtService; -import com.ruoyi.segchk.service.ISegchkRecommenderStoreService; +import com.ruoyi.segchk.service.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -15,7 +17,6 @@ import java.util.ArrayList; import com.ruoyi.common.utils.StringUtils; import org.springframework.transaction.annotation.Transactional; import com.ruoyi.segchk.mapper.SegchkStoreBasicInfoMapper; -import com.ruoyi.segchk.service.ISegchkStoreBasicInfoService; import org.springframework.util.ObjectUtils; /** @@ -35,6 +36,18 @@ public class SegchkStoreBasicInfoServiceImpl implements ISegchkStoreBasicInfoSer @Autowired private ISegchkRecommenderStoreService segchkRecommenderStoreService; + @Autowired + private ISegchkStoreCntCtrlService segchkStoreCntCtrlService; + + @Autowired + private ISegchkProviderCntCtrlService segchkProviderCntCtrlService; + + @Autowired + private RedisCache redisService; + + @Autowired + private RedisUtil redisUtil; + private static final Logger logger = LoggerFactory.getLogger(SegchkStoreBasicInfoServiceImpl.class); /** * 查询seg商家基础信息 @@ -58,6 +71,19 @@ public class SegchkStoreBasicInfoServiceImpl implements ISegchkStoreBasicInfoSer return segchkStoreBasicInfoMapper.selectSegchkStoreBasicInfoList(segchkStoreBasicInfo); } + @Override + public List selectSegchkStoreBasicInfoListWithCnt(SegchkStoreBasicInfo segchkStoreBasicInfo) { + List segchkStoreBasicInfos = segchkStoreBasicInfoMapper.selectSegchkStoreBasicInfoList(segchkStoreBasicInfo); + if(ObjectUtils.isEmpty(segchkStoreBasicInfos)){ + return new ArrayList(); + } + segchkStoreBasicInfos.parallelStream().forEachOrdered(v -> v.setStoreCount(v.getProviderId() + , segchkProviderCntCtrlService.selectSegchkProviderCntCtrlByProviderId(v.getProviderId()) + , redisUtil.hmget("wechatCount") + , redisUtil.hmget("wechatCount1"))); + return segchkStoreBasicInfos; + } + /** * 新增seg商家基础信息 * @@ -154,13 +180,37 @@ public class SegchkStoreBasicInfoServiceImpl implements ISegchkStoreBasicInfoSer */ @Override public int updateSegchkStoreServiceStatus(SegchkStoreBasicInfo segchkStoreBasicInfo) { - if(!segchkStoreBasicInfo.getServiceState().equals("0")){ + if(!ObjectUtils.isEmpty(segchkStoreBasicInfo.getServiceState()) && !segchkStoreBasicInfo.getServiceState().equals("0")){ // 商户下线 Long[] storeIds = new Long[]{segchkStoreBasicInfo.getStoreId()}; segchkCarouseMgtService.deleteSegchkCarouseMgtByStoreIds(storeIds); segchkRecommenderStoreService.deleteSegchkRecommenderStoreByStoreIds(storeIds); } - return segchkStoreBasicInfoMapper.updateSegchkStoreServiceStatus(segchkStoreBasicInfo); + SegchkStoreStatus segchkStoreStatus = new SegchkStoreStatus(); + segchkStoreStatus.setProviderId(segchkStoreBasicInfo.getProviderId()); + segchkStoreStatus.setStoreId(segchkStoreBasicInfo.getStoreId()); + segchkStoreStatus.setServiceState(segchkStoreBasicInfo.getServiceState()); + segchkStoreStatus.setStateFlag(segchkStoreBasicInfo.getStateFlag()); + segchkStoreStatus.setWithMsg(segchkStoreBasicInfo.getWithMsg()); + segchkStoreStatus.setUseSelfCardWithNovip(segchkStoreBasicInfo.getUseSelfCardWithNovip()); + int ret = updateSegchkStoreStatus(segchkStoreStatus); + if (ret > 0){ + redisService.setCacheObject(RedisCahceKey.STORE_STATUS + "::" + RedisCahceKey.STORE_STATUS + segchkStoreStatus.getStoreId(), segchkStoreStatus); + logger.debug("cache store status update {}", segchkStoreStatus.toString()); + } + return ret; + } + + /** + * 修改seg商家状态 + * + * @param segchkStoreStatus seg商家状态 + * @return 结果 + */ + @Override +// @CachePut(value = RedisCahceKey.STORE_STATUS, key = "'STORE_STATUS' + #segchkStoreStatus.storeId") + public int updateSegchkStoreStatus(SegchkStoreStatus segchkStoreStatus) { + return segchkStoreBasicInfoMapper.updateSegchkStoreServiceStatus(segchkStoreStatus); } @Override @@ -168,6 +218,74 @@ public class SegchkStoreBasicInfoServiceImpl implements ISegchkStoreBasicInfoSer return segchkStoreBasicInfoMapper.updateSegchkStoreDetail(segchkStoreBasicInfo); } + /** + * 修改seg商家VR路径 + * + * @param segchkStoreVrInfo seg商家基础信息(只包含商家id,运营商id,vr路径) + * @return 结果 + */ + @Override + public int updateSegchkStoreVr(SegchkStoreVrInfo segchkStoreVrInfo) { + return segchkStoreBasicInfoMapper.updateSegchkStoreVr(segchkStoreVrInfo); + } + + @Override + public int addSegchkStoreVr(SegchkStoreVrInfo segchkStoreVrInfo) { + return segchkStoreBasicInfoMapper.addSegchkStoreVr(segchkStoreVrInfo); + } + + @Override + public int deleteSegchkStoreVr(SegchkStoreVrInfo segchkStoreVrInfo) { + return segchkStoreBasicInfoMapper.deleteSegchkStoreVr(segchkStoreVrInfo); + } + + /** + * 查找运营商下所有有效商家列表 + * + * @param providerId 运营商id + * @return 结果 + */ + @Override + public List selectSegchkStoreSimpleList(Long providerId) { + return segchkStoreBasicInfoMapper.selectSegchkStoreSimpleList(providerId); + } + + /** + * 根据商家信息,修改指定商家的流量值 + * + * @param segchkStoreCntCtrl 商家流量信息 + * @return 结果 + */ + @Override + public int updateSegchkStoreCnt(SegchkStoreCntCtrl segchkStoreCntCtrl) { + SegchkStoreCntCtrl segchkStoreCntCtrl1 = segchkStoreCntCtrlService.selectSegchkStoreCntCtrlByCntId(segchkStoreCntCtrl.getCntId()); + + return 0; + } + + /** + * 根据商家信息,修改指定商家的缓存流量值 + * + * @param segchkStoreCntCtrl 商家流量信息 + * @return 结果 + */ + @Override + public int updateSegchkStoreCnt2Redis(SegchkStoreCntCtrl segchkStoreCntCtrl) { + Long providerId = segchkStoreCntCtrl.getProviderId(); + Long storeId = segchkStoreCntCtrl.getStoreId(); + if (segchkStoreCntCtrl.updateBrowse() != 0L){ + redisUtil.hset("wechatCount1", "browse_cnt1:" + providerId + ":" + storeId, segchkStoreCntCtrl.getBrowseCnt()); + } + if (segchkStoreCntCtrl.updateCollect() != 0L){ + redisUtil.hset("wechatCount1", "collect_cnt1:" + providerId + ":" + storeId, segchkStoreCntCtrl.getCollectCnt()); + } + if (segchkStoreCntCtrl.updateBook() != 0L){ + redisUtil.hset("wechatCount1", "book_cnt1:" + providerId + ":" + storeId, segchkStoreCntCtrl.getBookCnt()); + } + return 1; + } + + /** * 新增seg商家图片信息信息 * diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreCntCtrlServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreCntCtrlServiceImpl.java new file mode 100644 index 0000000..7965b15 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreCntCtrlServiceImpl.java @@ -0,0 +1,236 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import javafx.util.Pair; +import org.apache.ibatis.executor.BatchResult; +import org.apache.ibatis.session.ExecutorType; +import org.apache.ibatis.session.SqlSession; +import org.apache.ibatis.session.SqlSessionFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkStoreCntCtrlMapper; +import com.ruoyi.segchk.domain.SegchkStoreCntCtrl; +import com.ruoyi.segchk.service.ISegchkStoreCntCtrlService; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ObjectUtils; + +/** + * seg商家流量管控Service业务层处理 + * + * @author yinzhiying + * @date 2022-06-26 + */ +@Service +public class SegchkStoreCntCtrlServiceImpl implements ISegchkStoreCntCtrlService +{ + @Autowired + private SegchkStoreCntCtrlMapper segchkStoreCntCtrlMapper; + + @Autowired + private SqlSessionFactory sqlSessionFactory; + + @Value("${segchk.ctrl.dbbatch:#{0}}") + private Integer DB_BATCH_SIZE; + /** + * 查询seg商家流量管控 + * + * @param cntId seg商家流量管控主键 + * @return seg商家流量管控 + */ + @Override + public SegchkStoreCntCtrl selectSegchkStoreCntCtrlByCntId(Long cntId) + { + return segchkStoreCntCtrlMapper.selectSegchkStoreCntCtrlByCntId(cntId); + } + + /** + * 查询seg商家流量管控列表 + * + * @param segchkStoreCntCtrl seg商家流量管控 + * @return seg商家流量管控 + */ + @Override + public List selectSegchkStoreCntCtrlList(SegchkStoreCntCtrl segchkStoreCntCtrl) + { + return segchkStoreCntCtrlMapper.selectSegchkStoreCntCtrlList(segchkStoreCntCtrl); + } + + /** + * 新增seg商家流量管控 + * + * @param segchkStoreCntCtrl seg商家流量管控 + * @return 结果 + */ + @Override + public int insertSegchkStoreCntCtrl(SegchkStoreCntCtrl segchkStoreCntCtrl) + { + return segchkStoreCntCtrlMapper.insertSegchkStoreCntCtrl(segchkStoreCntCtrl); + } + + /** + * 修改seg商家流量管控 + * + * @param segchkStoreCntCtrl seg商家流量管控 + * @return 结果 + */ + @Override + public int updateSegchkStoreCntCtrl(SegchkStoreCntCtrl segchkStoreCntCtrl) + { + return segchkStoreCntCtrlMapper.updateSegchkStoreCntCtrl(segchkStoreCntCtrl); + } + + /** + * 批量删除seg商家流量管控 + * + * @param cntIds 需要删除的seg商家流量管控主键 + * @return 结果 + */ + @Override + public int deleteSegchkStoreCntCtrlByCntIds(Long[] cntIds) + { + return segchkStoreCntCtrlMapper.deleteSegchkStoreCntCtrlByCntIds(cntIds); + } + + /** + * 删除seg商家流量管控信息 + * + * @param cntId seg商家流量管控主键 + * @return 结果 + */ + @Override + public int deleteSegchkStoreCntCtrlByCntId(Long cntId) + { + return segchkStoreCntCtrlMapper.deleteSegchkStoreCntCtrlByCntId(cntId); + } + + /** + * 将商家流量统计刷新进数据库 + * + * @param segchkStoreCntCtrlList 待增加的对象 + * @return 新增的数量 + */ + @Override + @Transactional + public Pair addWechatCntBatch(List segchkStoreCntCtrlList) { + if(ObjectUtils.isEmpty(segchkStoreCntCtrlList)){ + return new Pair(1, null); + } + long start = System.currentTimeMillis(); + //如果自动提交设置为true,将无法控制提交的条数,改为最后统一提交,可能导致内存溢出 + SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH,false); + int ret = 0; + List batchResults = null; + try { + SegchkStoreCntCtrlMapper mapper = sqlSession.getMapper(SegchkStoreCntCtrlMapper.class); + int size = segchkStoreCntCtrlList.size(); + + for (int i = 0; i < size; i++) { + mapper.insertSegchkStoreCntCtrl(segchkStoreCntCtrlList.get(i)); + ret++; + /*if ((i % DB_BATCH_SIZE == 0) || i == size - 1) { + //手动每400条提交一次,提交后无法回滚 +// sqlSession.commit(); + //清理缓存,防止溢出 + batchResults = sqlSession.flushStatements(); + }*/ + } + batchResults = sqlSession.flushStatements(); + } catch (Exception e) { + //没有提交的数据可以回滚 + sqlSession.rollback(); + } finally { + sqlSession.close(); + } + System.out.println(System.currentTimeMillis() - start); + int[] updateCounts = batchResults.stream().mapToInt(v -> Arrays.stream(v.getUpdateCounts()).sum()).toArray(); + ConcurrentMap map = batchResults.parallelStream().flatMap(v -> v.getParameterObjects().stream()).parallel().collect(Collectors.toConcurrentMap(v -> ((SegchkStoreCntCtrl) v).getCntId(), v -> ((SegchkStoreCntCtrl) v).getStoreId())); + +// batchResults.get(0).getParameterObjects().parallelStream().collect(Collectors.toConcurrentMap(v -> ((SegchkStoreCntCtrl) v).getCntId(), v -> ((SegchkStoreCntCtrl) v).getStoreId())); + Pair ret1 = new Pair(Arrays.stream(updateCounts).sum(), map); + return ret1; +// return segchkStoreCntCtrlMapper.addWechatCntBatch(segchkStoreCntCtrlList); + } + + /** + * 查询有流量的商家最近一次流量计数 + * + * @return 商家流量计数 + */ + @Override + public List selectSegchkStoreCntCtrlListByRecent() { + return segchkStoreCntCtrlMapper.selectSegchkStoreCntCtrlListByRecent(); + } + + /** + * 反转状态 + * + * @param cntIds id list + * @return 计数 + */ + @Override + public int invalidateByOutId(List cntIds) { + return segchkStoreCntCtrlMapper.invalidateByOutId(cntIds); + } + + /** + * 针对 商家,将其非本id的所有记录无效 + * + * @param entryList store list + * @return 计数 + */ + @Override + public int invalidateByStore(Map entryList) { + long start = System.currentTimeMillis(); + //如果自动提交设置为true,将无法控制提交的条数,改为最后统一提交,可能导致内存溢出 + SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH,false); + AtomicInteger ret = new AtomicInteger(); + List batchResults = null; + try { + SegchkStoreCntCtrlMapper mapper = sqlSession.getMapper(SegchkStoreCntCtrlMapper.class); + int size = entryList.size(); + + for( Map.Entryentry : entryList.entrySet()){ + ret.set(ret.get() + mapper.invalidateByStore(entry.getKey(), entry.getValue())); + } + /*entryList.forEach((k, v) -> { + ret.set(ret.get() + mapper.invalidateByStore(k, v)); + if ((i % DB_BATCH_SIZE == 0) || i == size - 1) { + //手动每400条提交一次,提交后无法回滚 +// sqlSession.commit(); + //清理缓存,防止溢出 + batchResults = sqlSession.flushStatements(); + } + });*/ + batchResults = sqlSession.flushStatements(); + } catch (Exception e) { + //没有提交的数据可以回滚 + sqlSession.rollback(); + } finally { + sqlSession.close(); + } + System.out.println(System.currentTimeMillis() - start); + int[] updateCounts = batchResults.stream().mapToInt(v -> Arrays.stream(v.getUpdateCounts()).sum()).toArray(); +// ConcurrentMap map = batchResults.get(0).getParameterObjects().parallelStream().collect(Collectors.toConcurrentMap(v -> ((SegchkStoreCntCtrl) v).getCntId(), v -> ((SegchkStoreCntCtrl) v).getStoreId())); + Pair ret1 = new Pair(Arrays.stream(updateCounts).sum(), null); + return ret1.getKey(); + } + + /** + * 将redis中的商家流量缓存进数据库 + * + * @param segchkStoreCntCtrlList 商家流量信息 + * @return 计数 + */ + /*@Override + public int flushCount2DB(List segchkStoreCntCtrlList) { + return 0; + }*/ +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/utils/BatchServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/utils/BatchServiceImpl.java new file mode 100644 index 0000000..ca2df82 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/utils/BatchServiceImpl.java @@ -0,0 +1,14 @@ +package com.ruoyi.segchk.utils; + +import com.ruoyi.segchk.domain.SegchkStoreCntCtrl; +import javafx.util.Pair; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +@Lazy +public class BatchServiceImpl { + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/utils/RateRandomNumber.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/utils/RateRandomNumber.java new file mode 100644 index 0000000..cac7c2c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/utils/RateRandomNumber.java @@ -0,0 +1,96 @@ +package com.ruoyi.segchk.utils; + +import org.apache.commons.lang3.RandomUtils; + +import java.util.ArrayList; +import java.util.List; + +/** + * 按几率产生随机数 + * 例如,产生0.1-100的随机数,0.1-1的几率是90%,1-10的几率是9%,10-100的几率是1% + */ +public class RateRandomNumber { + + /** + * 产生随机数 + * @param min 最小值 + * @param max 最大值 + * @return 随机结果 + */ + public static double produceRandomNumber(double min,double max){ + return RandomUtils.nextDouble(min,max); //[min,max] + } + + /** + * 按比率产生随机数 + * @param min 最小值 + * @param max 最大值 + * @param separates 分割值(中间插入数) + * @param percents 每段数值的占比(几率) + * @return 按比率随机结果 + */ + public static double produceRateRandomNumber(double min,double max,List separates,List percents){ + if(min > max){ + throw new IllegalArgumentException("min值必须小于max值"); + } + if(separates == null || percents==null || separates.size()==0){ + return produceRandomNumber(min,max); + } + if(separates.size() +1 != percents.size()){ + throw new IllegalArgumentException("分割数字的个数加1必须等于百分比个数"); + } + int totalPercent = 0; + for(Integer p:percents){ + if(p<0 || p>100){ + throw new IllegalArgumentException("百分比必须在[0,100]之间"); + } + totalPercent += p; + } + if(totalPercent != 100){ + throw new IllegalArgumentException("百分比之和必须为100"); + } + for(double s:separates){ + if(s <= min || s >= max){ + throw new IllegalArgumentException("分割数值必须在(min,max)之间"); + } + } + int rangeCount = separates.size()+1; //例如:3个插值,可以将一个数值范围分割成4段 + //构造分割的n段范围 + List ranges = new ArrayList(); + int scopeMax = 0; + for(int i=0;i + + + + + + + + + + + + + + + select cnt_id, provider_id, browse_cnt, collect_cnt, book_cnt, mgt_state, mod_time from segchk_provider_cnt_ctrl + + + + + + + + + insert into segchk_provider_cnt_ctrl + + provider_id, + browse_cnt, + collect_cnt, + book_cnt, + mgt_state, + mod_time, + + + #{providerId}, + #{browseCnt}, + #{collectCnt}, + #{bookCnt}, + #{mgtState}, + #{modTime}, + + + + + update segchk_provider_cnt_ctrl + + provider_id = #{providerId}, + browse_cnt = #{browseCnt}, + collect_cnt = #{collectCnt}, + book_cnt = #{bookCnt}, + mgt_state = #{mgtState}, + mod_time = #{modTime}, + + where cnt_id = #{cntId} + + + + delete from segchk_provider_cnt_ctrl where cnt_id = #{cntId} + + + + delete from segchk_provider_cnt_ctrl where cnt_id in + + #{cntId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkProviderMgtMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkProviderMgtMapper.xml index 2121e3b..eb10f9a 100644 --- a/ruoyi-system/src/main/resources/mapper/segchk/SegchkProviderMgtMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkProviderMgtMapper.xml @@ -13,6 +13,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + @@ -35,7 +38,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select openid, union_id, wechat_id, provider_id, nick_name, icon_url, phone_no, flag_id, District_id, create_time, del_time, update_time from segchk_provider_mgt + select openid, union_id, wechat_id, provider_id, nick_name, icon_url, phone_no, flag_id, use_self_card_with_novip, can_give_self, book_live_hour, District_id, create_time, del_time, update_time from segchk_provider_mgt @@ -113,6 +121,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and cash_day = #{cashDay} and service_down_threshold = #{serviceDownThreshold} and state_flag = #{stateFlag} + and use_self_card_with_novip = #{useSelfCardWithNovip} and store_lon = #{storeLon} and store_lat = #{storeLat} and on_service = #{onService} @@ -122,7 +131,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select store_id from segchk_store_basic_info where store_phone = #{storePhone} + insert into segchk_store_basic_info @@ -178,6 +194,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" cash_day, service_down_threshold, state_flag, + use_self_card_with_novip, store_lon, store_lat, on_service, @@ -203,6 +220,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{cashDay}, #{serviceDownThreshold}, #{stateFlag}, + #{useSelfCardWithNovip}, #{storeLon}, #{storeLat}, #{onService}, @@ -232,11 +250,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" cash_day = #{cashDay}, service_down_threshold = #{serviceDownThreshold}, state_flag = #{stateFlag}, + use_self_card_with_novip = #{useSelfCardWithNovip}, store_lon = #{storeLon}, store_lat = #{storeLat}, on_service = #{onService}, detail = #{detail}, - mod_time = #{modTime}, + + + mod_time = #{modTime}, + modTime = now(), + where store_id = #{storeId} @@ -295,6 +318,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" delete from segchk_store_security where store_id = #{storeId} + + delete from segchk_store_vr_info where store_id = #{storeId} + and provider_id = #{providerId} + insert into segchk_store_image( provider_id, store_id, store_certificate1, store_certificate2, store_icon, store_gificon, store_carousel1, store_carousel2, store_carousel3, store_carousel4, store_carousel5, store_carousel6, store_env1, store_env2, store_env3, store_env4, mod_time) values @@ -360,12 +387,34 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + insert into segchk_store_vr_info + + provider_id, + store_id, + vr_url, + thumb_path, + service_state, + mod_time, + + + #{providerId}, + #{storeId}, + #{vrUrl}, + #{thumbPath}, + #{serviceState}, + now(), + + - + + update segchk_store_basic_info service_state = #{serviceState}, with_msg = #{withMsg}, + state_flag = #{stateFlag}, + use_self_card_with_novip = #{useSelfCardWithNovip}, mod_time = now(), where store_id = #{storeId} @@ -376,4 +425,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where store_id = #{storeId} and provider_id = #{providerId} + + update segchk_store_vr_info + + vr_url = #{vrUrl}, + thumb_path = #{thumbPath}, + service_state = #{serviceState}, + mod_time = now(), + + where store_id = #{storeId} + and provider_id = #{providerId} + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreCntCtrlMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreCntCtrlMapper.xml new file mode 100644 index 0000000..b780047 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreCntCtrlMapper.xml @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + select cnt_id, provider_id, store_id, browse_cnt, browse_cnt1, collect_cnt, collect_cnt1, book_cnt, book_cnt1, mgt_state, mod_time from segchk_store_cnt_ctrl + + + + + + + + + insert into segchk_store_cnt_ctrl + + provider_id, + store_id, + browse_cnt, + browse_cnt1, + collect_cnt, + collect_cnt1, + book_cnt, + book_cnt1, + mgt_state, + mod_time, + + + #{providerId}, + #{storeId}, + #{browseCnt}, + #{browseCnt1}, + #{collectCnt}, + #{collectCnt1}, + #{bookCnt}, + #{bookCnt1}, + #{mgtState}, + #{modTime}, + + + + insert into segchk_store_cnt_ctrl( + provider_id + , store_id + , browse_cnt + , browse_cnt1 + , collect_cnt + , collect_cnt1 + , book_cnt + , book_cnt1 + , mgt_state + , mod_time ) values + + ( #{item.storeId} + , #{item.passwd} + , now() + , #{item.providerId} + ) + + + + + update segchk_store_cnt_ctrl + + provider_id = #{providerId}, + store_id = #{storeId}, + browse_cnt = #{browseCnt}, + browse_cnt1 = #{browseCnt1}, + collect_cnt = #{collectCnt}, + collect_cnt1 = #{collectCnt1}, + book_cnt = #{bookCnt}, + book_cnt1 = #{bookCnt1}, + mgt_state = #{mgtState}, + mod_time = #{modTime}, + + where cnt_id = #{cntId} + + + update segchk_store_cnt_ctrl set mgt_state = '1' + + + and cnt_id != #{cntId} + + and mgt_state = '0' + + + + + update segchk_store_cnt_ctrl set mgt_state = '1' + where cnt_id != #{cntId} + and store_id = #{storeId} + and mgt_state='0' + + + + delete from segchk_store_cnt_ctrl where cnt_id = #{cntId} + + + + delete from segchk_store_cnt_ctrl where cnt_id in + + #{cntId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreSelfMgtMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreSelfMgtMapper.xml index 6bb6e38..a6647a6 100644 --- a/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreSelfMgtMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreSelfMgtMapper.xml @@ -52,6 +52,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" insert into segchk_store_self_mgt mod_time, + expiration_date, store_id, provider_id, user_id, @@ -67,13 +68,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{modTime}, - if(true, (select effective_time from segchk_user_vip where card_id = #{cardId}), now()), + (select a.expiration_date from (select expiration_date from segchk_store_self_mgt where free_card_id = #{cardId}) a), + ifnull((select effective_time from segchk_user_vip where card_id = #{cardId}), now()), + + + #{expirationDate}, + (select a.expiration_date from (select expiration_date from segchk_store_self_mgt where free_card_id = #{cardId}) a), + ifnull((select effective_time from segchk_user_vip where card_id = #{cardId}), now()), #{storeId}, #{providerId}, #{userId}, - #{cardId}, + + + (select a.card_id from (select card_id from segchk_store_self_mgt where free_card_id = #{cardId}) a), + #{cardId}, + #{lableId}, #{typeId}, #{freeCount}, @@ -88,6 +99,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update segchk_store_self_mgt mod_time = #{modTime}, + expiration_date = #{expirationDate}, store_id = #{storeId}, provider_id = #{providerId}, user_id = #{userId}, diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserLikegoMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserLikegoMapper.xml index e9aa402..8d54ba0 100644 --- a/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserLikegoMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserLikegoMapper.xml @@ -11,13 +11,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + - select likego_id, provider_id, user_id, store_id, card_id, card_type, QR_code, mod_time, mgt_state from segchk_user_likego + select likego_id, provider_id, user_id, store_id, card_id, card_type, lable_id, QR_code, mod_time, mgt_state, can_give_self from segchk_user_likego @@ -40,7 +43,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where likego_id = #{likegoId} - + insert into segchk_user_likego provider_id, @@ -51,6 +54,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" QR_code, mod_time, mgt_state, + can_give_self, + lable_id, #{providerId}, @@ -61,6 +66,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{qrCode}, #{modTime}, #{mgtState}, + #{canGiveSelf}, + + (select card_type_id from segchk_user_vip where card_id = #{cardId}), + (select lable_id from segchk_store_self_mgt where free_card_id = #{cardId}), + 0, + @@ -75,6 +86,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" QR_code = #{qrCode}, mod_time = #{modTime}, mgt_state = #{mgtState}, + can_give_self = #{canGiveSelf}, where likego_id = #{likegoId} diff --git a/wxpay-sdk/pom.xml b/wxpay-sdk/pom.xml index 99e8a49..f9aa1de 100644 --- a/wxpay-sdk/pom.xml +++ b/wxpay-sdk/pom.xml @@ -48,7 +48,7 @@ 4.5.3 - + org.bouncycastle