最新代码

This commit is contained in:
admin
2024-06-05 15:54:18 +08:00
parent aa68b33ca5
commit 80102a56fc
274 changed files with 13634 additions and 1347 deletions

View File

@@ -1,6 +1,6 @@
package com.starry.admin.common.component;
import cn.hutool.core.util.IdUtil;
import com.starry.common.utils.IdUtils;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.servlet.ServletUtil;
import cn.hutool.http.useragent.UserAgent;
@@ -96,7 +96,7 @@ public class JwtToken {
* @return 令牌
*/
public String createToken(JwtUser jwtUser) {
String token = IdUtil.fastSimpleUUID();
String token = IdUtils.getUuid();
jwtUser.setToken(token);
setUserAgent(jwtUser);
refersToken(jwtUser);
@@ -243,7 +243,7 @@ public class JwtToken {
* 创建令牌
*/
public Map<String, Object> createToken(LoginUser loginUser) {
String token = IdUtil.fastSimpleUUID();
String token = IdUtils.getUuid();
String userId = loginUser.getUser().getUserId();
String userName = loginUser.getUser().getUserCode();
String tenantId = loginUser.getUser().getTenantId();

View File

@@ -1,5 +1,6 @@
package com.starry.admin.common.conf;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.TypeReference;
import lombok.extern.slf4j.Slf4j;
@@ -7,7 +8,6 @@ import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
import org.springframework.util.StringUtils;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
@@ -16,13 +16,18 @@ import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/**
* 数据库数据-String List 自动转换
*
* @author admin
*/
@Slf4j
@MappedJdbcTypes(JdbcType.VARCHAR) //数据库类型
@MappedTypes({List.class}) //java数据类型
public abstract class ListTypeHandler<T> extends BaseTypeHandler<List<T>> {
@MappedJdbcTypes(JdbcType.VARCHAR)
@MappedTypes({List.class})
public abstract class AbstractListTypeHandler<T> extends BaseTypeHandler<List<T>> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i, List<T> parameter, JdbcType jdbcType) throws SQLException {
String content = StringUtils.isEmpty(parameter) ? null : JSON.toJSONString(parameter);
String content = StrUtil.isEmptyIfStr(parameter) ? null : JSON.toJSONString(parameter);
ps.setString(i, content);
}
@@ -42,7 +47,7 @@ public abstract class ListTypeHandler<T> extends BaseTypeHandler<List<T>> {
}
private List<T> getListByJsonArrayString(String content) {
return StringUtils.isEmpty(content) ? new ArrayList<>() : JSON.parseObject(content, this.specificType());
return StrUtil.isEmptyIfStr(content) ? new ArrayList<>() : JSON.parseObject(content, this.specificType());
}
/**

View File

@@ -1,10 +1,13 @@
package com.starry.admin.common.conf;
import com.alibaba.fastjson2.TypeReference;
import java.util.List;
public class StringTypeHandler extends ListTypeHandler<String> {
// 将ListTypeHandler<T>T为任意对象具体为特定的对象String
/**
* @author admin
*/
public class StringTypeHandler extends AbstractListTypeHandler<String> {
@Override
protected TypeReference<List<String>> specificType() {
return new TypeReference<List<String>>() {

View File

@@ -63,20 +63,26 @@ public class MyMetaObjectHandler implements MetaObjectHandler {
}
public String getOperatorId() {
if (request.getServletPath().startsWith("/wx/")) {
String tenantKey = request.getHeader("tenantkey");
if (StrUtil.isBlankIfStr(tenantKey)) {
String clerkToken = request.getHeader(Constants.CLERK_USER_LOGIN_TOKEN);
String customToken = request.getHeader(Constants.CUSTOM_USER_LOGIN_TOKEN);
if (clerkToken != null) {
return tokenService.getWxUserIdByToken(clerkToken);
try {
if (request.getServletPath().startsWith("/wx/")) {
String tenantKey = request.getHeader("tenantkey");
if (StrUtil.isBlankIfStr(tenantKey)) {
String clerkToken = request.getHeader(Constants.CLERK_USER_LOGIN_TOKEN);
String customToken = request.getHeader(Constants.CUSTOM_USER_LOGIN_TOKEN);
if (clerkToken != null) {
return tokenService.getWxUserIdByToken(clerkToken);
}
if (customToken != null) {
return tokenService.getWxUserIdByToken(customToken);
}
}
if (customToken != null) {
return tokenService.getWxUserIdByToken(customToken);
return "";
} else {
if (SecurityUtils.isLogin()) {
return SecurityUtils.getUserId();
}
}
return "";
} else {
} catch (Exception ignored) {
if (SecurityUtils.isLogin()) {
return SecurityUtils.getUserId();
}

View File

@@ -3,7 +3,7 @@ package com.starry.admin.common.oss.service.impl;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.io.FileTypeUtil;
import cn.hutool.core.util.IdUtil;
import com.starry.common.utils.IdUtils;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
@@ -58,7 +58,7 @@ public class OssFileServiceImpl implements IOssFileService {
// 文件名uuid.扩展名
filename = IdUtil.fastSimpleUUID() + "." + fileType;
filename = IdUtils.getUuid() + "." + fileType;
// 文件根路径
String key = module + "/" + folder + "/" + filename;
// 创建PutObjectRequest对象。

View File

@@ -1,38 +0,0 @@
package com.starry.admin.common.play.wx;
public class CommonText {
public static final String DATA_NOT_EXIST = "数据不存在";
/**
* 微信公众号
*/
public static final String WECHAT_CONFIG_DOES_NOT_EXIST = "未配置公司微信公众号的相关信息";
public static final String WECHAT_PAY_CONFIG_DOES_NOT_EXIST = "未配置公司微信支付的相关信息";
public static final String OPENID_DOES_NOT_EXIST = "请上传微信用户openid";
public static final String WECHAT_TRADE_TYPE_DOES_NOT_EXIST = "请上传微信支付交易类型";
public static final String OPENID_ALREADY_BIND = "该微信号已被其他账号绑定!";
public static final String ADMIN_OPENID_DOES_NOT_EXIST = "请上传管理员openid";
public static final String OPENID_DOES_NOT_FIND = "未获取到对应微信用户openid";
public static final String WECHAT_CODE_DOES_NOT_EXIST = "请上传微信用户code";
public static final String WECHAT_USER_TOKEN_DOES_ERR = "获取微信用户token失败";
public static final String UNIFIEDORDER_ERR = "统一下单失败";
public static final String UNIFIEDORDER_ERR_PREPAY_ID_NOT_FIND = "统一下单失败,未生成PREPAY_ID";
/**
* 微信小程序
*/
public static final String MINI_OPENID_DOES_NOT_EXIST = "请上传小程序用户openid";
public static final String WECHAT_MINI_CONFIG_DOES_NOT_EXIST = "未配置公司微信小程序的相关信息";
public static final String WECHAT_MINI_PARAM_NOT_EXIST = "缺少所需小程序参数!";
public static final String WECHAT_MINI_IV_NOT_EXIST = "请上传iv参数";
public static final String WECHAT_MINI_SESSION_KEY_DOES_NOT_EXIST = "请上传session_key参数";
public static final String WECHAT_MINI_ENCRYPTED_DATA_DOES_NOT_EXIST = "请上传encrypted_data参数";
public static final String WECHAT_MINI_ENCRYPTED_DATA_PARSE_ERR = "encrypted_data解析失败";
public static final String WECHAT_MINI_ENCRYPTED_DATA_NOT_HAVE_PHONE_NUM = "encrypted_data中未解析出电话号码";
/**
* 支付相关
*/
public static final String ORDER_PAY_TYPE_NOT_EXIST = "请上传支付方式!";
}

View File

@@ -1,6 +1,6 @@
package com.starry.admin.common.play.wx;
import cn.hutool.core.util.IdUtil;
import com.starry.common.utils.IdUtils;
import cn.hutool.crypto.digest.MD5;
import com.github.wxpay.sdk.WXPayUtil;
import com.starry.admin.common.exception.CustomException;
@@ -114,7 +114,7 @@ public class WxCustomPayUtils {
Map<String, String> paraMap = new HashMap<String, String>();
paraMap.put("appid", wechat_appid);
paraMap.put("mch_id", wechat_mchid);
paraMap.put("nonce_str", IdUtil.fastSimpleUUID());
paraMap.put("nonce_str", IdUtils.getUuid());
paraMap.put("out_trade_no", out_trade_no);// 订单号
String sign = WXPayUtil.generateSignature(paraMap, wechat_seckey);
paraMap.put("sign", sign);

View File

@@ -0,0 +1,158 @@
package com.starry.admin.common.task;
import com.starry.admin.modules.clerk.module.entity.PlayClerkUserInfoEntity;
import com.starry.admin.modules.clerk.module.entity.PlayClerkWagesDetailsInfoEntity;
import com.starry.admin.modules.clerk.module.entity.PlayClerkWagesInfoEntity;
import com.starry.admin.modules.clerk.service.IPlayClerkRankingInfoService;
import com.starry.admin.modules.clerk.service.IPlayClerkUserInfoService;
import com.starry.admin.modules.clerk.service.IPlayClerkWagesDetailsInfoService;
import com.starry.admin.modules.clerk.service.IPlayClerkWagesInfoService;
import com.starry.admin.modules.order.module.entity.PlayOrderInfoEntity;
import com.starry.admin.modules.order.service.IPlayOrderInfoService;
import com.starry.admin.modules.platform.entity.SysTenantEntity;
import com.starry.admin.modules.platform.service.ISysTenantService;
import com.starry.admin.utils.SecurityUtils;
import com.starry.common.utils.IdUtils;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.List;
/**
* 订单工资结算
*
* @author admin
* @since 2024/5/28 下午2:42
**/
@Component
public class ClerkWagesSettlementTask {
@Resource
ISysTenantService sysTenantService;
@Resource
private IPlayClerkUserInfoService clerkUserInfoService;
@Resource
private IPlayOrderInfoService playOrderInfoService;
@Resource
private IPlayClerkRankingInfoService clerkRankingInfoService;
@Resource
private IPlayClerkWagesInfoService playClerkWagesInfoService;
@Resource
private IPlayClerkWagesDetailsInfoService playClerkWagesDetailsInfoService;
/**
* 每分钟查询未结算订单
* 如果订单完成时间超过24小时可进行结算生成工资
*/
// @Scheduled(cron = "0 0/1 * * * ?")
public void dailyRanking() {
//1、查询所有的租户信息
List<SysTenantEntity> tenantEntities = sysTenantService.listAll();
for (SysTenantEntity tenantEntity : tenantEntities) {
SecurityUtils.setTenantId(tenantEntity.getTenantId());
List<PlayClerkUserInfoEntity> clerkUserReturnVos = clerkUserInfoService.listAll();
//生成每个人的工资信息
for (PlayClerkUserInfoEntity clerkUserInfo : clerkUserReturnVos) {
updateClerkWagesInfo(clerkUserInfo.getId());
}
}
}
/**
* 活动24小时前完成的订单对订单进行结算
*
* @param clerkId 店员ID
*/
public void updateClerkWagesInfo(String clerkId) {
//获得24小时前完成,并且未结算的订单
LocalDateTime lastTime = LocalDateTime.now().minusDays(1);
//查询当前店员上次结算工资到现在的订单
List<PlayOrderInfoEntity> orderInfoEntities = playOrderInfoService.listByEndTime(clerkId, lastTime);
PlayClerkWagesInfoEntity entity = playClerkWagesInfoService.getLastSettlement(clerkId);
//更新订单信息
updateClerkWagesInfo(clerkId, entity == null ? IdUtils.getUuid() : entity.getId(), orderInfoEntities);
}
/**
* 更新最新一次工资统计信息
* 更新订单记录
*
* @param orderInfoEntities 订单列表
*/
public void updateClerkWagesInfo(String clerkId, String wagesId, List<PlayOrderInfoEntity> orderInfoEntities) {
//修改订单状态并且新增订单结算详情
for (PlayOrderInfoEntity orderInfo : orderInfoEntities) {
//修改订单状态
orderInfo.setOrderSettlementState("1");
orderInfo.setOrderSettlementTime(LocalDateTime.now());
playOrderInfoService.update(orderInfo);
PlayClerkWagesDetailsInfoEntity wagesDetailsInfo = playClerkWagesDetailsInfoService.selectByOrderId(orderInfo.getId());
if (wagesDetailsInfo == null) {
wagesDetailsInfo = new PlayClerkWagesDetailsInfoEntity();
wagesDetailsInfo.setId(IdUtils.getUuid());
}
//新增订单结算详情
wagesDetailsInfo.setWagesId(wagesId);
wagesDetailsInfo.setClerkId(clerkId);
wagesDetailsInfo.setOrderId(orderInfo.getId());
wagesDetailsInfo.setOrderNo(orderInfo.getOrderNo());
wagesDetailsInfo.setFinalAmount(orderInfo.getFinalAmount());
wagesDetailsInfo.setEstimatedRevenue(orderInfo.getEstimatedRevenue());
wagesDetailsInfo.setEndOrderTime(orderInfo.getOrderEndTime());
playClerkWagesDetailsInfoService.saveOrUpdate(wagesDetailsInfo);
}
//新增订单结算信息
BigDecimal finalAmount = BigDecimal.ZERO;
Integer orderContinueNumber = 0;
BigDecimal orderContinueMoney = BigDecimal.ZERO;
Integer ordersExpiredNumber = 0;
BigDecimal estimatedRevenue = BigDecimal.ZERO;
Integer orderNumber = 0;
LocalDate lastTime = playClerkWagesInfoService.getLastSettlementTime(clerkId);
for (PlayClerkWagesDetailsInfoEntity entity : playClerkWagesDetailsInfoService.selectByWagesId(wagesId)) {
PlayOrderInfoEntity orderInfo = playOrderInfoService.selectOrderInfoById(entity.getOrderId());
finalAmount = finalAmount.add(orderInfo.getFinalAmount());
orderNumber++;
estimatedRevenue = estimatedRevenue.add(orderInfo.getEstimatedRevenue());
if ("0".equals(orderInfo.getFirstOrder())) {
orderContinueNumber++;
orderContinueMoney = orderContinueMoney.add(orderInfo.getFinalAmount());
}
if ("1".equals(orderInfo.getOrdersExpiredState())) {
ordersExpiredNumber++;
}
}
PlayClerkWagesInfoEntity wagesInfo = new PlayClerkWagesInfoEntity();
wagesInfo.setId(wagesId);
wagesInfo.setClerkId(clerkId);
wagesInfo.setStartCountDate(lastTime);
wagesInfo.setEndCountDate(LocalDate.now());
wagesInfo.setOrderNumber(orderNumber);
wagesInfo.setFinalAmount(finalAmount);
wagesInfo.setOrderContinueNumber(orderContinueNumber);
wagesInfo.setOrderContinueMoney(orderContinueMoney);
wagesInfo.setOrdersExpiredNumber(ordersExpiredNumber);
wagesInfo.setSettlementDate(LocalDate.now());
wagesInfo.setEstimatedRevenue(estimatedRevenue);
if (ChronoUnit.DAYS.between(LocalDate.now(), lastTime) <= 7) {
wagesInfo.setHistoricalStatistics("0");
} else {
wagesInfo.setHistoricalStatistics("1");
}
playClerkWagesInfoService.saveOrUpdate(wagesInfo);
}
}

View File

@@ -0,0 +1,118 @@
package com.starry.admin.common.task;
import com.starry.admin.modules.clerk.module.entity.PlayClerkRankingInfoEntity;
import com.starry.admin.modules.clerk.module.entity.PlayClerkUserInfoEntity;
import com.starry.admin.modules.clerk.service.IPlayClerkRankingInfoService;
import com.starry.admin.modules.clerk.service.IPlayClerkUserInfoService;
import com.starry.admin.modules.order.module.entity.PlayOrderInfoEntity;
import com.starry.admin.modules.order.service.IPlayOrderInfoService;
import com.starry.admin.modules.platform.entity.SysTenantEntity;
import com.starry.admin.modules.platform.service.ISysTenantService;
import com.starry.admin.utils.SecurityUtils;
import com.starry.common.utils.IdUtils;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;
/**
* 订单排名结算信息
*
* @author admin
* @since 2024/5/28 下午2:42
**/
@Component
public class OrderRankingSettlementTask {
@Resource
ISysTenantService sysTenantService;
@Resource
private IPlayClerkUserInfoService clerkUserInfoService;
@Resource
private IPlayOrderInfoService orderInfoService;
@Resource
private IPlayClerkRankingInfoService clerkRankingInfoService;
/**
* 当日订单结算,查询前一日的订单信息,生成订单排名数据
* 每天凌晨0点5分0秒时触发执行
*/
// @Scheduled(cron = "0 10 0 * * ?")
public void dailyRanking() {
//1、查询所有的租户信息
List<SysTenantEntity> tenantEntities = sysTenantService.listAll();
LocalDate startTime = LocalDate.now().minusDays(1);
LocalDate endTime = LocalDate.now();
//2、查询每个租户的用户以及他们的订单信息
Integer newSerialNumber = clerkRankingInfoService.selectSerialNumber();
for (SysTenantEntity tenantEntity : tenantEntities) {
SecurityUtils.setTenantId(tenantEntity.getTenantId());
List<PlayClerkUserInfoEntity> clerkUserReturnVos = clerkUserInfoService.listAll();
//生成每个人的订单排行信息
for (PlayClerkUserInfoEntity clerkUserInfo : clerkUserReturnVos) {
//查询当前店员一定时间的订单信息
List<PlayOrderInfoEntity> orderInfoEntities = orderInfoService.listByTime(clerkUserInfo.getId(), startTime, endTime);
PlayClerkRankingInfoEntity rankingInfo = clerkRankingInfoService.selectByTime(clerkUserInfo.getId(), startTime, endTime);
//3、根据订单信息生成对应排名数据
updateClerkRanking(clerkUserInfo.getId(), startTime, endTime, rankingInfo, orderInfoEntities, newSerialNumber);
}
//根据订单数量,更新排行名词
List<PlayClerkRankingInfoEntity> list = clerkRankingInfoService.selectMaxSerialNumber();
// 使用匿名比较器排序
list.sort((p1, p2) -> p2.getOrderNumber() - p1.getOrderNumber());
for (int i = 0; i < list.size(); i++) {
PlayClerkRankingInfoEntity item = list.get(i);
item.setRankingIndex(i + 1);
if (i > 0) {
item.setPreviousMoney(list.get(i - 1).getOrderMoney().subtract(item.getOrderMoney()));
}
clerkRankingInfoService.update(item);
}
}
}
/**
* 更新当前店员的排名信息
*
* @param clerkId 店员ID
* @param rankingInfo 店员排名信息
* @param orderInfoEntities 店员订单信息
*/
public void updateClerkRanking(String clerkId, LocalDate startTime, LocalDate endTime, PlayClerkRankingInfoEntity rankingInfo, List<PlayOrderInfoEntity> orderInfoEntities, Integer newSerialNumber) {
//排行-订单信息
BigDecimal orderMoney = BigDecimal.ZERO;
Integer orderContinueNumber = 0;
BigDecimal orderContinueMoney = BigDecimal.ZERO;
Integer ordersExpiredNumber = 0;
for (PlayOrderInfoEntity orderInfoEntity : orderInfoEntities) {
orderMoney = orderMoney.add(orderInfoEntity.getOrderMoney());
if ("0".equals(orderInfoEntity.getFirstOrder())) {
orderContinueNumber++;
orderContinueMoney = orderContinueMoney.add(orderInfoEntity.getOrderMoney());
}
}
if (rankingInfo == null) {
rankingInfo = new PlayClerkRankingInfoEntity();
rankingInfo.setId(IdUtils.getUuid());
rankingInfo.setSerialNumber(newSerialNumber + 1);
}
rankingInfo.setClerkId(clerkId);
rankingInfo.setStartCountDate(startTime);
rankingInfo.setEndCountDate(endTime);
rankingInfo.setOrderNumber(orderInfoEntities.size());
rankingInfo.setSerialNumber(newSerialNumber);
rankingInfo.setOrderMoney(orderMoney);
rankingInfo.setOrderContinueMoney(orderContinueMoney);
rankingInfo.setOrderContinueNumber(orderContinueNumber);
rankingInfo.setOrdersExpiredNumber(ordersExpiredNumber);
clerkRankingInfoService.saveOrUpdate(rankingInfo);
}
}