智慧厨房

This commit is contained in:
gaowdong 2025-06-19 18:08:54 +08:00
parent 890357723c
commit 089b201732
9 changed files with 83 additions and 21 deletions

View File

@ -31,4 +31,12 @@ public enum DeviceClassEnum {
public List<Integer> getDeviceTypes() {
return deviceTypes;
}
public static List<Integer> getDeviceTypesByKey(Integer key) {
return Arrays.stream(values())
.filter(e -> e.getKey().equals(key))
.map(DeviceClassEnum::getDeviceTypes)
.findFirst()
.orElse(Collections.emptyList());
}
}

View File

@ -8,7 +8,6 @@ import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.bonus.common.core.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.models.auth.In;
import lombok.Data;
import lombok.ToString;
import com.bonus.common.core.web.domain.BaseEntity;
@ -68,7 +67,7 @@ public class KitchenDeviceSensorRecord extends BaseEntity {
/** 位置 */
@Excel(name = "位置")
@ApiModelProperty(value = "位置")
private Long subPlace;
private String subPlace;
/** 食堂id */
@Excel(name = "食堂id")
@ -95,8 +94,14 @@ public class KitchenDeviceSensorRecord extends BaseEntity {
@ApiModelProperty(value = "测量指标最小值")
private BigDecimal measureMinValue;
@ApiModelProperty(value = "测量结果类型")
private List<Integer> sensorResultTypeList;
@ApiModelProperty(value = "环境类测量结果类型 1 正常 2 温度过高 3 温度过低 4 湿度过高 5 湿度过低 6 烟雾浓度高")
private List<Integer> envSensorResultTypeList;
@ApiModelProperty(value = "设备大类 5 环境类 1 门禁类 6 监控类")
private Integer deviceCategory;
@ApiModelProperty(value = "设备细类")
private List<Integer> deviceTypes;
@ApiModelProperty("开始时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

View File

@ -48,14 +48,14 @@ public class KitchenSampleCabinetRecord extends BaseEntity {
/** 开柜时间 */
@ApiModelProperty(value = "开柜时间")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "开柜时间", width = 30, dateFormat = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "开柜时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date openCabinetTime;
/** 关柜时间 */
@ApiModelProperty(value = "关柜时间")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "关柜时间", width = 30, dateFormat = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "关柜时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date closeCabinetTime;
/** 操作类型 1开柜 2关柜 */

View File

@ -3,6 +3,7 @@ package com.bonus.canteen.core.kitchen.domain;
import java.time.LocalDate;
import java.util.List;
import com.bonus.canteen.core.common.utils.FileUrlUtil;
import com.bonus.system.api.domain.SysUser;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.bonus.common.core.annotation.Excel;
@ -84,4 +85,11 @@ public class KitchenStaffInfo extends SysUser {
@JsonIgnore
private String encryptedSearchValue;
public String getHealthCertFrontImg() {
return FileUrlUtil.getFileUrl(this.healthCertFrontImg);
}
public String getHealthCertBackImg() {
return FileUrlUtil.getFileUrl(this.healthCertBackImg);
}
}

View File

@ -1,12 +1,10 @@
package com.bonus.canteen.core.kitchen.domain.constants;
import com.bonus.canteen.core.account.constants.AccTradeTypeEnum;
public enum HealthCertStatusEnum {
NOT_APPROVE(1, "正常"),
APPROVE(2, "过期"),
NOT_APPROVE_AGAIN(3, "缺失"),
EXPIRED(4, "临期");
NORMAL(1, "正常"),
EXPIRED(2, "过期"),
NO_IMG(3, "缺失"),
ADVENT(4, "临期");
private final Integer key;
private final String desc;

View File

@ -9,6 +9,7 @@ import com.alibaba.excel.util.StringUtils;
import com.bonus.canteen.core.kitchen.domain.constants.DeviceSensorResultEnum;
import com.bonus.common.core.exception.ServiceException;
import com.bonus.common.core.utils.DateUtils;
import com.bonus.common.houqin.constant.DeviceClassEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.bonus.canteen.core.kitchen.mapper.KitchenDeviceSensorRecordMapper;
@ -45,6 +46,10 @@ public class KitchenDeviceSensorRecordServiceImpl implements IKitchenDeviceSenso
*/
@Override
public List<KitchenDeviceSensorRecord> selectKitchenDeviceSensorRecordList(KitchenDeviceSensorRecord kitchenDeviceSensorRecord) {
if(Objects.isNull(kitchenDeviceSensorRecord.getDeviceCategory())) {
throw new ServiceException("设备分类不能为空");
}
kitchenDeviceSensorRecord.setDeviceTypes(DeviceClassEnum.getDeviceTypesByKey(kitchenDeviceSensorRecord.getDeviceCategory()));
List<KitchenDeviceSensorRecord> kitchenDeviceSensorRecordList = kitchenDeviceSensorRecordMapper
.selectKitchenDeviceSensorRecordList(kitchenDeviceSensorRecord);
if(CollUtil.isNotEmpty(kitchenDeviceSensorRecordList)) {

View File

@ -1,8 +1,12 @@
package com.bonus.canteen.core.kitchen.service.impl;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
import cn.hutool.core.collection.CollUtil;
import com.bonus.canteen.core.basic.domain.BasicSetting;
import com.bonus.canteen.core.basic.mapper.BasicSettingMapper;
import com.bonus.canteen.core.kitchen.domain.AccessAuthority;
import com.bonus.canteen.core.kitchen.domain.KitchenDeviceInfo;
import com.bonus.canteen.core.kitchen.domain.KitchenStaffDevicePrivilege;
@ -15,6 +19,7 @@ import com.bonus.canteen.core.user.domain.UserFace;
import com.bonus.canteen.core.user.service.IUserFaceService;
import com.bonus.common.core.exception.ServiceException;
import com.bonus.common.core.utils.DateUtils;
import com.bonus.common.core.utils.StringUtils;
import com.bonus.common.houqin.constant.DeviceTypeEnum;
import com.bonus.common.houqin.utils.SM4EncryptUtils;
import com.bonus.common.security.utils.SecurityUtils;
@ -43,6 +48,8 @@ public class KitchenStaffInfoServiceImpl implements IKitchenStaffInfoService {
private KitchenStaffDevicePrivilegeMapper kitchenStaffDevicePrivilegeMapper;
@Autowired
private KitchenDeviceInfoMapper kitchenDeviceInfoMapper;
@Autowired
private BasicSettingMapper basicSettingMapper;
/**
* 查询厨房员工资料
@ -59,8 +66,8 @@ public class KitchenStaffInfoServiceImpl implements IKitchenStaffInfoService {
.selectKitchenStaffDevicePrivilegeByStaffId(staffId);
if(CollUtil.isNotEmpty(kitchenStaffDevicePrivilegeList)) {
List<AccessAuthority> accessAuthorityList = Lists.newArrayList();
AccessAuthority accessAuthority = new AccessAuthority();
for (KitchenStaffDevicePrivilege kitchenStaffDevicePrivilege : kitchenStaffDevicePrivilegeList) {
AccessAuthority accessAuthority = new AccessAuthority();
KitchenDeviceListVO deviceInfo = kitchenDeviceInfoMapper.selectKitchenDeviceInfoByDeviceId(kitchenStaffDevicePrivilege.getDeviceId());
if(Objects.nonNull(deviceInfo)) {
accessAuthority.setDeviceName(deviceInfo.getDeviceName());
@ -89,9 +96,26 @@ public class KitchenStaffInfoServiceImpl implements IKitchenStaffInfoService {
kitchenStaffInfo.setEncryptedSearchValue(encryptedSearchValue);
List<KitchenStaffInfo> kitchenStaffInfoList = kitchenStaffInfoMapper.selectKitchenStaffInfoList(kitchenStaffInfo);
if(CollUtil.isNotEmpty(kitchenStaffInfoList)) {
BasicSetting basicSetting = new BasicSetting();
basicSetting.setItemName("staff_health_cert_left_day_reminder");
List<BasicSetting> basicSettingList = basicSettingMapper.selectBasicSettingList(basicSetting);
Long reminderDays = null;
if(CollUtil.isEmpty(basicSettingList)) {
reminderDays = 30L;
}else {
reminderDays = basicSettingList.get(0).getItemValue() == null ? 30L : Long.parseLong(basicSettingList.get(0).getItemValue());
}
for (KitchenStaffInfo info : kitchenStaffInfoList) {
info.setPhonenumber(SM4EncryptUtils.sm4Decrypt(info.getPhonenumber()));
info.setHealthCertStatusName(HealthCertStatusEnum.getDescByKey(info.getHealthCertStatus()));
if(StringUtils.isBlank(info.getHealthCertFrontImg())) {
info.setHealthCertStatusName(HealthCertStatusEnum.NO_IMG.getDesc());
}else if(Objects.nonNull(info.getHealthCertExpire()) && info.getHealthCertExpire().isBefore(LocalDate.now())){
info.setHealthCertStatusName(HealthCertStatusEnum.EXPIRED.getDesc());
}else if(Objects.nonNull(info.getHealthCertExpire()) && info.getHealthCertExpire().isBefore(LocalDate.now().plusDays(reminderDays))){
info.setHealthCertStatusName(HealthCertStatusEnum.ADVENT.getDesc());
}else if(Objects.nonNull(info.getHealthCertExpire()) && info.getHealthCertExpire().isAfter(LocalDate.now().plusDays(reminderDays))){
info.setHealthCertStatusName(HealthCertStatusEnum.NORMAL.getDesc());
}
}
}
return kitchenStaffInfoList;
@ -110,6 +134,14 @@ public class KitchenStaffInfoServiceImpl implements IKitchenStaffInfoService {
kitchenStaffInfo.setCreateBy(SecurityUtils.getUsername());
kitchenStaffInfo.setStaffId(null);
try {
if(StringUtils.isNotBlank(kitchenStaffInfo.getHealthCertFrontImg())
&& Objects.isNull(kitchenStaffInfo.getHealthCertExpire())) {
throw new ServiceException("健康证有效期不能为空");
}
if(StringUtils.isBlank(kitchenStaffInfo.getHealthCertFrontImg())
&& Objects.nonNull(kitchenStaffInfo.getHealthCertExpire())) {
throw new ServiceException("健康证不能为空");
}
checkUser(kitchenStaffInfo);
int result = kitchenStaffInfoMapper.insertKitchenStaffInfo(kitchenStaffInfo);
addPrivileges(kitchenStaffInfo);

View File

@ -44,15 +44,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="deviceId != null "> and kdsr.device_id = #{deviceId}</if>
<if test="deviceType != null "> and kdsr.device_type = #{deviceType}</if>
<if test="measureCode != null and measureCode != ''"> and kdsr.measure_code = #{measureCode}</if>
<if test="measureData != null and measureData != ''"> and measure_data = #{measureData}</if>
<if test="measureData != null and measureData != ''"> and measure_data like CONCAT('%',#{measureData},'%')</if>
<if test="gatewayDeviceId != null "> and gateway_device_id = #{gatewayDeviceId}</if>
<if test="deviceTime != null "> and device_time = #{deviceTime}</if>
<if test="subPlace != null "> and kdsr.sub_place = #{subPlace}</if>
<if test="canteenId != null "> and kdsr.canteen_id = #{canteenId}</if>
<if test="areaId != null "> and kdsr.area_id = #{areaId}</if>
<if test="sensorResultTypeList != null and sensorResultTypeList.size() > 0">
<if test="deviceTypes != null and deviceTypes.size() > 0">
and kdsr.device_type in
<foreach collection="deviceTypes" item="deviceType" separator="," open="(" close=")">
#{deviceType}
</foreach>
</if>
<if test="envSensorResultTypeList != null and envSensorResultTypeList.size() > 0">
and (
<foreach item="type" collection="sensorResultTypeList" separator=" or ">
<foreach item="type" collection="envSensorResultTypeList" separator=" or ">
<choose>
<when test="type == 1">
((kdsm.measure_code = 'temperature'

View File

@ -20,14 +20,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="postName" column="post_name" />
<result property="canteenName" column="canteen_name" />
<result property="phonenumber" column="phonenumber" />
<result property="staffNo" column="staffNo" />
<result property="staffNo" column="staff_no" />
</resultMap>
<sql id="selectKitchenStaffMorningCheckVo">
select check_Id, ksmc.staff_id, device_id, temperature_value, temperature_status,
check_status, record_time, check_video_url, ksmc.create_by, ksmc.create_time,
ksmc.update_by, ksmc.update_time, su.nick_name, sp.post_name, bc.canteen_name,
su.phonenumber, su.user_id as staffNo
su.phonenumber, ksi.staff_no
from kitchen_staff_morning_check ksmc
left join kitchen_staff_info ksi on ksmc.staff_id = ksi.staff_id
left join sys_user su on ksi.user_id = su.user_id