From 289d5952390034d68536da6c5f3294f475e2016e Mon Sep 17 00:00:00 2001 From: andy <1042025947@qq.com> Date: Fri, 23 May 2025 17:38:34 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E6=96=B0=E5=A2=9E=E7=85=A7?= =?UTF-8?q?=E7=89=87=E4=B8=8B=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../attendance/mapper/RzSysParamMapper.java | 6 +- .../service/IRzSysParamService.java | 10 + .../service/impl/RzSysParamServiceImpl.java | 36 ++- .../com/evo/common/constant/Constants.java | 1 + .../common/exception/WebSocketException.java | 23 ++ .../java/com/evo/common/utils/ParamUtils.java | 35 +++ .../com/evo/equipment/constant/Constants.java | 11 +- .../controller/EqButtonController.java | 3 +- .../controller/EqSnDetailController.java | 16 +- .../com/evo/equipment/domain/EqSnDetail.java | 99 +------- .../equipment/mapper/EqSnDetailMapper.java | 3 +- .../equipment/service/IEqButtonService.java | 5 - .../equipment/service/IEqSnDetailService.java | 22 ++ .../service/impl/EqButtonServiceImpl.java | 105 +-------- .../service/impl/EqImagesServiceImpl.java | 4 +- .../service/impl/EqSnDetailServiceImpl.java | 217 +++++++++++++++++- .../web/exception/GlobalExceptionHandler.java | 12 + .../framework/websocket/WebSocketServer.java | 48 ++-- .../framework/websocket/WebSocketUsers.java | 6 + .../controller/SpecialOverTimeController.java | 2 +- .../mapper/BsOverTimeMapper.java | 3 +- .../mapper/EqOverStaffMapper.java | 3 +- .../service/SpecialOverTimeService.java | 3 +- .../impl/SpecialOverTimeServiceImpl.java | 10 +- .../mapper/RzRestaurantImagesMapper.java | 3 +- .../service/IRzRestaurantImagesService.java | 3 +- .../impl/RzRestaurantImagesServiceImpl.java | 48 +--- .../system/controller/CommonController.java | 8 +- .../evo/system/service/RzUploadService.java | 8 + .../service/impl/RzUploadServiceImpl.java | 8 +- .../service/impl/SysStaffServiceImpl.java | 89 +++---- .../java/com/evo/task/TaskController.java | 13 +- .../mapper/equipment/EqSnDetailMapper.xml | 3 + .../personnelMatters/EqOverStaffMapper.xml | 7 +- .../mapper/system/SysStaffMapper.xml | 26 ++- 35 files changed, 529 insertions(+), 370 deletions(-) create mode 100644 evo-admin/src/main/java/com/evo/common/exception/WebSocketException.java create mode 100644 evo-admin/src/main/java/com/evo/common/utils/ParamUtils.java diff --git a/evo-admin/src/main/java/com/evo/attendance/mapper/RzSysParamMapper.java b/evo-admin/src/main/java/com/evo/attendance/mapper/RzSysParamMapper.java index b267c9e..f02f500 100644 --- a/evo-admin/src/main/java/com/evo/attendance/mapper/RzSysParamMapper.java +++ b/evo-admin/src/main/java/com/evo/attendance/mapper/RzSysParamMapper.java @@ -1,15 +1,17 @@ package com.evo.attendance.mapper; -import java.util.List; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.evo.attendance.domain.RzSysParam; +import java.util.List; + /** * 参数配置Mapper接口 * * @author 田志阳 * @date 2025-05-23 */ -public interface RzSysParamMapper +public interface RzSysParamMapper extends BaseMapper { /** * 查询参数配置 diff --git a/evo-admin/src/main/java/com/evo/attendance/service/IRzSysParamService.java b/evo-admin/src/main/java/com/evo/attendance/service/IRzSysParamService.java index e1ca1cc..e2129ad 100644 --- a/evo-admin/src/main/java/com/evo/attendance/service/IRzSysParamService.java +++ b/evo-admin/src/main/java/com/evo/attendance/service/IRzSysParamService.java @@ -58,4 +58,14 @@ public interface IRzSysParamService * @return 结果 */ public int deleteRzSysParamById(Long id); + + /*** + * 获取数据信息 + * @param name + * @param code + * @param defVal + * @param des + * @return + */ + public RzSysParam getRzSysParam(String name, String code, String defVal, String des); } diff --git a/evo-admin/src/main/java/com/evo/attendance/service/impl/RzSysParamServiceImpl.java b/evo-admin/src/main/java/com/evo/attendance/service/impl/RzSysParamServiceImpl.java index 2b4bbff..9b56205 100644 --- a/evo-admin/src/main/java/com/evo/attendance/service/impl/RzSysParamServiceImpl.java +++ b/evo-admin/src/main/java/com/evo/attendance/service/impl/RzSysParamServiceImpl.java @@ -1,8 +1,12 @@ package com.evo.attendance.service.impl; import java.util.List; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.evo.common.utils.DateUtils; import com.evo.common.utils.SecurityUtils; +import org.apache.commons.lang3.ObjectUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.evo.attendance.mapper.RzSysParamMapper; @@ -16,10 +20,8 @@ import com.evo.attendance.service.IRzSysParamService; * @date 2025-05-23 */ @Service -public class RzSysParamServiceImpl implements IRzSysParamService +public class RzSysParamServiceImpl extends ServiceImpl implements IRzSysParamService { - @Autowired - private RzSysParamMapper rzSysParamMapper; /** * 查询参数配置 @@ -30,7 +32,7 @@ public class RzSysParamServiceImpl implements IRzSysParamService @Override public RzSysParam selectRzSysParamById(Long id) { - return rzSysParamMapper.selectRzSysParamById(id); + return getBaseMapper().selectRzSysParamById(id); } /** @@ -42,7 +44,7 @@ public class RzSysParamServiceImpl implements IRzSysParamService @Override public List selectRzSysParamList(RzSysParam rzSysParam) { - return rzSysParamMapper.selectRzSysParamList(rzSysParam); + return getBaseMapper().selectRzSysParamList(rzSysParam); } /** @@ -57,7 +59,7 @@ public class RzSysParamServiceImpl implements IRzSysParamService rzSysParam.setUpdateTime(DateUtils.getNowDate()); rzSysParam.setCreateBy(SecurityUtils.getUsername()); rzSysParam.setCreateTime(DateUtils.getNowDate()); - return rzSysParamMapper.insertRzSysParam(rzSysParam); + return getBaseMapper().insertRzSysParam(rzSysParam); } /** @@ -69,7 +71,7 @@ public class RzSysParamServiceImpl implements IRzSysParamService @Override public int updateRzSysParam(RzSysParam rzSysParam) { - return rzSysParamMapper.updateRzSysParam(rzSysParam); + return getBaseMapper().updateRzSysParam(rzSysParam); } /** @@ -81,7 +83,7 @@ public class RzSysParamServiceImpl implements IRzSysParamService @Override public int deleteRzSysParamByIds(Long[] ids) { - return rzSysParamMapper.deleteRzSysParamByIds(ids); + return getBaseMapper().deleteRzSysParamByIds(ids); } /** @@ -93,6 +95,22 @@ public class RzSysParamServiceImpl implements IRzSysParamService @Override public int deleteRzSysParamById(Long id) { - return rzSysParamMapper.deleteRzSysParamById(id); + return getBaseMapper().deleteRzSysParamById(id); + } + + + + + public RzSysParam getRzSysParam(String name, String code, String defVal, String des){ + RzSysParam param = getOne(new LambdaQueryWrapper().eq(RzSysParam::getParamCode, code)); + if(ObjectUtils.isEmpty(param)){ + param = new RzSysParam(); + param.setParamName(name); + param.setParamCode(code); + param.setParamValue(defVal); + param.setDescription(des); + save(param); + } + return param; } } diff --git a/evo-admin/src/main/java/com/evo/common/constant/Constants.java b/evo-admin/src/main/java/com/evo/common/constant/Constants.java index 3c0525f..de432c7 100644 --- a/evo-admin/src/main/java/com/evo/common/constant/Constants.java +++ b/evo-admin/src/main/java/com/evo/common/constant/Constants.java @@ -101,6 +101,7 @@ public class Constants */ public static final String DELETE_FLAG_0 = "0"; //添加信息 public static final String DELETE_FLAG_1 = "1"; //删除信息 + public static final String JOB_STATIS_11 = "-1"; //员工 离职 public static final String JOB_STATIS_0 = "0"; //员工 试用 public static final String JOB_STATIS_1 = "1"; //员工 正式 public static final String SYS_COMPANY = "sys_company"; //公司简称 diff --git a/evo-admin/src/main/java/com/evo/common/exception/WebSocketException.java b/evo-admin/src/main/java/com/evo/common/exception/WebSocketException.java new file mode 100644 index 0000000..f4229ae --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/exception/WebSocketException.java @@ -0,0 +1,23 @@ +package com.evo.common.exception; + +/** + * webSocket异常 + * + * @author evo + */ +public class WebSocketException extends RuntimeException +{ + private static final long serialVersionUID = 1L; + + public WebSocketException() + { + } + + public WebSocketException(String message) { + super(message); + } + + public WebSocketException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/ParamUtils.java b/evo-admin/src/main/java/com/evo/common/utils/ParamUtils.java new file mode 100644 index 0000000..b00aeb1 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/ParamUtils.java @@ -0,0 +1,35 @@ +package com.evo.common.utils; + +import com.evo.attendance.domain.RzSysParam; +import com.evo.attendance.service.IRzSysParamService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +/** + * 全局参数获取配置类 + * + * @ClassName:ParamUtils + * @date: 2025年05月23日 16:50 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Service +public class ParamUtils { + + private static IRzSysParamService paramService; + + @Autowired + public ParamUtils(IRzSysParamService paramService) { + this.paramService = paramService; + } + + + public static String getGlobalStaticUrl(){ + RzSysParam param= paramService.getRzSysParam("静态地址URL", "static_url","http://192.168.16.1:8081","静态文件的url地址"); + return param.getParamValue(); + } + +} diff --git a/evo-admin/src/main/java/com/evo/equipment/constant/Constants.java b/evo-admin/src/main/java/com/evo/equipment/constant/Constants.java index 7136b47..1ec8783 100644 --- a/evo-admin/src/main/java/com/evo/equipment/constant/Constants.java +++ b/evo-admin/src/main/java/com/evo/equipment/constant/Constants.java @@ -13,9 +13,18 @@ public class Constants public static final String STAFF_BUTTON_URL = "http://192.168.5.12:8088/button/"; //打卡按钮图片存服务器获取地址 public static final String STAFF_IMAGE_URL = "http://192.168.5.12:8088/image/"; //打卡人员图片存服务器获取地址 public static final String STAFF_FUND_ADDRESS = "D:/lableExcel/"; //公积金存储地址 + /*** + * 餐饮打卡机设备号 + */ public static final String EQ_DEVICE_CODE = "T71474"; //餐饮打卡机设备号 + /*** + * 公共打卡机 + */ public static final String EQ_DEVICE_PUBLIC_CODE = "ET74333"; //公共打卡机 - public static final String STAFF_IMAGE_URL_OVER_TIME = "http://192.168.5.12:8088/image/"; //打卡人员图片存服务器获取地址 + public static final String STAFF_IMAGE_URL_OVER_TIME = "http://192.168.5.12:8088/image/";//打卡人员图片存服务器获取地址 + /*** + * 加班打卡机 + */ public static final String EQ_DEVICE_OVER_TIME_CODE = "ET74336"; //加班打卡机 } diff --git a/evo-admin/src/main/java/com/evo/equipment/controller/EqButtonController.java b/evo-admin/src/main/java/com/evo/equipment/controller/EqButtonController.java index 0c4f468..13c2998 100644 --- a/evo-admin/src/main/java/com/evo/equipment/controller/EqButtonController.java +++ b/evo-admin/src/main/java/com/evo/equipment/controller/EqButtonController.java @@ -13,6 +13,7 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.IOException; @@ -29,7 +30,7 @@ import java.util.List; @RequestMapping("/equipment/button") public class EqButtonController extends BaseController { - @Autowired + @Resource private IEqButtonService eqButtonService; diff --git a/evo-admin/src/main/java/com/evo/equipment/controller/EqSnDetailController.java b/evo-admin/src/main/java/com/evo/equipment/controller/EqSnDetailController.java index 4df0d8c..3084180 100644 --- a/evo-admin/src/main/java/com/evo/equipment/controller/EqSnDetailController.java +++ b/evo-admin/src/main/java/com/evo/equipment/controller/EqSnDetailController.java @@ -1,15 +1,19 @@ package com.evo.equipment.controller; import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; import com.evo.common.core.page.TableDataInfo; +import com.evo.common.utils.Collections; import com.evo.equipment.domain.EqSnDetail; import com.evo.equipment.service.IEqSnDetailService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import javax.annotation.Resource; import java.util.List; /** @@ -22,8 +26,8 @@ import java.util.List; @RequestMapping("/equipment/snDetail") public class EqSnDetailController extends BaseController { - @Autowired - private IEqSnDetailService EqSnDetailService; + @Resource + private IEqSnDetailService eqSnDetailService; /** * 查询考勤设备信息列表 @@ -33,8 +37,14 @@ public class EqSnDetailController extends BaseController public TableDataInfo list(EqSnDetail EqSnDetail) { startPage(); - List list = EqSnDetailService.selectEqSnDetailList(EqSnDetail); + List list = eqSnDetailService.selectEqSnDetailList(EqSnDetail); return getDataTable(list); } + @GetMapping("/sendPhoto/{sn}") + public AjaxResult sendPhoto(@PathVariable String sn) + { + return eqSnDetailService.sendPhoto(Collections.asList(sn), null) ? AjaxResult.success(true) : AjaxResult.error(); + } + } diff --git a/evo-admin/src/main/java/com/evo/equipment/domain/EqSnDetail.java b/evo-admin/src/main/java/com/evo/equipment/domain/EqSnDetail.java index 7a0dc91..ddab12d 100644 --- a/evo-admin/src/main/java/com/evo/equipment/domain/EqSnDetail.java +++ b/evo-admin/src/main/java/com/evo/equipment/domain/EqSnDetail.java @@ -3,6 +3,8 @@ package com.evo.equipment.domain; import com.evo.common.annotation.Excel; import com.evo.common.core.domain.BaseEntity; import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.ToString; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; @@ -14,6 +16,8 @@ import java.util.Date; * @author chenyj * @date 2024-08-07 */ +@Data +@ToString public class EqSnDetail extends BaseEntity { private static final long serialVersionUID = 1L; @@ -37,6 +41,12 @@ public class EqSnDetail extends BaseEntity @Excel(name = "设备ip") private String ip; + /** + * sessionId + * 记录链接的sessionId, 用于链接关闭的数据处理, 和异常关闭的数据处理 + */ + private String sessionId; + /** 设备连接时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Excel(name = "设备连接时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") @@ -49,94 +59,5 @@ public class EqSnDetail extends BaseEntity /** 删除标识 */ private String delFlag; - public void setId(Long id) - { - this.id = id; - } - public Long getId() - { - return id; - } - public void setSn(String sn) - { - this.sn = sn; - } - - public String getSn() - { - return sn; - } - public void setVersionCode(String versionCode) - { - this.versionCode = versionCode; - } - - public String getVersionCode() - { - return versionCode; - } - public void setVersionName(String versionName) - { - this.versionName = versionName; - } - - public String getVersionName() - { - return versionName; - } - public void setIp(String ip) - { - this.ip = ip; - } - - public String getIp() - { - return ip; - } - public void setSnTime(Date snTime) - { - this.snTime = snTime; - } - - public Date getSnTime() - { - return snTime; - } - public void setType(String type) - { - this.type = type; - } - - public String getType() - { - return type; - } - public void setDelFlag(String delFlag) - { - this.delFlag = delFlag; - } - - public String getDelFlag() - { - return delFlag; - } - - @Override - public String toString() { - return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) - .append("id", getId()) - .append("sn", getSn()) - .append("versionCode", getVersionCode()) - .append("versionName", getVersionName()) - .append("ip", getIp()) - .append("snTime", getSnTime()) - .append("type", getType()) - .append("delFlag", getDelFlag()) - .append("createTime", getCreateTime()) - .append("createBy", getCreateBy()) - .append("updateTime", getUpdateTime()) - .append("updateBy", getUpdateBy()) - .toString(); - } } diff --git a/evo-admin/src/main/java/com/evo/equipment/mapper/EqSnDetailMapper.java b/evo-admin/src/main/java/com/evo/equipment/mapper/EqSnDetailMapper.java index cb12064..599a18d 100644 --- a/evo-admin/src/main/java/com/evo/equipment/mapper/EqSnDetailMapper.java +++ b/evo-admin/src/main/java/com/evo/equipment/mapper/EqSnDetailMapper.java @@ -1,5 +1,6 @@ package com.evo.equipment.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.evo.equipment.domain.EqSnDetail; import java.util.List; @@ -10,7 +11,7 @@ import java.util.List; * @author chenyj * @date 2024-08-07 */ -public interface EqSnDetailMapper +public interface EqSnDetailMapper extends BaseMapper { /** * 查询考勤设备信息列表 diff --git a/evo-admin/src/main/java/com/evo/equipment/service/IEqButtonService.java b/evo-admin/src/main/java/com/evo/equipment/service/IEqButtonService.java index 8361545..2bee38e 100644 --- a/evo-admin/src/main/java/com/evo/equipment/service/IEqButtonService.java +++ b/evo-admin/src/main/java/com/evo/equipment/service/IEqButtonService.java @@ -62,9 +62,4 @@ public interface IEqButtonService */ public EqButton selectEqButtonByName(String name); - /*** - * 照片下发 - * @param paramEqSnDetail - */ - void sendButton(EqSnDetail paramEqSnDetail); } diff --git a/evo-admin/src/main/java/com/evo/equipment/service/IEqSnDetailService.java b/evo-admin/src/main/java/com/evo/equipment/service/IEqSnDetailService.java index 6b648a2..c42bffd 100644 --- a/evo-admin/src/main/java/com/evo/equipment/service/IEqSnDetailService.java +++ b/evo-admin/src/main/java/com/evo/equipment/service/IEqSnDetailService.java @@ -2,8 +2,10 @@ package com.evo.equipment.service; import com.evo.common.core.domain.AjaxResult; import com.evo.equipment.domain.EqSnDetail; +import org.apache.xmlbeans.impl.xb.xsdschema.Public; import java.util.List; +import java.util.Map; /** * 考勤设备信息Service接口 @@ -43,4 +45,24 @@ public interface IEqSnDetailService * @return */ public EqSnDetail selectEqSnDetailBySn(String sn); + + /*** + * 下发照片 + * @param snList + * @param userPhotoList + * @return + */ + public Boolean sendPhoto(List snList, List> userPhotoList); + + /*** + * 下发按钮 + * @param snList + * @return + */ + public Boolean sendButtons(List snList); + + /*** + * 检查设备在线情况 + */ + public void checkDevice(); } diff --git a/evo-admin/src/main/java/com/evo/equipment/service/impl/EqButtonServiceImpl.java b/evo-admin/src/main/java/com/evo/equipment/service/impl/EqButtonServiceImpl.java index 73e5105..d42e081 100644 --- a/evo-admin/src/main/java/com/evo/equipment/service/impl/EqButtonServiceImpl.java +++ b/evo-admin/src/main/java/com/evo/equipment/service/impl/EqButtonServiceImpl.java @@ -1,23 +1,19 @@ package com.evo.equipment.service.impl; -import com.alibaba.fastjson2.JSONObject; import com.evo.common.constant.Constants; import com.evo.common.core.domain.AjaxResult; import com.evo.common.utils.DateUtils; import com.evo.common.utils.SecurityUtils; import com.evo.equipment.domain.EqButton; import com.evo.equipment.domain.EqSnDetail; -import com.evo.equipment.domain.vo.CwBottonDto; -import com.evo.equipment.domain.vo.CwButtonData; -import com.evo.equipment.domain.vo.CwButtonVo; import com.evo.equipment.mapper.EqButtonMapper; -import com.evo.equipment.mapper.EqSnDetailMapper; import com.evo.equipment.service.IEqButtonService; -import com.evo.framework.websocket.WebSocketUsers; +import com.evo.equipment.service.IEqSnDetailService; import org.springframework.stereotype.Service; + import javax.annotation.Resource; -import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; /** * 按钮信息Service业务层处理 @@ -31,7 +27,8 @@ public class EqButtonServiceImpl implements IEqButtonService @Resource private EqButtonMapper eqButtonMapper; @Resource - private EqSnDetailMapper EqSnDetailMapper; //考勤设备 + private IEqSnDetailService eqSnDetailService; //考勤设备 + /** * 查询按钮信息 @@ -88,41 +85,9 @@ public class EqButtonServiceImpl implements IEqButtonService if(i < 1){ return AjaxResult.error(); } - //下发按钮到打卡机器 ,获取所有打卡机 - List sn_list = EqSnDetailMapper.selectEqSnDetailList(null); - //获取所有打卡按钮 - List bt_list = eqButtonMapper.selectEqButtonList(null); - //需要返回的对象 - CwButtonVo cbv = null; - //发送的数据 - CwButtonData cbd = null; - //按钮对象 - CwBottonDto cwBottonDto = null; - //按钮集合 - List list2 = null; - for (EqSnDetail snDetail : sn_list) { - cbv = new CwButtonVo(); - cbd = new CwButtonData(); - list2 = new ArrayList(); - //该接口固定为to_device,发送给设备用于识别对应哪个指令 - cbv.setCmd("to_device"); - //无用值,空串 - cbv.setForm(""); - //设备号 - cbv.setTo(snDetail.getSn()); - //发送的数据 - cbd.setCmd("setButtons"); - for (EqButton button : bt_list) { - cwBottonDto = new CwBottonDto(); - cwBottonDto.setIcon(button.getImage()); - list2.add(cwBottonDto); - } - cbd.setValue(list2); - cbv.setData(cbd); - //调用websocket,推送给设备 - WebSocketUsers.sendMessageToUsersByText(JSONObject.toJSONString(cbv)); - } + //下发按钮到打卡机器 ,获取所有打卡机 + eqSnDetailService.sendButtons(eqSnDetailService.selectEqSnDetailList(null).stream().map(EqSnDetail::getSn).collect(Collectors.toList())); return AjaxResult.success(); } @@ -157,40 +122,8 @@ public class EqButtonServiceImpl implements IEqButtonService if(i < 1){ return AjaxResult.error(); } - //下发机器 ,获取所有打卡机 - List sn_list = EqSnDetailMapper.selectEqSnDetailList(null); - //获取所有打卡按钮 - List bt_list = eqButtonMapper.selectEqButtonList(null); - //需要返回的对象 - CwButtonVo cbv = null; - //发送的数据 - CwButtonData cbd = null; - //按钮对象 - CwBottonDto cwBottonDto = null; - //按钮集合 - List list2 = null; - for (EqSnDetail snDetail : sn_list) { - cbv = new CwButtonVo(); - cbd = new CwButtonData(); - list2 = new ArrayList(); - //该接口固定为to_device,发送给设备用于识别对应哪个指令 - cbv.setCmd("to_device"); - //无用值,空串 - cbv.setForm(""); - //设备号 - cbv.setTo(snDetail.getSn()); - //发送的数据 - cbd.setCmd("setButtons"); - for (EqButton button : bt_list) { - cwBottonDto = new CwBottonDto(); - cwBottonDto.setIcon(button.getImage()); - list2.add(cwBottonDto); - } - cbd.setValue(list2); - cbv.setData(cbd); - //调用websocket,推送给设备 - WebSocketUsers.sendMessageToUsersByText(JSONObject.toJSONString(cbv)); - } + //下发按钮到打卡机器 ,获取所有打卡机 + eqSnDetailService.sendButtons(eqSnDetailService.selectEqSnDetailList(null).stream().map(EqSnDetail::getSn).collect(Collectors.toList())); return AjaxResult.success(); } @@ -205,24 +138,4 @@ public class EqButtonServiceImpl implements IEqButtonService return eqButtonMapper.selectEqButtonByName(name); } - public void sendButton(EqSnDetail snDetail) { - List bt_list = this.eqButtonMapper.selectEqButtonList(null); - CwButtonVo cbv = new CwButtonVo(); - CwButtonData cbd = new CwButtonData(); - cbv.setCmd("to_device"); - cbv.setForm(""); - cbv.setTo(snDetail.getSn()); - cbd.setCmd("setButtons"); - CwBottonDto cwBottonDto = null; - List list2 = new ArrayList<>(); - for (EqButton button : bt_list) { - cwBottonDto = new CwBottonDto(); - cwBottonDto.setIcon(button.getImage()); - list2.add(cwBottonDto); - } - cbd.setValue(list2); - cbv.setData(cbd); - WebSocketUsers.sendMessageToUsersByText(JSONObject.toJSONString(cbv, new com.alibaba.fastjson2.JSONWriter.Feature[0])); - } - } diff --git a/evo-admin/src/main/java/com/evo/equipment/service/impl/EqImagesServiceImpl.java b/evo-admin/src/main/java/com/evo/equipment/service/impl/EqImagesServiceImpl.java index 0a97237..3869cf7 100644 --- a/evo-admin/src/main/java/com/evo/equipment/service/impl/EqImagesServiceImpl.java +++ b/evo-admin/src/main/java/com/evo/equipment/service/impl/EqImagesServiceImpl.java @@ -127,7 +127,7 @@ public class EqImagesServiceImpl implements IEqImagesService //给服务端预留的补充字段,设备端不处理这个字段内容。设备在响应这条指令时原样返回 cau.setExtra(""); //发送的数据 - caud.setCmd("addUser"); +// caud.setCmd("addUser"); caud.setUser_id(eqImages.getUserId()+""); caud.setName(eqImages.getStaffName()); caud.setTts_name(""); @@ -280,7 +280,7 @@ public class EqImagesServiceImpl implements IEqImagesService //给服务端预留的补充字段,设备端不处理这个字段内容。设备在响应这条指令时原样返回 cau.setExtra(""); //发送的数据 - caud.setCmd("addUser"); +// caud.setCmd("addUser"); caud.setUser_id(row.getCell(0).getNumericCellValue()+""); caud.setName(row.getCell(1).getStringCellValue()); caud.setTts_name(""); diff --git a/evo-admin/src/main/java/com/evo/equipment/service/impl/EqSnDetailServiceImpl.java b/evo-admin/src/main/java/com/evo/equipment/service/impl/EqSnDetailServiceImpl.java index 677afb1..4004098 100644 --- a/evo-admin/src/main/java/com/evo/equipment/service/impl/EqSnDetailServiceImpl.java +++ b/evo-admin/src/main/java/com/evo/equipment/service/impl/EqSnDetailServiceImpl.java @@ -1,16 +1,40 @@ package com.evo.equipment.service.impl; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.evo.common.constant.Constants; import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.domain.entity.RzUpload; +import com.evo.common.exception.WebSocketException; +import com.evo.common.utils.Collections; import com.evo.common.utils.DateUtils; +import com.evo.common.utils.ParamUtils; import com.evo.common.utils.StringUtils; +import com.evo.equipment.domain.EqButton; import com.evo.equipment.domain.EqSnDetail; +import com.evo.equipment.domain.vo.*; +import com.evo.equipment.mapper.EqButtonMapper; import com.evo.equipment.mapper.EqSnDetailMapper; import com.evo.equipment.service.IEqSnDetailService; +import com.evo.framework.websocket.WebSocketUsers; +import com.evo.personnelMatters.domain.EqOverStaff; +import com.evo.personnelMatters.mapper.EqOverStaffMapper; +import com.evo.restaurant.domain.RzRestaurantImages; +import com.evo.restaurant.mapper.RzRestaurantImagesMapper; +import com.evo.restaurant.service.IRzRestaurantImagesService; +import com.evo.system.domain.SysStaff; +import com.evo.system.mapper.SysStaffMapper; +import com.evo.system.service.RzUploadService; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import javax.websocket.Session; +import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * 考勤设备信息Service业务层处理 @@ -19,11 +43,18 @@ import java.util.List; * @date 2024-08-07 */ @Service -public class EqSnDetailServiceImpl implements IEqSnDetailService +public class EqSnDetailServiceImpl extends ServiceImpl implements IEqSnDetailService { @Resource - private EqSnDetailMapper EqSnDetailMapper; - + private SysStaffMapper sysStaffMapper; + @Resource + private EqButtonMapper eqButtonMapper; + @Resource + private RzUploadService rzUploadService; + @Resource + private RzRestaurantImagesMapper rzRestaurantImagesMapper; + @Resource + private EqOverStaffMapper eqOverStaffMapper; /** * 查询考勤设备信息列表 * @@ -33,7 +64,7 @@ public class EqSnDetailServiceImpl implements IEqSnDetailService @Override public List selectEqSnDetailList(EqSnDetail EqSnDetail) { - return EqSnDetailMapper.selectEqSnDetailList(EqSnDetail); + return getBaseMapper().selectEqSnDetailList(EqSnDetail); } /** @@ -46,13 +77,13 @@ public class EqSnDetailServiceImpl implements IEqSnDetailService public AjaxResult insertEqSnDetail(EqSnDetail EqSnDetail) { //判断设备是否添加 - EqSnDetail sbSn = EqSnDetailMapper.selectEqSnDetailBySn(EqSnDetail.getSn()); + EqSnDetail sbSn = getBaseMapper().selectEqSnDetailBySn(EqSnDetail.getSn()); if(StringUtils.isNotNull(sbSn)){ return AjaxResult.error(); } EqSnDetail.setCreateTime(DateUtils.getNowDate()); EqSnDetail.setDelFlag(Constants.DELETE_FLAG_0); - int i = EqSnDetailMapper.insertEqSnDetail(EqSnDetail); + int i = getBaseMapper().insertEqSnDetail(EqSnDetail); if(i < 1){ return AjaxResult.error(); } @@ -69,7 +100,7 @@ public class EqSnDetailServiceImpl implements IEqSnDetailService public int updateEqSnDetail(EqSnDetail EqSnDetail) { EqSnDetail.setUpdateTime(DateUtils.getNowDate()); - return EqSnDetailMapper.updateEqSnDetail(EqSnDetail); + return getBaseMapper().updateEqSnDetail(EqSnDetail); } /** @@ -79,6 +110,176 @@ public class EqSnDetailServiceImpl implements IEqSnDetailService */ @Override public EqSnDetail selectEqSnDetailBySn(String sn){ - return EqSnDetailMapper.selectEqSnDetailBySn(sn); + return getBaseMapper().selectEqSnDetailBySn(sn); + } + + static List tsSn = Collections.asList(com.evo.equipment.constant.Constants.EQ_DEVICE_PUBLIC_CODE,com.evo.equipment.constant.Constants.EQ_DEVICE_CODE,com.evo.equipment.constant.Constants.EQ_DEVICE_OVER_TIME_CODE); + + private List> getPhoto(List userList){ + List> userPhotoList = Collections.emptyList(); + Map longRzUploadMap = rzUploadService.selectListByBusinessIdAndyType(userList.stream().map(SysStaff::getUserId).collect(Collectors.toList()), "avatar").stream().collect(Collectors.toMap(RzUpload::getBusinessId, d->d, (k1,k2) ->k1)); + String url = ParamUtils.getGlobalStaticUrl(); + for(SysStaff user : userList){ + userPhotoList.add(Collections.asMap("userId", String.valueOf(user.getUserId()), "name", user.getName(), "photoUrl", url+longRzUploadMap.get(user.getUserId()).getFileName())); +// userPhotoList.add(Collections.asMap("userId", String.valueOf(user.getUserId()), "name", user.getName(), "photoUrl", longRzUploadMap.get(user.getUserId()).getUrl())); + } + return userPhotoList; + } + + public Map>> initTsDkDevice(String deviceSn){ + Map>> snUserPhotoList = Collections.emptyMap(); + //如果有且只有一个设备信息, 并且设备信息为公共打卡机, 或者是 食堂打卡机 + if(tsSn.contains(deviceSn)) { + List> userPhotoList = Collections.emptyList(); + List userList = Collections.emptyList(); + if (deviceSn.equals(com.evo.equipment.constant.Constants.EQ_DEVICE_PUBLIC_CODE) || deviceSn.equals(com.evo.equipment.constant.Constants.EQ_DEVICE_CODE)) { + //获取所有未删除的, 没有离职的员工信息 + userList = sysStaffMapper.selectList(new LambdaQueryWrapper().eq(SysStaff::getDelFlag, Constants.DELETE_FLAG_0).ne(SysStaff::getStatus, Constants.JOB_STATIS_11).select(SysStaff::getUserId, SysStaff::getName)); + } + //加班打卡机 + if (deviceSn.equals(com.evo.equipment.constant.Constants.EQ_DEVICE_OVER_TIME_CODE)) { + List userIds = eqOverStaffMapper.selectList(new LambdaQueryWrapper().eq(EqOverStaff::getDelFlag, Constants.DELETE_FLAG_0).select(EqOverStaff::getUserId)).stream().map(EqOverStaff::getUserId).collect(Collectors.toList()); + userList = sysStaffMapper.selectList((new LambdaQueryWrapper().in(SysStaff::getUserId, userIds).eq(SysStaff::getDelFlag, Constants.DELETE_FLAG_0).ne(SysStaff::getStatus, Constants.JOB_STATIS_11).select(SysStaff::getUserId, SysStaff::getName))); + } + //如果是下发的食堂打卡机, 则需要查找餐饮人员的数据 + if (deviceSn.equals(com.evo.equipment.constant.Constants.EQ_DEVICE_CODE)) { + List list = rzRestaurantImagesMapper.selectList(new LambdaQueryWrapper().eq(RzRestaurantImages::getDelFlag, Constants.DELETE_FLAG_0)); + for (RzRestaurantImages img : list) { + userPhotoList.add(Collections.asMap("userId", String.valueOf(img.getId()), "name", img.getName(), "photoUrl", img.getImageUrl())); + } + } + //拼接数据 + userPhotoList.addAll(getPhoto(userList)); + //装载数据 + snUserPhotoList.put(deviceSn, userPhotoList); + } + return snUserPhotoList; + } + + public Map checkSession(List snList){ + Map sessionMap = Collections.emptyMap(); + List deviceList = getBaseMapper().selectList(new LambdaQueryWrapper().in(EqSnDetail::getSn, snList)); + StringBuilder errorMsg = new StringBuilder(""); + List loseDeviceList = Collections.emptyList(); + for (EqSnDetail device : deviceList){ + if(!WebSocketUsers.getUsers().containsKey(device.getSessionId())){ + errorMsg.append("设备"+device.getSn()+"已经失去连接;"); + device.setType("连接已断开"); + loseDeviceList.add(device); + } + sessionMap.put(device.getSn(), WebSocketUsers.getUsers().get(device.getSessionId())); + } + if(Collections.isNotEmpty(loseDeviceList)){ + updateBatchById(loseDeviceList); + throw new WebSocketException(errorMsg.toString()); + } + return sessionMap; + } + + @Override + public Boolean sendPhoto(List snList, List> userPhotoList) { + //检查设备是否在链接状态 + Map sessionMap = checkSession(snList); + + Map>> snUserPhotoList = Collections.emptyMap(); + if(Collections.isEmpty(userPhotoList)){ + //如果有且只有一个设备信息, 并且设备信息为公共打卡机, 或者是 食堂打卡机 + if(snList.size() ==1 && tsSn.contains(snList.get(0))){ + snUserPhotoList.putAll(initTsDkDevice(snList.get(0))); + }else{ + + List tsDeviceSn = Collections.findDuplicatesList(snList, tsSn); + //所有所有不是特殊打卡机人员信息 + snList.stream().filter(sn-> !tsSn.contains(sn)).forEach(sn ->{ + //获取所有未删除的, 没有离职的员工信息 + List userList = sysStaffMapper.selectList((new LambdaQueryWrapper().eq(SysStaff::getTimeClock, sn).eq(SysStaff::getDelFlag, Constants.DELETE_FLAG_0).ne(SysStaff::getStatus,Constants.JOB_STATIS_11).select(SysStaff::getUserId, SysStaff::getName))); + snUserPhotoList.put(sn, getPhoto(userList)); + }); + //装载特殊的打卡机 + if(Collections.isNotEmpty(tsDeviceSn)){ + for (String ts : tsDeviceSn){ + snUserPhotoList.putAll(initTsDkDevice(ts)); + } + } + } + }else{ + //如果userPhotoList参数存在, 则每个sn设备都需要下发 + snList.forEach(sn ->{ + snUserPhotoList.put(sn, userPhotoList); + }); + } + + //发送数据的类型 + StaffDto cau = new StaffDto(); + //该接口固定为to_device,发送给设备用于识别对应哪个指令 + cau.setCmd("to_device"); + //无用值,空串 + cau.setForm(""); + //给服务端预留的补充字段,设备端不处理这个字段内容。设备在响应这条指令时原样返回 + cau.setExtra(""); + + //发送的具体Data + StaffData caud = new StaffData(); + caud.setCmd("addUser"); + caud.setTts_name(""); + caud.setEffect_time(""); + caud.setId_valid(""); + caud.setIc(""); + caud.setPhone(""); + caud.setMode(0); + + //循环发送信息照片信息 + for (String sn : snList) { + //设备号 + cau.setTo(sn); + //组装主要的下发信息 + for(Map userPhoto : snUserPhotoList.get(sn)){ + caud.setUser_id(userPhoto.get("userId")); + caud.setName(userPhoto.get("name")); + caud.setFace_template(userPhoto.get("photoUrl")); + //循环替换属性 + cau.setData(caud); + //调用websocket,推送给设备 + WebSocketUsers.sendMessageToUserByText(sessionMap.get(sn), JSONObject.toJSONString(cau)); + } + } + + + + + + return true; + } + + @Override + public Boolean sendButtons(List snList) { + Map sessionMap = checkSession(snList); + + List bt_list = this.eqButtonMapper.selectEqButtonList(null); + CwButtonVo cbv = new CwButtonVo(); + CwButtonData cbd = new CwButtonData(); + cbv.setCmd("to_device"); + cbv.setForm(""); + cbd.setCmd("setButtons"); + CwBottonDto cwBottonDto = null; + List list2 = new ArrayList<>(); + for (EqButton button : bt_list) { + cwBottonDto = new CwBottonDto(); + cwBottonDto.setIcon(button.getImage()); + list2.add(cwBottonDto); + } + cbd.setValue(list2); + cbv.setData(cbd); + for(String sn : snList){ + cbv.setTo(sn); + WebSocketUsers.sendMessageToUserByText(sessionMap.get(sn), JSONObject.toJSONString(cbv, new com.alibaba.fastjson2.JSONWriter.Feature[0])); + } + return true; + } + + @Override + public void checkDevice() { + List sessionIds = WebSocketUsers.getUsers().keySet().stream().collect(Collectors.toList()); + update(new UpdateWrapper().set("type","连接已断开").notIn(Collections.isNotEmpty(sessionIds), "session_id", sessionIds)); } } diff --git a/evo-admin/src/main/java/com/evo/framework/web/exception/GlobalExceptionHandler.java b/evo-admin/src/main/java/com/evo/framework/web/exception/GlobalExceptionHandler.java index 7c6fd61..2f2f4ac 100644 --- a/evo-admin/src/main/java/com/evo/framework/web/exception/GlobalExceptionHandler.java +++ b/evo-admin/src/main/java/com/evo/framework/web/exception/GlobalExceptionHandler.java @@ -1,6 +1,8 @@ package com.evo.framework.web.exception; import javax.servlet.http.HttpServletRequest; + +import com.evo.common.exception.WebSocketException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.security.access.AccessDeniedException; @@ -18,6 +20,7 @@ import com.evo.common.exception.DemoModeException; import com.evo.common.exception.ServiceException; import com.evo.common.utils.StringUtils; import com.evo.common.utils.html.EscapeUtil; +import org.springframework.web.socket.WebSocketExtension; /** * 全局异常处理器 @@ -142,4 +145,13 @@ public class GlobalExceptionHandler { return AjaxResult.error("演示模式,不允许操作"); } + + @ExceptionHandler(WebSocketException.class) + public AjaxResult handleWebSocketExtension(WebSocketException e) + { + return AjaxResult.error(e.getMessage()); + } + + + } diff --git a/evo-admin/src/main/java/com/evo/framework/websocket/WebSocketServer.java b/evo-admin/src/main/java/com/evo/framework/websocket/WebSocketServer.java index c8f7445..bd3940d 100644 --- a/evo-admin/src/main/java/com/evo/framework/websocket/WebSocketServer.java +++ b/evo-admin/src/main/java/com/evo/framework/websocket/WebSocketServer.java @@ -2,6 +2,8 @@ package com.evo.framework.websocket; import com.alibaba.fastjson2.JSONObject; import com.evo.common.constant.Constants; +import com.evo.common.utils.Collections; +import com.evo.common.utils.StringUtils; import com.evo.equipment.domain.EqSnDetail; import com.evo.equipment.service.IEqButtonService; import com.evo.equipment.service.IEqSnDetailService; @@ -10,6 +12,8 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.stereotype.Component; + +import javax.annotation.Resource; import javax.websocket.*; import javax.websocket.server.ServerEndpoint; import java.util.Date; @@ -27,9 +31,7 @@ public class WebSocketServer{ private static IEqSnDetailService snDetailService; - private static IEqButtonService qButtonService; - - @Autowired + @Resource public void setBrandService(IEqSnDetailService snDetailService) { WebSocketServer.snDetailService = snDetailService; } @@ -133,36 +135,36 @@ public class WebSocketServer{ String timestamp = jsonObject.getString("timestamp"); //根据设备号查询 EqSnDetail snDetail = snDetailService.selectEqSnDetailBySn(sn); - + //不存在设备信息 + if(snDetail == null){ + //说明没有添加过此设备,添加 + snDetail = new EqSnDetail(); + //设备号 + snDetail.setSn(sn); + snDetail.setDelFlag(Constants.DELETE_FLAG_0); + } //格式化时间 Date date = new Date(); - if(null != timestamp){ + if(StringUtils.isNotEmpty(timestamp)){ date.setTime(Long.valueOf(timestamp)*1000); } - if(null != snDetail){ - //说明添加过此设备,修改 - snDetail.setVersionCode(version_code); - snDetail.setVersionName(version_name); - snDetail.setIp(ip); - snDetail.setSnTime(date); - snDetail.setType("已连接"); + //说明添加过此设备,修改 + snDetail.setVersionCode(version_code); + snDetail.setVersionName(version_name); + snDetail.setIp(ip); + snDetail.setSessionId(session.getId()); + snDetail.setSnTime(date); + snDetail.setType("已连接"); + + if(null != snDetail.getId()){ //修改 snDetailService.updateEqSnDetail(snDetail); }else{ - //说明没有添加过此设备,添加 - snDetail = new EqSnDetail(); - //设备号 - snDetail.setSn(sn); - snDetail.setVersionCode(version_code); - snDetail.setVersionName(version_name); - snDetail.setIp(ip); - snDetail.setSnTime(date); - snDetail.setType("已连接"); - snDetail.setDelFlag(Constants.DELETE_FLAG_0); //添加 snDetailService.insertEqSnDetail(snDetail); } - qButtonService.sendButton(snDetail); + //发送设备按钮信息 + snDetailService.sendButtons(Collections.asList(snDetail.getSn())); }else{ //接受设备端返回的数据,先不做处理 System.out.println("设备返回信息:"+message); diff --git a/evo-admin/src/main/java/com/evo/framework/websocket/WebSocketUsers.java b/evo-admin/src/main/java/com/evo/framework/websocket/WebSocketUsers.java index 5738c6f..2b1e808 100644 --- a/evo-admin/src/main/java/com/evo/framework/websocket/WebSocketUsers.java +++ b/evo-admin/src/main/java/com/evo/framework/websocket/WebSocketUsers.java @@ -1,5 +1,7 @@ package com.evo.framework.websocket; +import com.evo.common.exception.WebSocketException; +import com.evo.common.utils.Collections; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -102,6 +104,9 @@ public class WebSocketUsers */ public static void sendMessageToUsersByText(String message){ Collection values = USERS.values(); + if(Collections.isEmpty(values)){ + throw new WebSocketException("当前没有任何设备在线"); + } for (Session value : values){ sendMessageToUserByText(value, message); } @@ -130,6 +135,7 @@ public class WebSocketUsers else { LOGGER.info("\n[你已离线]"); + throw new WebSocketException("当前设备已离线"); } } } diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/controller/SpecialOverTimeController.java b/evo-admin/src/main/java/com/evo/personnelMatters/controller/SpecialOverTimeController.java index 1be0d80..b128483 100644 --- a/evo-admin/src/main/java/com/evo/personnelMatters/controller/SpecialOverTimeController.java +++ b/evo-admin/src/main/java/com/evo/personnelMatters/controller/SpecialOverTimeController.java @@ -138,7 +138,7 @@ public class SpecialOverTimeController extends BaseController { //给服务端预留的补充字段,设备端不处理这个字段内容。设备在响应这条指令时原样返回 cau.setExtra(""); //发送的数据 - caud.setCmd("addUser"); +// caud.setCmd("addUser"); caud.setUser_id(eqOverStaff.getUserId().toString()); caud.setName(eqOverStaff.getStaffName()); caud.setTts_name(""); diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/mapper/BsOverTimeMapper.java b/evo-admin/src/main/java/com/evo/personnelMatters/mapper/BsOverTimeMapper.java index e335a8b..0be13e1 100644 --- a/evo-admin/src/main/java/com/evo/personnelMatters/mapper/BsOverTimeMapper.java +++ b/evo-admin/src/main/java/com/evo/personnelMatters/mapper/BsOverTimeMapper.java @@ -1,8 +1,9 @@ package com.evo.personnelMatters.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.evo.personnelMatters.domain.SpecialOverTime; -public interface BsOverTimeMapper { +public interface BsOverTimeMapper extends BaseMapper { public int updateSpecialOverTime(SpecialOverTime specialOverTime); diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/mapper/EqOverStaffMapper.java b/evo-admin/src/main/java/com/evo/personnelMatters/mapper/EqOverStaffMapper.java index 520c347..6615c8e 100644 --- a/evo-admin/src/main/java/com/evo/personnelMatters/mapper/EqOverStaffMapper.java +++ b/evo-admin/src/main/java/com/evo/personnelMatters/mapper/EqOverStaffMapper.java @@ -1,5 +1,6 @@ package com.evo.personnelMatters.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.evo.personnelMatters.domain.EqOverStaff; import java.util.List; @@ -9,7 +10,7 @@ import java.util.List; * @author evo * @date 2025-04-17 */ -public interface EqOverStaffMapper +public interface EqOverStaffMapper extends BaseMapper { /** * 查询照片管理 diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/service/SpecialOverTimeService.java b/evo-admin/src/main/java/com/evo/personnelMatters/service/SpecialOverTimeService.java index 72febd4..956f439 100644 --- a/evo-admin/src/main/java/com/evo/personnelMatters/service/SpecialOverTimeService.java +++ b/evo-admin/src/main/java/com/evo/personnelMatters/service/SpecialOverTimeService.java @@ -1,11 +1,12 @@ package com.evo.personnelMatters.service; +import com.baomidou.mybatisplus.extension.service.IService; import com.evo.common.core.domain.AjaxResult; import com.evo.personnelMatters.domain.EqOverStaff; import com.evo.personnelMatters.domain.SpecialOverTime; import java.util.List; -public interface SpecialOverTimeService { +public interface SpecialOverTimeService extends IService { public SpecialOverTime selectSpecialOverTimeById(); diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/SpecialOverTimeServiceImpl.java b/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/SpecialOverTimeServiceImpl.java index ab84a25..d6a53fa 100644 --- a/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/SpecialOverTimeServiceImpl.java +++ b/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/SpecialOverTimeServiceImpl.java @@ -1,5 +1,6 @@ package com.evo.personnelMatters.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.evo.common.core.domain.AjaxResult; import com.evo.common.utils.SecurityUtils; import com.evo.personnelMatters.domain.EqOverStaff; @@ -13,21 +14,19 @@ import java.util.Date; import java.util.List; @Service -public class SpecialOverTimeServiceImpl implements SpecialOverTimeService { +public class SpecialOverTimeServiceImpl extends ServiceImpl implements SpecialOverTimeService { - @Resource - private BsOverTimeMapper bsOverTimeMapper; @Resource private EqOverStaffMapper eqOverStaffMapper; @Override public SpecialOverTime selectSpecialOverTimeById(){ - return bsOverTimeMapper.selectSpecialOverTimeById(); + return getBaseMapper().selectSpecialOverTimeById(); } @Override public AjaxResult addSpecialOverTime(SpecialOverTime specialOverTime){ - int i = bsOverTimeMapper.updateSpecialOverTime(specialOverTime); + int i = getBaseMapper().updateSpecialOverTime(specialOverTime); if(i < 1){ return AjaxResult.error("保存失败"); } @@ -60,6 +59,7 @@ public class SpecialOverTimeServiceImpl implements SpecialOverTimeService { @Override public int insertEqOverStaff(EqOverStaff eqOverStaff) { + eqOverStaff.setCreateBy(SecurityUtils.getUsername()); eqOverStaff.setCreateTime(new Date()); eqOverStaff.setDelFlag("0"); diff --git a/evo-admin/src/main/java/com/evo/restaurant/mapper/RzRestaurantImagesMapper.java b/evo-admin/src/main/java/com/evo/restaurant/mapper/RzRestaurantImagesMapper.java index 7ec13d6..9f08471 100644 --- a/evo-admin/src/main/java/com/evo/restaurant/mapper/RzRestaurantImagesMapper.java +++ b/evo-admin/src/main/java/com/evo/restaurant/mapper/RzRestaurantImagesMapper.java @@ -1,5 +1,6 @@ package com.evo.restaurant.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.evo.restaurant.domain.RzRestaurantImages; import java.util.List; @@ -10,7 +11,7 @@ import java.util.List; * @author chenyj * @date 2024-10-25 */ -public interface RzRestaurantImagesMapper +public interface RzRestaurantImagesMapper extends BaseMapper { /** * 查询餐饮照片管理 diff --git a/evo-admin/src/main/java/com/evo/restaurant/service/IRzRestaurantImagesService.java b/evo-admin/src/main/java/com/evo/restaurant/service/IRzRestaurantImagesService.java index 645ae61..2e5c4b0 100644 --- a/evo-admin/src/main/java/com/evo/restaurant/service/IRzRestaurantImagesService.java +++ b/evo-admin/src/main/java/com/evo/restaurant/service/IRzRestaurantImagesService.java @@ -1,5 +1,6 @@ package com.evo.restaurant.service; +import com.baomidou.mybatisplus.extension.service.IService; import com.evo.common.core.domain.AjaxResult; import com.evo.restaurant.domain.RzRestaurantImages; import org.springframework.web.multipart.MultipartFile; @@ -12,7 +13,7 @@ import java.util.List; * @author chenyj * @date 2024-10-25 */ -public interface IRzRestaurantImagesService +public interface IRzRestaurantImagesService extends IService { /** * 查询餐饮照片管理列表 diff --git a/evo-admin/src/main/java/com/evo/restaurant/service/impl/RzRestaurantImagesServiceImpl.java b/evo-admin/src/main/java/com/evo/restaurant/service/impl/RzRestaurantImagesServiceImpl.java index 896c4ff..4073cc1 100644 --- a/evo-admin/src/main/java/com/evo/restaurant/service/impl/RzRestaurantImagesServiceImpl.java +++ b/evo-admin/src/main/java/com/evo/restaurant/service/impl/RzRestaurantImagesServiceImpl.java @@ -1,13 +1,16 @@ package com.evo.restaurant.service.impl; import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.evo.common.constant.Constants; import com.evo.common.core.domain.AjaxResult; +import com.evo.common.utils.Collections; import com.evo.common.utils.DateUtils; import com.evo.common.utils.SecurityUtils; import com.evo.common.utils.StringUtils; import com.evo.equipment.domain.vo.StaffData; import com.evo.equipment.domain.vo.StaffDto; +import com.evo.equipment.service.IEqSnDetailService; import com.evo.framework.websocket.WebSocketUsers; import com.evo.restaurant.domain.RzRestaurantImages; import com.evo.restaurant.domain.RzRestaurantStatistics; @@ -31,13 +34,12 @@ import java.util.List; * @date 2024-10-25 */ @Service -public class RzRestaurantImagesServiceImpl implements IRzRestaurantImagesService +public class RzRestaurantImagesServiceImpl extends ServiceImpl implements IRzRestaurantImagesService { - @Resource - private RzRestaurantImagesMapper rzRestaurantImagesMapper; @Resource private RzRestaurantStatisticsMapper rzRestaurantStatisticsMapper; //餐饮统计 - + @Resource + private IEqSnDetailService eqSnDetailService;//餐饮统计 /** * 查询餐饮照片管理列表 @@ -48,7 +50,7 @@ public class RzRestaurantImagesServiceImpl implements IRzRestaurantImagesService @Override public List selectRzRestaurantImagesList(RzRestaurantImages rzRestaurantImages) { - return rzRestaurantImagesMapper.selectRzRestaurantImagesList(rzRestaurantImages); + return getBaseMapper().selectRzRestaurantImagesList(rzRestaurantImages); } /** @@ -61,7 +63,7 @@ public class RzRestaurantImagesServiceImpl implements IRzRestaurantImagesService public int deleteRzRestaurantImagesById(Long id) { //根据id查询信息 - RzRestaurantImages rzRestaurantImages = rzRestaurantImagesMapper.selectRzRestaurantImagesById(id); + RzRestaurantImages rzRestaurantImages = getBaseMapper().selectRzRestaurantImagesById(id); //删除打卡机照片 String message = ""; //需要返回的对象 @@ -92,7 +94,7 @@ public class RzRestaurantImagesServiceImpl implements IRzRestaurantImagesService rzRestaurantImages.setDelFlag(Constants.DELETE_FLAG_1); rzRestaurantImages.setUpdateTime(new Date()); rzRestaurantImages.setUpdateBy(SecurityUtils.getUsername()); - return rzRestaurantImagesMapper.updateRzRestaurantImages(rzRestaurantImages); + return getBaseMapper().updateRzRestaurantImages(rzRestaurantImages); } /** @@ -150,7 +152,7 @@ public class RzRestaurantImagesServiceImpl implements IRzRestaurantImagesService rzRestaurantImages.setCreateBy(SecurityUtils.getUsername()); rzRestaurantImages.setCreateTime(DateUtils.getNowDate()); rzRestaurantImages.setDelFlag(Constants.DELETE_FLAG_0); - int i = rzRestaurantImagesMapper.insertRzRestaurantImages(rzRestaurantImages); + int i = getBaseMapper().insertRzRestaurantImages(rzRestaurantImages); if(i < 1){ return AjaxResult.error(); } @@ -166,34 +168,8 @@ public class RzRestaurantImagesServiceImpl implements IRzRestaurantImagesService if(i < 1){ return AjaxResult.error(); } - /** 上传打卡机 */ - //需要返回的对象 - StaffDto cau = new StaffDto(); - //发送的数据 - StaffData caud = new StaffData(); - //指定打卡机传输照片 - //该接口固定为to_device,发送给设备用于识别对应哪个指令 - cau.setCmd("to_device"); - //无用值,空串 - cau.setForm(""); - //设备号 - cau.setTo(com.evo.equipment.constant.Constants.EQ_DEVICE_CODE); - //给服务端预留的补充字段,设备端不处理这个字段内容。设备在响应这条指令时原样返回 - cau.setExtra(""); - //发送的数据 - caud.setCmd("addUser"); - caud.setUser_id(rzRestaurantImages.getId().toString()); - caud.setName(name); - caud.setTts_name(""); - caud.setFace_template(com.evo.equipment.constant.Constants.STAFF_IMAGE_URL+originalFilename); - caud.setEffect_time(""); - caud.setId_valid(""); - caud.setIc(""); - caud.setPhone(""); - caud.setMode(0); - cau.setData(caud); - //调用websocket,推送给设备 - WebSocketUsers.sendMessageToUsersByText(JSONObject.toJSONString(cau)); + //下发照片 + eqSnDetailService.sendPhoto(Collections.asList(com.evo.equipment.constant.Constants.EQ_DEVICE_CODE), Collections.asList(Collections.asMap("userId", String.valueOf(rzRestaurantImages.getId()), "name", name, "photoUrl", com.evo.equipment.constant.Constants.STAFF_IMAGE_URL+originalFilename))); return AjaxResult.success(); } } diff --git a/evo-admin/src/main/java/com/evo/system/controller/CommonController.java b/evo-admin/src/main/java/com/evo/system/controller/CommonController.java index f7f1d62..dc5e916 100644 --- a/evo-admin/src/main/java/com/evo/system/controller/CommonController.java +++ b/evo-admin/src/main/java/com/evo/system/controller/CommonController.java @@ -6,11 +6,15 @@ import java.io.FileOutputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.List; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import com.evo.attendance.domain.RzSysParam; +import com.evo.attendance.service.IRzSysParamService; import com.evo.common.annotation.Anonymous; import com.evo.common.core.domain.entity.RzUpload; +import com.evo.common.utils.ParamUtils; import com.evo.common.utils.ip.IpUtils; import com.evo.system.service.RzUploadService; import org.slf4j.Logger; @@ -42,6 +46,8 @@ public class CommonController private ServerConfig serverConfig; @Autowired private RzUploadService rzUploadService; + @Resource + private IRzSysParamService paramService; private static final String FILE_DELIMETER = ","; @@ -87,7 +93,7 @@ public class CommonController String filePath = EvoConfig.getUploadPath(); // 上传并返回新文件名称 String fileName = FileUploadUtils.upload(filePath, file); - String url = serverConfig.getUrl() + fileName; + String url = ParamUtils.getGlobalStaticUrl() + fileName; RzUpload upload = new RzUpload(); upload.setType(type); upload.setUrl(url); diff --git a/evo-admin/src/main/java/com/evo/system/service/RzUploadService.java b/evo-admin/src/main/java/com/evo/system/service/RzUploadService.java index 8d8f460..9997403 100644 --- a/evo-admin/src/main/java/com/evo/system/service/RzUploadService.java +++ b/evo-admin/src/main/java/com/evo/system/service/RzUploadService.java @@ -35,4 +35,12 @@ public interface RzUploadService */ public int updateUploadBusinessId(RzUpload upload); + /*** + * 根据业务ID和类型, 获取数据信息 + * @param businessIds 业务ID + * @param type 类型: 头像: avatar + * @return + */ + public List selectListByBusinessIdAndyType(List businessIds, String type); + } diff --git a/evo-admin/src/main/java/com/evo/system/service/impl/RzUploadServiceImpl.java b/evo-admin/src/main/java/com/evo/system/service/impl/RzUploadServiceImpl.java index 7d69b78..c492aa9 100644 --- a/evo-admin/src/main/java/com/evo/system/service/impl/RzUploadServiceImpl.java +++ b/evo-admin/src/main/java/com/evo/system/service/impl/RzUploadServiceImpl.java @@ -1,5 +1,6 @@ package com.evo.system.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.evo.common.annotation.DataScope; import com.evo.common.constant.UserConstants; @@ -60,9 +61,14 @@ public class RzUploadServiceImpl extends ServiceImpl i public int updateUploadBusinessId(RzUpload upload) { getBaseMapper().updateUploadBusinessId(upload); - upload.setValid("valid"); + upload.setValid("invalid"); getBaseMapper().updateUploadValidByBusinessId(upload); return 1; } + @Override + public List selectListByBusinessIdAndyType(List businessIds, String type) { + return getBaseMapper().selectList(new LambdaQueryWrapper().in(RzUpload::getBusinessId, businessIds).eq(RzUpload::getType,type).eq(RzUpload::getValid,"valid").orderByDesc(RzUpload::getUploadTime)); + } + } diff --git a/evo-admin/src/main/java/com/evo/system/service/impl/SysStaffServiceImpl.java b/evo-admin/src/main/java/com/evo/system/service/impl/SysStaffServiceImpl.java index cc653ab..e02ead2 100644 --- a/evo-admin/src/main/java/com/evo/system/service/impl/SysStaffServiceImpl.java +++ b/evo-admin/src/main/java/com/evo/system/service/impl/SysStaffServiceImpl.java @@ -1,19 +1,5 @@ package com.evo.system.service.impl; -import java.io.BufferedOutputStream; -import java.io.File; -import java.io.FileOutputStream; -import java.io.InputStream; -import java.math.BigDecimal; -import java.text.SimpleDateFormat; -import java.time.Period; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Date; -import java.util.List; -import java.util.stream.Collectors; - -import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.evo.attendance.domain.RzAttendance; @@ -31,14 +17,9 @@ import com.evo.common.utils.DateUtils; import com.evo.common.utils.SecurityUtils; import com.evo.common.utils.StringUtils; import com.evo.common.utils.bean.BeanUtils; -import com.evo.common.utils.ip.IpUtils; -import com.evo.equipment.domain.vo.StaffData; -import com.evo.equipment.domain.vo.StaffDto; -import com.evo.framework.websocket.WebSocketUsers; +import com.evo.equipment.service.IEqSnDetailService; import com.evo.personnelMatters.domain.RzHoliday; -import com.evo.personnelMatters.domain.RzSubsidy; import com.evo.personnelMatters.mapper.RzHolidayMapper; -import com.evo.personnelMatters.mapper.RzSubsidyMapper; import com.evo.restaurant.domain.RzRestaurantStatistics; import com.evo.restaurant.mapper.RzRestaurantStatisticsMapper; import com.evo.system.domain.SysStaff; @@ -61,7 +42,19 @@ import org.apache.poi.ss.usermodel.WorkbookFactory; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; + import javax.annotation.Resource; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; /** * 员工管理Service业务层处理 @@ -80,8 +73,6 @@ public class SysStaffServiceImpl extends ServiceImpl i @Resource private SysDeptMapper deptMapper; //部门信息 @Resource - private RzSubsidyMapper rzSubsidyMapper; //补助信息 - @Resource private RzAttendanceStatisticalMapper rzAttendanceStatisticalMapper; //考勤统计 @Resource private RzAttendanceMapper rzAttendanceMapper; //打卡记录 @@ -91,8 +82,8 @@ public class SysStaffServiceImpl extends ServiceImpl i private RzRestaurantStatisticsMapper rzRestaurantStatisticsMapper; //餐饮统计 @Resource private RzUploadService rzUploadService;//餐饮统计 - @Resource - private SysStaffMapper sysStaffMapper; + @Resource + private IEqSnDetailService eqSnDetailService;//餐饮统计 /** * 查询员工管理 * @@ -119,9 +110,9 @@ public class SysStaffServiceImpl extends ServiceImpl i public List selectSysStaffList(SysStaff sysStaff) { List res_list = getBaseMapper().selectSysStaffList(sysStaff); - for (SysStaff staff : res_list) { - staff.setDeptName(deptMapper.selectDeptById(staff.getDeptId()).getDeptName()); - } +// for (SysStaff staff : res_list) { +// staff.setDeptName(deptMapper.selectDeptById(staff.getDeptId()).getDeptName()); +// } return res_list; } /** @@ -194,45 +185,15 @@ public class SysStaffServiceImpl extends ServiceImpl i } catch (Exception e) { log.error("处理上传照片信息出现错误", e); } - /** 上传打卡机 */ - //需要返回的对象 - StaffDto cau = new StaffDto(); - //发送的数据 - StaffData caud = new StaffData(); - //定义公共打卡机 - List dkj_list = new ArrayList(); - dkj_list.add(com.evo.equipment.constant.Constants.EQ_DEVICE_CODE); //食堂 - dkj_list.add(com.evo.equipment.constant.Constants.EQ_DEVICE_PUBLIC_CODE); //公共 + List dkj_list = new ArrayList(); +// dkj_list.add(com.evo.equipment.constant.Constants.EQ_DEVICE_CODE); //食堂 +// dkj_list.add(com.evo.equipment.constant.Constants.EQ_DEVICE_PUBLIC_CODE); //公共 dkj_list.add(sysStaff.getTimeClock()); - - for (String s : dkj_list) { - //该接口固定为to_device,发送给设备用于识别对应哪个指令 - cau.setCmd("to_device"); - //无用值,空串 - cau.setForm(""); - //设备号 - cau.setTo(s); - //给服务端预留的补充字段,设备端不处理这个字段内容。设备在响应这条指令时原样返回 - cau.setExtra(""); - //发送的数据 - caud.setCmd("addUser"); - caud.setUser_id(sysStaff.getUserId()+""); - caud.setName(sysStaff.getName()); - caud.setTts_name(""); - caud.setFace_template(IpUtils.getServerUrl()+ upload.getFileName()); - caud.setEffect_time(""); - caud.setId_valid(""); - caud.setIc(""); - caud.setPhone(""); - caud.setMode(0); - cau.setData(caud); - //调用websocket,推送给设备 - WebSocketUsers.sendMessageToUsersByText(JSONObject.toJSONString(cau)); - } + //下发照片 + eqSnDetailService.sendPhoto(dkj_list, Collections.asList(Collections.asMap("userId", String.valueOf(sysStaff.getUserId()), "name", sysStaff.getName(), "photoUrl", com.evo.equipment.constant.Constants.STAFF_IMAGE_URL_OVER_TIME+upload.getFileName()))); } } - /** * 创建员工详情信息 * @param sysStaff @@ -486,6 +447,8 @@ public class SysStaffServiceImpl extends ServiceImpl i createRzAttendance(sysStaff, getMonthAndDays()); //餐饮统计 createRestaurantStatistics(sysStaff); + //处理考勤机相关信息 + initCheckDevice(sysStaff); } return AjaxResult.success(); } @@ -1021,6 +984,6 @@ public class SysStaffServiceImpl extends ServiceImpl i LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(SysStaff::getName,employeeName); - return sysStaffMapper.selectOne(wrapper); + return getBaseMapper().selectOne(wrapper); } } diff --git a/evo-admin/src/main/java/com/evo/task/TaskController.java b/evo-admin/src/main/java/com/evo/task/TaskController.java index 318debe..e15b642 100644 --- a/evo-admin/src/main/java/com/evo/task/TaskController.java +++ b/evo-admin/src/main/java/com/evo/task/TaskController.java @@ -1,6 +1,7 @@ package com.evo.task; import com.evo.attendance.service.IRzAbnormalDetailService; +import com.evo.equipment.service.IEqSnDetailService; import com.evo.restaurant.service.IRzRestaurantStatisticsService; import com.evo.system.service.ISysStaffService; import org.springframework.scheduling.annotation.Scheduled; @@ -16,7 +17,9 @@ public class TaskController { @Resource private IRzRestaurantStatisticsService rzRestaurantStatisticsService; //餐饮统计 @Resource - private IRzAbnormalDetailService abnormalDetailService; //异常卡 + private IRzAbnormalDetailService abnormalDetailService; + @Resource + private IEqSnDetailService eqSnDetailService; //异常卡 /** * 每月1号 0:20 自动生成考勤数据 @@ -56,4 +59,12 @@ public class TaskController { public void calculationOfSeniority(){ sysStaffService.calculationOfSeniority(); } + + /** + * 每月1号 0:20 自动生成考勤数据 + */ + @Scheduled(fixedRate = 5000) + public void checkDevice(){ + eqSnDetailService.checkDevice(); + }; } diff --git a/evo-admin/src/main/resources/mapper/equipment/EqSnDetailMapper.xml b/evo-admin/src/main/resources/mapper/equipment/EqSnDetailMapper.xml index 95ef949..cc9b866 100644 --- a/evo-admin/src/main/resources/mapper/equipment/EqSnDetailMapper.xml +++ b/evo-admin/src/main/resources/mapper/equipment/EqSnDetailMapper.xml @@ -37,6 +37,7 @@ ip, sn_time, type, + session_id, del_flag, create_time, create_by, @@ -48,6 +49,7 @@ #{ip}, #{snTime}, #{type}, + #{sessionId}, #{delFlag}, #{createTime}, #{createBy}, @@ -63,6 +65,7 @@ ip = #{ip}, sn_time = #{snTime}, type = #{type}, + session_id = #{sessionId}, del_flag = #{delFlag}, update_time = #{updateTime}, update_by = #{updateBy}, diff --git a/evo-admin/src/main/resources/mapper/personnelMatters/EqOverStaffMapper.xml b/evo-admin/src/main/resources/mapper/personnelMatters/EqOverStaffMapper.xml index 5ab128a..9d92918 100644 --- a/evo-admin/src/main/resources/mapper/personnelMatters/EqOverStaffMapper.xml +++ b/evo-admin/src/main/resources/mapper/personnelMatters/EqOverStaffMapper.xml @@ -21,12 +21,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" diff --git a/evo-admin/src/main/resources/mapper/system/SysStaffMapper.xml b/evo-admin/src/main/resources/mapper/system/SysStaffMapper.xml index 883b01b..bd84b46 100644 --- a/evo-admin/src/main/resources/mapper/system/SysStaffMapper.xml +++ b/evo-admin/src/main/resources/mapper/system/SysStaffMapper.xml @@ -52,28 +52,30 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select user_id,company_name, dept_id, code, name, id_card,is_leader, sex, age, phone, address, level, major, school, bank_number,social_subsidy, bank, employment_date, experience, worker_term, regular_date, quit_date, contract_start, contract_end, contract_type, social_type, seniority, is_overtime_pay, zs_flag, secrecy, injury, insurance, introducer, clock_in, status, wages_ratio_date, remarks, del_flag, create_by, create_time, update_by, update_time from sys_staff + select user_id,company_name, dept_id, code, name, id_card,is_leader, sex, age, phone, address, level, major, school, bank_number,social_subsidy, bank, employment_date, experience, worker_term, regular_date, quit_date, contract_start, contract_end, contract_type, social_type, seniority, is_overtime_pay, zs_flag, secrecy, injury, insurance, introducer, clock_in, status, wages_ratio_date, remarks, del_flag, create_by, create_time, update_by, update_time, image_url from sys_staff