Files
123123/comm/Invest/src/project/web/admin/AdminVipController.java
2026-02-19 03:37:37 +08:00

308 lines
15 KiB
Java
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package project.web.admin;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import kernel.exception.BusinessException;
import kernel.util.Arith;
import kernel.util.JsonUtils;
import kernel.web.PageActionSupport;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.checkerframework.checker.units.qual.A;
import org.codehaus.jackson.map.ObjectMapper;
import org.springframework.security.providers.encoding.PasswordEncoder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import project.Constants;
import project.invest.goods.model.GoodsLang;
import project.invest.vip.AdminVipService;
import project.invest.vip.model.Vip;
import project.log.LogService;
import project.mall.seller.constant.UpgradeMallLevelCondParamTypeEnum;
import project.mall.seller.dto.MallLevelCondExpr;
import project.mall.seller.dto.MallLevelDTO;
import project.mall.seller.dto.QueryMallLevelDTO;
import project.mall.seller.model.MallLevel;
import project.user.googleauth.GoogleAuthService;
import security.SecUser;
import security.internal.SecUserService;
import util.DateUtil;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* vip配置
*/
@Slf4j
@RestController
@RequestMapping("/brush/vip")
public class AdminVipController extends PageActionSupport {
private static Log logger = LogFactory.getLog(AdminVipController.class);
@Resource
protected AdminVipService adminVipService;
@Resource
private SecUserService secUserService;
@Resource
protected LogService logService;
@Resource
protected PasswordEncoder passwordEncoder;
@Resource
protected GoogleAuthService googleAuthService;
@RequestMapping("/list.action")
public ModelAndView list(HttpServletRequest request) {
this.checkAndSetPageNo(request.getParameter("pageNo"));
this.pageSize = 30;
String message = request.getParameter("message");
String error = request.getParameter("error");
this.page = this.adminVipService.pagedQuery();
ModelAndView model = new ModelAndView();
List<QueryMallLevelDTO> levelInfoList = new ArrayList();
List<MallLevel> list = page.getElements();
for (MallLevel mallLevel : list) {
mallLevel.setProfitRationMin(Arith.mul(mallLevel.getProfitRationMin(),100));
mallLevel.setProfitRationMax(Arith.mul(mallLevel.getProfitRationMax(),100));
mallLevel.setSellerDiscount(Arith.mul(mallLevel.getSellerDiscount(),100));
MallLevelCondExpr mallLevelCondExpr = JsonUtils.json2Object(mallLevel.getCondExpr(), MallLevelCondExpr.class);
List<MallLevelCondExpr.Param> params = mallLevelCondExpr.getParams();
QueryMallLevelDTO oneDto = new QueryMallLevelDTO();
BeanUtil.copyProperties(mallLevel, oneDto);
params.forEach(e ->{
if (e.getCode().equals(UpgradeMallLevelCondParamTypeEnum.RECHARGE_AMOUNT.getCode())){
oneDto.setRechargeAmount(Long.parseLong(e.getValue()));
}
if (e.getCode().equals(UpgradeMallLevelCondParamTypeEnum.POPULARIZE_UNDERLING_NUMBER.getCode())){
oneDto.setPopularizeUserCount(Long.parseLong(e.getValue()));
}
});
levelInfoList.add(oneDto);
}
model.addObject("page", levelInfoList);
model.addObject("message", message);
model.addObject("error", error);
model.setViewName("admin_vip_list");
return model;
}
/**
* 跳转修改页面
*/
@RequestMapping(value = "/toUpdate.action")
public ModelAndView toUpdate(HttpServletRequest request) {
ModelAndView model = new ModelAndView();
MallLevel mallLevel;
model.setViewName("admin_vip_update");
try {
String id = request.getParameter("id");
if( id == null ){
throw new BusinessException("系统错误");
}
mallLevel = adminVipService.findById(id);
if(mallLevel == null) {
throw new BusinessException("刷新重试");
}
mallLevel.setProfitRationMin(Arith.mul(mallLevel.getProfitRationMin(),100));
mallLevel.setProfitRationMax(Arith.mul(mallLevel.getProfitRationMax(),100));
mallLevel.setSellerDiscount(Arith.mul(mallLevel.getSellerDiscount(),100));
if (null !=mallLevel.getCondExpr()){
MallLevelCondExpr mallLevelCondExpr = JsonUtils.json2Object(mallLevel.getCondExpr(), MallLevelCondExpr.class);
List<MallLevelCondExpr.Param> params = mallLevelCondExpr.getParams();
params.forEach(e ->{
if (e.getCode().equals(UpgradeMallLevelCondParamTypeEnum.RECHARGE_AMOUNT.getCode())){
model.addObject("rechargeAmount",e.getValue());
}
if (e.getCode().equals(UpgradeMallLevelCondParamTypeEnum.POPULARIZE_UNDERLING_NUMBER.getCode())){
model.addObject("popularizeUserCount",e.getValue());
}
if (e.getCode().equals(UpgradeMallLevelCondParamTypeEnum.TEAM_NUM.getCode())){
model.addObject("teamNum",e.getValue());
}
});
}
} catch (BusinessException e) {
model.addObject("error", e.getMessage());
return model;
} catch (Throwable t) {
logger.error(" error ", t);
model.addObject("error", "[ERROR] " + t.getMessage());
return model;
}
model.addObject("mallLevel",mallLevel);
return model;
}
/**
* 修改游戏
* @return
*/
@RequestMapping(value = "/update.action")
public ModelAndView update(@RequestParam Map<String, String> paramMap, MallLevel mallLevel) {
String login_safeword = paramMap.get("login_safeword");
ModelAndView model = new ModelAndView();
String rechargeAmount = paramMap.get("rechargeAmount");
String popularizeUserCount = paramMap.get("popularizeUserCount");
String teamNum = paramMap.get("teamNum");
try {
if(null == mallLevel ||mallLevel.getId()==null) {
throw new BusinessException("参数错误");
}
SecUser sec = this.secUserService.findUserByLoginName(this.getUsername_login());
// checkGoogleAuthCode(sec,google_auth_code);
checkLoginSafeword(sec,this.getUsername_login(),login_safeword);
MallLevel data = adminVipService.findById(mallLevel.getId().toString());
if(null == data){
throw new BusinessException("此会员等级不存在,请刷新页面");
}
rechargeAmount = rechargeAmount == null ? "1" : rechargeAmount;
popularizeUserCount = popularizeUserCount == null ? "1" : popularizeUserCount;
MallLevelCondExpr mallLevelCondExpr = new MallLevelCondExpr();
List<MallLevelCondExpr.Param> paramList = new ArrayList<>();
paramList.add(new MallLevelCondExpr.Param(UpgradeMallLevelCondParamTypeEnum.RECHARGE_AMOUNT.getCode(),UpgradeMallLevelCondParamTypeEnum.RECHARGE_AMOUNT.getTitle(),rechargeAmount));
paramList.add(new MallLevelCondExpr.Param(UpgradeMallLevelCondParamTypeEnum.POPULARIZE_UNDERLING_NUMBER.getCode(),UpgradeMallLevelCondParamTypeEnum.POPULARIZE_UNDERLING_NUMBER.getTitle(),popularizeUserCount));
paramList.add(new MallLevelCondExpr.Param(UpgradeMallLevelCondParamTypeEnum.TEAM_NUM.getCode(),UpgradeMallLevelCondParamTypeEnum.TEAM_NUM.getTitle(),teamNum));
mallLevelCondExpr.setParams(paramList);
StringBuilder expression = new StringBuilder();
if ("0".equals(teamNum)) {//如果团队人数为0就未开启团队人数校验
//popularizeUserCount >= 3 || rechargeAmount >= 5000
expression.append("#"+UpgradeMallLevelCondParamTypeEnum.POPULARIZE_UNDERLING_NUMBER.getCode());
expression.append(" >= ").append(popularizeUserCount).append(" || ");
expression.append("#"+UpgradeMallLevelCondParamTypeEnum.RECHARGE_AMOUNT.getCode());
expression.append(" >= ").append(rechargeAmount);
}else {
// ( #popularizeUserCount >= 1 && #teamNum >= 2 ) || #rechargeAmount >= 5000
expression.append("(#"+UpgradeMallLevelCondParamTypeEnum.POPULARIZE_UNDERLING_NUMBER.getCode()).append(" >= ").append(popularizeUserCount)
.append(" && ").append("#"+UpgradeMallLevelCondParamTypeEnum.TEAM_NUM.getCode()).append(" >= ").append(teamNum).append(")");
expression.append(" || ");
expression.append("#"+UpgradeMallLevelCondParamTypeEnum.RECHARGE_AMOUNT.getCode());
expression.append(" >= ").append(rechargeAmount);
}
mallLevelCondExpr.setExpression(expression.toString());
mallLevel.setTeamNum(Integer.parseInt(teamNum));
mallLevel.setUpdateBy(getUsername_login());
mallLevel.setUpdateTime(new Date());
mallLevel.setProfitRationMin(Arith.div(mallLevel.getProfitRationMin(),100));
mallLevel.setProfitRationMax(Arith.div(mallLevel.getProfitRationMax(),100));
mallLevel.setSellerDiscount(Arith.div(mallLevel.getSellerDiscount(),100));
mallLevel.setCondExpr(JsonUtils.bean2Json(mallLevelCondExpr));
adminVipService.update(mallLevel);
project.log.Log log = new project.log.Log();
log.setCategory(Constants.LOG_CATEGORY_OPERATION);
log.setUsername(sec.getUsername());
log.setOperator(this.getUsername_login());
double rechargeAmounts = 0;
Long popularizeUserCounts = null;
Long teamNums = null;
if (null != data.getCondExpr()){
MallLevelCondExpr mallLevelCondExprs = JsonUtils.json2Object(mallLevel.getCondExpr(), MallLevelCondExpr.class);
List<MallLevelCondExpr.Param> params = mallLevelCondExprs.getParams();
for (MallLevelCondExpr.Param param : params) {
if (param.getCode().equals(UpgradeMallLevelCondParamTypeEnum.RECHARGE_AMOUNT.getCode())){
rechargeAmounts = Double.parseDouble(param.getValue());
}
if (param.getCode().equals(UpgradeMallLevelCondParamTypeEnum.POPULARIZE_UNDERLING_NUMBER.getCode())){
popularizeUserCounts = Long.parseLong(param.getValue());
}
if (param.getCode().equals(UpgradeMallLevelCondParamTypeEnum.TEAM_NUM.getCode())){
teamNums = Long.parseLong(param.getValue());
}
}
}
String logs = MessageFormat.format("ip:" + this.getIp() + ",修改会员等级:{0}前参数,累计充值:{1},推广有效人数:{2},团队人数:{3},全球到货时间:{4}," +
"卖家优惠折扣:{5},利润比例:{6},每日流量:{7},每小时最小流量:{8},每小时流量波动范围:{9},升级礼金:{10},专属客服:{11},首页推荐:{12}",
data.getLevel(), rechargeAmounts, popularizeUserCounts,teamNums,data.getDeliveryDays(),Arith.mul(data.getSellerDiscount(),100),
Arith.mul(data.getProfitRationMin(),100)-Arith.mul(data.getProfitRationMax(),100),data.getPromoteViewDaily(),data.getAwardBaseView(),
data.getAwardViewMin()-data.getAwardViewMax(),data.getUpgradeCash(),data.getHasExclusiveService(),data.getRecommendAtFirstPage());
log.setLog(logs);
logService.saveSync(log);
project.log.Log log2 = new project.log.Log();
log2.setCategory(Constants.LOG_CATEGORY_OPERATION);
log2.setUsername(sec.getUsername());
log2.setOperator(this.getUsername_login());
String logs2 = MessageFormat.format("ip:" + this.getIp() + ",修改会员等级:{0}后参数,累计充值:{1},推广有效人数:{2},团队人数:{3},全球到货时间:{4}," +
"卖家优惠折扣:{5},利润比例:{6},每日流量:{7},每小时最小流量:{8},每小时流量波动范围:{9},升级礼金:{10},专属客服:{11},首页推荐:{12}",
mallLevel.getLevel(), rechargeAmount, popularizeUserCount,teamNum,mallLevel.getDeliveryDays(),Arith.mul(mallLevel.getSellerDiscount(),100),
Arith.mul(mallLevel.getProfitRationMin(),100)-Arith.mul(mallLevel.getProfitRationMax(),100),mallLevel.getPromoteViewDaily(),mallLevel.getAwardBaseView(),
mallLevel.getAwardViewMin()-mallLevel.getAwardViewMax(),mallLevel.getUpgradeCash(),mallLevel.getHasExclusiveService(),mallLevel.getRecommendAtFirstPage());
log2.setLog(logs2);
logService.saveSync(log2);
} catch (BusinessException e) {
model.addObject("error", e.getMessage());
model.setViewName("admin_vip_update");
model.addObject("mallLevel",mallLevel);
return model;
} catch (Throwable t) {
logger.error(" error ", t);
model.addObject("error", "[ERROR] " + t.getMessage());
model.setViewName("admin_vip_update");
model.addObject("mallLevel",mallLevel);
model.addObject("mallLevel",mallLevel);
model.addObject("mallLevel",mallLevel);
return model;
}
String message = "操作成功";
model.addObject("message", message);
model.setViewName("redirect:/" + "brush/vip/list.action");
return model;
}
/**
* 验证登录人资金密码
* @param operatorUsername
* @param loginSafeword
*/
protected void checkLoginSafeword(SecUser secUser,String operatorUsername,String loginSafeword) {
// SecUser sec = this.secUserService.findUserByLoginName(operatorUsername);
String sysSafeword = secUser.getSafeword();
String safeword_md5 = passwordEncoder.encodePassword(loginSafeword, operatorUsername);
if (!safeword_md5.equals(sysSafeword)) {
throw new BusinessException("登录人资金密码错误");
}
}
/**
* 验证谷歌验证码
* @param code
*/
protected void checkGoogleAuthCode(SecUser secUser,String code) {
if(!secUser.isGoogle_auth_bind()) {
throw new BusinessException("请先绑定谷歌验证器");
}
boolean checkCode = googleAuthService.checkCode(secUser.getGoogle_auth_secret(), code);
if(!checkCode) {
throw new BusinessException("谷歌验证码错误");
}
}
}