大屏
This commit is contained in:
BIN
facedata/117.jpg
BIN
facedata/117.jpg
Binary file not shown.
Before Width: | Height: | Size: 109 KiB |
BIN
facedata/118.jpg
BIN
facedata/118.jpg
Binary file not shown.
Before Width: | Height: | Size: 163 KiB |
@ -53,4 +53,5 @@ public class BusinessPageReqVO extends PageParam {
|
|||||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||||
private LocalDateTime[] createTime;
|
private LocalDateTime[] createTime;
|
||||||
|
|
||||||
|
private Long carteenId;
|
||||||
}
|
}
|
@ -16,4 +16,5 @@ public class RechargeVO {
|
|||||||
private Long groupId;
|
private Long groupId;
|
||||||
private BigDecimal money;
|
private BigDecimal money;
|
||||||
private Long carteenId;
|
private Long carteenId;
|
||||||
|
private Boolean group;
|
||||||
}
|
}
|
||||||
|
@ -89,7 +89,7 @@ public class ExcelImportController {
|
|||||||
}
|
}
|
||||||
List<Long> ids = new ArrayList<>();
|
List<Long> ids = new ArrayList<>();
|
||||||
ids.add(userByMobile.getId());
|
ids.add(userByMobile.getId());
|
||||||
cashRechargeService.rechargeByAdmin(ids,null,excel.getMoney(),storeId);
|
cashRechargeService.rechargeByAdmin(ids,null,excel.getMoney(),storeId,null);
|
||||||
}
|
}
|
||||||
return notExist;
|
return notExist;
|
||||||
}
|
}
|
||||||
|
@ -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.devicewarn.DeviceWarnService;
|
||||||
import cn.iocoder.yudao.module.member.service.order.OrderService;
|
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.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.storeevaluate.StoreEvaluateService;
|
||||||
|
import cn.iocoder.yudao.module.member.service.storeorderdetail.StoreOrderDetailService;
|
||||||
import cn.iocoder.yudao.module.member.service.userpreference.UserPreferenceService;
|
import cn.iocoder.yudao.module.member.service.userpreference.UserPreferenceService;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
@ -60,6 +62,10 @@ public class ScreenController {
|
|||||||
private UserPreferenceService preferenceService;
|
private UserPreferenceService preferenceService;
|
||||||
@Resource
|
@Resource
|
||||||
private BusinessService businessService;
|
private BusinessService businessService;
|
||||||
|
@Resource
|
||||||
|
private StoreBusinessService storeBusinessService;
|
||||||
|
@Resource
|
||||||
|
private StoreOrderDetailService storeOrderDetailService;
|
||||||
|
|
||||||
@GetMapping("/getEvaluate")
|
@GetMapping("/getEvaluate")
|
||||||
@Operation(summary = "获得店铺评价,1-好评,2-差评")
|
@Operation(summary = "获得店铺评价,1-好评,2-差评")
|
||||||
@ -101,13 +107,6 @@ public class ScreenController {
|
|||||||
return success(orderService.selectUser(storeId,time));
|
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")
|
@GetMapping("/addWarn")
|
||||||
@Operation(summary = "添加设备报警次数")
|
@Operation(summary = "添加设备报警次数")
|
||||||
@PermitAll
|
@PermitAll
|
||||||
@ -201,5 +200,32 @@ public class ScreenController {
|
|||||||
return success(businessService.getTurnoverList(turnoverVO));
|
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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
}
|
@ -1,14 +1,8 @@
|
|||||||
package cn.iocoder.yudao.module.member.controller.admin.screen.vo;
|
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 io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.springframework.format.annotation.DateTimeFormat;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class TurnoverVO {
|
public class TurnoverVO {
|
||||||
@ -20,5 +14,5 @@ public class TurnoverVO {
|
|||||||
private String endTime;
|
private String endTime;
|
||||||
|
|
||||||
@Schema(description = "门店")
|
@Schema(description = "门店")
|
||||||
private Long carteenId;
|
private Long storeId;
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
}
|
@ -31,6 +31,7 @@ public interface BusinessMapper extends BaseMapperX<BusinessDO> {
|
|||||||
.eqIfPresent(BusinessDO::getLunch, reqVO.getLunch())
|
.eqIfPresent(BusinessDO::getLunch, reqVO.getLunch())
|
||||||
.eqIfPresent(BusinessDO::getDinner, reqVO.getDinner())
|
.eqIfPresent(BusinessDO::getDinner, reqVO.getDinner())
|
||||||
.eqIfPresent(BusinessDO::getWeigh, reqVO.getWeigh())
|
.eqIfPresent(BusinessDO::getWeigh, reqVO.getWeigh())
|
||||||
|
.eqIfPresent(BusinessDO::getCarteenId, reqVO.getCarteenId())
|
||||||
.betweenIfPresent(BusinessDO::getCreateTime, reqVO.getCreateTime())
|
.betweenIfPresent(BusinessDO::getCreateTime, reqVO.getCreateTime())
|
||||||
.orderByDesc(BusinessDO::getId));
|
.orderByDesc(BusinessDO::getId));
|
||||||
}
|
}
|
||||||
|
@ -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.Mapper;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -30,6 +31,6 @@ public interface OrderDetailMapper extends BaseMapperX<OrderDetailDO> {
|
|||||||
.orderByDesc(OrderDetailDO::getId));
|
.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);
|
||||||
|
|
||||||
}
|
}
|
@ -1,14 +1,17 @@
|
|||||||
package cn.iocoder.yudao.module.member.dal.mysql.storeorderdetail;
|
package cn.iocoder.yudao.module.member.dal.mysql.storeorderdetail;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
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.controller.app.storeorder.vo.AppStoreOrderDetailVo;
|
||||||
import cn.iocoder.yudao.module.member.dal.dataobject.storeorderdetail.StoreOrderDetailDO;
|
import cn.iocoder.yudao.module.member.dal.dataobject.storeorderdetail.StoreOrderDetailDO;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
import cn.iocoder.yudao.module.member.controller.admin.storeorderdetail.vo.*;
|
import cn.iocoder.yudao.module.member.controller.admin.storeorderdetail.vo.*;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
import org.apache.ibatis.annotations.Select;
|
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}")
|
@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);
|
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);
|
||||||
}
|
}
|
@ -8,5 +8,5 @@ import java.util.List;
|
|||||||
public interface CashRechargeService {
|
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);
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ import cn.hutool.core.util.ObjectUtil;
|
|||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoCardVO;
|
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.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.money.MoneyDO;
|
||||||
import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO;
|
import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO;
|
||||||
import cn.iocoder.yudao.module.member.dal.dataobject.refund.RefundDO;
|
import cn.iocoder.yudao.module.member.dal.dataobject.refund.RefundDO;
|
||||||
@ -59,9 +60,10 @@ public class CashRechargeServiceImpl implements CashRechargeService {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@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<>();
|
List<Long> memberList = new ArrayList<>();
|
||||||
if (groupId != null) {
|
MemberGroupDO memberGroupDO = memberGroupMapper.selectById(groupId);
|
||||||
|
if (group) {
|
||||||
memberList.addAll(memberGroupMapper.getMemberList(groupId));
|
memberList.addAll(memberGroupMapper.getMemberList(groupId));
|
||||||
} else {
|
} else {
|
||||||
memberList.addAll(userIds);
|
memberList.addAll(userIds);
|
||||||
@ -113,6 +115,8 @@ public class CashRechargeServiceImpl implements CashRechargeService {
|
|||||||
add.setWxAmount(wxNewMoney);
|
add.setWxAmount(wxNewMoney);
|
||||||
add.setGiftAmount(giftNewMoney);
|
add.setGiftAmount(giftNewMoney);
|
||||||
add.setCarteenId(storeId);
|
add.setCarteenId(storeId);
|
||||||
|
add.setGroupId(groupId);
|
||||||
|
add.setGroupName(ObjectUtil.isNotEmpty(memberGroupDO)?memberGroupDO.getName():null);
|
||||||
addList.add(add);
|
addList.add(add);
|
||||||
|
|
||||||
//更新缓存
|
//更新缓存
|
||||||
|
@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
|
|||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
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.BusinessPageReqVO;
|
||||||
import cn.iocoder.yudao.module.member.controller.admin.business.vo.BusinessRespVO;
|
import cn.iocoder.yudao.module.member.controller.admin.business.vo.BusinessRespVO;
|
||||||
import cn.iocoder.yudao.module.member.controller.admin.business.vo.BusinessSaveReqVO;
|
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.LocalTime;
|
||||||
import java.time.YearMonth;
|
import java.time.YearMonth;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.time.temporal.ChronoUnit;
|
||||||
import java.time.temporal.TemporalAdjusters;
|
import java.time.temporal.TemporalAdjusters;
|
||||||
import java.time.temporal.WeekFields;
|
import java.time.temporal.WeekFields;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@ -406,7 +408,7 @@ public class BusinessServiceImpl implements BusinessService {
|
|||||||
|
|
||||||
List<BusinessDO> businessDOS = businessMapper.selectList(Wrappers.<BusinessDO>lambdaQuery()
|
List<BusinessDO> businessDOS = businessMapper.selectList(Wrappers.<BusinessDO>lambdaQuery()
|
||||||
.between(BusinessDO::getCreateTime,MemberTimeUtils.string2Time(turnoverVO.getStartTime()), MemberTimeUtils.string2Time(turnoverVO.getEndTime()))
|
.between(BusinessDO::getCreateTime,MemberTimeUtils.string2Time(turnoverVO.getStartTime()), MemberTimeUtils.string2Time(turnoverVO.getEndTime()))
|
||||||
.eq(BusinessDO::getCarteenId, turnoverVO.getCarteenId()));
|
.eq(BusinessDO::getCarteenId, turnoverVO.getStoreId()));
|
||||||
BusinessRespVO businessDO = getInitBusinessRespVO();
|
BusinessRespVO businessDO = getInitBusinessRespVO();
|
||||||
if(CollectionUtil.isNotEmpty(businessDOS)){
|
if(CollectionUtil.isNotEmpty(businessDOS)){
|
||||||
businessDO.setTurnover(businessDOS.stream().map(BusinessDO::getTurnover).reduce(BigDecimal.ZERO, BigDecimal::add));
|
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()
|
List<BusinessDO> businessDOS = businessMapper.selectList(Wrappers.<BusinessDO>lambdaQuery()
|
||||||
.between(BusinessDO::getCreateTime,startTime, endTime)
|
.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值
|
.filter(Objects::nonNull) // 过滤掉null值
|
||||||
.collect(Collectors.toMap(
|
.collect(Collectors.toMap(
|
||||||
vo -> vo.getCreateTime().toLocalDate().getDayOfMonth(),
|
vo->vo.getCreateTime().toLocalDate().atStartOfDay(),
|
||||||
vo -> vo,
|
vo -> vo,
|
||||||
(existing, replacement) -> existing
|
(existing, replacement) -> existing
|
||||||
));
|
));
|
||||||
// 创建一个Map来存储每天的数据
|
// 生成从 startDate 到 endDate 的完整日期列表
|
||||||
Map<Integer, BusinessRespVO> monthData = new LinkedHashMap<>();
|
List<LocalDateTime> completeDates = new ArrayList<>();
|
||||||
|
for (LocalDateTime date = startTime.toLocalDate().atStartOfDay(); !date.isAfter(endTime.toLocalDate().atStartOfDay()); date = date.plus(1, ChronoUnit.DAYS)) {
|
||||||
int start = startDate.getDayOfMonth();
|
completeDates.add(date);
|
||||||
|
|
||||||
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);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -192,7 +192,7 @@ public class CardServiceImpl implements CardService {
|
|||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void rechargeByAdmin(RechargeVO vo) {
|
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());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@ import cn.iocoder.yudao.module.member.dal.dataobject.orderdetail.OrderDetailDO;
|
|||||||
|
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 订单明细 Service 接口
|
* 订单明细 Service 接口
|
||||||
@ -59,7 +60,7 @@ public interface OrderDetailService {
|
|||||||
|
|
||||||
List<OrderDetailDO> selectListByOrderIds(List<Long> orderIds);
|
List<OrderDetailDO> selectListByOrderIds(List<Long> orderIds);
|
||||||
|
|
||||||
List<DishVO> selectDishSale(Long storeId);
|
List<DishVO> selectDishSale(Long storeId, String startTime, String endTime);
|
||||||
|
|
||||||
void insertOne(OrderDetailDO orderDetailDO);
|
void insertOne(OrderDetailDO orderDetailDO);
|
||||||
}
|
}
|
@ -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.async.MemberAsyncService;
|
||||||
import cn.iocoder.yudao.module.member.service.diningplates.DiningPlatesService;
|
import cn.iocoder.yudao.module.member.service.diningplates.DiningPlatesService;
|
||||||
import cn.iocoder.yudao.module.member.util.MemberConstants;
|
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.DishesApi;
|
||||||
import cn.iocoder.yudao.module.system.api.dish.dto.DishesRespDto;
|
import cn.iocoder.yudao.module.system.api.dish.dto.DishesRespDto;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
import org.springframework.data.redis.core.StringRedisTemplate;
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
@ -28,8 +30,11 @@ import javax.servlet.http.HttpServletRequest;
|
|||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.math.RoundingMode;
|
import java.math.RoundingMode;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.ORDER_ALREADY_COMPLETE;
|
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.ORDER_ALREADY_COMPLETE;
|
||||||
@ -154,13 +159,12 @@ public class OrderDetailServiceImpl implements OrderDetailService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<DishVO> selectDishSale(Long storeId) {
|
public List<DishVO> selectDishSale(Long storeId, String startTime, String endTime) {
|
||||||
LocalDate today = LocalDate.now();
|
LocalDateTime start = MemberTimeUtils.string2Time(startTime);
|
||||||
String time = today.format(DateTimeFormatter.ofPattern(MemberConstants.DATE_FORMAT));
|
LocalDateTime end = MemberTimeUtils.string2Time(endTime);
|
||||||
return orderDetailMapper.selectDishSale(time, storeId);
|
return orderDetailMapper.selectDishSale(storeId, start, end);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void insertOne(OrderDetailDO orderDetailDO) {
|
public void insertOne(OrderDetailDO orderDetailDO) {
|
||||||
orderDetailMapper.insert(orderDetailDO);
|
orderDetailMapper.insert(orderDetailDO);
|
||||||
|
@ -1,13 +1,16 @@
|
|||||||
package cn.iocoder.yudao.module.member.service.storebusiness;
|
package cn.iocoder.yudao.module.member.service.storebusiness;
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
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.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.StoreBusinessPageReqVO;
|
||||||
import cn.iocoder.yudao.module.member.controller.admin.storebusiness.vo.StoreBusinessSaveReqVO;
|
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.controller.app.business.vo.BusinessDataVO;
|
||||||
import cn.iocoder.yudao.module.member.dal.dataobject.storebusiness.StoreBusinessDO;
|
import cn.iocoder.yudao.module.member.dal.dataobject.storebusiness.StoreBusinessDO;
|
||||||
|
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 超市营业统计 Service 接口
|
* 超市营业统计 Service 接口
|
||||||
@ -63,6 +66,7 @@ public interface StoreBusinessService {
|
|||||||
BusinessDataVO getMonth(String time,Long carteenId);
|
BusinessDataVO getMonth(String time,Long carteenId);
|
||||||
|
|
||||||
|
|
||||||
|
BusinessRespVO getTurnover(TurnoverVO turnoverVO);
|
||||||
|
|
||||||
|
List<BusinessRespVO> getTurnoverList(TurnoverVO turnoverVO);
|
||||||
}
|
}
|
@ -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.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.BusinessRespVO;
|
||||||
import cn.iocoder.yudao.module.member.controller.admin.business.vo.StatisticsVo;
|
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.StoreBusinessPageReqVO;
|
||||||
import cn.iocoder.yudao.module.member.controller.admin.storebusiness.vo.StoreBusinessSaveReqVO;
|
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.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.dataobject.storebusiness.StoreBusinessDO;
|
||||||
import cn.iocoder.yudao.module.member.dal.mysql.storebusiness.StoreBusinessMapper;
|
import cn.iocoder.yudao.module.member.dal.mysql.storebusiness.StoreBusinessMapper;
|
||||||
import cn.iocoder.yudao.module.member.enums.CostTypeEnum;
|
import cn.iocoder.yudao.module.member.enums.CostTypeEnum;
|
||||||
@ -28,11 +30,9 @@ import java.time.LocalDateTime;
|
|||||||
import java.time.LocalTime;
|
import java.time.LocalTime;
|
||||||
import java.time.YearMonth;
|
import java.time.YearMonth;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.ArrayList;
|
import java.time.temporal.ChronoUnit;
|
||||||
import java.util.HashMap;
|
import java.time.temporal.TemporalAdjusters;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
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);
|
.setBreakfast(BigDecimal.ZERO).setLunch(BigDecimal.ZERO).setDinner(BigDecimal.ZERO).setPriceAvg(BigDecimal.ZERO);
|
||||||
return previousVO;
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@ -1,6 +1,8 @@
|
|||||||
package cn.iocoder.yudao.module.member.service.storeorderdetail;
|
package cn.iocoder.yudao.module.member.service.storeorderdetail;
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
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.StoreOrderDetailPageReqVO;
|
||||||
import cn.iocoder.yudao.module.member.controller.admin.storeorderdetail.vo.StoreOrderDetailSaveReqVO;
|
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.controller.app.storeorder.vo.AppStoreOrderDetailVo;
|
||||||
@ -61,4 +63,7 @@ public interface StoreOrderDetailService {
|
|||||||
void deleteByOrderNo(Integer orderId);
|
void deleteByOrderNo(Integer orderId);
|
||||||
|
|
||||||
List<StoreOrderDetailDO> getListByOrderId(Integer orderId);
|
List<StoreOrderDetailDO> getListByOrderId(Integer orderId);
|
||||||
|
|
||||||
|
List<GoodsVO> selectGoodsSale(Long storeId, String startTime, String endTime);
|
||||||
|
|
||||||
}
|
}
|
@ -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.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
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.StoreOrderDetailPageReqVO;
|
||||||
import cn.iocoder.yudao.module.member.controller.admin.storeorderdetail.vo.StoreOrderDetailSaveReqVO;
|
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.controller.app.storeorder.vo.AppStoreOrderDetailVo;
|
||||||
import cn.iocoder.yudao.module.member.dal.dataobject.storeorderdetail.StoreOrderDetailDO;
|
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.dal.mysql.storeorderdetail.StoreOrderDetailMapper;
|
||||||
|
import cn.iocoder.yudao.module.member.util.MemberTimeUtils;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -91,4 +95,11 @@ public class StoreOrderDetailServiceImpl implements StoreOrderDetailService {
|
|||||||
public List<StoreOrderDetailDO> getListByOrderId(Integer orderId) {
|
public List<StoreOrderDetailDO> getListByOrderId(Integer orderId) {
|
||||||
return storeOrderDetailMapper.selectList(Wrappers.<StoreOrderDetailDO>lambdaQuery().eq(StoreOrderDetailDO::getOrderId,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);
|
||||||
|
}
|
||||||
}
|
}
|
@ -265,4 +265,5 @@ public interface MemberUserService {
|
|||||||
|
|
||||||
List<MemberUserDO> getListByMobile(String mobiles);
|
List<MemberUserDO> getListByMobile(String mobiles);
|
||||||
|
|
||||||
|
void jsonCreate(String filePath,Long storeId);
|
||||||
}
|
}
|
||||||
|
@ -15,14 +15,12 @@ import cn.hutool.core.util.StrUtil;
|
|||||||
import cn.hutool.crypto.digest.DigestUtil;
|
import cn.hutool.crypto.digest.DigestUtil;
|
||||||
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
||||||
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
|
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.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
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.*;
|
||||||
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.app.user.vo.AppMemberUserResetPasswordReqVO;
|
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.AppMemberUserUpdateMobileByWeixinReqVO;
|
||||||
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdateMobileReqVO;
|
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.member.util.QRCodeWithJWTUtil;
|
||||||
import cn.iocoder.yudao.module.system.api.dishesnutrition.DishesNutritionApi;
|
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.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.SmsCodeApi;
|
||||||
import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO;
|
import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO;
|
||||||
import cn.iocoder.yudao.module.system.api.social.SocialClientApi;
|
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 cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
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 com.google.common.annotations.VisibleForTesting;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.data.redis.core.StringRedisTemplate;
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.transaction.support.TransactionSynchronization;
|
import org.springframework.transaction.support.TransactionSynchronization;
|
||||||
import org.springframework.transaction.support.TransactionSynchronizationManager;
|
import org.springframework.transaction.support.TransactionSynchronizationManager;
|
||||||
|
import org.springframework.util.ObjectUtils;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.validation.Valid;
|
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.BigDecimal;
|
||||||
import java.math.RoundingMode;
|
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.LocalDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.time.temporal.WeekFields;
|
import java.time.temporal.WeekFields;
|
||||||
@ -147,6 +161,8 @@ public class MemberUserServiceImpl implements MemberUserService {
|
|||||||
@Resource
|
@Resource
|
||||||
private StringRedisTemplate memberUserRedisTemplate;
|
private StringRedisTemplate memberUserRedisTemplate;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private FaceApi faceApi;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MemberUserDO getUserByMobile(String mobile) {
|
public MemberUserDO getUserByMobile(String mobile) {
|
||||||
@ -937,4 +953,97 @@ public class MemberUserServiceImpl implements MemberUserService {
|
|||||||
return memberUserMapper.selectList(new LambdaQueryWrapperX<MemberUserDO>()
|
return memberUserMapper.selectList(new LambdaQueryWrapperX<MemberUserDO>()
|
||||||
.likeIfPresent(MemberUserDO::getMobile, mobiles));
|
.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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -107,4 +107,12 @@ public class MemberTimeUtils {
|
|||||||
return LocalDateTime.parse(time, formatter);
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
<select id="getMemberByGroupId" resultType="cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO">
|
<select id="getMemberByGroupId" resultType="cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO">
|
||||||
select mu.*
|
select mu.*
|
||||||
from member_group_member mgm
|
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}
|
where mgm.group_id = #{groupId}
|
||||||
and mu.status = 0
|
and mu.status = 0
|
||||||
<if test="nickname != null and nickname !=''">
|
<if test="nickname != null and nickname !=''">
|
||||||
@ -35,7 +35,7 @@
|
|||||||
<select id="getByGroupId" resultType="cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO">
|
<select id="getByGroupId" resultType="cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO">
|
||||||
select mu.*
|
select mu.*
|
||||||
from member_group_member mgm
|
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}
|
where mgm.group_id = #{groupId}
|
||||||
and mu.status = 0
|
and mu.status = 0
|
||||||
</select>
|
</select>
|
||||||
@ -51,7 +51,7 @@
|
|||||||
<select id="memberCount" resultType="Long">
|
<select id="memberCount" resultType="Long">
|
||||||
select count(*)
|
select count(*)
|
||||||
from member_group_member mgm
|
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}
|
where mgm.group_id = #{groupId}
|
||||||
and mu.status = 0
|
and mu.status = 0
|
||||||
<if test="nickname != null and nickname !=''">
|
<if test="nickname != null and nickname !=''">
|
||||||
|
@ -9,16 +9,10 @@
|
|||||||
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
|
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
|
||||||
-->
|
-->
|
||||||
<select id="selectDishSale" resultType="cn.iocoder.yudao.module.member.controller.admin.screen.vo.DishVO">
|
<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
|
select od.dishes_name,sum(od.weight) as weight,sum(od.price) as price from member_order_detail od
|
||||||
from member_order_detail a
|
left join member_dish_order mo on od.order_id = mo.id
|
||||||
where date_format(a.create_time,'%Y-%m-%d') = #{time}
|
where store_id = #{storeId} and od.create_time between #{startTime} and #{endTime}
|
||||||
<if test="storeId != null">
|
group by dishes_name
|
||||||
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>
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
@ -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);
|
||||||
|
|
||||||
|
}
|
@ -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;
|
||||||
|
}
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
@ -130,6 +130,14 @@ public class AppDevuceController {
|
|||||||
public CommonResult<Long> getCarteenId() {
|
public CommonResult<Long> getCarteenId() {
|
||||||
return success(devuceService.getCarteenIdByIp());
|
return success(devuceService.getCarteenIdByIp());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/carteenNew")
|
||||||
|
@Operation(summary = "根据ip获取门店id")
|
||||||
|
public CommonResult<Map<String,Object>> getCarteenIdNew() {
|
||||||
|
return success(devuceService.getCarteenIdByIpNew());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@GetMapping("/nutrition")
|
@GetMapping("/nutrition")
|
||||||
@Operation(summary = "获取菜品营养成分")
|
@Operation(summary = "获取菜品营养成分")
|
||||||
public CommonResult<List<Map>> getDishesNutrition(@RequestParam("dishesId") Long dishesId,@RequestParam(value = "cId",required = false) String cId) {
|
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);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@GetMapping("/alive")
|
@GetMapping("/alive")
|
||||||
@Operation(summary = "在线检测")
|
@Operation(summary = "在线检测")
|
||||||
public void alive() {
|
public void alive() {
|
||||||
|
@ -77,6 +77,7 @@ public class FaceController {
|
|||||||
|
|
||||||
@GetMapping("/getAll")
|
@GetMapping("/getAll")
|
||||||
public CommonResult<Page<UserFace>> getAll(QueryDto dto) {
|
public CommonResult<Page<UserFace>> getAll(QueryDto dto) {
|
||||||
|
|
||||||
return CommonResult.success(faceService.getList(dto));
|
return CommonResult.success(faceService.getList(dto));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@ public class UserFace {
|
|||||||
private String name;
|
private String name;
|
||||||
private String phone;
|
private String phone;
|
||||||
private LocalDateTime createTime;
|
private LocalDateTime createTime;
|
||||||
|
private Long carteenId;
|
||||||
|
|
||||||
public UserFace(Long userId, Long sysUserId, String phone, String name, String url) {
|
public UserFace(Long userId, Long sysUserId, String phone, String name, String url) {
|
||||||
this.phone = phone;
|
this.phone = phone;
|
||||||
|
@ -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.controller.admin.deviceinfo.vo.DeviceInfoSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.cashregisterinfo.CashRegisterInfoDO;
|
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.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.dataobject.facedeviceinfo.FaceDeviceInfoDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.cashregisterinfo.CashRegisterInfoMapper;
|
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.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.dal.mysql.facedeviceinfo.FaceDeviceInfoMapper;
|
||||||
import cn.iocoder.yudao.module.system.enums.ErrorCodeConstants;
|
import cn.iocoder.yudao.module.system.enums.ErrorCodeConstants;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.data.redis.core.StringRedisTemplate;
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -52,6 +55,9 @@ public class DeviceInfoServiceImpl implements DeviceInfoService {
|
|||||||
@Resource
|
@Resource
|
||||||
private CashRegisterInfoMapper cashRegisterInfoMapper;
|
private CashRegisterInfoMapper cashRegisterInfoMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private DevuceMapper devuceMapper;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long createDeviceInfo(DeviceInfoSaveReqVO createReqVO) {
|
public Long createDeviceInfo(DeviceInfoSaveReqVO createReqVO) {
|
||||||
// 插入
|
// 插入
|
||||||
@ -78,6 +84,9 @@ public class DeviceInfoServiceImpl implements DeviceInfoService {
|
|||||||
// 更新
|
// 更新
|
||||||
DeviceInfoDO updateObj = BeanUtils.toBean(updateReqVO, DeviceInfoDO.class);
|
DeviceInfoDO updateObj = BeanUtils.toBean(updateReqVO, DeviceInfoDO.class);
|
||||||
deviceInfoMapper.updateById(updateObj);
|
deviceInfoMapper.updateById(updateObj);
|
||||||
|
//清空设备绑定菜品
|
||||||
|
devuceMapper.update(Wrappers.<DevuceDO>lambdaUpdate().eq(DevuceDO::getDeviceSn,updateObj.getDeviceIp())
|
||||||
|
.eq(DevuceDO::getBind,true).set(DevuceDO::getDishesId,null));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -58,39 +58,50 @@ public interface DevuceService {
|
|||||||
* @return 设备分页
|
* @return 设备分页
|
||||||
*/
|
*/
|
||||||
PageResult<DevuceDO> getDevucePage(DevucePageReqVO pageReqVO);
|
PageResult<DevuceDO> getDevucePage(DevucePageReqVO pageReqVO);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @return
|
||||||
* @Description: 设备绑定菜品,或计算菜品重量与剩余重量
|
* @Description: 设备绑定菜品,或计算菜品重量与剩余重量
|
||||||
* @Author: qjq
|
* @Author: qjq
|
||||||
* @Date: 2024/4/10 下午1:40
|
* @Date: 2024/4/10 下午1:40
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
DishesDO getDevuceList();
|
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: 获取菜品分类
|
* @Description: 获取菜品分类
|
||||||
* @Author: qjq
|
* @Author: qjq
|
||||||
* @Date: 2024/4/9 上午10:33
|
* @Date: 2024/4/9 上午10:33
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
List<DishesTypeDO> getDishesTypeList(Long carteenId);
|
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: 获取菜品营养与菜品名称
|
* @Description: 获取菜品营养与菜品名称
|
||||||
* @Author: qjq
|
* @Author: qjq
|
||||||
* @Date: 2024/4/19 下午2:44
|
* @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);
|
void updateWeight(DevuceReqVO updateReqVO);
|
||||||
|
|
||||||
|
@ -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.dishesnutrition.DishesNutritionMapper;
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.dishestype.DishesTypeMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.dishestype.DishesTypeMapper;
|
||||||
import cn.iocoder.yudao.module.system.enums.ErrorCodeConstants;
|
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.query.LambdaQueryWrapper;
|
||||||
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;
|
||||||
@ -63,6 +64,8 @@ public class DevuceServiceImpl implements DevuceService {
|
|||||||
private DeviceInfoMapper deviceInfoMapper;
|
private DeviceInfoMapper deviceInfoMapper;
|
||||||
@Resource
|
@Resource
|
||||||
private DishesNutritionMapper dishesNutritionMapper;
|
private DishesNutritionMapper dishesNutritionMapper;
|
||||||
|
@Resource
|
||||||
|
private CarteenService carteenService;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -275,9 +278,6 @@ public class DevuceServiceImpl implements DevuceService {
|
|||||||
return maps;
|
return maps;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return
|
* @return
|
||||||
* @Description: 根据ip获取门店id
|
* @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
|
@Override
|
||||||
public void updateWeight(DevuceReqVO updateReqVO) {
|
public void updateWeight(DevuceReqVO updateReqVO) {
|
||||||
String hearder = this.getHearder();
|
String hearder = this.getHearder();
|
||||||
|
@ -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.controller.app.face.dto.QueryDto;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.face.UserFace;
|
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.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.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
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.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@ -20,7 +24,10 @@ public class FaceService extends ServiceImpl<FaceMapper, UserFace> implements IS
|
|||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private FaceMapper mapper;
|
private FaceMapper mapper;
|
||||||
|
@Resource
|
||||||
|
private HttpServletRequest httpServletRequest;
|
||||||
|
@Resource
|
||||||
|
private FaceDeviceInfoService faceDeviceInfoService;
|
||||||
//注册人脸
|
//注册人脸
|
||||||
public void faceAdd(UserFace user) {
|
public void faceAdd(UserFace user) {
|
||||||
mapper.add(user);
|
mapper.add(user);
|
||||||
@ -35,9 +42,14 @@ public class FaceService extends ServiceImpl<FaceMapper, UserFace> implements IS
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Page<UserFace> getList(QueryDto dto) {
|
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());
|
Page<UserFace> page = new Page<>(dto.getPageNum(), dto.getPageSize());
|
||||||
LambdaQueryWrapper<UserFace> wrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<UserFace> wrapper = new LambdaQueryWrapper<>();
|
||||||
wrapper.like(StrUtil.isNotBlank(dto.getPhone()), UserFace::getPhone, dto.getPhone());
|
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);
|
wrapper.orderByDesc(UserFace::getCreateTime);
|
||||||
return mapper.selectPage(page, wrapper);
|
return mapper.selectPage(page, wrapper);
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ spring:
|
|||||||
autoconfigure:
|
autoconfigure:
|
||||||
exclude:
|
exclude:
|
||||||
- com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
|
- 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.config.AdminServerAutoConfiguration # 禁用 Spring Boot Admin 的 Server 的自动配置
|
||||||
- de.codecentric.boot.admin.server.ui.config.AdminServerUiAutoConfiguration # 禁用 Spring Boot Admin 的 Server UI 的自动配置
|
- de.codecentric.boot.admin.server.ui.config.AdminServerUiAutoConfiguration # 禁用 Spring Boot Admin 的 Server UI 的自动配置
|
||||||
- de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration # 禁用 Spring Boot Admin 的 Client 的自动配置
|
- de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration # 禁用 Spring Boot Admin 的 Client 的自动配置
|
||||||
|
Reference in New Issue
Block a user