记得上下班打卡 | git大法好,push需谨慎

Commit e8d899ad authored by jiangxiulong's avatar jiangxiulong

Merge remote-tracking branch 'origin/new_member' into new_member

parents fb9f5279 ce9834af
...@@ -58,7 +58,7 @@ alter table adam_member_price add price_special decimal(8, 2) null comment '特 ...@@ -58,7 +58,7 @@ alter table adam_member_price add price_special decimal(8, 2) null comment '特
# 会员码表调整 # 会员码表调整
alter table adam_member_code modify state tinyint null comment '状态[0-可用|1-已用|2-无效|3-过期|4-失效|5-退回]'; alter table adam_member_code modify state tinyint null comment '状态[0-可用|1-已用|2-无效|3-过期|4-失效|5-退回]';
create index idx_amember_code_id on adam_member_code (code); create index idx_amember_code_id on adam_member_code (code);
alter table adam_member_code add validity tinyint null comment '有效期(单位天)' after state; alter table adam_member_code add validity int null comment '有效期(单位天)' after state;
alter table adam_member_code add effect_at datetime(3) null comment '生效时间' after validity; alter table adam_member_code add effect_at datetime(3) null comment '生效时间' after validity;
alter table adam_member_code add expire_at datetime(3) null comment '过期时间' after effect_at; alter table adam_member_code add expire_at datetime(3) null comment '过期时间' after effect_at;
alter table adam_member_code add operator varchar(64) null comment 'type=2时记录创建人' after expire_at; alter table adam_member_code add operator varchar(64) null comment 'type=2时记录创建人' after expire_at;
...@@ -111,6 +111,11 @@ create table adam_member_rights ...@@ -111,6 +111,11 @@ create table adam_member_rights
label varchar(50) comment '标注', label varchar(50) comment '标注',
cover varchar(255) comment '图片标识', cover varchar(255) comment '图片标识',
detail text comment '详情内容', detail text comment '详情内容',
operator varchar(64) comment '操作人',
created_at datetime(3) not null,
updated_at datetime(3),
comment varchar(255) comment varchar(255)
) engine = InnoDB comment '会员权益配置'; ) engine = InnoDB comment '会员权益配置';
create unique index uidx_adam_member_rights_id on adam_member_rights (mrights_id); create unique index uidx_adam_member_rights_id on adam_member_rights (mrights_id);
...@@ -126,11 +131,36 @@ create table adam_user_busi_acct ...@@ -126,11 +131,36 @@ create table adam_user_busi_acct
work varchar(64) comment '业务服务模块', work varchar(64) comment '业务服务模块',
ppwd varchar(64) comment '业务服务密码', ppwd varchar(64) comment '业务服务密码',
state tinyint comment '1-NORMAL,2-INVALID', state tinyint comment '1-NORMAL,2-INVALID',
created_at datetime not null, created_at datetime(3) not null,
updated_at datetime, updated_at datetime(3),
comment text comment text
) engine = InnoDB comment '用户业务服务账号表'; ) engine = InnoDB comment '用户业务服务账号表';
create index idx_adam_user_busi_acct_uid on adam_user_busi_acct (uid); create index idx_adam_user_busi_acct_uid on adam_user_busi_acct (uid);
-- >>------------------------------------------------------------------------------------|20210924会员码管理
drop table if exists adam_member_code_batch;
create table adam_member_code_batch
(
mid bigint unsigned auto_increment primary key,
batch_no varchar(64) not null comment '会员码批次号',
member_id varchar(64) not null comment '~`adam_member.member_id`',
member_price_id varchar(64) not null comment '~`adam_member_price.member_price_id`',
member_name varchar(80) comment '会员卡名称~`adam_member.name`',
member_combo varchar(80) comment '套餐包名称',
gen_num int comment '生成数量',
use_num int comment '使用数量',
`describe` varchar(64) comment '描述',
validity int comment '有效期(单位天)',
effect_at datetime(3) null comment '生效时间',
expire_at datetime(3) null comment '失效时间',
state tinyint comment '状态[0-INIT|1-NORMAL|2-INVALID]',
operator varchar(64) comment '操作人',
created_at datetime(3) not null,
updated_at datetime(3),
comment varchar(255)
) engine = InnoDB comment '会员码批次记录';
create index idx_adam_member_code_batch_no on adam_member_code_batch (batch_no);
# -- >>------------------------------------------------------------------------------------ |20210817会员与券改版 # -- >>------------------------------------------------------------------------------------ |20210817会员与券改版
# 券发放管理 # 券发放管理
drop table if exists candy_mgt_coupon; drop table if exists candy_mgt_coupon;
......
package com.liquidnet.service.kylin.service;
import com.liquidnet.service.kylin.dao.report.PerformanceAgeDataDto;
import com.liquidnet.service.kylin.dao.report.PerformanceCityDataDto;
import com.liquidnet.service.kylin.dao.report.PerformanceProvinceDataDto;
import com.liquidnet.service.kylin.dao.report.PerformanceSexDataDto;
import java.util.List;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: TODO
* @class: IReportPerformanceService
* @Package com.liquidnet.service.kylin.service
* @Copyright: LightNet @ Copyright (c) 2021
* @date 2021/9/23 11:27
*/
public interface IReportPerformanceService {
/**
* 获取按省统计数据
* @param performanceId
* @return
*/
List<PerformanceProvinceDataDto> getProvinceDataList(String performanceId);
/**
* 获取按城市统计数据
* @param performanceId
* @return
*/
List<PerformanceCityDataDto> getCityDataList(String performanceId);
/**
* 获取按年龄统计数据
* @param performanceId
* @return
*/
List<PerformanceAgeDataDto> getAgeDataList(String performanceId);
/**
* 获取按性别统计数据
* @param performanceId
* @return
*/
List<PerformanceSexDataDto> getSexDataList(String performanceId);
}
package com.liquidnet.client.admin.web.controller.zhengzai.adam; package com.liquidnet.client.admin.web.controller.zhengzai.adam;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.liquidnet.client.admin.common.annotation.Log; import com.liquidnet.client.admin.common.annotation.Log;
import com.liquidnet.client.admin.common.core.controller.BaseController; import com.liquidnet.client.admin.common.core.controller.BaseController;
import com.liquidnet.client.admin.common.core.domain.AjaxResult; import com.liquidnet.client.admin.common.core.domain.AjaxResult;
import com.liquidnet.client.admin.common.core.page.TableDataInfo; import com.liquidnet.client.admin.common.core.page.TableDataInfo;
import com.liquidnet.client.admin.common.enums.BusinessType; import com.liquidnet.client.admin.common.enums.BusinessType;
import com.liquidnet.client.admin.common.utils.ShiroUtils;
import com.liquidnet.client.admin.common.utils.poi.ExcelUtil;
import com.liquidnet.client.admin.zhengzai.adam.dto.AdamMemberCodeExcelDto;
import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberAdminService; import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberAdminService;
import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberCodeAdminService;
import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberPriceAdminService; import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberPriceAdminService;
import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberRightsAdminService; import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberRightsAdminService;
import com.liquidnet.client.admin.zhengzai.candy.service.ICandyCouponAdminService; import com.liquidnet.client.admin.zhengzai.candy.service.ICandyCouponAdminService;
import com.liquidnet.client.admin.zhengzai.candy.service.ICandyMgtCouponAdminService; import com.liquidnet.client.admin.zhengzai.candy.service.ICandyMgtCouponAdminService;
import com.liquidnet.common.cache.redis.util.RedisUtil; import com.liquidnet.service.adam.dto.admin.AdamMemberBuildParam;
import com.liquidnet.commons.lang.util.CollectionUtil; import com.liquidnet.service.adam.dto.admin.AdamMemberPriceBuildParam;
import com.liquidnet.service.adam.constant.AdamRedisConst; import com.liquidnet.service.adam.dto.admin.AdamMemberRightsBuildParam;
import com.liquidnet.service.adam.dto.admin.*;
import com.liquidnet.service.adam.dto.vo.AdamMemberCodeVo;
import com.liquidnet.service.adam.entity.AdamMember; import com.liquidnet.service.adam.entity.AdamMember;
import com.liquidnet.service.adam.entity.AdamMemberCode;
import com.liquidnet.service.adam.entity.AdamMemberPrice; import com.liquidnet.service.adam.entity.AdamMemberPrice;
import com.liquidnet.service.adam.entity.AdamMemberRights; import com.liquidnet.service.adam.entity.AdamMemberRights;
import com.liquidnet.service.candy.dto.admin.CandyCouponRuleBuildParam; import com.liquidnet.service.candy.dto.admin.CandyCouponRuleBuildParam;
...@@ -41,8 +32,6 @@ import org.springframework.validation.annotation.Validated; ...@@ -41,8 +32,6 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -60,27 +49,15 @@ public class AdamMemberAdminController extends BaseController { ...@@ -60,27 +49,15 @@ public class AdamMemberAdminController extends BaseController {
@Autowired @Autowired
IAdamMemberRightsAdminService adamMemberRightsAdminService; IAdamMemberRightsAdminService adamMemberRightsAdminService;
@Autowired @Autowired
IAdamMemberCodeAdminService adamMemberCodeAdminService;
@Autowired
ICandyMgtCouponAdminService candyMgtCouponAdminService; ICandyMgtCouponAdminService candyMgtCouponAdminService;
@Autowired @Autowired
ICandyCouponAdminService candyCouponAdminService; ICandyCouponAdminService candyCouponAdminService;
@Autowired
private RedisUtil redisUtil;
@GetMapping() @GetMapping()
public String view() { public String view() {
return prefix + "/member"; return prefix + "/member";
} }
@RequiresPermissions("adam:member:view:code")
@GetMapping("code/{memberId}")
public String viewCode(@PathVariable("memberId") String memberId, ModelMap mmap) {
mmap.put("memberId", memberId);
return prefix + "/code";
}
@RequiresPermissions("adam:member:view:list") @RequiresPermissions("adam:member:view:list")
@Log(title = "会员管理:会员卡:列表", businessType = BusinessType.LIST) @Log(title = "会员管理:会员卡:列表", businessType = BusinessType.LIST)
@PostMapping("list") @PostMapping("list")
...@@ -249,128 +226,4 @@ public class AdamMemberAdminController extends BaseController { ...@@ -249,128 +226,4 @@ public class AdamMemberAdminController extends BaseController {
return this.toAjax(candyMgtCouponAdminService.editMgtCouponForMemberRights(parameter)); return this.toAjax(candyMgtCouponAdminService.editMgtCouponForMemberRights(parameter));
} }
} }
@ApiOperation(value = "会员码:列表")
@RequiresPermissions("adam:member:list:code")
@Log(title = "会员管理:会员码:列表", businessType = BusinessType.LIST)
@PostMapping("list_code")
@ResponseBody
public TableDataInfo listCode(AdamMemberCodeListParam parameter) {
return getDataTable(codeListQuery(parameter));
}
private List<AdamMemberCode> codeListQuery(AdamMemberCodeListParam parameter) {
LambdaQueryWrapper<AdamMemberCode> queryWrapper = Wrappers.lambdaQuery(AdamMemberCode.class).orderByDesc(AdamMemberCode::getCreatedAt);
queryWrapper.eq(AdamMemberCode::getMemberId, parameter.getMemberId());
queryWrapper.eq(AdamMemberCode::getType, 2);
queryWrapper.ne(AdamMemberCode::getState, 2);
if (null != parameter.getState()) {
queryWrapper.eq(AdamMemberCode::getState, parameter.getState());
}
queryWrapper.select(
AdamMemberCode::getCode,
AdamMemberCode::getState,
AdamMemberCode::getOperator,
AdamMemberCode::getCreatedAt,
AdamMemberCode::getValidity,
AdamMemberCode::getEffectAt,
AdamMemberCode::getExpireAt,
AdamMemberCode::getUseOrderNo,
AdamMemberCode::getUseUid,
AdamMemberCode::getUseAt
);
queryWrapper.orderByDesc(AdamMemberCode::getMemberNo);
return adamMemberCodeAdminService.list(queryWrapper);
}
@ApiOperation(value = "会员码:导出")
@RequiresPermissions("adam:member:export:code")
@Log(title = "会员管理:会员码:导出", businessType = BusinessType.EXPORT)
@PostMapping("export_code")
@ResponseBody
public AjaxResult exportCode(AdamMemberCodeListParam parameter) {
List<AdamMemberCode> list = codeListQuery(parameter);
ExcelUtil<AdamMemberCodeExcelDto> excelUtil = new ExcelUtil<>(AdamMemberCodeExcelDto.class);
List<AdamMemberCodeExcelDto> excelList = new ArrayList<>();
list.forEach(r -> {
excelList.add(AdamMemberCodeExcelDto.getNew().copy(r));
});
return excelUtil.exportExcel(excelList, "会员码数据");
}
@ApiOperation(value = "会员码:生成")
@RequiresPermissions("adam:member:gen:code")
@Log(title = "会员管理:会员码:生成", businessType = BusinessType.INSERT)
@PostMapping("gen_code")
@ResponseBody
public AjaxResult genCode(@Validated AdamMemberCodeGenParam parameter) {
int count = adamMemberPriceAdminService.count(
Wrappers.lambdaQuery(AdamMemberPrice.class)
.eq(AdamMemberPrice::getMemberPriceId, parameter.getMemberPriceId())
.eq(AdamMemberPrice::getMemberId, parameter.getMemberId())
.eq(AdamMemberPrice::getState, 1)
);
if (count <= 0) {
logger.warn("会员卡ID/价格ID无效[{}]", parameter);
return this.error("会员卡ID/价格ID无效");
}
return this.toAjax(adamMemberCodeAdminService.createGiftCode(parameter));
}
@RequiresPermissions("adam:member:invalid:code")
@Log(title = "会员管理:会员码:失效", businessType = BusinessType.UPDATE)
@PostMapping("invalid_code")
@ResponseBody
public AjaxResult invalid(AdamMemberCodeOptParam optParam) {
return toAjax(this.invalidRecoverCode(optParam, 4));
}
/**
* 失效|退回会员兑换码
*
* @param optParam AdamMemberCodeOptParam
* @param state 状态[0-可用|1-已用|2-无效|3-过期|4-失效|5-退回]
* @return boolean
*/
private boolean invalidRecoverCode(AdamMemberCodeOptParam optParam, int state) {
String loginName = ShiroUtils.getLoginName();
LocalDateTime now = LocalDateTime.now();
logger.info("by:{},optParam:{},state:{}", loginName, optParam, state);
int beforeState = state == 4 ? 0 : (state == 5 ? 1 : -1);
ArrayList<String> updateCodeList = CollectionUtil.arrayListString();
optParam.getCodes().forEach(r -> {
String key = AdamRedisConst.INFO_MEMBER_CODE.concat(r);
AdamMemberCodeVo vo = (AdamMemberCodeVo) redisUtil.get(key);
if (null != vo && vo.getState() == beforeState) {
redisUtil.del(key);
updateCodeList.add(vo.getCode());
}
});
if (!CollectionUtils.isEmpty(updateCodeList)) {
LambdaUpdateWrapper<AdamMemberCode> memberCodeUpdateWrapper = Wrappers.lambdaUpdate(AdamMemberCode.class);
memberCodeUpdateWrapper.eq(AdamMemberCode::getMemberId, optParam.getMemberId());
memberCodeUpdateWrapper.eq(AdamMemberCode::getState, beforeState);
memberCodeUpdateWrapper.in(AdamMemberCode::getCode, updateCodeList);
memberCodeUpdateWrapper.set(AdamMemberCode::getState, state);
memberCodeUpdateWrapper.set(AdamMemberCode::getOperator, loginName);
memberCodeUpdateWrapper.set(AdamMemberCode::getUpdatedAt, now);
return adamMemberCodeAdminService.update(memberCodeUpdateWrapper);
}
return false;
}
@RequiresPermissions("adam:member:recover:code")
@Log(title = "会员管理:会员码:退回", businessType = BusinessType.UPDATE)
@PostMapping("recover_code")
@ResponseBody
public AjaxResult recover(AdamMemberCodeOptParam optParam) {
return toAjax(this.invalidRecoverCode(optParam, 5));
}
} }
package com.liquidnet.client.admin.web.controller.zhengzai.adam;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.liquidnet.client.admin.common.annotation.Log;
import com.liquidnet.client.admin.common.core.controller.BaseController;
import com.liquidnet.client.admin.common.core.domain.AjaxResult;
import com.liquidnet.client.admin.common.core.page.TableDataInfo;
import com.liquidnet.client.admin.common.enums.BusinessType;
import com.liquidnet.client.admin.common.utils.ShiroUtils;
import com.liquidnet.client.admin.common.utils.poi.ExcelUtil;
import com.liquidnet.client.admin.zhengzai.adam.dto.AdamMemberCodeExcelDto;
import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberCodeAdminService;
import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberPriceAdminService;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.service.adam.constant.AdamRedisConst;
import com.liquidnet.service.adam.dto.admin.AdamMemberCodeGenParam;
import com.liquidnet.service.adam.dto.admin.AdamMemberCodeListParam;
import com.liquidnet.service.adam.dto.admin.AdamMemberCodeOptParam;
import com.liquidnet.service.adam.dto.vo.AdamMemberCodeVo;
import com.liquidnet.service.adam.entity.AdamMemberCode;
import com.liquidnet.service.adam.entity.AdamMemberPrice;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.util.CollectionUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@Api(tags = "会员码管理")
@Controller
@RequestMapping("adam/mcode")
public class AdamMemberCodeAdminController extends BaseController {
private final String prefix = "zhengzai/adam/member/code";
@Autowired
IAdamMemberCodeAdminService adamMemberCodeAdminService;
@Autowired
IAdamMemberPriceAdminService adamMemberPriceAdminService;
@Autowired
RedisUtil redisUtil;
@GetMapping("code/mgt")
public String viewCodeMgt(@RequestParam String memberId, ModelMap mmap) {
mmap.put("memberId", memberId);
return prefix + "/code_mgt";
}
@ApiOperation(value = "会员码:管理")
@RequiresPermissions("adam:member:code:mgt:list")
@Log(title = "会员管理:会员码:管理", businessType = BusinessType.LIST)
@PostMapping("code/mgt/list")
@ResponseBody
public TableDataInfo listCodeMgt(@RequestParam String memberId) {
// TODO: 2021/9/23 码生成记录
return getDataTable(null);
}
@GetMapping("code/view")
public String viewCode(@RequestParam String memberId, @RequestParam String batchNo, ModelMap mmap) {
mmap.put("memberId", memberId);
mmap.put("batchNo", batchNo);
return prefix + "/code";
}
@ApiOperation(value = "会员码:列表")
@RequiresPermissions("adam:member:code:list")
@Log(title = "会员管理:会员码:列表", businessType = BusinessType.LIST)
@PostMapping("code/list")
@ResponseBody
public TableDataInfo listCode(AdamMemberCodeListParam parameter) {
return getDataTable(codeListQuery(parameter));
}
private List<AdamMemberCode> codeListQuery(AdamMemberCodeListParam parameter) {
LambdaQueryWrapper<AdamMemberCode> queryWrapper = Wrappers.lambdaQuery(AdamMemberCode.class).orderByDesc(AdamMemberCode::getCreatedAt);
queryWrapper.eq(AdamMemberCode::getMemberId, parameter.getMemberId());
queryWrapper.eq(AdamMemberCode::getType, 2);
queryWrapper.ne(AdamMemberCode::getState, 2);
if (null != parameter.getState()) {
queryWrapper.eq(AdamMemberCode::getState, parameter.getState());
}
queryWrapper.select(
AdamMemberCode::getCode,
AdamMemberCode::getState,
AdamMemberCode::getOperator,
AdamMemberCode::getCreatedAt,
AdamMemberCode::getValidity,
AdamMemberCode::getEffectAt,
AdamMemberCode::getExpireAt,
AdamMemberCode::getUseOrderNo,
AdamMemberCode::getUseUid,
AdamMemberCode::getUseAt
);
queryWrapper.orderByDesc(AdamMemberCode::getMemberNo);
return adamMemberCodeAdminService.list(queryWrapper);
}
@ApiOperation(value = "会员码:导出")
@RequiresPermissions("adam:member:code:export")
@Log(title = "会员管理:会员码:导出", businessType = BusinessType.EXPORT)
@PostMapping("code/export")
@ResponseBody
public AjaxResult exportCode(AdamMemberCodeListParam parameter) {
List<AdamMemberCode> list = codeListQuery(parameter);
ExcelUtil<AdamMemberCodeExcelDto> excelUtil = new ExcelUtil<>(AdamMemberCodeExcelDto.class);
List<AdamMemberCodeExcelDto> excelList = new ArrayList<>();
list.forEach(r -> {
excelList.add(AdamMemberCodeExcelDto.getNew().copy(r));
});
return excelUtil.exportExcel(excelList, "会员码数据");
}
@ApiOperation(value = "会员码:生成")
@RequiresPermissions("adam:member:code:gen")
@Log(title = "会员管理:会员码:生成", businessType = BusinessType.INSERT)
@PostMapping("code/gen")
@ResponseBody
public AjaxResult genCode(@Validated AdamMemberCodeGenParam parameter) {
int count = adamMemberPriceAdminService.count(
Wrappers.lambdaQuery(AdamMemberPrice.class)
.eq(AdamMemberPrice::getMemberPriceId, parameter.getMemberPriceId())
.eq(AdamMemberPrice::getMemberId, parameter.getMemberId())
.eq(AdamMemberPrice::getState, 1)
);
if (count <= 0) {
logger.warn("会员卡ID/价格ID无效[{}]", parameter);
return this.error("会员卡ID/价格ID无效");
}
return this.toAjax(adamMemberCodeAdminService.createGiftCode(parameter));
}
@RequiresPermissions("adam:member:code:invalid")
@Log(title = "会员管理:会员码:失效", businessType = BusinessType.UPDATE)
@PostMapping("invalid_code")
@ResponseBody
public AjaxResult invalid(AdamMemberCodeOptParam optParam) {
return toAjax(this.invalidRecoverCode(optParam, 4));
}
/**
* 失效|退回会员兑换码
*
* @param optParam AdamMemberCodeOptParam
* @param state 状态[0-可用|1-已用|2-无效|3-过期|4-失效|5-退回]
* @return boolean
*/
private boolean invalidRecoverCode(AdamMemberCodeOptParam optParam, int state) {
String loginName = ShiroUtils.getLoginName();
LocalDateTime now = LocalDateTime.now();
logger.info("by:{},optParam:{},state:{}", loginName, optParam, state);
int beforeState = state == 4 ? 0 : (state == 5 ? 1 : -1);
ArrayList<String> updateCodeList = CollectionUtil.arrayListString();
optParam.getCodes().forEach(r -> {
String key = AdamRedisConst.INFO_MEMBER_CODE.concat(r);
AdamMemberCodeVo vo = (AdamMemberCodeVo) redisUtil.get(key);
if (null != vo && vo.getState() == beforeState) {
redisUtil.del(key);
updateCodeList.add(vo.getCode());
}
});
if (!CollectionUtils.isEmpty(updateCodeList)) {
LambdaUpdateWrapper<AdamMemberCode> memberCodeUpdateWrapper = Wrappers.lambdaUpdate(AdamMemberCode.class);
memberCodeUpdateWrapper.eq(AdamMemberCode::getMemberId, optParam.getMemberId());
memberCodeUpdateWrapper.eq(AdamMemberCode::getState, beforeState);
memberCodeUpdateWrapper.in(AdamMemberCode::getCode, updateCodeList);
memberCodeUpdateWrapper.set(AdamMemberCode::getState, state);
memberCodeUpdateWrapper.set(AdamMemberCode::getOperator, loginName);
memberCodeUpdateWrapper.set(AdamMemberCode::getUpdatedAt, now);
return adamMemberCodeAdminService.update(memberCodeUpdateWrapper);
}
return false;
}
@RequiresPermissions("adam:member:code:recover")
@Log(title = "会员管理:会员码:退回", businessType = BusinessType.UPDATE)
@PostMapping("recover_code")
@ResponseBody
public AjaxResult recover(AdamMemberCodeOptParam optParam) {
return toAjax(this.invalidRecoverCode(optParam, 5));
}
}
package com.liquidnet.client.admin.web.controller.zhengzai.kylin;
import com.liquidnet.client.admin.common.annotation.Log;
import com.liquidnet.client.admin.common.core.controller.BaseController;
import com.liquidnet.client.admin.common.core.domain.AjaxResult;
import com.liquidnet.client.admin.common.enums.BusinessType;
import com.liquidnet.commons.lang.util.StringUtil;
import com.liquidnet.service.kylin.dao.report.PerformanceAgeDataDto;
import com.liquidnet.service.kylin.dao.report.PerformanceCityDataDto;
import com.liquidnet.service.kylin.dao.report.PerformanceProvinceDataDto;
import com.liquidnet.service.kylin.dao.report.PerformanceSexDataDto;
import com.liquidnet.service.kylin.dto.param.PerformancePartnerVo;
import com.liquidnet.service.kylin.service.IReportPerformanceService;
import com.liquidnet.service.kylin.service.admin.IKylinPerformancesAdminService;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDate;
import java.util.HashMap;
import java.util.List;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: TODO
* @class: ReportPerformanceController
* @Package com.liquidnet.client.admin.web.controller.zhengzai.kylin
* @Copyright: LightNet @ Copyright (c) 2021
* @date 2021/9/23 11:33
*/
@Slf4j
@Controller
@RequestMapping("/kylin/report")
public class ReportPerformanceController extends BaseController {
private String prefix = "zhengzai/kylin/report";
@Autowired
private IReportPerformanceService reportPerformanceService;
@Autowired
private IKylinPerformancesAdminService kylinPerformancesAdminService;
@Autowired
private MongoTemplate mongoTemplate;
// @RequiresPermissions("kylin:report:getPerformanceData:view")
@GetMapping("/getPerformanceData")
public String getPerformanceDataView(String performanceId, ModelMap mmap)
{
mmap.put("currentDate", LocalDate.now());
mmap.put("performanceId", "");
return prefix + "/performanceData";
}
/**
* 查询演出列表
*/
@Log(title = "演出报表", businessType = BusinessType.LIST)
@RequiresPermissions("kylin:report:getPerformanceData:list")
@PostMapping("/getPerformanceData/list")
@ResponseBody
public AjaxResult provincelist(@RequestParam(value = "performanceId") @Validated String performanceId, ModelMap mmap)
{
//获取演出详情
// KylinPerformanceMisVo kylinPerformanceMisVo = kylinPerformancesAdminService.performanceDetails(performanceId);
PerformancePartnerVo performanceData = mongoTemplate.findOne(Query.query(Criteria.where("performancesId").is(performanceId)), PerformancePartnerVo.class, PerformancePartnerVo.class.getSimpleName());
if(StringUtil.isNull(performanceData)||StringUtil.isNull(performanceData.getPerformancesId())){
return AjaxResult.error("演出Id:"+performanceId+"对应演出不存在!",performanceId);
}
HashMap<String,Object> hashMap = new HashMap();
log.info("ReportPerformanceController.getPerformanceData performanceId:{}",performanceId);
//获取按省统计数据
List<PerformanceProvinceDataDto> provinceDataList= reportPerformanceService.getProvinceDataList(performanceId);
List<PerformanceCityDataDto> cityDataList= reportPerformanceService.getCityDataList(performanceId);
List<PerformanceAgeDataDto> ageDataList= reportPerformanceService.getAgeDataList(performanceId);
List<PerformanceSexDataDto> sexDataList= reportPerformanceService.getSexDataList(performanceId);
//按年龄
// PerformanceAgeDataDto ageDataDto = PerformanceAgeDataDto.getNew();
// ageDataDto.setAge("19");
// ageDataDto.setTotalNumber(34555);
// ageDataList.add(ageDataDto);
// ageDataDto = PerformanceAgeDataDto.getNew();
// ageDataDto.setAge("20");
// ageDataDto.setTotalNumber(33444);
// ageDataList.add(ageDataDto);
//
// //按性别
// PerformanceSexDataDto sexDataDto = PerformanceSexDataDto.getNew();
// sexDataDto.setSex("男");
// sexDataDto.setTotalNumber(12345);
// sexDataList.add(sexDataDto);
// sexDataDto = PerformanceSexDataDto.getNew();
// sexDataDto.setSex("女");
// sexDataDto.setTotalNumber(99885);
// sexDataList.add(sexDataDto);
String perTitle = performanceData.getTitle();
hashMap.put("currentDate", LocalDate.now());
hashMap.put("performanceId", performanceId);
hashMap.put("perTitle", perTitle);
hashMap.put("provinceDataList",provinceDataList);
hashMap.put("cityDataList",cityDataList);
hashMap.put("ageDataList",ageDataList);
hashMap.put("sexDataList",sexDataList);
return AjaxResult.success(hashMap);
}
// /**
// * 查询演出列表
// */
//// @Log(title = "演出报表", businessType = BusinessType.LIST)
//// @RequiresPermissions("kylin:report:getPerformanceData:list")
// @PostMapping("/getPerformanceData/list")
// public String getPerformanceData(@RequestParam(value = "performanceId") @Validated String performanceId, ModelMap mmap)
// {
// log.info("ReportPerformanceController.getPerformanceData performanceId:{}",performanceId);
// //获取按省统计数据
// List<PerformanceProvinceDataDto> provinceDataList= reportPerformanceService.getProvinceDataList(performanceId);
// //
// List<PerformanceCityDataDto> cityDataList= reportPerformanceService.getCityDataList(performanceId);
// List<PerformanceAgeDataDto> ageDataList= reportPerformanceService.getAgeDataList(performanceId);
// List<PerformanceSexDataDto> sexDataDtos= reportPerformanceService.getSexDataList(performanceId);
//
// mmap.put("currentDate", LocalDate.now());
// mmap.put("performanceId", performanceId);
// mmap.put("provinceDataList",provinceDataList);
// mmap.put("cityDataList",cityDataList);
// mmap.put("ageDataList",ageDataList);
// mmap.put("sexDataDtos",sexDataDtos);
// return prefix + "/performanceData";
// }
}
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
<th:block th:include="include :: header('会员码管理')" />
<th:block th:include="include :: select2-css" />
</head>
<body class="gray-bg">
<div class="container-div">
<div class="row">
<div class="col-sm-12 search-collapse">
<form id="data-form">
<div class="select-list">
<ul>
<input type="text" name="memberId" hidden="hidden" th:value="${memberId}" readonly/>
<li>
状态:<select name="state" th:with="type=${@dict.getType('zhengzai_coupon_code_state')}">
<option value="">所有</option>
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
</select>
</li>
<li>
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
<a class="btn btn-warning btn-rounded btn-sm" onclick="resetPre()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
</li>
</ul>
</div>
</form>
</div>
<div class="btn-group-sm" id="toolbar" role="group">
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="adam:member:export:code">
<i class="fa fa-download"></i> 导出
</a>
<a class="btn btn-primary multiple disabled" onclick="invalidHandler()" shiro:hasPermission="adam:member:invalid:code">
<i class="fa fa-edit"></i> 批量失效
</a>
<!-- <a class="btn btn-danger multiple disabled" onclick="recoverHandler()" shiro:hasPermission="adam:member:recover:code">-->
<!-- <i class="fa fa-remove"></i> 批量退回-->
<!-- </a>-->
</div>
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-table"></table>
</div>
</div>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: select2-js" />
<script th:inline="javascript">
var invalidFlag = [[${@permission.hasPermi('adam:member:invalid:code')}]];
var recoverFlag = [[${@permission.hasPermi('adam:member:recover:code')}]];
var datas = [[${@dict.getType('zhengzai_coupon_code_state')}]];// 样例:[{"dictLabel":"未支付","dictValue":"0"},{"dictLabel":"已支付","dictValue":"1"},{"dictLabel":"已关闭","dictValue":"2"}]
var memberId = [[${memberId}]];
var prefix = ctx + "adam/member";
$(function() {
var options = {
url: prefix + "/list_code",
exportUrl: prefix + "/export_code",
detailUrl: ctx + "adam/order/orderList/detail/{id}",
sortName: "code",
sortOrder: "asc",
modalName: "会员码",
columns: [{
checkbox: true
},
{
field: 'code',
title: '会员码'
},
{
field: 'expireAt',
title: '到期时间'
},
{
field: 'useAt',
title: '使用时间'
},
{
field: 'useOrderNo',
title: '兑换订单号',
formatter: function(value, row, index) {
var actions = [];
if ($.common.isEmpty(value)) {
actions.push('<a href="javascript:void(0)">-</a>');
} else {
actions.push('<a href="javascript:void(0)" onclick="$.operate.detailTab(\'' + value + '\')">' + value + '</a>');
}
return actions.join('');
}
},
{
field: 'state',
title: '状态',
align: 'center',
formatter: function(value, row, index) {
return $.table.selectDictLabel(datas, value);
}
},
{
title: '操作',
align: 'center',
formatter: function(value, row, index) {
var actions = [];
if (row.state === 0) {
actions.push('<a class="btn btn-primary btn-xs ' + (invalidFlag && row.state===0) + '" href="javascript:void(0)" onclick="invalidHandler(\'' + row.code + '\')"><i class="fa fa-edit"></i>失效</a> ');
} else if (row.state === 1) {
// actions.push('<a class="btn btn-danger btn-xs ' + (recoverFlag && row.state==0) + '" href="javascript:void(0)" onclick="recoverHandler(\'' + row.code + '\')"><i class="fa fa-remove"></i>退回</a>');
}
return actions.join('');
}
}]
};
$.table.init(options);
});
function resetPre() {
$.form.reset();
}
function invalidHandler(code) {
let invalidCodeUrl = prefix + '/invalid_code';
if (code !== null && code !== undefined) {
var data = {"memberId": memberId,"codes": code};
$.operate.submit(invalidCodeUrl, "post", "json", data);
} else {
var rows = $.common.isEmpty(table.options.uniqueId) ? $.table.selectFirstColumns() : $.table.selectColumns(table.options.uniqueId);
var data = {"memberId": memberId, "codes": rows.join()};
$.operate.batchProcessing(invalidCodeUrl, '失效', data);
}
}
function recoverHandler(code) {
let recoverCodeUrl = prefix + '/recover_code';
if (code !== null && code !== undefined) {
var data = {"memberId": memberId,"codes": code};
$.operate.submit(recoverCodeUrl, "post", "json", data);
} else {
var rows = $.common.isEmpty(table.options.uniqueId) ? $.table.selectFirstColumns() : $.table.selectColumns(table.options.uniqueId);
var data = {"memberId": memberId, "codes": rows.join()};
$.operate.batchProcessing(recoverCodeUrl, '失效', data);
}
}
</script>
</body>
</html>
\ No newline at end of file
...@@ -322,7 +322,17 @@ ...@@ -322,7 +322,17 @@
<ul th:each="mrc:${couponMemberDtoListMap.get(mr.mrightsId)}"> <ul th:each="mrc:${couponMemberDtoListMap.get(mr.mrightsId)}">
<div class="member-coupes-inner"> <div class="member-coupes-inner">
<div class="member-coupes-detail"> <div class="member-coupes-detail">
<input type="hidden" th:value="${mrc.mcouponId}"/> <input type="hidden" id="mrcmcouponId" th:value="${mrc.mcouponId}"/>
<input type="hidden" id="mrccouponId" th:value="${mrc.couponId}"/>
<input type="hidden" id="mrcbusiType" th:value="${mrc.busiType}"/>
<input type="hidden" id="mrccouType" th:value="${mrc.couType}"/>
<input type="hidden" id="mrctitle" th:value="${mrc.title}"/>
<input type="hidden" id="mrceventAmt" th:value="${mrc.eventAmt}"/>
<input type="hidden" id="mrcdays" th:value="${memberPrice.days}"/>
<input type="hidden" id="mrvalFace" th:value="${mrc.valFace}"/>
<input type="hidden" id="mrcoverlay" th:value="${mrc.overlay}"/>
<input type="hidden" id="mrcvalMinus" th:value="${mrc.valMinus}"/>
<input type="hidden" id="mrcvalOver" th:value="${mrc.valOver}"/>
<span class="member-coupes-mcouponId" th:text="${mrc.mcouponId}" hidden></span> <span class="member-coupes-mcouponId" th:text="${mrc.mcouponId}" hidden></span>
<span class="member-coupes-busiType" th:if="${mrc.busiType == 0}">全场</span> <span class="member-coupes-busiType" th:if="${mrc.busiType == 0}">全场</span>
<span class="member-coupes-busiType" th:if="${mrc.busiType == 1}">演出</span> <span class="member-coupes-busiType" th:if="${mrc.busiType == 1}">演出</span>
...@@ -455,21 +465,21 @@ ...@@ -455,21 +465,21 @@
<input type="text" id="eventAmt" value="1"/> <input type="text" id="eventAmt" value="1"/>
</div> </div>
</div> </div>
<div class="form-group alltrack_limit"> <!-- <div class="form-group alltrack_limit">-->
<label class="col-sm-2 control-label">使用限制:</label> <!-- <label class="col-sm-2 control-label">使用限制:</label>-->
<div class="col-sm-10"> <!-- <div class="col-sm-10">-->
<div class="radio-box"> <!-- <div class="radio-box">-->
<label for="radio1" onclick="limitType(this)"> <!-- <label for="radio1" onclick="limitType(this)">-->
<input type="radio" id="limittypr1" name="limit_type" value="0"/> 叠加 <!-- <input type="radio" id="limittypr1" name="limit_type" value="0"/> 叠加-->
</label> <!-- </label>-->
</div> <!-- </div>-->
<div class="radio-box"> <!-- <div class="radio-box">-->
<label for="radio2" onclick="limitType(this)"> <!-- <label for="radio2" onclick="limitType(this)">-->
<input type="radio" id="limittypr2" name="limit_type" value="1"/> 限制 <!-- <input type="radio" id="limittypr2" name="limit_type" value="1"/> 限制-->
</label> <!-- </label>-->
</div> <!-- </div>-->
</div> <!-- </div>-->
</div> <!-- </div>-->
<div class="pop_btns"> <div class="pop_btns">
<div class="confirm_btn" onclick="popBtn(1)">确认</div> <div class="confirm_btn" onclick="popBtn(1)">确认</div>
<div class="confirm_btn confirm_cancel" onclick="popBtn(0)">取消</div> <div class="confirm_btn confirm_cancel" onclick="popBtn(0)">取消</div>
...@@ -570,16 +580,19 @@ ...@@ -570,16 +580,19 @@
label: "标注", label: "标注",
memberId: member.memberId, memberId: member.memberId,
mrightsId: memberRightsList[itemIndex].mrightsId ? memberRightsList[itemIndex].mrightsId : 'string', mrightsId: memberRightsList[itemIndex].mrightsId ? memberRightsList[itemIndex].mrightsId : 'string',
overlay: overlay ? overlay : 0, // overlay: overlay ? overlay : 0,
overlay: 1,
title: coupeTitle, title: coupeTitle,
valFace: valFace ? valFace : 1, valFace: valFace ? valFace : 1,
valOver: valOver ? valOver : 1, valOver: valOver ? valOver : 1,
valMinus: valMinus ? valMinus : 1, valMinus: valMinus ? valMinus : 1,
state: 1 state: 1
}; };
console.log(MembercoupenData); $.operate.saveModalBody(prefix + "/edit_coupon", JSON.stringify(MembercoupenData), function () {
$.operate.saveModalBody(prefix + "/edit_coupon", JSON.stringify(MembercoupenData)); $('.coupe_pop').hide();
$('.cover_pop').hide(); $('.cover_pop').hide();
window.location.reload();
});
} }
} }
...@@ -613,6 +626,7 @@ ...@@ -613,6 +626,7 @@
} }
} }
// 权益图片上传
function icon (obj, num) { function icon (obj, num) {
$('.coverFunNum').val(num); $('.coverFunNum').val(num);
var addIconIndex = $('.vip_icon').index($(obj)); var addIconIndex = $('.vip_icon').index($(obj));
...@@ -620,29 +634,127 @@ ...@@ -620,29 +634,127 @@
$('.cover_pop').show(); $('.cover_pop').show();
} }
// 删除券
function delCoupes (obj) { function delCoupes (obj) {
if ($(obj).parents('.member-coupes-item').find('.member-coupes-inner').length > 1) { var thisVal = $(obj).parents('ul');
$(obj).parents('.member-coupes-inner').remove(); var busiType = Number(thisVal.find('#mrcbusiType').val());
var couType = Number(thisVal.find('#mrccouType').val());
var couponId = thisVal.find('#mrccouponId').val();
var mrightsId = thisVal.find('#mrcmcouponId').val();
var eventAmt = thisVal.find('#mrceventAmt').val();
var memberId = member.memberId;
// var overlay = thisVal.find('#mrcoverlay').val();
var titleDel = thisVal.find('#mrctitle').val();
var valFace = thisVal.find('#mrvalFace').val();
var valOver = thisVal.find('#mrcvalOver').val();
var valMinus = thisVal.find('#mrcvalMinus').val();
// var mrightsId =
if (busiType == 0 || busiType == 1 || busiType == 3) {
var couponRuleList = [{
useScope: 100,
busiName: '全部演出'
}]
} else {
var couponRuleList = [{
useScope: 100,
busiName: '全部商品'
}]
} }
var MembercoupenData = {
busiType: busiType,
couType: couType == 3 ? 101 : couType,
couponId: couponId,
couponRuleList: couponRuleList,
eventAmt: eventAmt,
label: "标注",
memberId: memberId,
mrightsId: mrightsId,
// overlay: overlay ? overlay : 0,
overlay: 1,
title: titleDel,
valFace: valFace ? valFace : 1,
valOver: valOver ? valOver : 1,
valMinus: valMinus ? valMinus : 1,
state: 2
};
$.operate.saveModalBody(prefix + "/edit_coupon", JSON.stringify(MembercoupenData));
thisVal.remove();
} }
// 添加券
function addCoupes (obj) { function addCoupes (obj) {
var addItemIndex = $('.member-coupes').index($(obj)); var addItemIndex = $('.member-coupes').index($(obj));
$('.parentsIndex').val(addItemIndex); $('.parentsIndex').val(addItemIndex);
$('.coupe_pop').show(); $('.coupe_pop').show();
} }
// 编辑券
function editCoupes (obj, dataObj) { function editCoupes (obj, dataObj) {
var coupenObj = dataObj; var coupenObj = dataObj;
$('.coupe_pop').show(); $('.coupe_pop').show();
} }
// 添加权益
function addColumn (obj) { function addColumn (obj) {
let appendDom = $(obj).parents('.interests_column'); let appendDom = $(obj).parents('.interests_column:last');
appendDom.append(appendDom.find('.interests_item').prop('outerHTML')); appendDom.append(appendDom.find('.interests_item').prop('outerHTML'));
let newDom = $('.interests_item:last');
newDom.find('.interestsIcon').attr('src', '');
newDom.find('#interestsTitle').val('');
newDom.find('#interestsSubTitle').val('');
newDom.find('#interestsDesc').val('');
newDom.find('.member-coupes-item').html('');
// $.operate.save(prefix + "/create", data); // $.operate.save(prefix + "/create", data);
} }
// 保存权益/删除权益
function saveColumn(obj, num) {
var objDom = $(obj).parent().parent();
var domIndex = $('.interests_item').index(objDom);
var postData = [];
postData.push({
"name": "cover",
"value": objDom.find('#interestsIcon').attr('src')
}, {
"name": "detail",
"value": objDom.find('#interestsDesc').val()
}, {
"name": "memberId",
"value": member.memberId
}, {
"name": "seqNo",
"value": domIndex
}, {
"name": "state",
"value": num
}, {
"name": "subTitle",
"value": objDom.find('#interestsSubTitle').val()
}, {
"name": "title",
"value": objDom.find('#interestsTitle').val()
});
if (num == 2) {
if (objDom.parent().prop("className").indexOf('interests_inner') != -1) {
postData.push({"name": "mrightsId", "value" : memberRightsList[domIndex].mrightsId});
objDom.remove();
$.operate.saveModal(prefix + "/edit_rights", postData, function () {
window.location.reload();
});
} else {
objDom.remove();
}
} else {
if (memberRightsList[domIndex]) {
postData.push({"name": "mrightsId", "value" : memberRightsList[domIndex].mrightsId});
}
$.operate.saveModal(prefix + "/edit_rights", postData, function () {
window.location.reload();
});
}
}
/*基础信息-修改*/ /*基础信息-修改*/
$("#form-member-edit").validate({ $("#form-member-edit").validate({
onkeyup: false, onkeyup: false,
...@@ -683,7 +795,7 @@ ...@@ -683,7 +795,7 @@
required: "请选择是否限购", required: "请选择是否限购",
}, },
"onsale": { "onsale": {
required: "请选择是否限购", required: "请选择是否开售",
}, },
}, },
focusCleanup: true focusCleanup: true
...@@ -708,45 +820,7 @@ ...@@ -708,45 +820,7 @@
$.operate.saveModal(prefix + "/edit_price", MemberShipData); $.operate.saveModal(prefix + "/edit_price", MemberShipData);
} }
// 保存权益
function saveColumn(obj, num) {
var objDom = $(obj).parent().parent();
var domIndex = $('.interests_item').index(objDom);
var postData = [];
postData.push({
"name": "cover",
"value": objDom.find('#interestsIcon').attr('src')
}, {
"name": "detail",
"value": objDom.find('#interestsDesc').val()
}, {
"name": "memberId",
"value": member.memberId
}, {
"name": "seqNo",
"value": domIndex
}, {
"name": "state",
"value": num
}, {
"name": "subTitle",
"value": objDom.find('#interestsSubTitle').val()
}, {
"name": "title",
"value": objDom.find('#interestsTitle').val()
});
if (num == 2) {
postData.push({"name": "mrightsId", "value" : memberRightsList[domIndex].mrightsId});
objDom.remove();
} else {
if (memberRightsList[domIndex]) {
postData.push({"name": "mrightsId", "value" : memberRightsList[domIndex].mrightsId});
}
}
console.log(postData)
$.operate.saveModal(prefix + "/edit_rights", postData);
}
</script> </script>
</body> </body>
</html> </html>
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
<th:block th:include="include :: header('演出列表')" />
</head>
<body class="gray-bg">
<div class="row border-bottom white-bg dashboard-header">
<div class="col-sm-12 search-collapse">
<form id="formId">
<div class="select-list">
<ul>
<li>
<label>演出id: </label>
<input th:field="${performanceId}" type="text" id="performanceId" placeholder="演出ID" name="performanceId" required/>
</li>
<li>
<a class="btn btn-primary btn-rounded btn-sm" onclick="submit()"><i class="fa fa-search"></i>&nbsp;搜索</a>
<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
</li>
</ul>
</div>
</form>
<form id="formId2">
<div class="select-list" style="text-align: right">
<ul>
<li>
<label>演出id:</label>
<input type="text" name="perId" id ="perId" readonly/>
</li>
<li>
<label>演出名称:</label>
<input type="text" name="perName" id = "perTitle" readonly/>
</li>
</ul>
</div>
</form>
</div>
</div>
<div class="wrapper wrapper-content animated fadeInRight">
<div class="row">
<div class="col-sm-12">
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5>按省份统计购票数量</h5>
<div class="ibox-tools">
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
</li>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
<i class="fa fa-times"></i>
</a>
</div>
</div>
<div class="ibox-content">
<div class="echarts" id="provinceDataChart"></div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5>按城市统计购票数量</h5>
<div class="ibox-tools">
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
</li>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
<i class="fa fa-times"></i>
</a>
</div>
</div>
<div class="ibox-content">
<div class="echarts" id="cityDataChart"></div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5>按年龄统计购票数量</h5>
<div class="ibox-tools">
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
</li>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
<i class="fa fa-times"></i>
</a>
</div>
</div>
<div class="ibox-content">
<div class="echarts" id="ageDataChart"></div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5>按性别统计购票数量</h5>
<div class="ibox-tools">
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">选项1</a>
</li>
<li><a href="#">选项2</a>
</li>
</ul>
<a class="close-link">
<i class="fa fa-times"></i>
</a>
</div>
</div>
<div class="ibox-content">
<div class="echarts" id="sexDataChart"></div>
</div>
</div>
</div>
</div>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: echarts-js" />
<script type="text/javascript">
var prefix = ctx + "kylin/report/getPerformanceData";
var selectListUrl = prefix + "/list";
function submit() {
var performanceId = $("#performanceId").val();
var param = {
performanceId: performanceId
}
if (performanceId == "") {
alert("演出ID不能为空");
} else {
// $.post(selectListUrl,param,function (res) {
// console.log(res.msg);
// initProvinceData(res.data);
// });
$.operate.post(selectListUrl,
param,
function (res) {
if(res==null){
alert("演出查询异常!");
return;
}
if(res.code!=null&&res.code == 0){
debugger;
initProvinceData(res.data);
initCityData(res.data);
initAgeData(res.data);
initSexData(res.data);
$("#perId").attr("value",res.data.performanceId);
$("#perTitle").attr("value",res.data.perTitle);
}else{
// alert(res.msg);
}
});
}
}
function submit2(){
var form = $("#formId");
console.log(selectListUrl);
form.action = selectListUrl;
form.method = "post";
form.submit();
// if ($.validate.form()) {
// var form = $("#formId");
// console.log(selectListUrl);
// form.action = selectListUrl;
// form.submit();
// }
}
var validate = $("#formId").validate({
onkeyup: false,
rules:{
performanceId:{
required:true
}
},
messages:{
performanceId: {
required:"演出id不能为空!"
}
}
});
//按省份统计
function initProvinceData(data){
let settingObj = data.provinceDataList;
// 对象转化为数组
let settingArr = Object.keys(settingObj).map(key => {
return settingObj[key];
})
// 给数组附键值
let value = settingArr.map(item => {
return item.totalNumber;
})
// console.log("value.length==="+value.length);
// console.log("value[0]==="+value[0]);
let name = settingArr.map(item => {
return item.province;
})
// console.log("name.length==="+name.length);
// console.log("name[0]==="+name[0]);
var barChart = echarts.init(document.getElementById("provinceDataChart"));
var baroption = {
title : {
text: '按省份统计购票数量',
x:'center'
},
toolbox: { //可视化的工具箱
show: true,
feature: {
dataView: { //数据视图
show: true
},
restore: { //重置
show: true
},
dataZoom: { //数据缩放视图
show: true
},
saveAsImage: {//保存图片
show: true
},
magicType: {//动态类型切换
type: ['bar', 'line']
}
}
},
tooltip : {
trigger: 'axis'
},
legend: {
data:['购票数量']
},
grid:{
x:30,
x2:40,
y2:24
},
calculable : true,
xAxis : [
{
type : 'category',
// data : ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']
data : name
}
],
yAxis : [
{
type : 'value'
}
],
series : [
{
name:'开票量',
type:'bar',
// data:[2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3],
data:value,
markPoint : {
data : [
{type : 'max', name: '最大值'},
{type : 'min', name: '最小值'}
]
},
markLine : {
data : [
{type : 'average', name: '平均值'}
]
},
itemStyle: {
normal: {
//这里是重点
color: function(params) {
//注意,如果颜色太少的话,后面颜色不会自动循环,最好多定义几个颜色
var colorList = ['#c23531','#2f4554', '#61a0a8', '#d48265', '#91c7ae','#749f83', '#ca8622'];
//给大于颜色数量的柱体添加循环颜色的判断
var index = params.dataIndex;
if (params.dataIndex >= colorList.length) {
index = params.dataIndex - colorList.length;
}
return colorList[index]
}
}
}
}
]
};
barChart.setOption(baroption);
window.onresize = barChart.resize;
}
//按城市统计
function initCityData(data){
let settingObj = data.cityDataList;
// 对象转化为数组
let settingArr = Object.keys(settingObj).map(key => {
return settingObj[key];
})
// 给数组附键值
let value = settingArr.map(item => {
return item.totalNumber;
})
// console.log("value.length==="+value.length);
// console.log("value[0]==="+value[0]);
let name = settingArr.map(item => {
return item.cityName;
})
// console.log("name.length==="+name.length);
// console.log("name[0]==="+name[0]);
var barChart = echarts.init(document.getElementById("cityDataChart"));
var baroption = {
title : {
text: '按城市统计购票数量',
x:'center'
},
toolbox: { //可视化的工具箱
show: true,
feature: {
dataView: { //数据视图
show: true
},
restore: { //重置
show: true
},
dataZoom: { //数据缩放视图
show: true
},
saveAsImage: {//保存图片
show: true
},
magicType: {//动态类型切换
type: ['bar', 'line']
}
}
},
tooltip : {
trigger: 'axis'
},
legend: {
data:['购票数量']
},
grid:{
x:30,
x2:40,
y2:24
},
calculable : true,
xAxis : [
{
type : 'category',
// data : ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']
data : name
}
],
yAxis : [
{
type : 'value'
}
],
series : [
{
name:'开票量',
type:'bar',
// data:[2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3],
data:value,
markPoint : {
data : [
{type : 'max', name: '最大值'},
{type : 'min', name: '最小值'}
]
},
markLine : {
data : [
{type : 'average', name: '平均值'}
]
},
itemStyle: {
normal: {
//这里是重点
color: function(params) {
//注意,如果颜色太少的话,后面颜色不会自动循环,最好多定义几个颜色
var colorList = ['#c23531','#2f4554', '#61a0a8', '#d48265', '#91c7ae','#749f83', '#ca8622'];
//给大于颜色数量的柱体添加循环颜色的判断
var index = params.dataIndex;
if (params.dataIndex >= colorList.length) {
index = params.dataIndex - colorList.length;
}
return colorList[index]
}
}
}
}
]
};
barChart.setOption(baroption);
window.onresize = barChart.resize;
}
//按年龄统计
function initAgeData(data){
let settingObj = data.ageDataList;
// 对象转化为数组
let settingArr = Object.keys(settingObj).map(key => {
return settingObj[key];
})
// 给数组附键值
let value = settingArr.map(item => {
return item.totalNumber;
})
// console.log("value.length==="+value.length);
// console.log("value[0]==="+value[0]);
let name = settingArr.map(item => {
return item.age;
})
// console.log("name.length==="+name.length);
// console.log("name[0]==="+name[0]);
var barChart = echarts.init(document.getElementById("ageDataChart"));
var baroption = {
title : {
text: '按年龄统计购票数量',
x:'center'
},
toolbox: { //可视化的工具箱
show: true,
feature: {
dataView: { //数据视图
show: true
},
restore: { //重置
show: true
},
dataZoom: { //数据缩放视图
show: true
},
saveAsImage: {//保存图片
show: true
},
magicType: {//动态类型切换
type: ['bar', 'line']
}
}
},
tooltip : {
trigger: 'axis'
},
legend: {
data:['购票数量']
},
grid:{
x:30,
x2:40,
y2:24
},
calculable : true,
xAxis : [
{
type : 'category',
data : name,
minInterval: 1 //去掉小数
}
],
yAxis : [
{
type : 'value'
}
],
series : [
{
name:'开票量',
type:'bar',
// data:[2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3],
data:value,
markPoint : {
data : [
{type : 'max', name: '最大值'},
{type : 'min', name: '最小值'}
]
},
markLine : {
data : [
{type : 'average', name: '平均值'}
]
},
itemStyle: {
normal: {
//这里是重点
color: function(params) {
//注意,如果颜色太少的话,后面颜色不会自动循环,最好多定义几个颜色
var colorList = ['#c23531','#2f4554', '#61a0a8', '#d48265', '#91c7ae','#749f83', '#ca8622'];
//给大于颜色数量的柱体添加循环颜色的判断
var index = params.dataIndex;
if (params.dataIndex >= colorList.length) {
index = params.dataIndex - colorList.length;
}
return colorList[index]
}
}
}
}
]
};
barChart.setOption(baroption);
window.onresize = barChart.resize;
}
/**
* 按性别统计
* @param data
*/
function initSexData(data){
debugger;
let settingObj = data.sexDataList;
// 对象转化为数组
let settingArr = Object.keys(settingObj).map(key => {
return settingObj[key];
})
// 给数组附键值
let value = settingArr.map(item => {
return { "value": item.totalNumber };
})
// console.log("value.length==="+value.length);
// console.log("value[0]==="+value[0].value);
let name = settingArr.map(item => {
return { "name": item.sex };
})
// console.log("name.length==="+name.length);
// console.log("name[0]==="+name[0].name);
// 合并数组或者对象在数组或对象前面加...,是es6的新写法,然后数组的map方法会返回数组.
let objArr = value.map((value, index) => {
return { ...value ,...name[index]};
});
console.log(objArr[0]);
var pieChart = echarts.init(document.getElementById("sexDataChart"));
var pieoption = {
title : {
text: '按性别统计购票数量',
// subtext: '纯属虚构',
x:'center'
},
toolbox: { //可视化的工具箱
show: true,
feature: {
dataView: { //数据视图
show: true
},
restore: { //重置
show: true
},
dataZoom: { //数据缩放视图
show: true
},
saveAsImage: {//保存图片
show: true
}
}
},
tooltip : {
trigger: 'item',
formatter: "{a} <br/>{b} : {c} ({d}%)"
},
legend: {
orient : 'vertical',
left : 'left',
data: [{name:'dde'},{name:'222'}]
},
calculable : true,
series : [
{
name:'性别',
type:'pie',
radius : '55%',
center: ['50%', '60%'],
data: objArr,
itemStyle: {
normal:{
label:{
show:true,
formatter: "{b} :\n {c} \n ({d}%)",
position:"inner"
}
}
}
}
]
};
pieChart.setOption(pieoption);
$(window).resize(pieChart.resize);
}
function downloadImpByChart(chartId,name) {
var url = getFullCanvasDataURL(chartId);
var link = document.createElement('a');
link.href = url;
link.download = name+".png";
link.click();
};
//将图形转成base64的图片
function getFullCanvasDataURL(divId){
//将第一个画布作为基准。
var baseCanvas = $("#"+divId).find("canvas").first()[0];
if(!baseCanvas){
return false;
};
var width = baseCanvas.width;
var height = baseCanvas.height;
var ctx = baseCanvas.getContext("2d");
//遍历,将后续的画布添加到在第一个上
$("#"+divId).find("canvas").each(function(i,canvasObj){
if(i>0){
var canvasTmp = $(canvasObj)[0];
ctx.drawImage(canvasTmp,0,0,width,height);
}
});
//获取base64位的url
return baseCanvas.toDataURL();
}
</script>
</body>
</html>
package com.liquidnet.client.admin.zhengzai.adam.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.adam.entity.AdamMemberCodeBatch;
public interface IAdamMemberCodeBatchAdminService extends IService<AdamMemberCodeBatch> {
}
package com.liquidnet.client.admin.zhengzai.adam.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberCodeBatchAdminService;
import com.liquidnet.service.adam.entity.AdamMemberCodeBatch;
import com.liquidnet.service.adam.mapper.AdamMemberCodeBatchMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class AdamMemberCodeBatchAdminServiceImpl extends ServiceImpl<AdamMemberCodeBatchMapper, AdamMemberCodeBatch> implements IAdamMemberCodeBatchAdminService {
}
...@@ -3,6 +3,7 @@ package com.liquidnet.client.admin.zhengzai.adam.service.impl; ...@@ -3,6 +3,7 @@ package com.liquidnet.client.admin.zhengzai.adam.service.impl;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.client.admin.common.utils.ShiroUtils;
import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberRightsAdminService; import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberRightsAdminService;
import com.liquidnet.common.cache.redis.util.RedisUtil; import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.util.IDGenerator; import com.liquidnet.commons.lang.util.IDGenerator;
...@@ -16,6 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -16,6 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.stream.IntStream; import java.util.stream.IntStream;
...@@ -29,6 +31,8 @@ public class AdamMemberRightsAdminServiceImpl extends ServiceImpl<AdamMemberRigh ...@@ -29,6 +31,8 @@ public class AdamMemberRightsAdminServiceImpl extends ServiceImpl<AdamMemberRigh
@Override @Override
public boolean edit(AdamMemberRightsBuildParam param) { public boolean edit(AdamMemberRightsBuildParam param) {
String loginName = ShiroUtils.getLoginName();
LocalDateTime now = LocalDateTime.now();
String mrightsId = param.getMrightsId(); String mrightsId = param.getMrightsId();
boolean saveOrUpadateRst, isAddFlag = StringUtils.isEmpty(mrightsId); boolean saveOrUpadateRst, isAddFlag = StringUtils.isEmpty(mrightsId);
...@@ -44,6 +48,8 @@ public class AdamMemberRightsAdminServiceImpl extends ServiceImpl<AdamMemberRigh ...@@ -44,6 +48,8 @@ public class AdamMemberRightsAdminServiceImpl extends ServiceImpl<AdamMemberRigh
saveOrUpdateInfo.setLabel(param.getLabel()); saveOrUpdateInfo.setLabel(param.getLabel());
saveOrUpdateInfo.setCover(param.getCover()); saveOrUpdateInfo.setCover(param.getCover());
saveOrUpdateInfo.setDetail(param.getDetail()); saveOrUpdateInfo.setDetail(param.getDetail());
saveOrUpdateInfo.setOperator(loginName);
saveOrUpdateInfo.setCreatedAt(now);
saveOrUpadateRst = adamMemberRightsMapper.insert(saveOrUpdateInfo) > 0; saveOrUpadateRst = adamMemberRightsMapper.insert(saveOrUpdateInfo) > 0;
} else { } else {
...@@ -52,12 +58,16 @@ public class AdamMemberRightsAdminServiceImpl extends ServiceImpl<AdamMemberRigh ...@@ -52,12 +58,16 @@ public class AdamMemberRightsAdminServiceImpl extends ServiceImpl<AdamMemberRigh
.eq(AdamMemberRights::getMrightsId, param.getMrightsId()); .eq(AdamMemberRights::getMrightsId, param.getMrightsId());
saveOrUpdateInfo.setState(param.getState()); saveOrUpdateInfo.setState(param.getState());
saveOrUpdateInfo.setOperator(loginName);
saveOrUpdateInfo.setUpdatedAt(now);
if (param.getState() != 2) {
saveOrUpdateInfo.setSeqNo(param.getSeqNo()); saveOrUpdateInfo.setSeqNo(param.getSeqNo());
saveOrUpdateInfo.setTitle(param.getTitle()); saveOrUpdateInfo.setTitle(param.getTitle());
saveOrUpdateInfo.setSubTitle(param.getSubTitle()); saveOrUpdateInfo.setSubTitle(param.getSubTitle());
saveOrUpdateInfo.setLabel(param.getLabel()); saveOrUpdateInfo.setLabel(param.getLabel());
saveOrUpdateInfo.setCover(param.getCover()); saveOrUpdateInfo.setCover(param.getCover());
saveOrUpdateInfo.setDetail(param.getDetail()); saveOrUpdateInfo.setDetail(param.getDetail());
}
saveOrUpadateRst = adamMemberRightsMapper.update(saveOrUpdateInfo, updateWrapper) > 0; saveOrUpadateRst = adamMemberRightsMapper.update(saveOrUpdateInfo, updateWrapper) > 0;
} }
...@@ -98,7 +108,6 @@ public class AdamMemberRightsAdminServiceImpl extends ServiceImpl<AdamMemberRigh ...@@ -98,7 +108,6 @@ public class AdamMemberRightsAdminServiceImpl extends ServiceImpl<AdamMemberRigh
redisUtil.set(AdamRedisConst.INFO_MEMBER_RIGHTS.concat(param.getMemberId()), vos); redisUtil.set(AdamRedisConst.INFO_MEMBER_RIGHTS.concat(param.getMemberId()), vos);
} }
return saveOrUpadateRst; return saveOrUpadateRst;
} }
} }
...@@ -171,7 +171,7 @@ public class CandyMgtCouponAdminServiceImpl extends ServiceImpl<CandyMgtCouponMa ...@@ -171,7 +171,7 @@ public class CandyMgtCouponAdminServiceImpl extends ServiceImpl<CandyMgtCouponMa
// CandyMgtCoupon updateMgtCoupon = new CandyMgtCoupon(); // CandyMgtCoupon updateMgtCoupon = new CandyMgtCoupon();
updateMgtCoupon.setMcouponId(parameter.getMrightsId()); updateMgtCoupon.setMcouponId(parameter.getMrightsId());
updateMgtCoupon.setCouponId(couponId);
updateMgtCoupon.setEventAmt(parameter.getEventAmt()); updateMgtCoupon.setEventAmt(parameter.getEventAmt());
updateMgtCoupon.setOperator(operator); updateMgtCoupon.setOperator(operator);
updateMgtCoupon.setUpdatedAt(nowTime); updateMgtCoupon.setUpdatedAt(nowTime);
...@@ -184,6 +184,7 @@ public class CandyMgtCouponAdminServiceImpl extends ServiceImpl<CandyMgtCouponMa ...@@ -184,6 +184,7 @@ public class CandyMgtCouponAdminServiceImpl extends ServiceImpl<CandyMgtCouponMa
updateCoupon.setExclusive(1); updateCoupon.setExclusive(1);
updateMgtCoupon.setMcouponId(parameter.getMrightsId()); updateMgtCoupon.setMcouponId(parameter.getMrightsId());
updateMgtCoupon.setCouponId(couponId);
updateMgtCoupon.setOperator(operator); updateMgtCoupon.setOperator(operator);
updateMgtCoupon.setUpdatedAt(nowTime); updateMgtCoupon.setUpdatedAt(nowTime);
updateMgtCoupon.setState(2); updateMgtCoupon.setState(2);
...@@ -302,9 +303,10 @@ public class CandyMgtCouponAdminServiceImpl extends ServiceImpl<CandyMgtCouponMa ...@@ -302,9 +303,10 @@ public class CandyMgtCouponAdminServiceImpl extends ServiceImpl<CandyMgtCouponMa
.eq(CandyCoupon::getExclusive, updateCoupon.getExclusive()); .eq(CandyCoupon::getExclusive, updateCoupon.getExclusive());
int updateCt = candyCouponMapper.update(updateCoupon, couponLambdaUpdateWrapper); int updateCt = candyCouponMapper.update(updateCoupon, couponLambdaUpdateWrapper);
LambdaUpdateWrapper<CandyMgtCoupon> mgtCouponLambdaUpdateWrapper = Wrappers.lambdaUpdate(CandyMgtCoupon.class) LambdaUpdateWrapper<CandyMgtCoupon> mgtCouponLambdaUpdateWrapper = Wrappers.lambdaUpdate(CandyMgtCoupon.class);
.eq(CandyMgtCoupon::getMcouponId, updateMgtCoupon.getMcouponId()) mgtCouponLambdaUpdateWrapper.eq(CandyMgtCoupon::getMcouponId, updateMgtCoupon.getMcouponId());
.eq(CandyMgtCoupon::getState, updateCoupon.getExclusive() == 1 ? 10 : 0); mgtCouponLambdaUpdateWrapper.eq(CandyMgtCoupon::getCouponId, updateMgtCoupon.getCouponId());
mgtCouponLambdaUpdateWrapper.eq(CandyMgtCoupon::getState, updateCoupon.getExclusive() == 1 ? 10 : 0);
updateCt += candyMgtCouponMapper.update(updateMgtCoupon, mgtCouponLambdaUpdateWrapper); updateCt += candyMgtCouponMapper.update(updateMgtCoupon, mgtCouponLambdaUpdateWrapper);
......
package com.liquidnet.client.admin.zhengzai.kylin.service.impl;
import com.liquidnet.service.kylin.dao.report.PerformanceAgeDataDto;
import com.liquidnet.service.kylin.dao.report.PerformanceCityDataDto;
import com.liquidnet.service.kylin.dao.report.PerformanceProvinceDataDto;
import com.liquidnet.service.kylin.dao.report.PerformanceSexDataDto;
import com.liquidnet.service.kylin.mapper.ReportPerformanceMapper;
import com.liquidnet.service.kylin.service.IReportPerformanceService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: TODO
* @class: ReportPerformanceServiceImpl
* @Package com.liquidnet.client.admin.zhengzai.kylin.service.impl
* @Copyright: LightNet @ Copyright (c) 2021
* @date 2021/9/23 11:30
*/
@Slf4j
@Service
public class ReportPerformanceServiceImpl implements IReportPerformanceService {
@Autowired
private ReportPerformanceMapper reportPerformanceMapper;
@Override
public List<PerformanceProvinceDataDto> getProvinceDataList(String performanceId) {
return reportPerformanceMapper.getProvinceDataList(performanceId);
}
@Override
public List<PerformanceCityDataDto> getCityDataList(String performanceId) {
return reportPerformanceMapper.getCityDataList(performanceId);
}
@Override
public List<PerformanceAgeDataDto> getAgeDataList(String performanceId) {
return reportPerformanceMapper.getAgeDataList(performanceId);
}
@Override
public List<PerformanceSexDataDto> getSexDataList(String performanceId) {
return reportPerformanceMapper.getSexDataList(performanceId);
}
}
package com.liquidnet.service.adam.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 会员码批次记录
* </p>
*
* @author liquidnet
* @since 2021-09-24
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class AdamMemberCodeBatch implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* 会员码批次号
*/
private String batchNo;
/**
* ~`adam_member.member_id`
*/
private String memberId;
/**
* ~`adam_member_price.member_price_id`
*/
private String memberPriceId;
/**
* 会员卡名称~`adam_member.name`
*/
private String memberName;
/**
* 套餐包名称
*/
private String memberCombo;
/**
* 生成数量
*/
private Integer genNum;
/**
* 使用数量
*/
private Integer useNum;
/**
* 描述
*/
private String describe;
/**
* 有效期(单位天)
*/
private Integer validity;
/**
* 生效时间
*/
private LocalDateTime effectAt;
/**
* 失效时间
*/
private LocalDateTime expireAt;
/**
* 状态:0-INIT,1-NORMAL,2-INVALID
*/
private Integer state;
/**
* 操作人
*/
private String operator;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
private String comment;
}
...@@ -3,6 +3,8 @@ package com.liquidnet.service.adam.entity; ...@@ -3,6 +3,8 @@ package com.liquidnet.service.adam.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
...@@ -65,6 +67,15 @@ public class AdamMemberRights implements Serializable { ...@@ -65,6 +67,15 @@ public class AdamMemberRights implements Serializable {
*/ */
private String detail; private String detail;
/**
* 操作人
*/
private String operator;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
private String comment; private String comment;
......
package com.liquidnet.service.adam.mapper;
import com.liquidnet.service.adam.entity.AdamMemberCodeBatch;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 会员码批次记录 Mapper 接口
* </p>
*
* @author liquidnet
* @since 2021-09-24
*/
public interface AdamMemberCodeBatchMapper extends BaseMapper<AdamMemberCodeBatch> {
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.liquidnet.service.adam.mapper.AdamMemberCodeBatchMapper">
</mapper>
package com.liquidnet.service.kylin.dao.report;
import lombok.Data;
import java.io.Serializable;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: TODO
* @class: PerformanceAgeDataDto
* @Package com.liquidnet.service.kylin.dao.report
* @Copyright: LightNet @ Copyright (c) 2021
* @date 2021/9/23 10:58
*/
@Data
public class PerformanceAgeDataDto implements Serializable {
private String performanceId;
private String age;
private long totalNumber;
private static final PerformanceAgeDataDto obj = new PerformanceAgeDataDto();
public static PerformanceAgeDataDto getNew() {
try {
return (PerformanceAgeDataDto) obj.clone();
} catch (CloneNotSupportedException e) {
return new PerformanceAgeDataDto();
}
}
}
package com.liquidnet.service.kylin.dao.report;
import lombok.Data;
import java.io.Serializable;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: TODO
* @class: PerformanceCityDataDto
* @Package com.liquidnet.service.kylin.dao.report
* @Copyright: LightNet @ Copyright (c) 2021
* @date 2021/9/23 10:58
*/
@Data
public class PerformanceCityDataDto implements Serializable {
private String performanceId;
private String cityName;
private long totalNumber;
private static final PerformanceCityDataDto obj = new PerformanceCityDataDto();
public static PerformanceCityDataDto getNew() {
try {
return (PerformanceCityDataDto) obj.clone();
} catch (CloneNotSupportedException e) {
return new PerformanceCityDataDto();
}
}
}
package com.liquidnet.service.kylin.dao.report;
import lombok.Data;
import java.io.Serializable;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: TODO
* @class: PerformanceProvinceData
* @Package com.liquidnet.service.kylin.dao.report
* @Copyright: LightNet @ Copyright (c) 2021
* @date 2021/9/23 10:57
*/
@Data
public class PerformanceProvinceDataDto implements Serializable {
private String performanceId;
private String province;
private long totalNumber;
private static final PerformanceProvinceDataDto obj = new PerformanceProvinceDataDto();
public static PerformanceProvinceDataDto getNew() {
try {
return (PerformanceProvinceDataDto) obj.clone();
} catch (CloneNotSupportedException e) {
return new PerformanceProvinceDataDto();
}
}
}
package com.liquidnet.service.kylin.dao.report;
import lombok.Data;
import java.io.Serializable;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: TODO
* @class: PerformanceSexDataDto
* @Package com.liquidnet.service.kylin.dao.report
* @Copyright: LightNet @ Copyright (c) 2021
* @date 2021/9/23 10:58
*/
@Data
public class PerformanceSexDataDto implements Serializable {
private String sex;
private long totalNumber;
private static final PerformanceSexDataDto obj = new PerformanceSexDataDto();
public static PerformanceSexDataDto getNew() {
try {
return (PerformanceSexDataDto) obj.clone();
} catch (CloneNotSupportedException e) {
return new PerformanceSexDataDto();
}
}
}
package com.liquidnet.service.kylin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.liquidnet.service.kylin.dao.report.PerformanceAgeDataDto;
import com.liquidnet.service.kylin.dao.report.PerformanceCityDataDto;
import com.liquidnet.service.kylin.dao.report.PerformanceProvinceDataDto;
import com.liquidnet.service.kylin.dao.report.PerformanceSexDataDto;
import com.liquidnet.service.kylin.entity.KylinPerformances;
import java.util.List;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: TODO
* @class: ReportPerformanceMapper
* @Package com.liquidnet.service.kylin.mapper
* @Copyright: LightNet @ Copyright (c) 2021
* @date 2021/9/23 10:54
*/
public interface ReportPerformanceMapper extends BaseMapper<KylinPerformances> {
/**
* 获取按省统计数据
* @param performanceId
* @return
*/
List<PerformanceProvinceDataDto> getProvinceDataList(String performanceId);
/**
* 获取按城市统计数据
* @param performanceId
* @return
*/
List<PerformanceCityDataDto> getCityDataList(String performanceId);
/**
* 获取按年龄统计数据
* @param performanceId
* @return
*/
List<PerformanceAgeDataDto> getAgeDataList(String performanceId);
/**
* 获取按性别统计数据
* @param performanceId
* @return
*/
List<PerformanceSexDataDto> getSexDataList(String performanceId);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.liquidnet.service.kylin.mapper.ReportPerformanceMapper">
<resultMap id="getProvinceDataListResult" type="com.liquidnet.service.kylin.dao.report.PerformanceProvinceDataDto">
<result column="performance_id" property="performanceId"/>
<result column="province" property="province"/>
<result column="total_number" property="totalNumber"/>
</resultMap>
<resultMap id="getCityDataListResult" type="com.liquidnet.service.kylin.dao.report.PerformanceCityDataDto">
<result column="performance_id" property="performanceId"/>
<result column="city_name" property="cityName"/>
<result column="total_number" property="totalNumber"/>
</resultMap>
<resultMap id="getAgeDataListResult" type="com.liquidnet.service.kylin.dao.report.PerformanceAgeDataDto">
<result column="performance_id" property="performanceId"/>
<result column="age" property="age"/>
<result column="total_number" property="totalNumber"/>
</resultMap>
<resultMap id="getSexDataListResult" type="com.liquidnet.service.kylin.dao.report.PerformanceSexDataDto">
<result column="sex" property="sex"/>
<result column="total_number" property="totalNumber"/>
</resultMap>
<!-- 演出按省统计-->
<select id="getProvinceDataList" parameterType="java.lang.String" resultMap="getProvinceDataListResult">
select x.* from (
SELECT kotr.performance_id AS 'performance_id',
ifnull(ca.province, '未知') province,
count(1) total_number
FROM kylin_order_ticket_relations kotr
inner join kylin_order_tickets AS kot on kotr.order_id = kot.order_tickets_id
inner JOIN kylin_order_ticket_status AS kots ON kots.order_id = kot.order_tickets_id
inner join kylin_order_ticket_entities kote on kot.order_tickets_id = kote.order_id
left join sys_dict_id_card_area ca
on substr(kote.enter_id_code, 1, 6)= ca.code
WHERE 1 > 0
and kotr.performance_id = ${performanceId}
and kots.`status` in (1, 3, 6)
and kot.coupon_type = 'no'
group by kotr.performance_id,ca.province
) x order by x.total_number desc
</select>
<!-- 演出按城市统计-->
<select id="getCityDataList" parameterType="java.lang.String" resultMap="getCityDataListResult">
select x.* from (
SELECT
kotr.performance_id AS 'performance_id',
ifnull(ca.pre_city,'未知') city_name,
count(1) total_number
FROM
kylin_order_ticket_relations kotr
inner join kylin_order_tickets AS kot on kotr.order_id = kot.order_tickets_id
inner JOIN kylin_order_ticket_status AS kots ON kots.order_id = kot.order_tickets_id
inner join kylin_order_ticket_entities kote on kot.order_tickets_id = kote.order_id
left join sys_dict_id_card_area ca on substr(kote.enter_id_code,1,6) = ca.code
WHERE 1>0 and kotr.performance_id = #{performanceId}
and kots.`status` in(1,3,6)
and kot.coupon_type ='no'
group by kotr.performance_id,ca.pre_city
) x order by x.total_number desc
</select>
<!-- 演出按年龄统计-->
<select id="getAgeDataList" parameterType="java.lang.String" resultMap="getAgeDataListResult">
select * from (
SELECT kotr.performance_id AS 'performance_id',
substr(curdate(), 1, 4) - substr(kote.enter_id_code, 7, 4) age,
count(1) total_number
FROM kylin_order_ticket_relations kotr
inner join kylin_order_tickets AS kot on kotr.order_id = kot.order_tickets_id
inner JOIN kylin_order_ticket_status AS kots ON kots.order_id = kot.order_tickets_id
inner join kylin_order_ticket_entities kote on kot.order_tickets_id = kote.order_id
WHERE 1 > 0
and kotr.performance_id = #{performanceId}
and kots.`status` in (1, 3, 6)
and kot.coupon_type = 'no'
and length(kote.enter_id_code)=18
group by kotr.performance_id, substr(curdate(), 1, 4) - substr(kote.enter_id_code, 7, 4)
)x order by x.age
</select>
<!-- 演出按性别统计-->
<select id="getSexDataList" parameterType="java.lang.String" resultMap="getSexDataListResult">
select x.sex,count(1) total_number from (
SELECT kotr.performance_id AS 'performance_id',
case when substr(kote.enter_id_code,17,1)%2=0 then '女' else '男' end sex
FROM kylin_order_ticket_relations kotr
inner join kylin_order_tickets AS kot on kotr.order_id = kot.order_tickets_id
inner JOIN kylin_order_ticket_status AS kots ON kots.order_id = kot.order_tickets_id
inner join kylin_order_ticket_entities kote on kot.order_tickets_id = kote.order_id
WHERE 1 > 0
and kotr.performance_id = ${performanceId}
and kots.`status` in (1, 3, 6)
and kot.coupon_type = 'no'
and length(kote.enter_id_code)=18
)x group by x.sex
</select>
</mapper>
...@@ -356,7 +356,7 @@ alter table adam_member_price add price_special decimal(8, 2) null comment '特 ...@@ -356,7 +356,7 @@ alter table adam_member_price add price_special decimal(8, 2) null comment '特
# 会员码表调整 # 会员码表调整
alter table adam_member_code modify state tinyint null comment '状态[0-可用|1-已用|2-无效|3-过期|4-失效|5-退回]'; alter table adam_member_code modify state tinyint null comment '状态[0-可用|1-已用|2-无效|3-过期|4-失效|5-退回]';
create index idx_amember_code_id on adam_member_code (code); create index idx_amember_code_id on adam_member_code (code);
alter table adam_member_code add validity tinyint null comment '有效期(单位天)' after state; alter table adam_member_code add validity int null comment '有效期(单位天)' after state;
alter table adam_member_code add effect_at datetime(3) null comment '生效时间' after validity; alter table adam_member_code add effect_at datetime(3) null comment '生效时间' after validity;
alter table adam_member_code add expire_at datetime(3) null comment '过期时间' after effect_at; alter table adam_member_code add expire_at datetime(3) null comment '过期时间' after effect_at;
alter table adam_member_code add operator varchar(64) null comment 'type=2时记录创建人' after expire_at; alter table adam_member_code add operator varchar(64) null comment 'type=2时记录创建人' after expire_at;
...@@ -409,6 +409,11 @@ create table adam_member_rights ...@@ -409,6 +409,11 @@ create table adam_member_rights
label varchar(50) comment '标注', label varchar(50) comment '标注',
cover varchar(255) comment '图片标识', cover varchar(255) comment '图片标识',
detail text comment '详情内容', detail text comment '详情内容',
operator varchar(64) comment '操作人',
created_at datetime(3) not null,
updated_at datetime(3),
comment varchar(255) comment varchar(255)
) engine = InnoDB comment '会员权益配置'; ) engine = InnoDB comment '会员权益配置';
create unique index uidx_adam_member_rights_id on adam_member_rights (mrights_id); create unique index uidx_adam_member_rights_id on adam_member_rights (mrights_id);
...@@ -424,11 +429,35 @@ create table adam_user_busi_acct ...@@ -424,11 +429,35 @@ create table adam_user_busi_acct
work varchar(64) comment '业务服务模块', work varchar(64) comment '业务服务模块',
ppwd varchar(64) comment '业务服务密码', ppwd varchar(64) comment '业务服务密码',
state tinyint comment '1-NORMAL,2-INVALID', state tinyint comment '1-NORMAL,2-INVALID',
created_at datetime not null, created_at datetime(3) not null,
updated_at datetime, updated_at datetime(3),
comment text comment text
) engine = InnoDB comment '用户业务服务账号表'; ) engine = InnoDB comment '用户业务服务账号表';
create index idx_adam_user_busi_acct_uid on adam_user_busi_acct (uid); create index idx_adam_user_busi_acct_uid on adam_user_busi_acct (uid);
-- >>------------------------------------------------------------------------------------ -- >>------------------------------------------------------------------------------------|20210924会员码管理
drop table if exists adam_member_code_batch;
create table adam_member_code_batch
(
mid bigint unsigned auto_increment primary key,
batch_no varchar(64) not null comment '会员码批次号',
member_id varchar(64) not null comment '~`adam_member.member_id`',
member_price_id varchar(64) not null comment '~`adam_member_price.member_price_id`',
member_name varchar(80) comment '会员卡名称~`adam_member.name`',
member_combo varchar(80) comment '套餐包名称',
gen_num int comment '生成数量',
use_num int comment '使用数量',
`describe` varchar(64) comment '描述',
validity int comment '有效期(单位天)',
effect_at datetime(3) null comment '生效时间',
expire_at datetime(3) null comment '失效时间',
state tinyint comment '状态[0-INIT|1-NORMAL|2-INVALID]',
operator varchar(64) comment '操作人',
created_at datetime(3) not null,
updated_at datetime(3),
comment varchar(255)
) engine = InnoDB comment '会员码批次记录';
create index idx_adam_member_code_batch_no on adam_member_code_batch (batch_no);
-- >>------------------------------------------------------------------------------------ -- >>------------------------------------------------------------------------------------
-- >>------------------------------------------------------------------------------------ -- >>------------------------------------------------------------------------------------
...@@ -129,6 +129,11 @@ public class AdamLoginController { ...@@ -129,6 +129,11 @@ public class AdamLoginController {
} }
AdamUserInfoVo userInfoVo = adamRdmService.getUserInfoVoByUid(uid); AdamUserInfoVo userInfoVo = adamRdmService.getUserInfoVoByUid(uid);
if (null == userInfoVo) {
log.warn("Cancelled mobile:{}", mobile);
return ResponseDto.failure(ErrorMapping.get("10024"));
}
String passwdMd5 = DigestUtils.md5DigestAsHex(password.toLowerCase().concat(passwdSalt).getBytes(StandardCharsets.UTF_8)); String passwdMd5 = DigestUtils.md5DigestAsHex(password.toLowerCase().concat(passwdSalt).getBytes(StandardCharsets.UTF_8));
if (!passwdMd5.equals(userInfoVo.getPasswd())) {// 密码校验 if (!passwdMd5.equals(userInfoVo.getPasswd())) {// 密码校验
return ResponseDto.failure(ErrorMapping.get("10013")); return ResponseDto.failure(ErrorMapping.get("10013"));
...@@ -164,6 +169,11 @@ public class AdamLoginController { ...@@ -164,6 +169,11 @@ public class AdamLoginController {
AdamUserInfoVo userInfoVo = toRegister ? adamUserService.register(mobile) : adamRdmService.getUserInfoVoByUid(uid); AdamUserInfoVo userInfoVo = toRegister ? adamUserService.register(mobile) : adamRdmService.getUserInfoVoByUid(uid);
if (!toRegister && null == userInfoVo) {
log.warn("Cancelled mobile:{}", mobile);
return ResponseDto.failure(ErrorMapping.get("10024"));
}
if (0 == userInfoVo.getIsComplete() && null != skip && 1 == skip) { if (0 == userInfoVo.getIsComplete() && null != skip && 1 == skip) {
// 根据skip值,设置IsComplete(考虑到已存在用户未完善信息的情况,这里只对返回数据单独设置IsComplete) // 根据skip值,设置IsComplete(考虑到已存在用户未完善信息的情况,这里只对返回数据单独设置IsComplete)
userInfoVo.setIsComplete(1); userInfoVo.setIsComplete(1);
...@@ -196,6 +206,11 @@ public class AdamLoginController { ...@@ -196,6 +206,11 @@ public class AdamLoginController {
AdamUserInfoVo userInfoVo = toRegister ? adamUserService.register(mobile) : adamRdmService.getUserInfoVoByUid(uid); AdamUserInfoVo userInfoVo = toRegister ? adamUserService.register(mobile) : adamRdmService.getUserInfoVoByUid(uid);
if (!toRegister && null == userInfoVo) {
log.warn("Cancelled mobile:{}", mobile);
return ResponseDto.failure(ErrorMapping.get("10024"));
}
AdamLoginInfoVo loginInfoVo = AdamLoginInfoVo.getNew(); AdamLoginInfoVo loginInfoVo = AdamLoginInfoVo.getNew();
loginInfoVo.setToken(this.ssoProcess(userInfoVo)); loginInfoVo.setToken(this.ssoProcess(userInfoVo));
loginInfoVo.setUserInfo(userInfoVo); loginInfoVo.setUserInfo(userInfoVo);
...@@ -269,7 +284,13 @@ public class AdamLoginController { ...@@ -269,7 +284,13 @@ public class AdamLoginController {
String uid = adamRdmService.getUidByPlatformOpenId(parameter.getPlatform(), parameter.getOpenId()); String uid = adamRdmService.getUidByPlatformOpenId(parameter.getPlatform(), parameter.getOpenId());
if (StringUtils.isEmpty(uid)) return ResponseDto.failure(ErrorMapping.get("10006")); if (StringUtils.isEmpty(uid)) return ResponseDto.failure(ErrorMapping.get("10006"));
loginInfoVo.setUserInfo(adamRdmService.getUserInfoVoByUid(uid)); AdamUserInfoVo userInfoVo = adamRdmService.getUserInfoVoByUid(uid);
if (null == userInfoVo) {
log.warn("Cancelled openId:{}", parameter.getOpenId());
return ResponseDto.failure(ErrorMapping.get("10024"));
}
loginInfoVo.setUserInfo(userInfoVo);
loginInfoVo.setUserMemberVo(adamRdmService.getUserMemberVoByUid(uid)); loginInfoVo.setUserMemberVo(adamRdmService.getUserMemberVoByUid(uid));
} else {// 新账号注册 } else {// 新账号注册
ResponseDto<AdamLoginInfoVo> checkSmsCodeDto = this.checkSmsCode(parameter.getMobile(), parameter.getCode()); ResponseDto<AdamLoginInfoVo> checkSmsCodeDto = this.checkSmsCode(parameter.getMobile(), parameter.getCode());
......
...@@ -114,7 +114,7 @@ public class AdamUserServiceImpl implements IAdamUserService { ...@@ -114,7 +114,7 @@ public class AdamUserServiceImpl implements IAdamUserService {
LinkedList<Object[]> initUserObjs = CollectionUtil.linkedListObjectArr(), LinkedList<Object[]> initUserObjs = CollectionUtil.linkedListObjectArr(),
initUserInfoObjs = CollectionUtil.linkedListObjectArr(), initUserInfoObjs = CollectionUtil.linkedListObjectArr(),
initThirdPartObjs = CollectionUtil.linkedListObjectArr(); initThirdPartObjs = CollectionUtil.linkedListObjectArr();
if (StringUtils.isEmpty(uid)) {// 手机号未注册 if (StringUtils.isEmpty(uid)) {// 不存在UID,手机号未注册
userInfoVo = AdamUserInfoVo.getNew(); userInfoVo = AdamUserInfoVo.getNew();
userInfoVo.setUid(IDGenerator.nextSnowId() + ""); userInfoVo.setUid(IDGenerator.nextSnowId() + "");
...@@ -154,12 +154,16 @@ public class AdamUserServiceImpl implements IAdamUserService { ...@@ -154,12 +154,16 @@ public class AdamUserServiceImpl implements IAdamUserService {
); );
log.debug("#MQ耗时:{}ms", System.currentTimeMillis() - s); log.debug("#MQ耗时:{}ms", System.currentTimeMillis() - s);
} else {// 手机号已注册 } else {// 存在UID,手机号已注册
// 判断已注册用户是否绑定同平台的第三方账号 // 判断已注册用户是否绑定同平台的第三方账号
AdamThirdPartInfoVo thirdPartVo = adamRdmService.getThirdPartVoByUidPlatform(uid, param.getPlatform()); AdamThirdPartInfoVo thirdPartVo = adamRdmService.getThirdPartVoByUidPlatform(uid, param.getPlatform());
if (null == thirdPartVo) {// 未绑定 if (null == thirdPartVo) {// 未绑定
this.bindTpa(uid, param);
userInfoVo = adamRdmService.getUserInfoVoByUid(uid); userInfoVo = adamRdmService.getUserInfoVoByUid(uid);
if (null == userInfoVo) {
log.warn("Cancelled mobile:{}", param.getMobile());
return ResponseDto.failure(ErrorMapping.get("10024"));
}
this.bindTpa(uid, param);
} else if (thirdPartVo.getOpenId().equals(param.getOpenId())) { } else if (thirdPartVo.getOpenId().equals(param.getOpenId())) {
userInfoVo = adamRdmService.getUserInfoVoByUid(uid); userInfoVo = adamRdmService.getUserInfoVoByUid(uid);
} else { } else {
...@@ -273,9 +277,9 @@ public class AdamUserServiceImpl implements IAdamUserService { ...@@ -273,9 +277,9 @@ public class AdamUserServiceImpl implements IAdamUserService {
objsAddresses = CollectionUtil.linkedListObjectArr(); objsAddresses = CollectionUtil.linkedListObjectArr();
long s = System.currentTimeMillis(); long s = System.currentTimeMillis();
AdamUserInfoVo userInfoVo = adamRdmService.getUserInfoVoByUid(uid); // AdamUserInfoVo userInfoVo = adamRdmService.getUserInfoVoByUid(uid);
//
adamRdmService.delUidByMobile(userInfoVo.getMobile()); // adamRdmService.delUidByMobile(userInfoVo.getMobile());
List<AdamThirdPartInfoVo> thirdPartInfoVos = adamRdmService.getThirdPartVoListByUid(uid); List<AdamThirdPartInfoVo> thirdPartInfoVos = adamRdmService.getThirdPartVoListByUid(uid);
if (!CollectionUtils.isEmpty(thirdPartInfoVos)) { if (!CollectionUtils.isEmpty(thirdPartInfoVos)) {
thirdPartInfoVos.forEach(r -> { thirdPartInfoVos.forEach(r -> {
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
10021=签名不合规 10021=签名不合规
10022=头像不合规 10022=头像不合规
10023=背景图不合规 10023=背景图不合规
10024=该账号已被主动注销
10101=姓名或身份证件号无效 10101=姓名或身份证件号无效
......
adam_user.add=INSERT INTO adam_user (`uid`, mobile, `state`, is_complete, created_at) VALUES (?,?,?,?,?) adam_user.add=INSERT INTO adam_user (`uid`, mobile, `state`, is_complete, created_at) VALUES (?,?,?,?,?)
adam_user.complete=UPDATE adam_user SET is_complete=?, updated_at=? WHERE `uid`=? adam_user.complete=UPDATE adam_user SET is_complete=?, updated_at=? WHERE `uid`=?
adam_user.edit.mobile=UPDATE adam_user SET mobile=?, updated_at=? WHERE `uid`=? adam_user.edit.mobile=UPDATE adam_user SET mobile=?, updated_at=? WHERE `uid`=?
adam_user.close=UPDATE adam_user SET `state`=2, mobile=concat(mobile,'_',curtime()), updated_at=?, closed_at=? WHERE `uid`=? #adam_user.close=UPDATE adam_user SET `state`=2, mobile=concat(mobile,'_',curtime()), updated_at=?, closed_at=? WHERE `uid`=?
adam_user.close=UPDATE adam_user SET `state`=2, updated_at=?, closed_at=? WHERE `uid`=?
# ---------------------------------------------------- # ----------------------------------------------------
adam_user_info.add=INSERT INTO adam_user_info (`uid`, nickname, avatar, qr_code) VALUES (?,?,?,?) adam_user_info.add=INSERT INTO adam_user_info (`uid`, nickname, avatar, qr_code) VALUES (?,?,?,?)
......
...@@ -172,8 +172,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ ...@@ -172,8 +172,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
if (!isMember) { if (!isMember) {
return ResponseDto.failure(ErrorMapping.get("20009"));//没有会员权限 return ResponseDto.failure(ErrorMapping.get("20009"));//没有会员权限
} }
} } else {
else {
if (DateUtil.compareStrDay(DateUtil.getNowTime(), memberTimeStart) == 1 && DateUtil.compareStrDay(DateUtil.getNowTime(), timeStart) == -1 && ticketData.getIsMember() == 1) { if (DateUtil.compareStrDay(DateUtil.getNowTime(), memberTimeStart) == 1 && DateUtil.compareStrDay(DateUtil.getNowTime(), timeStart) == -1 && ticketData.getIsMember() == 1) {
// 会员购买逻辑 // 会员购买逻辑
memberType = 1; memberType = 1;
...@@ -266,6 +265,9 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ ...@@ -266,6 +265,9 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
if (isTrueName == 1) { if (isTrueName == 1) {
for (String enterId : payOrderParam.getEnterIdList()) { for (String enterId : payOrderParam.getEnterIdList()) {
AdamEntersVo adamEnters = orderUtils.getEnters(uid, enterId);//feignAdamBaseClient.queryEnters(enterId, uid).getData(); AdamEntersVo adamEnters = orderUtils.getEnters(uid, enterId);//feignAdamBaseClient.queryEnters(enterId, uid).getData();
if (adamEnters == null) {
return ResponseDto.failure("入场人数据错误");
}
entersVoList.add(adamEnters); entersVoList.add(adamEnters);
if (isStudent == 1) { if (isStudent == 1) {
int age = IDCard.getAgeByIdCard(adamEnters.getIdCard()); int age = IDCard.getAgeByIdCard(adamEnters.getIdCard());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment