This commit is contained in:
zt
2025-01-02 09:28:49 +08:00
parent 5e247cb63a
commit 6e9c0c21bc
39 changed files with 510 additions and 92 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 163 KiB

View File

@ -53,4 +53,5 @@ public class BusinessPageReqVO extends PageParam {
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
private Long carteenId;
}

View File

@ -16,4 +16,5 @@ public class RechargeVO {
private Long groupId;
private BigDecimal money;
private Long carteenId;
private Boolean group;
}

View File

@ -89,7 +89,7 @@ public class ExcelImportController {
}
List<Long> ids = new ArrayList<>();
ids.add(userByMobile.getId());
cashRechargeService.rechargeByAdmin(ids,null,excel.getMoney(),storeId);
cashRechargeService.rechargeByAdmin(ids,null,excel.getMoney(),storeId,null);
}
return notExist;
}

View File

@ -17,7 +17,9 @@ import cn.iocoder.yudao.module.member.service.customertraffic.CustomerTrafficSer
import cn.iocoder.yudao.module.member.service.devicewarn.DeviceWarnService;
import cn.iocoder.yudao.module.member.service.order.OrderService;
import cn.iocoder.yudao.module.member.service.orderdetail.OrderDetailService;
import cn.iocoder.yudao.module.member.service.storebusiness.StoreBusinessService;
import cn.iocoder.yudao.module.member.service.storeevaluate.StoreEvaluateService;
import cn.iocoder.yudao.module.member.service.storeorderdetail.StoreOrderDetailService;
import cn.iocoder.yudao.module.member.service.userpreference.UserPreferenceService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
@ -60,6 +62,10 @@ public class ScreenController {
private UserPreferenceService preferenceService;
@Resource
private BusinessService businessService;
@Resource
private StoreBusinessService storeBusinessService;
@Resource
private StoreOrderDetailService storeOrderDetailService;
@GetMapping("/getEvaluate")
@Operation(summary = "获得店铺评价,1-好评2-差评")
@ -101,13 +107,6 @@ public class ScreenController {
return success(orderService.selectUser(storeId,time));
}
@GetMapping("/selectDishSale")
@Operation(summary = "菜品今日销售")
@PermitAll
public CommonResult<List<DishVO>> selectDishSale(Long storeId) {
return success(orderDetailService.selectDishSale(storeId));
}
@GetMapping("/addWarn")
@Operation(summary = "添加设备报警次数")
@PermitAll
@ -201,5 +200,32 @@ public class ScreenController {
return success(businessService.getTurnoverList(turnoverVO));
}
@GetMapping("/selectDishSale")
@Operation(summary = "菜品销量")
@PermitAll
public CommonResult<List<DishVO>> selectDishSale(Long storeId,String startTime,String endTime) {
return success(orderDetailService.selectDishSale(storeId,startTime,endTime));
}
@GetMapping("/storeTurnover")
@Operation(summary = "获取超市营业额")
@PermitAll
public CommonResult<BusinessRespVO> getStoreTurnover(TurnoverVO turnoverVO) {
return success(storeBusinessService.getTurnover(turnoverVO));
}
@GetMapping("/storeTurnoverHistogram")
@Operation(summary = "获取超市营业额柱状图")
@PermitAll
public CommonResult<List<BusinessRespVO>> getStoreTurnoverHistogram(TurnoverVO turnoverVO) {
return success(storeBusinessService.getTurnoverList(turnoverVO));
}
@GetMapping("/selectGoodsSale")
@Operation(summary = "商品销量")
@PermitAll
public CommonResult<List<GoodsVO>> selectGoodsSale(Long storeId,String startTime,String endTime) {
return success(storeOrderDetailService.selectGoodsSale(storeId,startTime,endTime));
}
}

View File

@ -0,0 +1,17 @@
package cn.iocoder.yudao.module.member.controller.admin.screen.vo;
import lombok.Data;
@Data
public class GoodsVO {
private String goodsName;
/**
* 单价
*/
private Double customPrice;
/**
* 数量
*/
private Integer number;
}

View File

@ -1,14 +1,8 @@
package cn.iocoder.yudao.module.member.controller.admin.screen.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.sun.xml.internal.ws.developer.Serialization;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class TurnoverVO {
@ -20,5 +14,5 @@ public class TurnoverVO {
private String endTime;
@Schema(description = "门店")
private Long carteenId;
private Long storeId;
}

View File

@ -207,5 +207,13 @@ public class MemberUserController {
}
@PutMapping("/jsonCreate")
@Operation(summary = "json数据创建会员")
public CommonResult<Boolean> jsonCreate(String filePath,Long storeId){
memberUserService.jsonCreate(filePath,storeId);
return success(true);
}
}

View File

@ -0,0 +1,15 @@
package cn.iocoder.yudao.module.member.controller.admin.user.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import lombok.ToString;
@Data
@ToString
@JsonIgnoreProperties(ignoreUnknown = true)
public class UserJson {
private String user_nickname;
private String phone_number;
private String origin_data_url;
}

View File

@ -31,6 +31,7 @@ public interface BusinessMapper extends BaseMapperX<BusinessDO> {
.eqIfPresent(BusinessDO::getLunch, reqVO.getLunch())
.eqIfPresent(BusinessDO::getDinner, reqVO.getDinner())
.eqIfPresent(BusinessDO::getWeigh, reqVO.getWeigh())
.eqIfPresent(BusinessDO::getCarteenId, reqVO.getCarteenId())
.betweenIfPresent(BusinessDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(BusinessDO::getId));
}

View File

@ -9,6 +9,7 @@ import cn.iocoder.yudao.module.member.dal.dataobject.orderdetail.OrderDetailDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.time.LocalDateTime;
import java.util.List;
/**
@ -30,6 +31,6 @@ public interface OrderDetailMapper extends BaseMapperX<OrderDetailDO> {
.orderByDesc(OrderDetailDO::getId));
}
List<DishVO> selectDishSale(@Param("time") String time, @Param("storeId") Long storeId);
List<DishVO> selectDishSale(@Param("storeId") Long storeId, @Param("startTime") LocalDateTime startTime,@Param("endTime") LocalDateTime endTime);
}

View File

@ -1,14 +1,17 @@
package cn.iocoder.yudao.module.member.dal.mysql.storeorderdetail;
import java.time.LocalDateTime;
import java.util.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.member.controller.admin.screen.vo.GoodsVO;
import cn.iocoder.yudao.module.member.controller.app.storeorder.vo.AppStoreOrderDetailVo;
import cn.iocoder.yudao.module.member.dal.dataobject.storeorderdetail.StoreOrderDetailDO;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.member.controller.admin.storeorderdetail.vo.*;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
/**
@ -33,4 +36,9 @@ public interface StoreOrderDetailMapper extends BaseMapperX<StoreOrderDetailDO>
@Select("select od.custom_price,od.number,od.weight,od.goods_name,sg.img from member_store_order_detail od left join member_store_goods sg on od.goods_id = sg.goods_id where od.order_id = #{orderId}")
List<AppStoreOrderDetailVo> selectByOrderId(Integer orderId);
@Select("select od.goods_name,sum(od.number) as `number`,sum(od.number*od.custom_price) as price from member_store_order_detail od\n" +
" left join member_store_order so on od.order_id = so.order_id\n" +
" where so.carteen_id = #{storeId} and od.create_time BETWEEN #{startTime} AND #{endTime}\n" +
" group by od.goods_name")
List<GoodsVO> selectGoodsSale(@Param("storeId") Long storeId, @Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);
}

View File

@ -8,5 +8,5 @@ import java.util.List;
public interface CashRechargeService {
void rechargeByAdmin(List<Long> userIds, Long groupId, BigDecimal money,Long storeId);
void rechargeByAdmin(List<Long> userIds, Long groupId, BigDecimal money,Long storeId,Boolean group);
}

View File

@ -7,6 +7,7 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoCardVO;
import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO;
import cn.iocoder.yudao.module.member.dal.dataobject.group.MemberGroupDO;
import cn.iocoder.yudao.module.member.dal.dataobject.money.MoneyDO;
import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO;
import cn.iocoder.yudao.module.member.dal.dataobject.refund.RefundDO;
@ -59,9 +60,10 @@ public class CashRechargeServiceImpl implements CashRechargeService {
@Override
public void rechargeByAdmin(List<Long> userIds, Long groupId, BigDecimal money, Long storeId) {
public void rechargeByAdmin(List<Long> userIds, Long groupId, BigDecimal money, Long storeId,Boolean group) {
List<Long> memberList = new ArrayList<>();
if (groupId != null) {
MemberGroupDO memberGroupDO = memberGroupMapper.selectById(groupId);
if (group) {
memberList.addAll(memberGroupMapper.getMemberList(groupId));
} else {
memberList.addAll(userIds);
@ -113,6 +115,8 @@ public class CashRechargeServiceImpl implements CashRechargeService {
add.setWxAmount(wxNewMoney);
add.setGiftAmount(giftNewMoney);
add.setCarteenId(storeId);
add.setGroupId(groupId);
add.setGroupName(ObjectUtil.isNotEmpty(memberGroupDO)?memberGroupDO.getName():null);
addList.add(add);
//更新缓存

View File

@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.module.member.controller.admin.business.vo.BusinessPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.business.vo.BusinessRespVO;
import cn.iocoder.yudao.module.member.controller.admin.business.vo.BusinessSaveReqVO;
@ -38,6 +39,7 @@ import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
import java.time.temporal.WeekFields;
import java.util.*;
@ -406,7 +408,7 @@ public class BusinessServiceImpl implements BusinessService {
List<BusinessDO> businessDOS = businessMapper.selectList(Wrappers.<BusinessDO>lambdaQuery()
.between(BusinessDO::getCreateTime,MemberTimeUtils.string2Time(turnoverVO.getStartTime()), MemberTimeUtils.string2Time(turnoverVO.getEndTime()))
.eq(BusinessDO::getCarteenId, turnoverVO.getCarteenId()));
.eq(BusinessDO::getCarteenId, turnoverVO.getStoreId()));
BusinessRespVO businessDO = getInitBusinessRespVO();
if(CollectionUtil.isNotEmpty(businessDOS)){
businessDO.setTurnover(businessDOS.stream().map(BusinessDO::getTurnover).reduce(BigDecimal.ZERO, BigDecimal::add));
@ -441,34 +443,32 @@ public class BusinessServiceImpl implements BusinessService {
}
List<BusinessDO> businessDOS = businessMapper.selectList(Wrappers.<BusinessDO>lambdaQuery()
.between(BusinessDO::getCreateTime,startTime, endTime)
.eq(BusinessDO::getCarteenId, turnoverVO.getCarteenId()));
.eq(BusinessDO::getCarteenId, turnoverVO.getStoreId()));
Map<Integer, BusinessDO> map = businessDOS.stream()
Map<LocalDateTime, BusinessDO> map = businessDOS.stream()
.filter(Objects::nonNull) // 过滤掉null值
.collect(Collectors.toMap(
vo -> vo.getCreateTime().toLocalDate().getDayOfMonth(),
vo->vo.getCreateTime().toLocalDate().atStartOfDay(),
vo -> vo,
(existing, replacement) -> existing
));
// 创建一个Map来存储每天的数据
Map<Integer, BusinessRespVO> monthData = new LinkedHashMap<>();
int start = startDate.getDayOfMonth();
int end = endDate.getDayOfMonth();
for (int day = start; day <= end; day++) {
new BusinessRespVO();
BusinessRespVO bean;
if(map.get(day) == null){
bean = getInitBusinessRespVO().setTime(String.valueOf(day));
}else {
bean = BeanUtils.toBean(map.get(day), BusinessRespVO.class);
bean.setTime(String.valueOf(day));
}
monthData.put(day,bean);
// 生成从 startDate 到 endDate 的完整日期列表
List<LocalDateTime> completeDates = new ArrayList<>();
for (LocalDateTime date = startTime.toLocalDate().atStartOfDay(); !date.isAfter(endTime.toLocalDate().atStartOfDay()); date = date.plus(1, ChronoUnit.DAYS)) {
completeDates.add(date);
}
return new ArrayList<>(monthData.values());
// 遍历完整日期列表,补齐缺失的数据
List<BusinessRespVO> completeRecords = new ArrayList<>();
for (LocalDateTime date : completeDates) {
BusinessRespVO bean;
if(map.get(date) == null){
bean = getInitBusinessRespVO().setTime(MemberTimeUtils.Time2String(date));
}else {
bean = BeanUtils.toBean(map.get(date), BusinessRespVO.class);
bean.setTime(MemberTimeUtils.Time2String(date));
}
completeRecords.add(bean);
}
return completeRecords;
}
}

View File

@ -192,7 +192,7 @@ public class CardServiceImpl implements CardService {
@Override
@Transactional(rollbackFor = Exception.class)
public void rechargeByAdmin(RechargeVO vo) {
cashRechargeService.rechargeByAdmin(vo.getUserIds(),vo.getGroupId(),vo.getMoney(),vo.getCarteenId());
cashRechargeService.rechargeByAdmin(vo.getUserIds(),vo.getGroupId(),vo.getMoney(),vo.getCarteenId(),vo.getGroup());
}

View File

@ -9,6 +9,7 @@ import cn.iocoder.yudao.module.member.dal.dataobject.orderdetail.OrderDetailDO;
import javax.validation.Valid;
import java.util.List;
import java.util.Map;
/**
* 订单明细 Service 接口
@ -59,7 +60,7 @@ public interface OrderDetailService {
List<OrderDetailDO> selectListByOrderIds(List<Long> orderIds);
List<DishVO> selectDishSale(Long storeId);
List<DishVO> selectDishSale(Long storeId, String startTime, String endTime);
void insertOne(OrderDetailDO orderDetailDO);
}

View File

@ -15,9 +15,11 @@ import cn.iocoder.yudao.module.member.dal.mysql.orderdetail.OrderDetailMapper;
import cn.iocoder.yudao.module.member.service.async.MemberAsyncService;
import cn.iocoder.yudao.module.member.service.diningplates.DiningPlatesService;
import cn.iocoder.yudao.module.member.util.MemberConstants;
import cn.iocoder.yudao.module.member.util.MemberTimeUtils;
import cn.iocoder.yudao.module.system.api.dish.DishesApi;
import cn.iocoder.yudao.module.system.api.dish.dto.DishesRespDto;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -28,8 +30,11 @@ import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.ORDER_ALREADY_COMPLETE;
@ -154,13 +159,12 @@ public class OrderDetailServiceImpl implements OrderDetailService {
}
@Override
public List<DishVO> selectDishSale(Long storeId) {
LocalDate today = LocalDate.now();
String time = today.format(DateTimeFormatter.ofPattern(MemberConstants.DATE_FORMAT));
return orderDetailMapper.selectDishSale(time, storeId);
public List<DishVO> selectDishSale(Long storeId, String startTime, String endTime) {
LocalDateTime start = MemberTimeUtils.string2Time(startTime);
LocalDateTime end = MemberTimeUtils.string2Time(endTime);
return orderDetailMapper.selectDishSale(storeId, start, end);
}
@Override
public void insertOne(OrderDetailDO orderDetailDO) {
orderDetailMapper.insert(orderDetailDO);

View File

@ -1,13 +1,16 @@
package cn.iocoder.yudao.module.member.service.storebusiness;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.member.controller.admin.business.vo.BusinessRespVO;
import cn.iocoder.yudao.module.member.controller.admin.business.vo.StatisticsVo;
import cn.iocoder.yudao.module.member.controller.admin.screen.vo.TurnoverVO;
import cn.iocoder.yudao.module.member.controller.admin.storebusiness.vo.StoreBusinessPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.storebusiness.vo.StoreBusinessSaveReqVO;
import cn.iocoder.yudao.module.member.controller.app.business.vo.BusinessDataVO;
import cn.iocoder.yudao.module.member.dal.dataobject.storebusiness.StoreBusinessDO;
import javax.validation.Valid;
import java.util.List;
/**
* 超市营业统计 Service 接口
@ -63,6 +66,7 @@ public interface StoreBusinessService {
BusinessDataVO getMonth(String time,Long carteenId);
BusinessRespVO getTurnover(TurnoverVO turnoverVO);
List<BusinessRespVO> getTurnoverList(TurnoverVO turnoverVO);
}

View File

@ -7,9 +7,11 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.member.controller.admin.business.vo.BusinessRespVO;
import cn.iocoder.yudao.module.member.controller.admin.business.vo.StatisticsVo;
import cn.iocoder.yudao.module.member.controller.admin.screen.vo.TurnoverVO;
import cn.iocoder.yudao.module.member.controller.admin.storebusiness.vo.StoreBusinessPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.storebusiness.vo.StoreBusinessSaveReqVO;
import cn.iocoder.yudao.module.member.controller.app.business.vo.BusinessDataVO;
import cn.iocoder.yudao.module.member.dal.dataobject.business.BusinessDO;
import cn.iocoder.yudao.module.member.dal.dataobject.storebusiness.StoreBusinessDO;
import cn.iocoder.yudao.module.member.dal.mysql.storebusiness.StoreBusinessMapper;
import cn.iocoder.yudao.module.member.enums.CostTypeEnum;
@ -28,11 +30,9 @@ import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
import java.util.*;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@ -335,4 +335,78 @@ public class StoreBusinessServiceImpl implements StoreBusinessService {
.setBreakfast(BigDecimal.ZERO).setLunch(BigDecimal.ZERO).setDinner(BigDecimal.ZERO).setPriceAvg(BigDecimal.ZERO);
return previousVO;
}
@Override
public BusinessRespVO getTurnover(TurnoverVO turnoverVO) {
List<StoreBusinessDO> businessDOS = storeBusinessMapper.selectList(Wrappers.<StoreBusinessDO>lambdaQuery()
.between(StoreBusinessDO::getCreateTime,MemberTimeUtils.string2Time(turnoverVO.getStartTime()), MemberTimeUtils.string2Time(turnoverVO.getEndTime()))
.eq(StoreBusinessDO::getCarteenId, turnoverVO.getStoreId()));
BusinessRespVO businessDO = getInitBusinessRespVO();
if(CollectionUtil.isNotEmpty(businessDOS)){
businessDO.setTurnover(businessDOS.stream().map(StoreBusinessDO::getTurnover).reduce(BigDecimal.ZERO, BigDecimal::add));
businessDO.setOrderSum(businessDOS.stream().map(StoreBusinessDO::getOrderSum).reduce(0, Integer::sum));
businessDO.setCustomerSum(businessDOS.stream().map(StoreBusinessDO::getCustomerSum).reduce(0, Integer::sum));
businessDO.setPriceAvg(businessDOS.stream().map(StoreBusinessDO::getPriceAvg).reduce(BigDecimal.ZERO, BigDecimal::add));
businessDO.setBreakfast(businessDOS.stream().map(StoreBusinessDO::getBreakfast).reduce(BigDecimal.ZERO, BigDecimal::add));
businessDO.setLunch(businessDOS.stream().map(StoreBusinessDO::getLunch).reduce(BigDecimal.ZERO, BigDecimal::add));
businessDO.setDinner(businessDOS.stream().map(StoreBusinessDO::getDinner).reduce(BigDecimal.ZERO, BigDecimal::add));
businessDO.setBreakfastNum(businessDOS.stream().map(StoreBusinessDO::getBreakfastNum).reduce(0, Integer::sum));
businessDO.setLunchNum(businessDOS.stream().map(StoreBusinessDO::getLunchNum).reduce(0, Integer::sum));
businessDO.setDinnerNum(businessDOS.stream().map(StoreBusinessDO::getDinnerNum).reduce(0, Integer::sum));
}
return businessDO;
}
@Override
public List<BusinessRespVO> getTurnoverList(TurnoverVO turnoverVO) {
LocalDateTime startTime = MemberTimeUtils.string2Time(turnoverVO.getStartTime());
LocalDateTime endTime = MemberTimeUtils.string2Time(turnoverVO.getEndTime());
LocalDate startDate = startTime.toLocalDate();
LocalDate endDate = endTime.toLocalDate();
if(startDate.equals(endDate)){
// 获取本月开始时间本月的第一天00:00:00
startDate= startTime.with(TemporalAdjusters.firstDayOfMonth()).toLocalDate();
startTime = startDate.atStartOfDay();
// 获取本月结束时间本月的最后一天23:59:59.999999999
endDate = endTime.with(TemporalAdjusters.lastDayOfMonth()).toLocalDate();
endTime = endDate.atTime(LocalTime.MAX);
}
List<StoreBusinessDO> businessDOS = storeBusinessMapper.selectList(Wrappers.<StoreBusinessDO>lambdaQuery()
.between(StoreBusinessDO::getCreateTime,startTime, endTime)
.eq(StoreBusinessDO::getCarteenId, turnoverVO.getStoreId()));
Map<LocalDateTime, StoreBusinessDO> map = businessDOS.stream()
.filter(Objects::nonNull) // 过滤掉null值
.collect(Collectors.toMap(
vo -> vo.getCreateTime().toLocalDate().atStartOfDay(),
vo -> vo,
(existing, replacement) -> existing
));
// 生成从 startDate 到 endDate 的完整日期列表
List<LocalDateTime> completeDates = new ArrayList<>();
for (LocalDateTime date = startTime.toLocalDate().atStartOfDay(); !date.isAfter(endTime.toLocalDate().atStartOfDay()); date = date.plus(1, ChronoUnit.DAYS)) {
completeDates.add(date);
}
// 遍历完整日期列表,补齐缺失的数据
List<BusinessRespVO> completeRecords = new ArrayList<>();
for (LocalDateTime date : completeDates) {
BusinessRespVO bean;
if(map.get(date) == null){
bean = getInitBusinessRespVO().setTime(MemberTimeUtils.Time2String(date));
}else {
bean = BeanUtils.toBean(map.get(date), BusinessRespVO.class);
bean.setTime(MemberTimeUtils.Time2String(date));
}
completeRecords.add(bean);
}
return completeRecords;
}
}

View File

@ -1,6 +1,8 @@
package cn.iocoder.yudao.module.member.service.storeorderdetail;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.member.controller.admin.screen.vo.DishVO;
import cn.iocoder.yudao.module.member.controller.admin.screen.vo.GoodsVO;
import cn.iocoder.yudao.module.member.controller.admin.storeorderdetail.vo.StoreOrderDetailPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.storeorderdetail.vo.StoreOrderDetailSaveReqVO;
import cn.iocoder.yudao.module.member.controller.app.storeorder.vo.AppStoreOrderDetailVo;
@ -61,4 +63,7 @@ public interface StoreOrderDetailService {
void deleteByOrderNo(Integer orderId);
List<StoreOrderDetailDO> getListByOrderId(Integer orderId);
List<GoodsVO> selectGoodsSale(Long storeId, String startTime, String endTime);
}

View File

@ -2,16 +2,20 @@ package cn.iocoder.yudao.module.member.service.storeorderdetail;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.member.controller.admin.screen.vo.DishVO;
import cn.iocoder.yudao.module.member.controller.admin.screen.vo.GoodsVO;
import cn.iocoder.yudao.module.member.controller.admin.storeorderdetail.vo.StoreOrderDetailPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.storeorderdetail.vo.StoreOrderDetailSaveReqVO;
import cn.iocoder.yudao.module.member.controller.app.storeorder.vo.AppStoreOrderDetailVo;
import cn.iocoder.yudao.module.member.dal.dataobject.storeorderdetail.StoreOrderDetailDO;
import cn.iocoder.yudao.module.member.dal.mysql.storeorderdetail.StoreOrderDetailMapper;
import cn.iocoder.yudao.module.member.util.MemberTimeUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.Collections;
import java.util.List;
@ -91,4 +95,11 @@ public class StoreOrderDetailServiceImpl implements StoreOrderDetailService {
public List<StoreOrderDetailDO> getListByOrderId(Integer orderId) {
return storeOrderDetailMapper.selectList(Wrappers.<StoreOrderDetailDO>lambdaQuery().eq(StoreOrderDetailDO::getOrderId,orderId));
}
@Override
public List<GoodsVO> selectGoodsSale(Long storeId, String startTime, String endTime) {
LocalDateTime start = MemberTimeUtils.string2Time(startTime);
LocalDateTime end = MemberTimeUtils.string2Time(endTime);
return storeOrderDetailMapper.selectGoodsSale(storeId, start, end);
}
}

View File

@ -265,4 +265,5 @@ public interface MemberUserService {
List<MemberUserDO> getListByMobile(String mobiles);
void jsonCreate(String filePath,Long storeId);
}

View File

@ -15,14 +15,12 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.DigestUtil;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserAddVO;
import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserListVO;
import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserUpdateReqVO;
import cn.iocoder.yudao.module.member.controller.admin.user.vo.*;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserResetPasswordReqVO;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdateMobileByWeixinReqVO;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdateMobileReqVO;
@ -55,6 +53,8 @@ import cn.iocoder.yudao.module.member.util.MemberConstants;
import cn.iocoder.yudao.module.member.util.QRCodeWithJWTUtil;
import cn.iocoder.yudao.module.system.api.dishesnutrition.DishesNutritionApi;
import cn.iocoder.yudao.module.system.api.dishesnutrition.dto.DishesNutritionRespDTO;
import cn.iocoder.yudao.module.system.api.face.FaceApi;
import cn.iocoder.yudao.module.system.api.face.dto.UserJsonDto;
import cn.iocoder.yudao.module.system.api.sms.SmsCodeApi;
import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO;
import cn.iocoder.yudao.module.system.api.social.SocialClientApi;
@ -62,20 +62,34 @@ import cn.iocoder.yudao.module.system.api.social.dto.SocialWxPhoneNumberInfoResp
import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.annotations.VisibleForTesting;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionSynchronization;
import org.springframework.transaction.support.TransactionSynchronizationManager;
import org.springframework.util.ObjectUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.WeekFields;
@ -147,6 +161,8 @@ public class MemberUserServiceImpl implements MemberUserService {
@Resource
private StringRedisTemplate memberUserRedisTemplate;
@Resource
private FaceApi faceApi;
@Override
public MemberUserDO getUserByMobile(String mobile) {
@ -937,4 +953,97 @@ public class MemberUserServiceImpl implements MemberUserService {
return memberUserMapper.selectList(new LambdaQueryWrapperX<MemberUserDO>()
.likeIfPresent(MemberUserDO::getMobile, mobiles));
}
@Override
public void jsonCreate(String filePath,Long storeId) {
ObjectMapper objectMapper = new ObjectMapper();
try {
// 读取 JSON 文件并转换为 List<Person>
List<UserJson> people = objectMapper.readValue(new File(filePath), new TypeReference<List<UserJson>>() {});
ArrayList<MemberUserDO> updateList = new ArrayList<>();
for(UserJson userJson : people) {
// 用户已经存在
MemberUserDO userSelect = memberUserMapper.selectByMobile(userJson.getPhone_number());
if (userSelect != null) {
continue;
}
// 用户不存在,则进行创建
// 生成密码
String password = IdUtil.fastSimpleUUID();
// 插入用户
MemberUserDO user = new MemberUserDO();
user.setMobile(userJson.getPhone_number());
user.setLimitAmount(new BigDecimal("30"));
user.setNickname(userJson.getUser_nickname());
user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启
user.setPassword(encodePassword(password)); // 加密密码
user.setRegisterIp("null");
memberUserMapper.insert(user);
Long id = user.getId();
if(StringUtils.isNotBlank(userJson.getOrigin_data_url())){
String s = downloadImage(userJson);
UserJsonDto userJsonDto = new UserJsonDto();
userJsonDto.setUserNickname(userJson.getUser_nickname());
userJsonDto.setUserId(id);
userJsonDto.setUrl(s);
userJsonDto.setPhoneNumber(userJson.getPhone_number());
userJsonDto.setCarteenId(storeId);
Long faceId = faceApi.addFace(userJsonDto);
user.setFaceId(faceId);
updateList.add(user);
}
}
if(CollectionUtil.isNotEmpty(updateList)){
memberUserMapper.updateBatch(updateList);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public String downloadImage(UserJson userJson) {
String saveDir = "facedata/";
try {
// 创建 URL 对象
URL url = new URL(userJson.getOrigin_data_url());
// 获取文件名(从 URL 提取)
String fileName = Paths.get(url.getPath()).getFileName().toString();
// 创建保存路径
Path savePath = Paths.get(saveDir, fileName);
Files.createDirectories(savePath.getParent());
// 打开连接并获取输入流
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
System.out.println("Failed to download image. Response code: " + connection.getResponseCode());
return null;
}
try (
InputStream inputStream = connection.getInputStream();
OutputStream outputStream = new BufferedOutputStream(Files.newOutputStream(savePath))
) {
// 使用缓冲区手动复制流
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
}
System.out.println("Image saved to: " + savePath.toAbsolutePath());
return savePath.toString().replace("\\", "/");
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}

View File

@ -107,4 +107,12 @@ public class MemberTimeUtils {
return LocalDateTime.parse(time, formatter);
}
public static String Time2String(LocalDateTime time) {
// 定义日期字符串格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 将字符串解析为LocalDate对象
return time.format(formatter);
}
}

View File

@ -19,7 +19,7 @@
<select id="getMemberByGroupId" resultType="cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO">
select mu.*
from member_group_member mgm
left join yudao.member_user mu on mgm.member_id = mu.id
left join member_user mu on mgm.member_id = mu.id
where mgm.group_id = #{groupId}
and mu.status = 0
<if test="nickname != null and nickname !=''">
@ -35,7 +35,7 @@
<select id="getByGroupId" resultType="cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO">
select mu.*
from member_group_member mgm
left join yudao.member_user mu on mgm.member_id = mu.id
left join member_user mu on mgm.member_id = mu.id
where mgm.group_id = #{groupId}
and mu.status = 0
</select>
@ -51,7 +51,7 @@
<select id="memberCount" resultType="Long">
select count(*)
from member_group_member mgm
left join yudao.member_user mu on mgm.member_id = mu.id
left join member_user mu on mgm.member_id = mu.id
where mgm.group_id = #{groupId}
and mu.status = 0
<if test="nickname != null and nickname !=''">

View File

@ -9,16 +9,10 @@
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
<select id="selectDishSale" resultType="cn.iocoder.yudao.module.member.controller.admin.screen.vo.DishVO">
select dishes_name, sum(a.weight) as weight , sum(a.price) as price
from member_order_detail a
where date_format(a.create_time,'%Y-%m-%d') = #{time}
<if test="storeId != null">
and order_id in
(select id from member_dish_order
where store_id = #{storeId}
and date_format(create_time,'%Y-%m-%d') = #{time})
</if>
group by a.dishes_id,a.dishes_name
select od.dishes_name,sum(od.weight) as weight,sum(od.price) as price from member_order_detail od
left join member_dish_order mo on od.order_id = mo.id
where store_id = #{storeId} and od.create_time between #{startTime} and #{endTime}
group by dishes_name
</select>
</mapper>

View File

@ -0,0 +1,9 @@
package cn.iocoder.yudao.module.system.api.face;
import cn.iocoder.yudao.module.system.api.face.dto.UserJsonDto;
public interface FaceApi {
Long addFace(UserJsonDto userJson);
}

View File

@ -0,0 +1,16 @@
package cn.iocoder.yudao.module.system.api.face.dto;
import lombok.Data;
import lombok.ToString;
@Data
@ToString
public class UserJsonDto {
private String userNickname;
private String phoneNumber;
private String url;
private Long userId;
private Long carteenId;
}

View File

@ -0,0 +1,42 @@
package cn.iocoder.yudao.module.system.api.face;
import cn.hutool.core.util.IdUtil;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.system.api.face.dto.UserJsonDto;
import cn.iocoder.yudao.module.system.dal.dataobject.face.UserFace;
import cn.iocoder.yudao.module.system.service.face.FaceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import org.springframework.web.multipart.MultipartFile;
import java.util.Map;
@Service
public class FaceApiImpl implements FaceApi {
@Autowired
private FaceService faceService;
@Override
public Long addFace(UserJsonDto userJson) {
// 生成雪花id
long nextId = IdUtil.getSnowflake().nextId();
CommonResult<Map<String,String>> httpResult = new CommonResult<>();
// 随机生成一个字符串作为用户ID(测试、实际中禁用)
UserFace userById = faceService.getUserById(userJson.getUserId());
if (ObjectUtils.isEmpty(userById)) {
UserFace user = new UserFace(nextId, userJson.getUserId(), userJson.getPhoneNumber(), userJson.getUserNickname(), userJson.getUrl());
user.setCarteenId(userJson.getCarteenId());
faceService.getBaseMapper().insert(user);
} else {
nextId = userById.getUserId();
userById.setUrl(userJson.getUrl());
faceService.getBaseMapper().updateById(userById);
}
return nextId;
}
}

View File

@ -130,6 +130,14 @@ public class AppDevuceController {
public CommonResult<Long> getCarteenId() {
return success(devuceService.getCarteenIdByIp());
}
@GetMapping("/carteenNew")
@Operation(summary = "根据ip获取门店id")
public CommonResult<Map<String,Object>> getCarteenIdNew() {
return success(devuceService.getCarteenIdByIpNew());
}
@GetMapping("/nutrition")
@Operation(summary = "获取菜品营养成分")
public CommonResult<List<Map>> getDishesNutrition(@RequestParam("dishesId") Long dishesId,@RequestParam(value = "cId",required = false) String cId) {
@ -150,7 +158,6 @@ public class AppDevuceController {
return success(true);
}
@GetMapping("/alive")
@Operation(summary = "在线检测")
public void alive() {

View File

@ -77,6 +77,7 @@ public class FaceController {
@GetMapping("/getAll")
public CommonResult<Page<UserFace>> getAll(QueryDto dto) {
return CommonResult.success(faceService.getList(dto));
}

View File

@ -21,6 +21,7 @@ public class UserFace {
private String name;
private String phone;
private LocalDateTime createTime;
private Long carteenId;
public UserFace(Long userId, Long sysUserId, String phone, String name, String url) {
this.phone = phone;

View File

@ -8,13 +8,16 @@ import cn.iocoder.yudao.module.system.controller.admin.deviceinfo.vo.DeviceInfoP
import cn.iocoder.yudao.module.system.controller.admin.deviceinfo.vo.DeviceInfoSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.cashregisterinfo.CashRegisterInfoDO;
import cn.iocoder.yudao.module.system.dal.dataobject.deviceInfo.DeviceInfoDO;
import cn.iocoder.yudao.module.system.dal.dataobject.devuce.DevuceDO;
import cn.iocoder.yudao.module.system.dal.dataobject.facedeviceinfo.FaceDeviceInfoDO;
import cn.iocoder.yudao.module.system.dal.mysql.cashregisterinfo.CashRegisterInfoMapper;
import cn.iocoder.yudao.module.system.dal.mysql.deviceInfo.DeviceInfoMapper;
import cn.iocoder.yudao.module.system.dal.mysql.devuce.DevuceMapper;
import cn.iocoder.yudao.module.system.dal.mysql.facedeviceinfo.FaceDeviceInfoMapper;
import cn.iocoder.yudao.module.system.enums.ErrorCodeConstants;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
@ -52,6 +55,9 @@ public class DeviceInfoServiceImpl implements DeviceInfoService {
@Resource
private CashRegisterInfoMapper cashRegisterInfoMapper;
@Resource
private DevuceMapper devuceMapper;
@Override
public Long createDeviceInfo(DeviceInfoSaveReqVO createReqVO) {
// 插入
@ -78,6 +84,9 @@ public class DeviceInfoServiceImpl implements DeviceInfoService {
// 更新
DeviceInfoDO updateObj = BeanUtils.toBean(updateReqVO, DeviceInfoDO.class);
deviceInfoMapper.updateById(updateObj);
//清空设备绑定菜品
devuceMapper.update(Wrappers.<DevuceDO>lambdaUpdate().eq(DevuceDO::getDeviceSn,updateObj.getDeviceIp())
.eq(DevuceDO::getBind,true).set(DevuceDO::getDishesId,null));
}
@Override

View File

@ -58,39 +58,50 @@ public interface DevuceService {
* @return 设备分页
*/
PageResult<DevuceDO> getDevucePage(DevucePageReqVO pageReqVO);
/**
* @return
* @Description: 设备绑定菜品,或计算菜品重量与剩余重量
* @Author: qjq
* @Date: 2024/4/10 下午1:40
* @return
* @Date: 2024/4/10 下午1:40
*/
DishesDO getDevuceList();
List<DishesDO> getDishesList(Long carteenId,Long dishecType,String dishesName);
List<DishesDO> getDishesList(Long carteenId, Long dishecType, String dishesName);
PageResult<DishesDO> getDishesPage(Long carteenId, Long dishecType, String dishesName, Integer pageNo, Integer pageSize);
PageResult<DishesDO> getDishesPage(Long carteenId, Long dishecType, String dishesName,Integer pageNo,Integer pageSize);
/**
* @return
* @Description: 获取菜品分类
* @Author: qjq
* @Date: 2024/4/9 上午10:33
* @return
*/
List<DishesTypeDO> getDishesTypeList(Long carteenId);
/**
* @Description: 根据ip获取门店id
* @Author: qjq
* @Date: 2024/4/10 下午4:28
* @return
*/
Long getCarteenIdByIp();
/**
* @return
* @Description: 根据ip获取门店id
* @Author: qjq
* @Date: 2024/4/10 下午4:28
*/
Long getCarteenIdByIp();
/**
* @return
* @Description: 根据ip获取门店id
* @Author: qjq
* @Date: 2024/4/10 下午4:28
*/
Map<String, Object> getCarteenIdByIpNew();
/**
* @return
* @Description: 获取菜品营养与菜品名称
* @Author: qjq
* @Date: 2024/4/19 下午2:44
* @return
*/
List<Map> getDishesNutrition(Long dishesId,String cId);
List<Map> getDishesNutrition(Long dishesId, String cId);
void updateWeight(DevuceReqVO updateReqVO);

View File

@ -23,6 +23,7 @@ import cn.iocoder.yudao.module.system.dal.mysql.dishes.DishesMapper;
import cn.iocoder.yudao.module.system.dal.mysql.dishesnutrition.DishesNutritionMapper;
import cn.iocoder.yudao.module.system.dal.mysql.dishestype.DishesTypeMapper;
import cn.iocoder.yudao.module.system.enums.ErrorCodeConstants;
import cn.iocoder.yudao.module.system.service.carteen.CarteenService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@ -63,6 +64,8 @@ public class DevuceServiceImpl implements DevuceService {
private DeviceInfoMapper deviceInfoMapper;
@Resource
private DishesNutritionMapper dishesNutritionMapper;
@Resource
private CarteenService carteenService;
@Override
@ -275,9 +278,6 @@ public class DevuceServiceImpl implements DevuceService {
return maps;
}
/**
* @return
* @Description: 根据ip获取门店id
@ -297,6 +297,29 @@ public class DevuceServiceImpl implements DevuceService {
}
}
/**
* @return
* @Description: 根据ip获取门店id
* @Author: qjq
* @Date: 2024/4/10 下午4:28
*/
@Override
public Map<String, Object> getCarteenIdByIpNew() {
String hearder = this.getHearder();
List<DeviceInfoDO> deviceInfoDOS = deviceInfoMapper.selectList(new LambdaQueryWrapperX<DeviceInfoDO>()
.eq(DeviceInfoDO::getDeviceIp, hearder)
);
if(ObjUtil.isNotEmpty(deviceInfoDOS)){
HashMap<String, Object> map = new HashMap<>();
Long carteenId = deviceInfoDOS.get(0).getCarteenId();
map.put("carteenId",carteenId);
map.put("carteenName",carteenService.getCarteen(carteenId).getStoresName());
return map;
}else{
throw exception(2000_10_002,"无法通IP获取门店");
}
}
@Override
public void updateWeight(DevuceReqVO updateReqVO) {
String hearder = this.getHearder();

View File

@ -4,6 +4,8 @@ import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.module.system.controller.app.face.dto.QueryDto;
import cn.iocoder.yudao.module.system.dal.dataobject.face.UserFace;
import cn.iocoder.yudao.module.system.dal.mysql.face.FaceMapper;
import cn.iocoder.yudao.module.system.service.deviceinfo.DeviceInfoService;
import cn.iocoder.yudao.module.system.service.facedeviceinfo.FaceDeviceInfoService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
@ -12,6 +14,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
@ -20,7 +24,10 @@ public class FaceService extends ServiceImpl<FaceMapper, UserFace> implements IS
@Autowired
private FaceMapper mapper;
@Resource
private HttpServletRequest httpServletRequest;
@Resource
private FaceDeviceInfoService faceDeviceInfoService;
//注册人脸
public void faceAdd(UserFace user) {
mapper.add(user);
@ -35,9 +42,14 @@ public class FaceService extends ServiceImpl<FaceMapper, UserFace> implements IS
}
public Page<UserFace> getList(QueryDto dto) {
String authorization = httpServletRequest.getHeader("Authorization");
Long carteenId = faceDeviceInfoService.getInfo(authorization).getCarteenId();
Page<UserFace> page = new Page<>(dto.getPageNum(), dto.getPageSize());
LambdaQueryWrapper<UserFace> wrapper = new LambdaQueryWrapper<>();
wrapper.like(StrUtil.isNotBlank(dto.getPhone()), UserFace::getPhone, dto.getPhone());
wrapper.and(w -> w.eq(UserFace::getCarteenId,carteenId)
.or().isNull(UserFace::getCarteenId));
wrapper.orderByDesc(UserFace::getCreateTime);
return mapper.selectPage(page, wrapper);
}

View File

@ -8,7 +8,7 @@ spring:
autoconfigure:
exclude:
- com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
# - org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration # 默认 local 环境,不开启 Quartz 的自动配置
- org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration # 默认 local 环境,不开启 Quartz 的自动配置
- de.codecentric.boot.admin.server.config.AdminServerAutoConfiguration # 禁用 Spring Boot Admin 的 Server 的自动配置
- de.codecentric.boot.admin.server.ui.config.AdminServerUiAutoConfiguration # 禁用 Spring Boot Admin 的 Server UI 的自动配置
- de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration # 禁用 Spring Boot Admin 的 Client 的自动配置