交班相关代码

This commit is contained in:
Tankaikai
2025-02-27 19:01:31 +08:00
parent 166634e3f0
commit 8cbfbe265f
22 changed files with 888 additions and 17 deletions

View File

@@ -0,0 +1,16 @@
package com.czg.service.account.mapper;
import com.czg.account.entity.HandoverRecord;
import com.mybatisflex.core.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* 交班记录表
*
* @author Tankaikai tankaikai@aliyun.com
* @since 1.0 2025-02-27
*/
@Mapper
public interface HandoverRecordMapper extends BaseMapper<HandoverRecord> {
}

View File

@@ -6,20 +6,23 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import com.czg.account.dto.SysLoginDTO;
import com.czg.account.entity.*;
import com.czg.account.enums.HandoverAccountTypeEnum;
import com.czg.account.service.*;
import com.czg.account.vo.LoginVO;
import com.czg.config.RedisCst;
import com.czg.enums.PlatformTypeEnum;
import com.czg.enums.StatusEnum;
import com.czg.exception.ApiNotPrintException;
import com.czg.sa.MyStpLogic;
import com.czg.sa.StpKit;
import com.czg.service.RedisService;
import com.czg.service.account.mapper.SysMenuMapper;
import com.czg.utils.ServletUtil;
import com.wf.captcha.SpecCaptcha;
import jakarta.annotation.Resource;
import org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@@ -44,6 +47,8 @@ public class AuthorizationServiceImpl implements AuthorizationService {
private SysRoleService sysRoleService;
@Resource
private SysMenuMapper sysMenuMapper;
@Resource
private HandoverRecordService handoverRecordService;
@Override
@@ -83,8 +88,8 @@ public class AuthorizationServiceImpl implements AuthorizationService {
}
user = sysUserService.queryChain().eq(SysUser::getAccount, sysUser.getId() + "@" + loginDTO.staffUserName()).one();
}else {
user = sysUserService.queryChain().eq(SysUser::getAccount,loginDTO.username()).one();
} else {
user = sysUserService.queryChain().eq(SysUser::getAccount, loginDTO.username()).one();
}
if (user == null) {
@@ -97,11 +102,12 @@ public class AuthorizationServiceImpl implements AuthorizationService {
}
ShopInfo shopInfo;
ShopStaff shopStaff = null;
boolean isStaff = false;
List<String> shopStaffPromissionList = null;
// 商户员工登录
if (loginDTO.loginType() == 1) {
ShopStaff shopStaff = shopStaffService.queryChain().eq(ShopStaff::getStatus, 1)
shopStaff = shopStaffService.queryChain().eq(ShopStaff::getStatus, 1)
.eq(ShopStaff::getIsManage, 1)
.eq(ShopStaff::getId, user.getId()).one();
if (shopStaff == null) {
@@ -112,7 +118,7 @@ public class AuthorizationServiceImpl implements AuthorizationService {
// 查询员工权限
shopStaffPromissionList = shopStaffPermissionService.getPermissionByStaffId(shopInfo.getId(), shopStaff.getId(), user.getId()).stream().map(ShopPermission::getCode).toList();
}else {
} else {
shopInfo = shopInfoService.getById(user.getId());
}
@@ -126,7 +132,7 @@ public class AuthorizationServiceImpl implements AuthorizationService {
}
}
StpKit.USER.login(user.getId(), user.getAccount(), shopInfo.getId(), isStaff ? MyStpLogic.LoginType.STAFF :MyStpLogic.LoginType.MANAGER, user.getIsAdmin());
StpKit.USER.login(user.getId(), user.getAccount(), shopInfo.getId(), isStaff ? MyStpLogic.LoginType.STAFF : MyStpLogic.LoginType.MANAGER, user.getIsAdmin());
// 查询角色
List<SysRole> roleList = sysRoleService.getByUserId(user.getId());
List<String> roleNames = roleList.stream().map(SysRole::getName).collect(Collectors.toList());
@@ -138,6 +144,30 @@ public class AuthorizationServiceImpl implements AuthorizationService {
promissionList.addAll(shopStaffPromissionList);
}
StpKit.USER.addPermissionList(promissionList);
String platformType = ServletUtil.getHeaderIgnoreCase(ServletUtil.getRequest(), "platformType");
if (PlatformTypeEnum.PC_CLIENT.getValue().equals(platformType)) {
// 初始化交班记录
HandoverRecord entity = getHandoverRecord(isStaff, shopInfo, shopStaff);
handoverRecordService.initHandoverRecord(entity);
}
return new LoginVO(StpKit.USER.getTokenInfo(), promissionList, loginDTO.loginType(), shopInfo);
}
@NotNull
private static HandoverRecord getHandoverRecord(boolean isStaff, ShopInfo shopInfo, ShopStaff shopStaff) {
HandoverRecord entity = new HandoverRecord();
if (isStaff) {
entity.setAccountType(HandoverAccountTypeEnum.STAFF.getValue());
entity.setStaffId(shopStaff.getId());
entity.setStaffName(shopStaff.getName());
} else {
entity.setAccountType(HandoverAccountTypeEnum.MERCHANT.getValue());
entity.setStaffId(shopInfo.getId());
entity.setStaffName(shopInfo.getShopName());
}
entity.setShopId(shopInfo.getId());
entity.setShopName(shopInfo.getShopName());
return entity;
}
}

View File

@@ -0,0 +1,103 @@
package com.czg.service.account.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import com.czg.account.dto.HandoverRecordDTO;
import com.czg.account.entity.HandoverRecord;
import com.czg.account.service.HandoverRecordService;
import com.czg.account.vo.HandoverProductListVo;
import com.czg.account.vo.HandoverTotalVo;
import com.czg.order.service.OrderInfoService;
import com.czg.sa.StpKit;
import com.czg.service.account.mapper.HandoverRecordMapper;
import com.czg.utils.PageUtil;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
/**
* 交班记录表
*
* @author Tankaikai tankaikai@aliyun.com
* @since 1.0 2025-02-27
*/
@Service
public class HandoverRecordServiceImpl extends ServiceImpl<HandoverRecordMapper, HandoverRecord> implements HandoverRecordService {
@DubboReference
private OrderInfoService orderInfoService;
private QueryWrapper buildQueryWrapper(HandoverRecordDTO param) {
QueryWrapper queryWrapper = PageUtil.buildSortQueryWrapper();
/*if (StrUtil.isNotEmpty(param.getName())) {
queryWrapper.like(HandoverRecord::getName, param.getName());
}*/
Long shopId = StpKit.USER.getShopId(0L);
queryWrapper.eq(HandoverRecord::getShopId, shopId);
queryWrapper.orderBy(HandoverRecord::getId, false);
return queryWrapper;
}
@Override
public HandoverTotalVo totalHandoverData() {
orderInfoService.historyOrder(0L, "11");
Long shopId = StpKit.USER.getShopId(0L);
LocalDateTime handoverTime = LocalDateTime.now();
HandoverRecord record = super.getOne(query().eq(HandoverRecord::getShopId, shopId).isNull(HandoverRecord::getHandoverTime));
HandoverTotalVo data = new HandoverTotalVo();
data.setId(record.getId());
data.setShopId(record.getShopId());
data.setShopName(record.getShopName());
data.setAccountType(record.getAccountType());
data.setStaffId(record.getStaffId());
data.setStaffName(record.getStaffName());
data.setLoginTime(record.getLoginTime());
data.setHandoverTime(handoverTime);
String loginTimeStr = LocalDateTimeUtil.formatNormal(record.getLoginTime());
String handoverTimeStr = LocalDateTimeUtil.formatNormal(handoverTime);
data.setCashAmount(sumCashAmount(shopId, loginTimeStr, handoverTimeStr));
data.setRefundAmount(sumRefundAmount(shopId, loginTimeStr, handoverTimeStr));
data.setHandAmount(sumHandAmount(shopId, loginTimeStr, handoverTimeStr));
data.setOrderCount(countOrderNum(shopId, loginTimeStr, handoverTimeStr));
data.setDetailList(getDetailList(shopId, loginTimeStr, handoverTimeStr));
return data;
}
@Override
public void initHandoverRecord(HandoverRecord entity) {
Long shopId = StpKit.USER.getShopId(0L);
List<HandoverRecord> list = super.list(query().eq(HandoverRecord::getShopId, shopId).isNull(HandoverRecord::getHandoverTime));
if (CollUtil.isNotEmpty(list)) {
return;
}
entity.setShopId(shopId);
entity.setLoginTime(LocalDateTime.now());
super.save(entity);
}
private BigDecimal sumCashAmount(Long shopId, String loginTime, String handoverTime) {
return orderInfoService.getHandoverCashAmount(shopId, loginTime, handoverTime);
}
private BigDecimal sumRefundAmount(Long shopId, String loginTime, String handoverTime) {
return orderInfoService.getHandoverRefundAmount(shopId, loginTime, handoverTime);
}
private BigDecimal sumHandAmount(Long shopId, String loginTime, String handoverTime) {
return orderInfoService.getHandoverTotalAmount(shopId, loginTime, handoverTime);
}
private int countOrderNum(Long shopId, String loginTime, String handoverTime) {
return orderInfoService.getHandoverOrderNum(shopId, loginTime, handoverTime);
}
private List<HandoverProductListVo> getDetailList(Long shopId, String loginTime, String handoverTime) {
return orderInfoService.getHandoverDetailList(shopId, loginTime, handoverTime);
}
}

View File

@@ -32,7 +32,7 @@ public class PictureClassifyServiceImpl extends ServiceImpl<PictureClassifyMappe
if (StrUtil.isNotEmpty(param.getName())) {
queryWrapper.like(PictureClassify::getName, param.getName());
}
Long shopId = StpKit.USER.getLoginIdAsLong();
Long shopId = StpKit.USER.getShopId(0L);
queryWrapper.and(q -> {
q.eq(PictureClassify::getShopId, shopId).or(q1 -> {
q1.eq(PictureClassify::getShopId, 0).eq(PictureClassify::getIsSystem, YesNoEnum.YES.value());
@@ -52,7 +52,7 @@ public class PictureClassifyServiceImpl extends ServiceImpl<PictureClassifyMappe
@Override
public void addPictureClassify(PictureClassifyDTO dto) {
Long shopId = StpKit.USER.getLoginIdAsLong();
Long shopId = StpKit.USER.getShopId(0L);
boolean exists = super.exists(query().eq(PictureClassify::getName, dto.getName())
.and(q -> {
q.eq(PictureClassify::getShopId, shopId).or(q1 -> {
@@ -72,7 +72,7 @@ public class PictureClassifyServiceImpl extends ServiceImpl<PictureClassifyMappe
@Override
public void updatePictureClassify(PictureClassifyDTO dto) {
checkPictureClassify(dto.getId());
Long shopId = StpKit.USER.getLoginIdAsLong();
Long shopId = StpKit.USER.getShopId(0L);
dto.setShopId(shopId);
boolean exists = super.exists(query().eq(PictureClassify::getName, dto.getName())
.ne(PictureClassify::getId, dto.getId())
@@ -93,7 +93,7 @@ public class PictureClassifyServiceImpl extends ServiceImpl<PictureClassifyMappe
@Override
public void deletePictureClassify(Long id) {
checkPictureClassify(id);
Long shopId = StpKit.USER.getLoginIdAsLong();
Long shopId = StpKit.USER.getShopId(0L);
UpdateChain.of(PictureClassify.class)
.set(PictureClassify::getIsDel, DeleteEnum.DELETED.value())
.eq(PictureClassify::getShopId, shopId)

View File

@@ -33,7 +33,7 @@ public class PictureGalleryServiceImpl extends ServiceImpl<PictureGalleryMapper,
if (ObjUtil.isNotNull(param.getPictureClassifyId())) {
queryWrapper.eq(PictureGallery::getPictureClassifyId, param.getPictureClassifyId());
}
Long shopId = StpKit.USER.getLoginIdAsLong();
Long shopId = StpKit.USER.getShopId(0L);
queryWrapper.eq(PictureGallery::getShopId, shopId);
queryWrapper.eq(PictureGallery::getIsDel, DeleteEnum.NORMAL.value());
queryWrapper.orderBy(PictureGallery::getId, false);
@@ -48,7 +48,7 @@ public class PictureGalleryServiceImpl extends ServiceImpl<PictureGalleryMapper,
@Override
public void addPictureGallery(PictureGalleryParam param) {
Long shopId = StpKit.USER.getLoginIdAsLong();
Long shopId = StpKit.USER.getShopId(0L);
for (String url : param.getUrls()) {
PictureGallery entity = new PictureGallery();
entity.setShopId(shopId);
@@ -61,7 +61,7 @@ public class PictureGalleryServiceImpl extends ServiceImpl<PictureGalleryMapper,
@Override
public void deletePictureGallery(Long id) {
Long shopId = StpKit.USER.getLoginIdAsLong();
Long shopId = StpKit.USER.getShopId(0L);
UpdateChain.of(PictureGallery.class)
.set(PictureGallery::getIsDel, DeleteEnum.DELETED.value())
.eq(PictureGallery::getShopId, shopId)

View File

@@ -0,0 +1,6 @@
<?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.czg.service.account.mapper.HandoverRecordMapper">
</mapper>

View File

@@ -1,7 +1,11 @@
package com.czg.service.order.mapper;
import com.mybatisflex.core.BaseMapper;
import com.czg.account.vo.HandoverProductListVo;
import com.czg.order.entity.OrderInfo;
import com.mybatisflex.core.BaseMapper;
import java.math.BigDecimal;
import java.util.List;
/**
* 订单表 映射层。
@@ -11,4 +15,54 @@ import com.czg.order.entity.OrderInfo;
*/
public interface OrderInfoMapper extends BaseMapper<OrderInfo> {
/**
* 交班现金支付统计
*
* @param shopId 店铺id
* @param loginTime 上岗时间
* @param handoverTime 交班时间
* @return 现金支付总额
*/
BigDecimal getHandoverCashAmount(Long shopId, String loginTime, String handoverTime);
/**
* 交班退款统计
*
* @param shopId 店铺id
* @param loginTime 上岗时间
* @param handoverTime 交班时间
* @return 退款总额
*/
BigDecimal getHandoverRefundAmount(Long shopId, String loginTime, String handoverTime);
/**
* 交班营业额统计
*
* @param shopId 店铺id
* @param loginTime 上岗时间
* @param handoverTime 交班时间
* @return 营业额
*/
BigDecimal getHandoverTotalAmount(Long shopId, String loginTime, String handoverTime);
/**
* 交班订单数统计
*
* @param shopId 店铺id
* @param loginTime 上岗时间
* @param handoverTime 交班时间
* @return 交班订单数
*/
int getHandoverOrderNum(Long shopId, String loginTime, String handoverTime);
/**
* 交班售出商品明细
*
* @param shopId 店铺id
* @param loginTime 上岗时间
* @param handoverTime 交班时间
* @return 交班售出商品明细
*/
List<HandoverProductListVo> getHandoverDetailList(Long shopId, String loginTime, String handoverTime);
}

View File

@@ -10,6 +10,7 @@ import com.alibaba.fastjson2.JSONObject;
import com.czg.account.dto.shopuser.ShopUserMoneyEditDTO;
import com.czg.account.entity.*;
import com.czg.account.service.*;
import com.czg.account.vo.HandoverProductListVo;
import com.czg.config.RabbitPublisher;
import com.czg.config.RedisCst;
import com.czg.entity.notify.CzgPayNotifyDTO;
@@ -566,6 +567,31 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
}
}
@Override
public BigDecimal getHandoverCashAmount(Long shopId, String loginTime, String handoverTime) {
return super.mapper.getHandoverCashAmount(shopId, loginTime, handoverTime);
}
@Override
public BigDecimal getHandoverRefundAmount(Long shopId, String loginTime, String handoverTime) {
return super.mapper.getHandoverRefundAmount(shopId, loginTime, handoverTime);
}
@Override
public BigDecimal getHandoverTotalAmount(Long shopId, String loginTime, String handoverTime) {
return super.mapper.getHandoverTotalAmount(shopId, loginTime, handoverTime);
}
@Override
public int getHandoverOrderNum(Long shopId, String loginTime, String handoverTime) {
return super.mapper.getHandoverOrderNum(shopId, loginTime, handoverTime);
}
@Override
public List<HandoverProductListVo> getHandoverDetailList(Long shopId, String loginTime, String handoverTime) {
return super.mapper.getHandoverDetailList(shopId, loginTime, handoverTime);
}
/**
* 初始化订单信息
*/

View File

@@ -4,4 +4,82 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.czg.service.order.mapper.OrderInfoMapper">
<sql id="handoverCommonWhere">
AND t1.shop_id =
#{shopId}
<![CDATA[
AND
t1
.
paid_time
>=
str_to_date
(
#{loginTime},
'%Y-%m-%d %H:%i:%s'
)
AND
t1
.
paid_time
<=
str_to_date
(
#{handoverTime},
'%Y-%m-%d %H:%i:%s'
)
]]>
</sql>
<select id="getHandoverCashAmount" resultType="java.math.BigDecimal">
SELECT
ifnull(sum(pay_amount),0)
FROM tb_order_info t1
<where>
<include refid="handoverCommonWhere"/>
and t1.pay_type = 'cash-pay'
</where>
</select>
<select id="getHandoverRefundAmount" resultType="java.math.BigDecimal">
SELECT
ifnull(sum(refund_amount),0)
FROM tb_order_info t1
<where>
<include refid="handoverCommonWhere"/>
</where>
</select>
<select id="getHandoverTotalAmount" resultType="java.math.BigDecimal">
SELECT
ifnull(sum(pay_amount),0)
FROM tb_order_info t1
<where>
<include refid="handoverCommonWhere"/>
</where>
</select>
<select id="getHandoverOrderNum" resultType="java.lang.Integer">
SELECT
count(*)
FROM tb_order_info t1
<where>
<include refid="handoverCommonWhere"/>
</where>
</select>
<select id="getHandoverDetailList" resultType="com.czg.account.vo.HandoverProductListVo">
SELECT
t2.product_id,
t2.sku_id,
GROUP_CONCAT( DISTINCT t2.product_name ) AS product_name,
GROUP_CONCAT( DISTINCT t2.sku_name ) AS sku_name,
sum( ifnull(t2.num,0) ) AS num,
sum( ifnull(t2.pay_amount,0) ) amount
FROM
tb_order_detail t2
LEFT JOIN tb_order_info t1 ON t1.id = t2.order_id
<where>
<include refid="handoverCommonWhere"/>
</where>
GROUP BY
t2.product_id,
t2.sku_id
</select>
</mapper>

View File

@@ -34,6 +34,7 @@ public class ShopVendorServiceImpl extends ServiceImpl<ShopVendorMapper, ShopVen
}
Long shopId = StpKit.USER.getShopId(0L);
queryWrapper.eq(ShopVendor::getShopId, shopId);
queryWrapper.eq(ShopVendor::getIsDel, DeleteEnum.NORMAL.value());
queryWrapper.orderBy(ShopVendor::getSort, true);
queryWrapper.orderBy(ShopVendor::getId, false);
return queryWrapper;
@@ -48,7 +49,6 @@ public class ShopVendorServiceImpl extends ServiceImpl<ShopVendorMapper, ShopVen
@Override
public List<ShopVendorDTO> getShopVendorList(ShopVendorDTO param) {
QueryWrapper queryWrapper = buildQueryWrapper(param);
queryWrapper.eq(ShopVendor::getIsDel, DeleteEnum.NORMAL.value());
return super.listAs(queryWrapper, ShopVendorDTO.class);
}