|
|
|
@ -65,6 +65,7 @@ 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.sun.org.apache.bcel.internal.generic.NEW;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
@ -255,13 +256,13 @@ public class MemberUserServiceImpl implements MemberUserService {
|
|
|
|
|
validateMobileUnique(userId, reqVO.getMobile());
|
|
|
|
|
|
|
|
|
|
//修改人脸手机号
|
|
|
|
|
if (StrUtil.isNotBlank(reqVO.getMobile())){
|
|
|
|
|
memberUserMapper.updateFace(userId,reqVO.getMobile(),reqVO.getNickname());
|
|
|
|
|
if (StrUtil.isNotBlank(reqVO.getMobile())) {
|
|
|
|
|
memberUserMapper.updateFace(userId, reqVO.getMobile(), reqVO.getNickname());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MemberUserDO updateObj = BeanUtils.toBean(reqVO, MemberUserDO.class).setId(userId);
|
|
|
|
|
memberUserMapper.updateById(updateObj);
|
|
|
|
|
userExpandService.updateUserExpandByuserId(userId,reqVO);
|
|
|
|
|
userExpandService.updateUserExpandByuserId(userId, reqVO);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@ -358,23 +359,23 @@ public class MemberUserServiceImpl implements MemberUserService {
|
|
|
|
|
validateMobileUnique(updateReqVO.getId(), updateReqVO.getMobile());
|
|
|
|
|
|
|
|
|
|
//修改人脸手机号
|
|
|
|
|
if (StrUtil.isNotBlank(updateReqVO.getMobile())){
|
|
|
|
|
memberUserMapper.updateFace(updateReqVO.getId(),updateReqVO.getMobile(),updateReqVO.getNickname());
|
|
|
|
|
if (StrUtil.isNotBlank(updateReqVO.getMobile())) {
|
|
|
|
|
memberUserMapper.updateFace(updateReqVO.getId(), updateReqVO.getMobile(), updateReqVO.getNickname());
|
|
|
|
|
}
|
|
|
|
|
// 校验卡号
|
|
|
|
|
if(StringUtils.isNotBlank(updateReqVO.getCardId())){
|
|
|
|
|
if (StringUtils.isNotBlank(updateReqVO.getCardId())) {
|
|
|
|
|
adminCardService.checkCard(updateReqVO.getCardId());
|
|
|
|
|
List<MemberUserDO> memberUserDOS = memberUserMapper.selectList(Wrappers.<MemberUserDO>lambdaQuery()
|
|
|
|
|
.eq(MemberUserDO::getCardId, updateReqVO.getCardId())
|
|
|
|
|
.ne(MemberUserDO::getId,updateReqVO.getId()));
|
|
|
|
|
if(memberUserDOS.size()>0){
|
|
|
|
|
.ne(MemberUserDO::getId, updateReqVO.getId()));
|
|
|
|
|
if (memberUserDOS.size() > 0) {
|
|
|
|
|
throw exception(CARD_ALREADY_BIND);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 更新
|
|
|
|
|
MemberUserDO updateObj = MemberUserConvert.INSTANCE.convert(updateReqVO);
|
|
|
|
|
updateObj.setCardId(StringUtils.isBlank(updateReqVO.getCardId())?"":updateReqVO.getCardId());
|
|
|
|
|
updateObj.setCardId(StringUtils.isBlank(updateReqVO.getCardId()) ? "" : updateReqVO.getCardId());
|
|
|
|
|
memberUserMapper.updateById(updateObj);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -410,7 +411,7 @@ public class MemberUserServiceImpl implements MemberUserService {
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public PageResult<MemberUserDO> getUserPage(MemberUserPageReqVO pageReqVO) {
|
|
|
|
|
if(pageReqVO.getGroupId()!=null){
|
|
|
|
|
if (pageReqVO.getGroupId() != null) {
|
|
|
|
|
pageReqVO.setUserIds(memberGroupMapper.getMemberList(pageReqVO.getGroupId()));
|
|
|
|
|
}
|
|
|
|
|
return memberUserMapper.selectPage(pageReqVO);
|
|
|
|
@ -455,7 +456,7 @@ public class MemberUserServiceImpl implements MemberUserService {
|
|
|
|
|
public Boolean bindCard(String cardId) {
|
|
|
|
|
adminCardService.checkCard(cardId);
|
|
|
|
|
List<MemberUserDO> memberUserDOS = memberUserMapper.selectList(Wrappers.<MemberUserDO>lambdaQuery().eq(MemberUserDO::getCardId, cardId));
|
|
|
|
|
if(memberUserDOS.size()>0){
|
|
|
|
|
if (memberUserDOS.size() > 0) {
|
|
|
|
|
throw exception(CARD_ALREADY_BIND);
|
|
|
|
|
}
|
|
|
|
|
MemberUserDO memberUserDO = memberUserMapper.selectById(SecurityFrameworkUtils.getLoginUserId());
|
|
|
|
@ -481,23 +482,23 @@ public class MemberUserServiceImpl implements MemberUserService {
|
|
|
|
|
List<Long> moIds = new ArrayList<>();
|
|
|
|
|
List<Long> miIds = new ArrayList<>();
|
|
|
|
|
List<Long> niIds = new ArrayList<>();
|
|
|
|
|
for (DishOrderDO orderDO : dishOrderDOS){
|
|
|
|
|
for (DishOrderDO orderDO : dishOrderDOS) {
|
|
|
|
|
int hour = orderDO.getCreateTime().getHour();
|
|
|
|
|
//早
|
|
|
|
|
if(TimePeriodEnum.MORNING.getStartInt()<=hour && hour<=TimePeriodEnum.MORNING.getEndInt()){
|
|
|
|
|
if (TimePeriodEnum.MORNING.getStartInt() <= hour && hour <= TimePeriodEnum.MORNING.getEndInt()) {
|
|
|
|
|
moIds.add(orderDO.getId());
|
|
|
|
|
} else if (TimePeriodEnum.MIDDAY.getStartInt()<=hour && hour<=TimePeriodEnum.MIDDAY.getEndInt()){
|
|
|
|
|
} else if (TimePeriodEnum.MIDDAY.getStartInt() <= hour && hour <= TimePeriodEnum.MIDDAY.getEndInt()) {
|
|
|
|
|
miIds.add(orderDO.getId());
|
|
|
|
|
}else{
|
|
|
|
|
} else {
|
|
|
|
|
niIds.add(orderDO.getId());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(CollectionUtil.isNotEmpty(moIds)){
|
|
|
|
|
if (CollectionUtil.isNotEmpty(moIds)) {
|
|
|
|
|
List<OrderDetailDO> orderDetailDOS = orderDetailService.selectListByOrderIds(moIds);
|
|
|
|
|
AppNutritionDayVo appNutritionDayVo = new AppNutritionDayVo();
|
|
|
|
|
BigDecimal reduce = orderDetailDOS.stream()
|
|
|
|
|
.filter(f-> ObjectUtil.isNotEmpty(f.getHeat()))
|
|
|
|
|
.map(m->BigDecimal.valueOf(m.getHeat()))
|
|
|
|
|
.filter(f -> ObjectUtil.isNotEmpty(f.getHeat()))
|
|
|
|
|
.map(m -> BigDecimal.valueOf(m.getHeat()))
|
|
|
|
|
.reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
|
|
|
|
|
appNutritionDayVo.setIntake(reduce);
|
|
|
|
|
appNutritionDayVo.setProposeIntake(MemberConstants.PROPOSE_MORNING);
|
|
|
|
@ -505,12 +506,12 @@ public class MemberUserServiceImpl implements MemberUserService {
|
|
|
|
|
appNutritionDayVo.setDetailList(orderDetailDOS);
|
|
|
|
|
result.add(appNutritionDayVo);
|
|
|
|
|
}
|
|
|
|
|
if(CollectionUtil.isNotEmpty(miIds)){
|
|
|
|
|
if (CollectionUtil.isNotEmpty(miIds)) {
|
|
|
|
|
List<OrderDetailDO> orderDetailDOS = orderDetailService.selectListByOrderIds(miIds);
|
|
|
|
|
AppNutritionDayVo appNutritionDayVo = new AppNutritionDayVo();
|
|
|
|
|
BigDecimal reduce = orderDetailDOS.stream()
|
|
|
|
|
.filter(f-> ObjectUtil.isNotEmpty(f.getHeat()))
|
|
|
|
|
.map(m->BigDecimal.valueOf(m.getHeat()))
|
|
|
|
|
.filter(f -> ObjectUtil.isNotEmpty(f.getHeat()))
|
|
|
|
|
.map(m -> BigDecimal.valueOf(m.getHeat()))
|
|
|
|
|
.reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
|
|
|
|
|
appNutritionDayVo.setIntake(reduce);
|
|
|
|
|
appNutritionDayVo.setProposeIntake(MemberConstants.PROPOSE_NOON);
|
|
|
|
@ -518,12 +519,12 @@ public class MemberUserServiceImpl implements MemberUserService {
|
|
|
|
|
appNutritionDayVo.setDetailList(orderDetailDOS);
|
|
|
|
|
result.add(appNutritionDayVo);
|
|
|
|
|
}
|
|
|
|
|
if(CollectionUtil.isNotEmpty(niIds)){
|
|
|
|
|
if (CollectionUtil.isNotEmpty(niIds)) {
|
|
|
|
|
List<OrderDetailDO> orderDetailDOS = orderDetailService.selectListByOrderIds(niIds);
|
|
|
|
|
AppNutritionDayVo appNutritionDayVo = new AppNutritionDayVo();
|
|
|
|
|
BigDecimal reduce = orderDetailDOS.stream()
|
|
|
|
|
.filter(f-> ObjectUtil.isNotEmpty(f.getHeat()))
|
|
|
|
|
.map(m->BigDecimal.valueOf(m.getHeat()))
|
|
|
|
|
.filter(f -> ObjectUtil.isNotEmpty(f.getHeat()))
|
|
|
|
|
.map(m -> BigDecimal.valueOf(m.getHeat()))
|
|
|
|
|
.reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
|
|
|
|
|
appNutritionDayVo.setIntake(reduce);
|
|
|
|
|
appNutritionDayVo.setProposeIntake(MemberConstants.PROPOSE_NIGHT);
|
|
|
|
@ -558,7 +559,7 @@ public class MemberUserServiceImpl implements MemberUserService {
|
|
|
|
|
if (CollectionUtil.isNotEmpty(ids)) {
|
|
|
|
|
List<OrderDetailDO> orderDetailDOS = orderDetailService.selectListByOrderIds(ids);
|
|
|
|
|
mondayVO.setDetailList(orderDetailDOS);
|
|
|
|
|
mondayVO.setIntake(orderDetailDOS.stream().filter(vo->vo!=null && vo.getHeat()!=null).map(OrderDetailDO::getHeat).reduce(0d, Double::sum));
|
|
|
|
|
mondayVO.setIntake(orderDetailDOS.stream().filter(vo -> vo != null && vo.getHeat() != null).map(OrderDetailDO::getHeat).reduce(0d, Double::sum));
|
|
|
|
|
}
|
|
|
|
|
result.add(mondayVO);
|
|
|
|
|
}
|
|
|
|
@ -575,20 +576,21 @@ public class MemberUserServiceImpl implements MemberUserService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public List<Map> getUserHeat(Long userId, LocalDateTime startDate,LocalDateTime endDate,Long orderId) {
|
|
|
|
|
if(ObjectUtil.isNotEmpty(orderId)){
|
|
|
|
|
return suggestion(userId,null,null,Boolean.FALSE,orderId);
|
|
|
|
|
}else{
|
|
|
|
|
return suggestion(userId,startDate,endDate,Boolean.TRUE,null);
|
|
|
|
|
public List<Map> getUserHeat(Long userId, LocalDateTime startDate, LocalDateTime endDate, Long orderId) {
|
|
|
|
|
if (ObjectUtil.isNotEmpty(orderId)) {
|
|
|
|
|
return suggestion(userId, null, null, Boolean.FALSE, orderId);
|
|
|
|
|
} else {
|
|
|
|
|
return suggestion(userId, startDate, endDate, Boolean.TRUE, null);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public List<Map> suggestion(Long userId,LocalDateTime startDate,LocalDateTime endDate,Boolean bol,Long orderId) {
|
|
|
|
|
|
|
|
|
|
public List<Map> suggestion(Long userId, LocalDateTime startDate, LocalDateTime endDate, Boolean bol, Long orderId) {
|
|
|
|
|
//查询今天的订单
|
|
|
|
|
List<Long> collect= new ArrayList<>();
|
|
|
|
|
if(ObjectUtil.isNotEmpty(orderId)){
|
|
|
|
|
collect= Collections.singletonList(orderId);
|
|
|
|
|
List<Long> collect = new ArrayList<>();
|
|
|
|
|
if (ObjectUtil.isNotEmpty(orderId)) {
|
|
|
|
|
collect = Collections.singletonList(orderId);
|
|
|
|
|
}
|
|
|
|
|
if(ObjectUtil.isNotEmpty(userId)){
|
|
|
|
|
if (ObjectUtil.isNotEmpty(userId)) {
|
|
|
|
|
collect = dishOrderMapper.selectList(new LambdaQueryWrapperX<DishOrderDO>()
|
|
|
|
|
.eqIfPresent(DishOrderDO::getUserId, userId)
|
|
|
|
|
.eq(DishOrderDO::getOrderStatus, DishOrderDO.COMPLETE)
|
|
|
|
@ -597,25 +599,25 @@ public class MemberUserServiceImpl implements MemberUserService {
|
|
|
|
|
.map(DishOrderDO::getId)
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
}
|
|
|
|
|
if(ObjectUtil.isEmpty(collect)){
|
|
|
|
|
if (ObjectUtil.isEmpty(collect)) {
|
|
|
|
|
return Collections.emptyList();
|
|
|
|
|
}
|
|
|
|
|
//获取今天购买的菜品id
|
|
|
|
|
List<OrderDetailDO> orderDetailDOS = orderDetailMapper.selectList(new LambdaQueryWrapperX<OrderDetailDO>()
|
|
|
|
|
.inIfPresent(OrderDetailDO::getOrderId, collect));
|
|
|
|
|
if(ObjectUtil.isEmpty(orderDetailDOS)){
|
|
|
|
|
if (ObjectUtil.isEmpty(orderDetailDOS)) {
|
|
|
|
|
return Collections.emptyList();
|
|
|
|
|
}
|
|
|
|
|
List<OrderDetailDO> collect3 = orderDetailDOS.stream().filter(a -> a.getDishesId() != null).collect(Collectors.toList());
|
|
|
|
|
if(ObjectUtil.isEmpty(collect3)){
|
|
|
|
|
if (ObjectUtil.isEmpty(collect3)) {
|
|
|
|
|
return Collections.emptyList();
|
|
|
|
|
}
|
|
|
|
|
Map<Long, List<OrderDetailDO>> collect2 = collect3.stream().collect(Collectors.groupingBy(OrderDetailDO::getDishesId));
|
|
|
|
|
//热量求和统计方便 科学膳食小建议
|
|
|
|
|
double sum = orderDetailDOS
|
|
|
|
|
.stream().filter(vo->vo!=null && vo.getHeat()!=null)
|
|
|
|
|
.stream().filter(vo -> vo != null && vo.getHeat() != null)
|
|
|
|
|
.mapToDouble(OrderDetailDO::getHeat).sum();
|
|
|
|
|
List<DishesNutritionRespDTO> list=new ArrayList<>();
|
|
|
|
|
List<DishesNutritionRespDTO> list = new ArrayList<>();
|
|
|
|
|
for (Map.Entry<Long, List<OrderDetailDO>> entry1 : collect2.entrySet()) {
|
|
|
|
|
List<OrderDetailDO> value1 = entry1.getValue();
|
|
|
|
|
//获取菜品id
|
|
|
|
@ -623,15 +625,15 @@ public class MemberUserServiceImpl implements MemberUserService {
|
|
|
|
|
.map(OrderDetailDO::getDishesId)
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
//获取菜品营养信息
|
|
|
|
|
List<DishesNutritionRespDTO> dishesList=new ArrayList<>();
|
|
|
|
|
collect1.forEach(x-> {
|
|
|
|
|
List<DishesNutritionRespDTO> dishesList = new ArrayList<>();
|
|
|
|
|
collect1.forEach(x -> {
|
|
|
|
|
List<DishesNutritionRespDTO> dishesList1 = dishesNutritionApil.getDishesList(x);
|
|
|
|
|
if ( CollectionUtil.isNotEmpty(dishesList1)){
|
|
|
|
|
if (CollectionUtil.isNotEmpty(dishesList1)) {
|
|
|
|
|
dishesList.addAll(dishesList1);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
//根据营养名称进行分组
|
|
|
|
|
if(ObjUtil.isNotEmpty(dishesList)){
|
|
|
|
|
if (ObjUtil.isNotEmpty(dishesList)) {
|
|
|
|
|
BigDecimal reduce = value1.stream()
|
|
|
|
|
.map(OrderDetailDO::getWeight)
|
|
|
|
|
.filter(ObjectUtil::isNotEmpty)
|
|
|
|
@ -649,14 +651,14 @@ public class MemberUserServiceImpl implements MemberUserService {
|
|
|
|
|
//转map
|
|
|
|
|
List<Map> maps = BeanUtil.copyToList(list, Map.class);
|
|
|
|
|
//判断是否需要 科学膳食小建议
|
|
|
|
|
if(Boolean.TRUE.equals(bol)){
|
|
|
|
|
if (Boolean.TRUE.equals(bol)) {
|
|
|
|
|
Map<String, String> build = MapUtil.builder(new HashMap<String, String>()).build();
|
|
|
|
|
if(sum<=MemberConstants.STANDARDS){
|
|
|
|
|
build.put("prompt",MemberConstants.INSUFFICIENT_PROPOSAL);
|
|
|
|
|
}else if(sum<MemberConstants.EXCEED_STANDARDS){
|
|
|
|
|
build.put("prompt",MemberConstants.STANDARDS_PROPOSAL);
|
|
|
|
|
}else{
|
|
|
|
|
build.put("prompt",MemberConstants.EXCEED_PROPOSAL);
|
|
|
|
|
if (sum <= MemberConstants.STANDARDS) {
|
|
|
|
|
build.put("prompt", MemberConstants.INSUFFICIENT_PROPOSAL);
|
|
|
|
|
} else if (sum < MemberConstants.EXCEED_STANDARDS) {
|
|
|
|
|
build.put("prompt", MemberConstants.STANDARDS_PROPOSAL);
|
|
|
|
|
} else {
|
|
|
|
|
build.put("prompt", MemberConstants.EXCEED_PROPOSAL);
|
|
|
|
|
}
|
|
|
|
|
maps.add(build);
|
|
|
|
|
}
|
|
|
|
@ -678,17 +680,17 @@ public class MemberUserServiceImpl implements MemberUserService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @return
|
|
|
|
|
* @Description: 根据营养名称进行分组计算值
|
|
|
|
|
* @Author: qjq
|
|
|
|
|
* @Date: 2024/4/12 下午2:44
|
|
|
|
|
* @return
|
|
|
|
|
* @Date: 2024/4/12 下午2:44
|
|
|
|
|
*/
|
|
|
|
|
public List<DishesNutritionRespDTO> groupingBy(List<DishesNutritionRespDTO> list){
|
|
|
|
|
List<DishesNutritionRespDTO> list1=new ArrayList<>();
|
|
|
|
|
public List<DishesNutritionRespDTO> groupingBy(List<DishesNutritionRespDTO> list) {
|
|
|
|
|
List<DishesNutritionRespDTO> list1 = new ArrayList<>();
|
|
|
|
|
Map<String, List<DishesNutritionRespDTO>> collect = list.stream()
|
|
|
|
|
.collect(Collectors.groupingBy(DishesNutritionRespDTO::getNutritionName));
|
|
|
|
|
for (Map.Entry<String, List<DishesNutritionRespDTO>> entry : collect.entrySet()) {
|
|
|
|
|
DishesNutritionRespDTO dto=new DishesNutritionRespDTO();
|
|
|
|
|
DishesNutritionRespDTO dto = new DishesNutritionRespDTO();
|
|
|
|
|
BigDecimal reduce = entry.getValue()
|
|
|
|
|
.stream()
|
|
|
|
|
.filter(f -> ObjectUtil.isNotEmpty(f.getNutritionNumber()))
|
|
|
|
@ -701,39 +703,40 @@ public class MemberUserServiceImpl implements MemberUserService {
|
|
|
|
|
}
|
|
|
|
|
return list1;
|
|
|
|
|
}
|
|
|
|
|
public void computePercentage(List<DishesNutritionRespDTO> list){
|
|
|
|
|
|
|
|
|
|
public void computePercentage(List<DishesNutritionRespDTO> list) {
|
|
|
|
|
//获取所有营养数量
|
|
|
|
|
BigDecimal sum = list.stream()
|
|
|
|
|
.filter(f-> ObjectUtil.isNotEmpty(f.getNutritionNumber()))
|
|
|
|
|
.map(m-> new BigDecimal(m.getNutritionNumber()))
|
|
|
|
|
.reduce(BigDecimal.ZERO,BigDecimal::add);
|
|
|
|
|
.filter(f -> ObjectUtil.isNotEmpty(f.getNutritionNumber()))
|
|
|
|
|
.map(m -> new BigDecimal(m.getNutritionNumber()))
|
|
|
|
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
|
BigDecimal bigDecimal = new BigDecimal(0);
|
|
|
|
|
for (int i = 0; i < list.size(); i++) {
|
|
|
|
|
if(i < (list.size()-1)){
|
|
|
|
|
if (i < (list.size() - 1)) {
|
|
|
|
|
DishesNutritionRespDTO dto = list.get(i);
|
|
|
|
|
BigDecimal bigDecimal1 = new BigDecimal(dto.getNutritionNumber());
|
|
|
|
|
BigDecimal div = NumberUtil.div(bigDecimal1, sum, 4);
|
|
|
|
|
BigDecimal mul = NumberUtil.mul(div, 100);
|
|
|
|
|
bigDecimal=bigDecimal.add(mul);
|
|
|
|
|
list.get(i).setNutritionPer(mul.floatValue()+"%");
|
|
|
|
|
}else{
|
|
|
|
|
list.get(i).setNutritionPer(NumberUtil.sub(100,bigDecimal).doubleValue()+"%");
|
|
|
|
|
bigDecimal = bigDecimal.add(mul);
|
|
|
|
|
list.get(i).setNutritionPer(mul.floatValue() + "%");
|
|
|
|
|
} else {
|
|
|
|
|
list.get(i).setNutritionPer(NumberUtil.sub(100, bigDecimal).doubleValue() + "%");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Boolean bindFace(Long userId,Long faceId) {
|
|
|
|
|
public Boolean bindFace(Long userId, Long faceId) {
|
|
|
|
|
|
|
|
|
|
MemberUserDO memberUserDO = memberUserMapper.selectById(userId);
|
|
|
|
|
if(memberUserDO == null){
|
|
|
|
|
if (memberUserDO == null) {
|
|
|
|
|
throw exception(USER_NOT_EXISTS);
|
|
|
|
|
}
|
|
|
|
|
// if(memberUserDO.getFaceId()!=null){
|
|
|
|
|
// memberUserMapper.deleteFace(memberUserDO.getFaceId());
|
|
|
|
|
// }
|
|
|
|
|
memberUserDO.setFaceId(faceId);
|
|
|
|
|
return memberUserMapper.updateById(memberUserDO)>0;
|
|
|
|
|
return memberUserMapper.updateById(memberUserDO) > 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -745,23 +748,23 @@ public class MemberUserServiceImpl implements MemberUserService {
|
|
|
|
|
* @Date: 2024/4/10 下午2:30
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public Map<String,String> getDishesList(String platesNum) {
|
|
|
|
|
public Map<String, String> getDishesList(String platesNum) {
|
|
|
|
|
DiningPlatesDO diningPlatesDO = diningPlatesMapper.selectOne(new LambdaQueryWrapperX<DiningPlatesDO>()
|
|
|
|
|
.eq(DiningPlatesDO::getDiningPlatesNum,platesNum));
|
|
|
|
|
.eq(DiningPlatesDO::getDiningPlatesNum, platesNum));
|
|
|
|
|
//获取用户id
|
|
|
|
|
Long userId = diningPlatesDO.getUserId();
|
|
|
|
|
//获取用户名称
|
|
|
|
|
MemberUserDO memberUserDO = memberUserMapper.selectById(userId);
|
|
|
|
|
BigDecimal moneyByUserId = cardService.getMoneyByUserId(userId,diningPlatesDO.getStoreId());
|
|
|
|
|
BigDecimal moneyByUserId = cardService.getMoneyByUserId(userId, diningPlatesDO.getStoreId());
|
|
|
|
|
Map<String, String> map = new HashMap<>();
|
|
|
|
|
map.put("name",memberUserDO.getName());
|
|
|
|
|
map.put("name", memberUserDO.getName());
|
|
|
|
|
map.put("money", String.valueOf(moneyByUserId));
|
|
|
|
|
return map;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public MemberUserDO create(MemberUserAddVO addVO) {
|
|
|
|
|
if(StringUtils.isNotBlank(addVO.getCardId())){
|
|
|
|
|
if (StringUtils.isNotBlank(addVO.getCardId())) {
|
|
|
|
|
adminCardService.checkCard(addVO.getCardId());
|
|
|
|
|
}
|
|
|
|
|
// 用户已经存在
|
|
|
|
@ -774,7 +777,7 @@ public class MemberUserServiceImpl implements MemberUserService {
|
|
|
|
|
String password = IdUtil.fastSimpleUUID();
|
|
|
|
|
// 插入用户
|
|
|
|
|
MemberUserDO user = new MemberUserDO();
|
|
|
|
|
BeanUtil.copyProperties(addVO,user);
|
|
|
|
|
BeanUtil.copyProperties(addVO, user);
|
|
|
|
|
user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启
|
|
|
|
|
user.setPassword(encodePassword(password)); // 加密密码
|
|
|
|
|
memberUserMapper.insert(user);
|
|
|
|
@ -788,32 +791,32 @@ public class MemberUserServiceImpl implements MemberUserService {
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public String getCardId(Long userId) {
|
|
|
|
|
if(userId == null){
|
|
|
|
|
userId = getLoginUserId();
|
|
|
|
|
if (userId == null) {
|
|
|
|
|
userId = getLoginUserId();
|
|
|
|
|
}
|
|
|
|
|
MemberUserDO memberUserDO = memberUserMapper.selectById(userId);
|
|
|
|
|
return memberUserDO.getCardId();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public BigDecimal getReductionAmount(Long userId, BigDecimal money,LocalDateTime time) {
|
|
|
|
|
public BigDecimal getReductionAmount(Long userId, BigDecimal money, LocalDateTime time) {
|
|
|
|
|
|
|
|
|
|
String timePeriod = TimePeriodEnum.getTimePeriod(time);
|
|
|
|
|
|
|
|
|
|
MemberUserDO memberUserDO = memberUserMapper.selectById(userId);
|
|
|
|
|
List<Long> tagIds = memberUserDO.getTagIds();
|
|
|
|
|
if (CollectionUtil.isEmpty(tagIds)){
|
|
|
|
|
if (CollectionUtil.isEmpty(tagIds)) {
|
|
|
|
|
return BigDecimal.ZERO;
|
|
|
|
|
}
|
|
|
|
|
List<MemberTagDO> tagList = memberTagService.getTagList(tagIds);
|
|
|
|
|
|
|
|
|
|
if(tagList.size()>1){
|
|
|
|
|
if (tagList.size() > 1) {
|
|
|
|
|
//排序
|
|
|
|
|
List<MemberTagDO> collect = tagList.stream().sorted(Comparator.comparing(MemberTagDO::getState))
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
return countAmount(collect.get(0),money,timePeriod);
|
|
|
|
|
}else {
|
|
|
|
|
return countAmount(tagList.get(0),money,timePeriod);
|
|
|
|
|
return countAmount(collect.get(0), money, timePeriod);
|
|
|
|
|
} else {
|
|
|
|
|
return countAmount(tagList.get(0), money, timePeriod);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -829,90 +832,128 @@ public class MemberUserServiceImpl implements MemberUserService {
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public MemberUserDO getByFaceId(Long faceId) {
|
|
|
|
|
return memberUserMapper.selectOne(new LambdaQueryWrapper<MemberUserDO>().eq(MemberUserDO::getFaceId,faceId).last("limit 1"));
|
|
|
|
|
return memberUserMapper.selectOne(new LambdaQueryWrapper<MemberUserDO>().eq(MemberUserDO::getFaceId, faceId).last("limit 1"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public MemberUserDO getByMobile(Long mobile) {
|
|
|
|
|
return memberUserMapper.selectOne(new LambdaQueryWrapper<MemberUserDO>().eq(MemberUserDO::getMobile,mobile).last("limit 1"));
|
|
|
|
|
return memberUserMapper.selectOne(new LambdaQueryWrapper<MemberUserDO>().eq(MemberUserDO::getMobile, mobile).last("limit 1"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public MemberUserDO getByCardId(String cardId) {
|
|
|
|
|
return memberUserMapper.selectOne(new LambdaQueryWrapper<MemberUserDO>().eq(MemberUserDO::getCardId,cardId).last("limit 1"));
|
|
|
|
|
return memberUserMapper.selectOne(new LambdaQueryWrapper<MemberUserDO>().eq(MemberUserDO::getCardId, cardId).last("limit 1"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Map<String, Object> getInfoByCard(String cardId,Long mobile,Long storeId) {
|
|
|
|
|
public Map<String, Object> getInfoByCard(String cardId, Long mobile, Long storeId) {
|
|
|
|
|
HashMap<String, Object> map = new HashMap<>();
|
|
|
|
|
if(ObjectUtil.isNotEmpty(cardId)){
|
|
|
|
|
if (ObjectUtil.isNotEmpty(cardId)) {
|
|
|
|
|
MemberUserDO byCardId = getByCardId(cardId);
|
|
|
|
|
if(ObjectUtil.isEmpty(byCardId)){
|
|
|
|
|
if (ObjectUtil.isEmpty(byCardId)) {
|
|
|
|
|
throw exception(CARD_USER_NOT_EXISTS);
|
|
|
|
|
}
|
|
|
|
|
BigDecimal money = cardService.getMoneyByUserId(byCardId.getId(),storeId);
|
|
|
|
|
map.put("money",money);
|
|
|
|
|
map.put("userName",byCardId.getNickname());
|
|
|
|
|
BigDecimal money = cardService.getMoneyByUserId(byCardId.getId(), storeId);
|
|
|
|
|
map.put("money", money);
|
|
|
|
|
map.put("userName", byCardId.getNickname());
|
|
|
|
|
}
|
|
|
|
|
if(ObjectUtil.isNotEmpty(mobile)){
|
|
|
|
|
if (ObjectUtil.isNotEmpty(mobile)) {
|
|
|
|
|
MemberUserDO byFaceId = getByMobile(mobile);
|
|
|
|
|
if(ObjectUtil.isEmpty(byFaceId)){
|
|
|
|
|
if (ObjectUtil.isEmpty(byFaceId)) {
|
|
|
|
|
throw exception(FACE_USER_NOT_EXISTS);
|
|
|
|
|
}
|
|
|
|
|
BigDecimal money = cardService.getMoneyByUserId(byFaceId.getId(),storeId);
|
|
|
|
|
map.put("money",money);
|
|
|
|
|
map.put("userName",byFaceId.getNickname());
|
|
|
|
|
BigDecimal money = cardService.getMoneyByUserId(byFaceId.getId(), storeId);
|
|
|
|
|
map.put("money", money);
|
|
|
|
|
map.put("userName", byFaceId.getNickname());
|
|
|
|
|
}
|
|
|
|
|
return map;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public BigDecimal countAmount(MemberTagDO memberTagDO, BigDecimal money, String timePeriod ){
|
|
|
|
|
if(memberTagDO.getType().equals("1")){
|
|
|
|
|
if (memberTagDO.getTimeFlag().equals("0")){
|
|
|
|
|
return money.multiply(memberTagDO.getProportion()).setScale(2, RoundingMode.HALF_UP);
|
|
|
|
|
}else {
|
|
|
|
|
BigDecimal bigDecimal;
|
|
|
|
|
switch (timePeriod){
|
|
|
|
|
case "2":
|
|
|
|
|
bigDecimal = money.multiply(memberTagDO.getMorning()).setScale(2, RoundingMode.HALF_UP);
|
|
|
|
|
break;
|
|
|
|
|
case "3":
|
|
|
|
|
bigDecimal = money.multiply(memberTagDO.getNoon()).setScale(2, RoundingMode.HALF_UP);
|
|
|
|
|
break;
|
|
|
|
|
case "4":
|
|
|
|
|
bigDecimal = money.multiply(memberTagDO.getNight()).setScale(2, RoundingMode.HALF_UP);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
bigDecimal = BigDecimal.ZERO;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
return bigDecimal;
|
|
|
|
|
}
|
|
|
|
|
// public BigDecimal countAmount(MemberTagDO memberTagDO, BigDecimal money, String timePeriod ){
|
|
|
|
|
// if(memberTagDO.getType().equals("1")){
|
|
|
|
|
// if (memberTagDO.getTimeFlag().equals("0")){
|
|
|
|
|
// return money.multiply(memberTagDO.getProportion()).setScale(2, RoundingMode.HALF_UP);
|
|
|
|
|
// }else {
|
|
|
|
|
// BigDecimal bigDecimal;
|
|
|
|
|
// switch (timePeriod){
|
|
|
|
|
// case "2":
|
|
|
|
|
// bigDecimal = money.multiply(memberTagDO.getMorning()).setScale(2, RoundingMode.HALF_UP);
|
|
|
|
|
// break;
|
|
|
|
|
// case "3":
|
|
|
|
|
// bigDecimal = money.multiply(memberTagDO.getNoon()).setScale(2, RoundingMode.HALF_UP);
|
|
|
|
|
// break;
|
|
|
|
|
// case "4":
|
|
|
|
|
// bigDecimal = money.multiply(memberTagDO.getNight()).setScale(2, RoundingMode.HALF_UP);
|
|
|
|
|
// break;
|
|
|
|
|
// default:
|
|
|
|
|
// bigDecimal = BigDecimal.ZERO;
|
|
|
|
|
// break;
|
|
|
|
|
// }
|
|
|
|
|
// return bigDecimal;
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// }
|
|
|
|
|
// if(memberTagDO.getType().equals("2")){
|
|
|
|
|
// if (memberTagDO.getTimeFlag().equals("0")){
|
|
|
|
|
// return memberTagDO.getAmount();
|
|
|
|
|
// }else {
|
|
|
|
|
// BigDecimal bigDecimal;
|
|
|
|
|
// switch (timePeriod){
|
|
|
|
|
// case "2":
|
|
|
|
|
// bigDecimal = memberTagDO.getMorning();
|
|
|
|
|
// break;
|
|
|
|
|
// case "3":
|
|
|
|
|
// bigDecimal = memberTagDO.getNoon();
|
|
|
|
|
// break;
|
|
|
|
|
// case "4":
|
|
|
|
|
// bigDecimal = memberTagDO.getNight();
|
|
|
|
|
// break;
|
|
|
|
|
// default:
|
|
|
|
|
// bigDecimal = BigDecimal.ZERO;
|
|
|
|
|
// break;
|
|
|
|
|
// }
|
|
|
|
|
// return bigDecimal;
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// }
|
|
|
|
|
// return BigDecimal.ZERO;
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
if(memberTagDO.getType().equals("2")){
|
|
|
|
|
if (memberTagDO.getTimeFlag().equals("0")){
|
|
|
|
|
return memberTagDO.getAmount();
|
|
|
|
|
}else {
|
|
|
|
|
BigDecimal bigDecimal;
|
|
|
|
|
switch (timePeriod){
|
|
|
|
|
case "2":
|
|
|
|
|
bigDecimal = memberTagDO.getMorning();
|
|
|
|
|
break;
|
|
|
|
|
case "3":
|
|
|
|
|
bigDecimal = memberTagDO.getNoon();
|
|
|
|
|
break;
|
|
|
|
|
case "4":
|
|
|
|
|
bigDecimal = memberTagDO.getNight();
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
bigDecimal = BigDecimal.ZERO;
|
|
|
|
|
break;
|
|
|
|
|
public BigDecimal countAmount(MemberTagDO memberTagDO, BigDecimal money, String timePeriod) {
|
|
|
|
|
BigDecimal bigDecimal= BigDecimal.ZERO;
|
|
|
|
|
BigDecimal oneHundred = new BigDecimal("100");
|
|
|
|
|
switch (timePeriod) {
|
|
|
|
|
case "2":
|
|
|
|
|
if(money.compareTo(memberTagDO.getMorningBase())>0){
|
|
|
|
|
BigDecimal subsidy = money.multiply(new BigDecimal(memberTagDO.getMorningProportion())).divide(oneHundred, 2, RoundingMode.HALF_UP);
|
|
|
|
|
if(subsidy.compareTo(memberTagDO.getMorning())>0){
|
|
|
|
|
subsidy = memberTagDO.getMorning();
|
|
|
|
|
}
|
|
|
|
|
bigDecimal = subsidy;
|
|
|
|
|
}
|
|
|
|
|
return bigDecimal;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case "3":
|
|
|
|
|
if(money.compareTo(memberTagDO.getNoonBase())>0){
|
|
|
|
|
BigDecimal subsidy = money.multiply(new BigDecimal(memberTagDO.getNoonProportion())).divide(oneHundred, 2, RoundingMode.HALF_UP);
|
|
|
|
|
if(subsidy.compareTo(memberTagDO.getNoon())>0){
|
|
|
|
|
subsidy = memberTagDO.getNoon();
|
|
|
|
|
}
|
|
|
|
|
bigDecimal = subsidy;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case "4":
|
|
|
|
|
if(money.compareTo(memberTagDO.getNightBase())>0){
|
|
|
|
|
BigDecimal subsidy = money.multiply(new BigDecimal(memberTagDO.getNightProportion())).divide(oneHundred, 2, RoundingMode.HALF_UP);
|
|
|
|
|
if(subsidy.compareTo(memberTagDO.getNight())>0){
|
|
|
|
|
subsidy = memberTagDO.getNight();
|
|
|
|
|
}
|
|
|
|
|
bigDecimal = subsidy;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
return BigDecimal.ZERO;
|
|
|
|
|
return bigDecimal;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@ -920,7 +961,7 @@ public class MemberUserServiceImpl implements MemberUserService {
|
|
|
|
|
public boolean delete(Long userId) {
|
|
|
|
|
int i = memberUserMapper.deleteById(userId);
|
|
|
|
|
memberUserMapper.deleteFace(userId);
|
|
|
|
|
return i>0;
|
|
|
|
|
return i > 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@ -931,13 +972,13 @@ public class MemberUserServiceImpl implements MemberUserService {
|
|
|
|
|
// if(StrUtil.isNotEmpty(url)){
|
|
|
|
|
// return url;
|
|
|
|
|
// }
|
|
|
|
|
String encode = DigestUtil.md5Hex(userId.toString()+System.currentTimeMillis());
|
|
|
|
|
encode = QRCodeWithJWTUtil.QR_PREFIX_ZF+encode;
|
|
|
|
|
String encode = DigestUtil.md5Hex(userId.toString() + System.currentTimeMillis());
|
|
|
|
|
encode = QRCodeWithJWTUtil.QR_PREFIX_ZF + encode;
|
|
|
|
|
String fileName = "QRCode_" + userId + ".png";
|
|
|
|
|
String path = QRCodeWithJWTUtil.BASE_PATH+fileName;
|
|
|
|
|
String path = QRCodeWithJWTUtil.BASE_PATH + fileName;
|
|
|
|
|
String s = QRCodeWithJWTUtil.generateQRCode(encode, 350, 350, path);// 生
|
|
|
|
|
// memberUserRedisTemplate.opsForValue().set(redisKey,path,180, TimeUnit.SECONDS);
|
|
|
|
|
memberUserRedisTemplate.opsForValue().set(encode,userId.toString(),180, TimeUnit.SECONDS);
|
|
|
|
|
memberUserRedisTemplate.opsForValue().set(encode, userId.toString(), 180, TimeUnit.SECONDS);
|
|
|
|
|
return s;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -955,14 +996,15 @@ public class MemberUserServiceImpl implements MemberUserService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void jsonCreate(String filePath,Long storeId) {
|
|
|
|
|
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>>() {});
|
|
|
|
|
List<UserJson> people = objectMapper.readValue(new File(filePath), new TypeReference<List<UserJson>>() {
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
ArrayList<MemberUserDO> updateList = new ArrayList<>();
|
|
|
|
|
for(UserJson userJson : people) {
|
|
|
|
|
for (UserJson userJson : people) {
|
|
|
|
|
|
|
|
|
|
// 用户已经存在
|
|
|
|
|
MemberUserDO userSelect = memberUserMapper.selectByMobile(userJson.getPhone_number());
|
|
|
|
@ -982,9 +1024,9 @@ public class MemberUserServiceImpl implements MemberUserService {
|
|
|
|
|
user.setRegisterIp("null");
|
|
|
|
|
memberUserMapper.insert(user);
|
|
|
|
|
|
|
|
|
|
Long id = user.getId();
|
|
|
|
|
Long id = user.getId();
|
|
|
|
|
|
|
|
|
|
if(StringUtils.isNotBlank(userJson.getOrigin_data_url())){
|
|
|
|
|
if (StringUtils.isNotBlank(userJson.getOrigin_data_url())) {
|
|
|
|
|
String s = downloadImage(userJson);
|
|
|
|
|
UserJsonDto userJsonDto = new UserJsonDto();
|
|
|
|
|
userJsonDto.setUserNickname(userJson.getUser_nickname());
|
|
|
|
@ -997,7 +1039,7 @@ public class MemberUserServiceImpl implements MemberUserService {
|
|
|
|
|
updateList.add(user);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(CollectionUtil.isNotEmpty(updateList)){
|
|
|
|
|
if (CollectionUtil.isNotEmpty(updateList)) {
|
|
|
|
|
memberUserMapper.updateBatch(updateList);
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
@ -1005,7 +1047,7 @@ public class MemberUserServiceImpl implements MemberUserService {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public String downloadImage(UserJson userJson) {
|
|
|
|
|
public String downloadImage(UserJson userJson) {
|
|
|
|
|
String saveDir = "facedata/";
|
|
|
|
|
try {
|
|
|
|
|
// 创建 URL 对象
|
|
|
|
|