diff --git a/pom.xml b/pom.xml
index db7a57d..8365485 100644
--- a/pom.xml
+++ b/pom.xml
@@ -239,6 +239,7 @@
ruoyi-quartz
ruoyi-generator
ruoyi-common
+ ruoyi-pm
pom
diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
index cffc182..034b896 100644
--- a/ruoyi-admin/pom.xml
+++ b/ruoyi-admin/pom.xml
@@ -67,6 +67,18 @@
ruoyi-generator
+
+
+ com.ruoyi
+ ruoyi-pm
+ 4.8.1
+
+
+ com.ruoyi
+ ruoyi-api
+ 4.8.1
+
+
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index 301b1ad..4c587db 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -7,7 +7,7 @@ ruoyi:
# 版权年份
copyrightYear: 2025
# 实例演示开关
- demoEnabled: false
+ demoEnabled: true
# 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
profile: D:/ruoyi/uploadPath
# 获取ip地址开关
@@ -114,11 +114,11 @@ shiro:
cipherKey:
session:
# Session超时时间,-1代表永不过期(默认30分钟)
- expireTime: 30
+ expireTime: -1
# 同步session到数据库的周期(默认1分钟)
- dbSyncPeriod: 1
+ dbSyncPeriod: 1000
# 相隔多久检查一次session的有效性,默认就是10分钟
- validationInterval: 10
+ validationInterval: 1000
# 同一个用户最大会话数,比如2的意思是同一个账号允许最多同时两个人登录(默认-1不限制)
maxSession: -1
# 踢出之前登录的/之后登录的用户,默认踢出之前登录的用户
diff --git a/ruoyi-api/pom.xml b/ruoyi-api/pom.xml
new file mode 100644
index 0000000..d30e588
--- /dev/null
+++ b/ruoyi-api/pom.xml
@@ -0,0 +1,29 @@
+
+
+
+ ruoyi
+ com.ruoyi
+ 4.8.1
+
+ 4.0.0
+
+ ruoyi-api
+
+
+ com.ruoyi
+ ruoyi-common
+ true
+
+
+ com.ruoyi
+ ruoyi-pm
+ 4.8.1
+ compile
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-api/src/main/java/com/ruoyi/api/controller/ApiController.java b/ruoyi-api/src/main/java/com/ruoyi/api/controller/ApiController.java
new file mode 100644
index 0000000..85c3d74
--- /dev/null
+++ b/ruoyi-api/src/main/java/com/ruoyi/api/controller/ApiController.java
@@ -0,0 +1,38 @@
+package com.ruoyi.api.controller;
+
+import com.ruoyi.api.service.impl.ApiService;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.pm.domain.PmBasePersonInfo;
+import com.ruoyi.pm.service.IPmBasePersonInfoService;
+import com.ruoyi.pm.service.IPmRecordSanService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * @author wanghao
+ * @date 2024/1/11 8:55
+ */
+@RestController
+@RequestMapping("/api")
+public class ApiController {
+
+ @Autowired
+ private ApiService apiService;
+
+ @Autowired
+ private IPmRecordSanService pmRecordSanService;
+ @Autowired
+ private IPmBasePersonInfoService pmBasePersonInfoService;
+
+ @PostMapping("/selectPersonInfo")
+ public AjaxResult selectPersonInfo(String epc) {
+ PmBasePersonInfo info = pmBasePersonInfoService.selectPersonInfoByEpc(epc);
+ if (info != null) {
+ return AjaxResult.success(info);
+ }
+ return AjaxResult.error("未查询到该人员信息");
+ }
+}
diff --git a/ruoyi-api/src/main/java/com/ruoyi/api/controller/LoginController.java b/ruoyi-api/src/main/java/com/ruoyi/api/controller/LoginController.java
new file mode 100644
index 0000000..6843604
--- /dev/null
+++ b/ruoyi-api/src/main/java/com/ruoyi/api/controller/LoginController.java
@@ -0,0 +1,55 @@
+package com.ruoyi.api.controller;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.ruoyi.api.domain.APKVersion;
+import com.ruoyi.api.service.impl.LoginService;
+import com.ruoyi.common.core.domain.AjaxResult;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * Created by wangh on 2020/7/17-15:18。
+ */
+@RestController
+@RequestMapping("/api")
+public class LoginController {
+ @Autowired
+ LoginService service;
+
+
+
+ @GetMapping("/login/finduser")
+ public String finduser(String name, String pass){
+ System.out.println("登录名称= "+name+" pass= "+pass);
+ return service.login(name,pass);
+ }
+ @GetMapping("/login/finduser1")
+ public AjaxResult finduser1(String name, String pass){
+ System.out.println("登录名称= "+name+" pass= "+pass);
+ return service.login1(name,pass);
+ }
+
+ @GetMapping("/getVersion")
+ public String getVersion(){
+ APKVersion apkVersion=service.getVersion();
+ apkVersion.setCode(0);
+ apkVersion.setMsg("");
+ if (apkVersion==null){
+ apkVersion=new APKVersion();
+ apkVersion.setUpdateStatus(0);
+ }else {
+ apkVersion.setUpdateStatus(1);
+ }
+
+
+ String s = JSONObject.toJSONString(apkVersion);
+ System.out.println("请求版本信息"+s);
+ return s;
+ }
+
+
+
+}
diff --git a/ruoyi-api/src/main/java/com/ruoyi/api/controller/PdaApkVersionController.java b/ruoyi-api/src/main/java/com/ruoyi/api/controller/PdaApkVersionController.java
new file mode 100644
index 0000000..861f878
--- /dev/null
+++ b/ruoyi-api/src/main/java/com/ruoyi/api/controller/PdaApkVersionController.java
@@ -0,0 +1,159 @@
+package com.ruoyi.api.controller;
+
+import com.ruoyi.api.domain.PdaApkVersion;
+import com.ruoyi.api.service.IPdaApkVersionService;
+import com.ruoyi.api.utils.Md5Utils;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.config.RuoYiConfig;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.file.FileUploadUtils;
+import com.ruoyi.common.utils.file.FileUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * 手持版本升级Controller
+ *
+ * @author ruoyi
+ * @date 2023-04-06
+ */
+@Controller
+@RequestMapping("/pda/pda_version")
+public class PdaApkVersionController extends BaseController {
+ private String prefix = "pda/pda_version";
+
+ @Autowired
+ private IPdaApkVersionService pdaApkVersionService;
+
+ @RequiresPermissions("pda:pda_version:view")
+ @GetMapping()
+ public String pda_version() {
+ return prefix + "/pda_version";
+ }
+
+ /**
+ * 查询手持版本升级列表
+ */
+ @RequiresPermissions("pda:pda_version:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(PdaApkVersion pdaApkVersion) {
+ startPage();
+ List list = pdaApkVersionService.selectPdaApkVersionList(pdaApkVersion);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出手持版本升级列表
+ */
+ @RequiresPermissions("pda:pda_version:export")
+ @Log(title = "手持版本升级", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult export(PdaApkVersion pdaApkVersion) {
+ List list = pdaApkVersionService.selectPdaApkVersionList(pdaApkVersion);
+ ExcelUtil util = new ExcelUtil(PdaApkVersion.class);
+ return util.exportExcel(list, "手持版本升级数据");
+ }
+
+ /**
+ * 新增手持版本升级
+ */
+ @GetMapping("/add")
+ public String add() {
+ return prefix + "/add";
+ }
+
+ /**
+ * 新增保存手持版本升级
+ */
+ @RequiresPermissions("pda:pda_version:add")
+ @Log(title = "手持版本升级", businessType = BusinessType.INSERT)
+ @PostMapping("/add")
+ @ResponseBody
+ public AjaxResult addSave(MultipartFile file, PdaApkVersion pdaApkVersion) {
+
+ // 上传文件路径
+ String filePath = RuoYiConfig.getUploadPath() + "/apk";
+ // 上传并返回新文件名称
+ try {
+ String fileName = FileUploadUtils.upload(filePath, file);
+// System.out.println("上传路径"+filePath+fileName);
+// D:/ruoyi/uploadPath/upload/profile/upload/2023/04/06/app-debug_20230406170208A001.apk
+ String pathname = filePath + fileName;
+ System.out.println("地址1" + pathname);
+ pathname = pathname.replace("/profile/upload/apk", "");
+ System.out.println("地址2:" + pathname);
+ File file1 = new File(pathname);
+ System.out.println("文件获取:" + file1.exists());
+ System.out.println(file1.length() / 1024);
+ pdaApkVersion.setApkSize(file1.length() / 1024);
+ pdaApkVersion.setApkMd5(Md5Utils.getFileMD5(file1));
+ pdaApkVersion.setDownloadUrl( "http://119.45.202.115:8090"+fileName);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return toAjax(pdaApkVersionService.insertPdaApkVersion(pdaApkVersion));
+
+ }
+
+ /**
+ * 修改手持版本升级
+ */
+ @RequiresPermissions("pda:pda_version:edit")
+ @GetMapping("/edit/{objid}")
+ @ResponseBody
+ public AjaxResult edit(@PathVariable("objid") Long objid) {
+ PdaApkVersion pdaApkVersion = pdaApkVersionService.selectPdaApkVersionByObjid(objid);
+ String downloadUrl = pdaApkVersion.getDownloadUrl();
+ String substring = downloadUrl.substring(downloadUrl.indexOf("/apk"), downloadUrl.length());
+ try {
+ FileUtils.deleteFile(RuoYiConfig.getUploadPath() + substring);
+ }catch (Exception e){
+
+ }
+
+ return toAjax(pdaApkVersionService.deletePdaApkVersionByObjid(objid));
+
+ }
+
+ /**
+ * 修改保存手持版本升级
+ */
+ @RequiresPermissions("pda:pda_version:edit")
+ @Log(title = "手持版本升级", businessType = BusinessType.UPDATE)
+ @PostMapping("/edit")
+ @ResponseBody
+ public AjaxResult editSave(PdaApkVersion pdaApkVersion) {
+ return toAjax(pdaApkVersionService.updatePdaApkVersion(pdaApkVersion));
+ }
+
+ /**
+ * 删除手持版本升级
+ */
+ @RequiresPermissions("pda:pda_version:remove")
+ @Log(title = "手持版本升级", businessType = BusinessType.DELETE)
+ @PostMapping("/remove")
+ @ResponseBody
+ public AjaxResult remove(String ids) {
+ System.out.println(ids);
+ PdaApkVersion pdaApkVersion = pdaApkVersionService.selectPdaApkVersionByObjid(Long.valueOf(ids));
+ String downloadUrl = pdaApkVersion.getDownloadUrl();
+ if (downloadUrl!=null&&!downloadUrl.isEmpty()){
+ String substring = downloadUrl.substring(downloadUrl.indexOf("/apk"), downloadUrl.length());
+ FileUtils.deleteFile(RuoYiConfig.getUploadPath() + substring);
+ }
+ return toAjax(pdaApkVersionService.deletePdaApkVersionByObjids(ids));
+ }
+}
diff --git a/ruoyi-api/src/main/java/com/ruoyi/api/domain/APKVersion.java b/ruoyi-api/src/main/java/com/ruoyi/api/domain/APKVersion.java
new file mode 100644
index 0000000..2c56546
--- /dev/null
+++ b/ruoyi-api/src/main/java/com/ruoyi/api/domain/APKVersion.java
@@ -0,0 +1,117 @@
+package com.ruoyi.api.domain;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+/**
+ * 手持版本升级对象 pda_apk_version
+ *
+ * @author ruoyi
+ * @date 2023-04-06
+ */
+public class APKVersion {
+ @JSONField(name = "Code")
+ private int Code;
+ @JSONField(name = "Msg")
+ private String Msg;
+ @JSONField(name = "UpdateStatus")
+ private int UpdateStatus;
+ @JSONField(name = "VersionCode")
+ private Long VersionCode;
+ @JSONField(name = "VersionName")
+ private String VersionName;
+ @JSONField(name = "ModifyContent")
+ private String ModifyContent;
+ @JSONField(name = "DownloadUrl")
+ private String DownloadUrl;
+ @JSONField(name = "ApkSize")
+ private int ApkSize;
+ @JSONField(name = "ApkMd5")
+ private String ApkMd5;
+
+ public int getCode() {
+ return Code;
+ }
+
+ public void setCode(int code) {
+ Code = code;
+ }
+
+ public String getMsg() {
+ return Msg;
+ }
+
+ public void setMsg(String msg) {
+ Msg = msg;
+ }
+
+ public int getUpdateStatus() {
+ return UpdateStatus;
+ }
+
+ public void setUpdateStatus(int updateStatus) {
+ UpdateStatus = updateStatus;
+ }
+
+ public Long getVersionCode() {
+ return VersionCode;
+ }
+
+ public void setVersionCode(Long versionCode) {
+ VersionCode = versionCode;
+ }
+
+ public String getVersionName() {
+ return VersionName;
+ }
+
+ public void setVersionName(String versionName) {
+ VersionName = versionName;
+ }
+
+ public String getModifyContent() {
+ return ModifyContent;
+ }
+
+ public void setModifyContent(String modifyContent) {
+ ModifyContent = modifyContent;
+ }
+
+ public String getDownloadUrl() {
+ return DownloadUrl;
+ }
+
+ public void setDownloadUrl(String downloadUrl) {
+ DownloadUrl = downloadUrl;
+ }
+
+ public int getApkSize() {
+ return ApkSize;
+ }
+
+ public void setApkSize(int apkSize) {
+ ApkSize = apkSize;
+ }
+
+ public String getApkMd5() {
+ return ApkMd5;
+ }
+
+ public void setApkMd5(String apkMd5) {
+ ApkMd5 = apkMd5;
+ }
+
+ @Override
+ public String toString() {
+ return "APKVersion{" +
+ "Code=" + Code +
+ ", Msg='" + Msg + '\'' +
+ ", UpdateStatus=" + UpdateStatus +
+ ", VersionCode=" + VersionCode +
+ ", VersionName='" + VersionName + '\'' +
+ ", ModifyContent='" + ModifyContent + '\'' +
+ ", DownloadUrl='" + DownloadUrl + '\'' +
+ ", ApkSize=" + ApkSize +
+ ", ApkMd5='" + ApkMd5 + '\'' +
+ '}';
+ }
+}
diff --git a/ruoyi-api/src/main/java/com/ruoyi/api/domain/ApiUser.java b/ruoyi-api/src/main/java/com/ruoyi/api/domain/ApiUser.java
new file mode 100644
index 0000000..0c98464
--- /dev/null
+++ b/ruoyi-api/src/main/java/com/ruoyi/api/domain/ApiUser.java
@@ -0,0 +1,45 @@
+package com.ruoyi.api.domain;
+
+/**
+ * @author wanghao
+ * @date 2023/8/23 10:25
+ */
+public class ApiUser {
+ private int id;
+ private String name;
+ private int status;
+ private String role_name;
+
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getStatus() {
+ return status;
+ }
+
+ public void setStatus(int status) {
+ this.status = status;
+ }
+
+ public String getRole_name() {
+ return role_name;
+ }
+
+ public void setRole_name(String role_name) {
+ this.role_name = role_name;
+ }
+}
diff --git a/ruoyi-api/src/main/java/com/ruoyi/api/domain/BroadCountNumber.java b/ruoyi-api/src/main/java/com/ruoyi/api/domain/BroadCountNumber.java
new file mode 100644
index 0000000..f7457c4
--- /dev/null
+++ b/ruoyi-api/src/main/java/com/ruoyi/api/domain/BroadCountNumber.java
@@ -0,0 +1,33 @@
+package com.ruoyi.api.domain;
+
+public class BroadCountNumber {
+ private String areaName;
+ private String locationCode;
+ private int countNumber;
+
+
+ public String getAreaName() {
+
+ return areaName;
+ }
+
+ public void setAreaName(String areaName) {
+ this.areaName = areaName;
+ }
+
+ public String getLocationCode() {
+ return locationCode;
+ }
+
+ public void setLocationCode(String locationCode) {
+ this.locationCode = locationCode;
+ }
+
+ public int getCountNumber() {
+ return countNumber;
+ }
+
+ public void setCountNumber(int countNumber) {
+ this.countNumber = countNumber;
+ }
+}
diff --git a/ruoyi-api/src/main/java/com/ruoyi/api/domain/CheckTaskInfo.java b/ruoyi-api/src/main/java/com/ruoyi/api/domain/CheckTaskInfo.java
new file mode 100644
index 0000000..6957212
--- /dev/null
+++ b/ruoyi-api/src/main/java/com/ruoyi/api/domain/CheckTaskInfo.java
@@ -0,0 +1,69 @@
+package com.ruoyi.api.domain;
+
+public class CheckTaskInfo {
+ private int index;
+ private Long id;
+ private Long areaId;
+ private String locationCode;
+ private String areaName;
+ private String taskState;
+
+ private Long inspectionId;
+
+
+ public Long getInspectionId() {
+ return inspectionId;
+ }
+
+ public void setInspectionId(Long inspectionId) {
+ this.inspectionId = inspectionId;
+ }
+
+ public Long getAreaId() {
+ return areaId;
+ }
+
+ public void setAreaId(Long areaId) {
+ this.areaId = areaId;
+ }
+
+ public String getTaskState() {
+ return taskState;
+ }
+
+ public void setTaskState(String taskState) {
+ this.taskState = taskState;
+ }
+
+ public int getIndex() {
+ return index;
+ }
+
+ public void setIndex(int index) {
+ this.index = index;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getLocationCode() {
+ return locationCode;
+ }
+
+ public void setLocationCode(String locationCode) {
+ this.locationCode = locationCode;
+ }
+
+ public String getAreaName() {
+ return areaName;
+ }
+
+ public void setAreaName(String areaName) {
+ this.areaName = areaName;
+ }
+}
diff --git a/ruoyi-api/src/main/java/com/ruoyi/api/domain/InStoreDto.java b/ruoyi-api/src/main/java/com/ruoyi/api/domain/InStoreDto.java
new file mode 100644
index 0000000..642902b
--- /dev/null
+++ b/ruoyi-api/src/main/java/com/ruoyi/api/domain/InStoreDto.java
@@ -0,0 +1,65 @@
+package com.ruoyi.api.domain;
+
+
+import java.util.List;
+
+/**
+ * @author wanghao
+ * @date 2024/1/11 16:21
+ */
+public class InStoreDto {
+
+ private String binchCode;
+ private String selectManuText;
+ private String selectLocationText;
+ private List epcList;
+ private String submitUser;
+ private Long manufacturerId;
+ public String getBinchCode() {
+ return binchCode;
+ }
+
+ public void setBinchCode(String binchCode) {
+ this.binchCode = binchCode;
+ }
+
+ public String getSelectManuText() {
+ return selectManuText;
+ }
+
+ public void setSelectManuText(String selectManuText) {
+ this.selectManuText = selectManuText;
+ }
+
+ public String getSelectLocationText() {
+ return selectLocationText;
+ }
+
+ public void setSelectLocationText(String selectLocationText) {
+ this.selectLocationText = selectLocationText;
+ }
+
+ public List getEpcList() {
+ return epcList;
+ }
+
+ public void setEpcList(List epcList) {
+ this.epcList = epcList;
+ }
+
+ public String getSubmitUser() {
+ return submitUser;
+ }
+
+ public void setSubmitUser(String submitUser) {
+ this.submitUser = submitUser;
+ }
+
+ public Long getManufacturerId() {
+ return manufacturerId;
+ }
+
+ public void setManufacturerId(Long manufacturerId) {
+ this.manufacturerId = manufacturerId;
+ }
+}
diff --git a/ruoyi-api/src/main/java/com/ruoyi/api/domain/NoPowerDevice.java b/ruoyi-api/src/main/java/com/ruoyi/api/domain/NoPowerDevice.java
new file mode 100644
index 0000000..79d2c33
--- /dev/null
+++ b/ruoyi-api/src/main/java/com/ruoyi/api/domain/NoPowerDevice.java
@@ -0,0 +1,78 @@
+package com.ruoyi.api.domain;
+
+import com.ruoyi.common.annotation.Excel;
+
+public class NoPowerDevice {
+
+ /** 摆放桩位 */
+ @Excel(name = "摆放桩位")
+ private String locationName;
+
+ /** 设备编码 */
+ @Excel(name = "设备编码")
+ private String deviceCode;
+
+ /** 设备名称 */
+ @Excel(name = "设备名称")
+ private String deviceName;
+
+ /** 设备类型 */
+ @Excel(name = "设备类型")
+ private Long deviceType;
+
+ /** 使用状态 */
+ @Excel(name = "使用状态 0=空闲 1=使用中")
+ private String useState;
+
+ /** 设备状态 */
+ @Excel(name = "设备状态 0=停用 1=正常 2=维修中")
+ private String deviceState;
+
+ public String getLocationName() {
+ return locationName;
+ }
+
+ public void setLocationName(String locationName) {
+ this.locationName = locationName;
+ }
+
+ public String getDeviceCode() {
+ return deviceCode;
+ }
+
+ public void setDeviceCode(String deviceCode) {
+ this.deviceCode = deviceCode;
+ }
+
+ public String getDeviceName() {
+ return deviceName;
+ }
+
+ public void setDeviceName(String deviceName) {
+ this.deviceName = deviceName;
+ }
+
+ public Long getDeviceType() {
+ return deviceType;
+ }
+
+ public void setDeviceType(Long deviceType) {
+ this.deviceType = deviceType;
+ }
+
+ public String getUseState() {
+ return useState;
+ }
+
+ public void setUseState(String useState) {
+ this.useState = useState;
+ }
+
+ public String getDeviceState() {
+ return deviceState;
+ }
+
+ public void setDeviceState(String deviceState) {
+ this.deviceState = deviceState;
+ }
+}
diff --git a/ruoyi-api/src/main/java/com/ruoyi/api/domain/OutStoreDto.java b/ruoyi-api/src/main/java/com/ruoyi/api/domain/OutStoreDto.java
new file mode 100644
index 0000000..858df0c
--- /dev/null
+++ b/ruoyi-api/src/main/java/com/ruoyi/api/domain/OutStoreDto.java
@@ -0,0 +1,50 @@
+package com.ruoyi.api.domain;
+
+
+import java.util.List;
+
+/**
+ * @author wanghao
+ * @date 2024/1/17 16:17
+ */
+public class OutStoreDto {
+ private List epcList;
+ private String areaCode;
+ private String submitUser;
+ private String useUser;
+
+
+
+ public List getEpcList() {
+ return epcList;
+ }
+
+ public void setEpcList(List epcList) {
+ this.epcList = epcList;
+ }
+
+ public String getAreaCode() {
+ return areaCode;
+ }
+
+ public void setAreaCode(String areaCode) {
+ this.areaCode = areaCode;
+ }
+
+ public String getSubmitUser() {
+ return submitUser;
+ }
+
+ public void setSubmitUser(String submitUser) {
+ this.submitUser = submitUser;
+ }
+
+ public String getUseUser() {
+ return useUser;
+ }
+
+ public void setUseUser(String useUser) {
+ this.useUser = useUser;
+ }
+
+}
diff --git a/ruoyi-api/src/main/java/com/ruoyi/api/domain/PdaApkVersion.java b/ruoyi-api/src/main/java/com/ruoyi/api/domain/PdaApkVersion.java
new file mode 100644
index 0000000..9374a97
--- /dev/null
+++ b/ruoyi-api/src/main/java/com/ruoyi/api/domain/PdaApkVersion.java
@@ -0,0 +1,122 @@
+package com.ruoyi.api.domain;
+
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 手持版本升级对象 pda_apk_version
+ *
+ * @author ruoyi
+ * @date 2023-04-06
+ */
+public class PdaApkVersion extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 主键标识 */
+ private Long objid;
+
+ /** 版本号 */
+ @Excel(name = "版本号")
+ private Long versionCode;
+
+ /** 版本名 */
+ @Excel(name = "版本名")
+ private String versionName;
+
+ /** 信息 */
+ @Excel(name = "信息")
+ private String modifyContent;
+
+ /** 位置 */
+ @Excel(name = "位置")
+ private String downloadUrl;
+
+ /** 文件大小 */
+ @Excel(name = "文件大小")
+ private Long apkSize;
+
+ /** 文件标识 */
+ @Excel(name = "文件标识")
+ private String apkMd5;
+
+ public void setObjid(Long objid)
+ {
+ this.objid = objid;
+ }
+
+ public Long getObjid()
+ {
+ return objid;
+ }
+ public void setVersionCode(Long versionCode)
+ {
+ this.versionCode = versionCode;
+ }
+
+ public Long getVersionCode()
+ {
+ return versionCode;
+ }
+ public void setVersionName(String versionName)
+ {
+ this.versionName = versionName;
+ }
+
+ public String getVersionName()
+ {
+ return versionName;
+ }
+ public void setModifyContent(String modifyContent)
+ {
+ this.modifyContent = modifyContent;
+ }
+
+ public String getModifyContent()
+ {
+ return modifyContent;
+ }
+ public void setDownloadUrl(String downloadUrl)
+ {
+ this.downloadUrl = downloadUrl;
+ }
+
+ public String getDownloadUrl()
+ {
+ return downloadUrl;
+ }
+ public void setApkSize(Long apkSize)
+ {
+ this.apkSize = apkSize;
+ }
+
+ public Long getApkSize()
+ {
+ return apkSize;
+ }
+ public void setApkMd5(String apkMd5)
+ {
+ this.apkMd5 = apkMd5;
+ }
+
+ public String getApkMd5()
+ {
+ return apkMd5;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("objid", getObjid())
+ .append("versionCode", getVersionCode())
+ .append("versionName", getVersionName())
+ .append("modifyContent", getModifyContent())
+ .append("downloadUrl", getDownloadUrl())
+ .append("apkSize", getApkSize())
+ .append("apkMd5", getApkMd5())
+ .append("createTime", getCreateTime())
+ .toString();
+ }
+}
diff --git a/ruoyi-api/src/main/java/com/ruoyi/api/domain/StockDto.java b/ruoyi-api/src/main/java/com/ruoyi/api/domain/StockDto.java
new file mode 100644
index 0000000..4c63a4c
--- /dev/null
+++ b/ruoyi-api/src/main/java/com/ruoyi/api/domain/StockDto.java
@@ -0,0 +1,66 @@
+package com.ruoyi.api.domain;
+
+/**
+ * @author wanghao
+ * @date 2024/1/19 13:45
+ */
+public class StockDto {
+ private int index;
+ private String epcCode;
+ private String locationCode;
+ private String state;
+ private String createTime;
+ private String remark;
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getState() {
+ return state;
+ }
+
+ public void setState(String state) {
+ this.state = state;
+ }
+
+ public int getIndex() {
+ return index;
+ }
+
+ public void setIndex(int index) {
+ this.index = index;
+ }
+
+ public String getEpcCode() {
+ return epcCode;
+ }
+
+ public void setEpcCode(String epcCode) {
+ this.epcCode = epcCode;
+ }
+
+ public String getLocationCode() {
+ return locationCode;
+ }
+
+ public void setLocationCode(String locationCode) {
+ this.locationCode = locationCode;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ @Override
+ public String toString() {
+ return "StockDto{" + "index=" + index + ", epcCode='" + epcCode + '\'' + ", locationCode='" + locationCode + '\'' + ", state='" + state + '\'' + '}';
+ }
+}
diff --git a/ruoyi-api/src/main/java/com/ruoyi/api/mapper/ApiMapper.java b/ruoyi-api/src/main/java/com/ruoyi/api/mapper/ApiMapper.java
new file mode 100644
index 0000000..a3bf8d9
--- /dev/null
+++ b/ruoyi-api/src/main/java/com/ruoyi/api/mapper/ApiMapper.java
@@ -0,0 +1,19 @@
+package com.ruoyi.api.mapper;
+
+import com.ruoyi.api.domain.CheckTaskInfo;
+import com.ruoyi.api.domain.InStoreDto;
+import com.ruoyi.api.domain.OutStoreDto;
+import com.ruoyi.api.domain.StockDto;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * @author wanghao
+ * @date 2024/1/17 14:28
+ */
+@Repository
+public interface ApiMapper {
+
+}
diff --git a/ruoyi-api/src/main/java/com/ruoyi/api/mapper/LoginMapper.java b/ruoyi-api/src/main/java/com/ruoyi/api/mapper/LoginMapper.java
new file mode 100644
index 0000000..d7cd4e1
--- /dev/null
+++ b/ruoyi-api/src/main/java/com/ruoyi/api/mapper/LoginMapper.java
@@ -0,0 +1,26 @@
+package com.ruoyi.api.mapper;
+
+import com.ruoyi.api.domain.APKVersion;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * Created by wangh on 2021/4/26-9:32。
+ */
+@Repository
+public interface LoginMapper {
+ String login_findSalt(String name);
+
+ int login_getUser(@Param("name") String name, @Param("passw") String passw);
+
+ List selectMenuNameByUserID(Integer userID);
+
+ APKVersion getVersion();
+
+ List selectMenuName();
+
+ SysUser login_getUser1(@Param("name")String name, @Param("passw")String md5Str);
+}
diff --git a/ruoyi-api/src/main/java/com/ruoyi/api/mapper/PdaApkVersionMapper.java b/ruoyi-api/src/main/java/com/ruoyi/api/mapper/PdaApkVersionMapper.java
new file mode 100644
index 0000000..50a6ddf
--- /dev/null
+++ b/ruoyi-api/src/main/java/com/ruoyi/api/mapper/PdaApkVersionMapper.java
@@ -0,0 +1,66 @@
+package com.ruoyi.api.mapper;
+
+import com.ruoyi.api.domain.PdaApkVersion;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 手持版本升级Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-04-06
+ */
+@Repository
+public interface PdaApkVersionMapper
+{
+ /**
+ * 查询手持版本升级
+ *
+ * @param objid 手持版本升级主键
+ * @return 手持版本升级
+ */
+ public PdaApkVersion selectPdaApkVersionByObjid(Long objid);
+
+ /**
+ * 查询手持版本升级列表
+ *
+ * @param pdaApkVersion 手持版本升级
+ * @return 手持版本升级集合
+ */
+ public List selectPdaApkVersionList(PdaApkVersion pdaApkVersion);
+
+ /**
+ * 新增手持版本升级
+ *
+ * @param pdaApkVersion 手持版本升级
+ * @return 结果
+ */
+ public int insertPdaApkVersion(PdaApkVersion pdaApkVersion);
+
+ /**
+ * 修改手持版本升级
+ *
+ * @param pdaApkVersion 手持版本升级
+ * @return 结果
+ */
+ public int updatePdaApkVersion(PdaApkVersion pdaApkVersion);
+
+ /**
+ * 删除手持版本升级
+ *
+ * @param objid 手持版本升级主键
+ * @return 结果
+ */
+ public int deletePdaApkVersionByObjid(Long objid);
+
+ /**
+ * 批量删除手持版本升级
+ *
+ * @param objids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deletePdaApkVersionByObjids(String[] objids);
+
+
+}
diff --git a/ruoyi-api/src/main/java/com/ruoyi/api/service/IPdaApkVersionService.java b/ruoyi-api/src/main/java/com/ruoyi/api/service/IPdaApkVersionService.java
new file mode 100644
index 0000000..12b3438
--- /dev/null
+++ b/ruoyi-api/src/main/java/com/ruoyi/api/service/IPdaApkVersionService.java
@@ -0,0 +1,64 @@
+package com.ruoyi.api.service;
+
+import com.ruoyi.api.domain.PdaApkVersion;
+
+import java.util.List;
+
+/**
+ * 手持版本升级Service接口
+ *
+ * @author ruoyi
+ * @date 2023-04-06
+ */
+public interface IPdaApkVersionService {
+
+ /**
+ * 查询手持版本升级
+ *
+ * @param objid 手持版本升级主键
+ * @return 手持版本升级
+ */
+ public PdaApkVersion selectPdaApkVersionByObjid(Long objid);
+
+ /**
+ * 查询手持版本升级列表
+ *
+ * @param pdaApkVersion 手持版本升级
+ * @return 手持版本升级集合
+ */
+ public List selectPdaApkVersionList(PdaApkVersion pdaApkVersion);
+
+ /**
+ * 新增手持版本升级
+ *
+ * @param pdaApkVersion 手持版本升级
+ * @return 结果
+ */
+ public int insertPdaApkVersion(PdaApkVersion pdaApkVersion);
+
+ /**
+ * 修改手持版本升级
+ *
+ * @param pdaApkVersion 手持版本升级
+ * @return 结果
+ */
+ public int updatePdaApkVersion(PdaApkVersion pdaApkVersion);
+
+ /**
+ * 批量删除手持版本升级
+ *
+ * @param objids 需要删除的手持版本升级主键集合
+ * @return 结果
+ */
+ public int deletePdaApkVersionByObjids(String objids);
+
+ /**
+ * 删除手持版本升级信息
+ *
+ * @param objid 手持版本升级主键
+ * @return 结果
+ */
+ public int deletePdaApkVersionByObjid(Long objid);
+
+
+}
diff --git a/ruoyi-api/src/main/java/com/ruoyi/api/service/impl/ApiService.java b/ruoyi-api/src/main/java/com/ruoyi/api/service/impl/ApiService.java
new file mode 100644
index 0000000..5ea11ca
--- /dev/null
+++ b/ruoyi-api/src/main/java/com/ruoyi/api/service/impl/ApiService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.api.service.impl;
+
+import com.ruoyi.api.mapper.ApiMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author wanghao
+ * @date 2024/1/17 14:26
+ */
+@Service
+public class ApiService {
+ @Autowired
+ private ApiMapper mapper;
+
+}
\ No newline at end of file
diff --git a/ruoyi-api/src/main/java/com/ruoyi/api/service/impl/LoginService.java b/ruoyi-api/src/main/java/com/ruoyi/api/service/impl/LoginService.java
new file mode 100644
index 0000000..650abdd
--- /dev/null
+++ b/ruoyi-api/src/main/java/com/ruoyi/api/service/impl/LoginService.java
@@ -0,0 +1,103 @@
+package com.ruoyi.api.service.impl;
+
+
+import com.ruoyi.api.domain.APKVersion;
+import com.ruoyi.api.mapper.LoginMapper;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.UnsupportedEncodingException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * Created by wangh on 2021/4/26-9:27。
+ */
+@Service
+public class LoginService {
+
+ @Autowired
+ LoginMapper mapper;
+
+ private static String getMD5Str(String str) {
+ MessageDigest messageDigest = null;
+
+ try {
+ messageDigest = MessageDigest.getInstance("MD5");
+
+ messageDigest.reset();
+
+ messageDigest.update(str.getBytes("UTF-8"));
+ } catch (NoSuchAlgorithmException e) {
+ System.out.println("NoSuchAlgorithmException caught!");
+ System.exit(-1);
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+
+ byte[] byteArray = messageDigest.digest();
+
+ StringBuffer md5StrBuff = new StringBuffer();
+
+ for (int i = 0; i < byteArray.length; i++) {
+ if (Integer.toHexString(0xFF & byteArray[i]).length() == 1) {
+
+
+ md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));
+ } else {
+
+
+ md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
+ }
+ }
+
+ return md5StrBuff.toString();
+ }
+
+ public String login(String name, String pass) {
+ try {
+ String salt = mapper.login_findSalt(name);
+ Integer userID = mapper.login_getUser(name, getMD5Str(name + pass + salt));
+ if (userID != null) {
+
+ return "ok";
+ // List menuNameList=name.equals("admin")?
+ // mapper.selectMenuName():
+ // mapper.selectMenuNameByUserID(userID);
+ // if (menuNameList==null||menuNameList.isEmpty()){
+ // return "isEmpty";
+ // }
+ // return JSONObject.toJSONString(menuNameList);
+ } else {
+ return "Error";
+ }
+ } catch (Exception e) {
+ return "Error";
+ }
+
+ }
+
+ public AjaxResult login1(String name, String pass) {
+ try {
+ String salt = mapper.login_findSalt(name);
+ SysUser user = mapper.login_getUser1(name, getMD5Str(name + pass + salt));
+ if (user != null) {
+ return AjaxResult.success(user);
+ } else {
+ return AjaxResult.error();
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ return AjaxResult.error();
+ }
+
+ }
+
+ public APKVersion getVersion() {
+ return mapper.getVersion();
+ }
+
+
+}
diff --git a/ruoyi-api/src/main/java/com/ruoyi/api/service/impl/PdaApkVersionServiceImpl.java b/ruoyi-api/src/main/java/com/ruoyi/api/service/impl/PdaApkVersionServiceImpl.java
new file mode 100644
index 0000000..c826169
--- /dev/null
+++ b/ruoyi-api/src/main/java/com/ruoyi/api/service/impl/PdaApkVersionServiceImpl.java
@@ -0,0 +1,99 @@
+package com.ruoyi.api.service.impl;
+
+import com.ruoyi.api.domain.PdaApkVersion;
+import com.ruoyi.api.mapper.PdaApkVersionMapper;
+import com.ruoyi.api.service.IPdaApkVersionService;
+import com.ruoyi.common.core.text.Convert;
+import com.ruoyi.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 手持版本升级Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2023-04-06
+ */
+@Service
+public class PdaApkVersionServiceImpl implements IPdaApkVersionService
+{
+ @Autowired
+ private PdaApkVersionMapper pdaApkVersionMapper;
+
+ /**
+ * 查询手持版本升级
+ *
+ * @param objid 手持版本升级主键
+ * @return 手持版本升级
+ */
+ @Override
+ public PdaApkVersion selectPdaApkVersionByObjid(Long objid)
+ {
+ return pdaApkVersionMapper.selectPdaApkVersionByObjid(objid);
+ }
+
+ /**
+ * 查询手持版本升级列表
+ *
+ * @param pdaApkVersion 手持版本升级
+ * @return 手持版本升级
+ */
+ @Override
+ public List selectPdaApkVersionList(PdaApkVersion pdaApkVersion)
+ {
+ return pdaApkVersionMapper.selectPdaApkVersionList(pdaApkVersion);
+ }
+
+ /**
+ * 新增手持版本升级
+ *
+ * @param pdaApkVersion 手持版本升级
+ * @return 结果
+ */
+ @Override
+ public int insertPdaApkVersion(PdaApkVersion pdaApkVersion)
+ {
+ pdaApkVersion.setCreateTime(DateUtils.getNowDate());
+ return pdaApkVersionMapper.insertPdaApkVersion(pdaApkVersion);
+ }
+
+ /**
+ * 修改手持版本升级
+ *
+ * @param pdaApkVersion 手持版本升级
+ * @return 结果
+ */
+ @Override
+ public int updatePdaApkVersion(PdaApkVersion pdaApkVersion)
+ {
+ return pdaApkVersionMapper.updatePdaApkVersion(pdaApkVersion);
+ }
+
+ /**
+ * 批量删除手持版本升级
+ *
+ * @param objids 需要删除的手持版本升级主键
+ * @return 结果
+ */
+ @Override
+ public int deletePdaApkVersionByObjids(String objids)
+ {
+ return pdaApkVersionMapper.deletePdaApkVersionByObjids(Convert.toStrArray(objids));
+ }
+
+ /**
+ * 删除手持版本升级信息
+ *
+ * @param objid 手持版本升级主键
+ * @return 结果
+ */
+ @Override
+ public int deletePdaApkVersionByObjid(Long objid)
+ {
+ return pdaApkVersionMapper.deletePdaApkVersionByObjid(objid);
+ }
+
+
+}
diff --git a/ruoyi-api/src/main/java/com/ruoyi/api/utils/Md5Utils.java b/ruoyi-api/src/main/java/com/ruoyi/api/utils/Md5Utils.java
new file mode 100644
index 0000000..6f395d7
--- /dev/null
+++ b/ruoyi-api/src/main/java/com/ruoyi/api/utils/Md5Utils.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2018 xuexiangjys(xuexiangjys@163.com)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.ruoyi.api.utils;
+
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.nio.MappedByteBuffer;
+import java.nio.channels.FileChannel;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * MD5加密工具类
+ *
+ * @author xuexiang
+ * @since 2018/7/2 下午3:14
+ */
+public final class Md5Utils {
+
+ private Md5Utils() {
+ throw new UnsupportedOperationException("cannot be instantiated");
+ }
+
+ public static String getFileMD5(File file) {
+ if (!file.exists()) {
+ return "";
+ }
+ FileInputStream in = null;
+ try {
+ in = new FileInputStream(file);
+ FileChannel channel = in.getChannel();
+ MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_ONLY, 0, file.length());
+ MessageDigest md = MessageDigest.getInstance("MD5");
+ md.update(buffer);
+ return bytes2Hex(md.digest());
+ } catch (NoSuchAlgorithmException | IOException e) {
+ e.printStackTrace();
+ } finally {
+ if (in != null) {
+ try {
+ in.close();
+ } catch (IOException ignored) {
+ }
+ }
+ }
+ return "";
+ }
+
+ /**
+ * 验证文件是否有效【通过MD5值比较】
+ *
+ * @param md5 如果md5值为空,则不进行校验,直接为true
+ * @param file 需要校验的文件
+ * @return 文件是否有效
+ */
+ public static boolean isFileValid(String md5, File file) {
+ return StringUtils.isEmpty(md5) || md5.equals(Md5Utils.getFileMD5(file));
+ }
+
+ /**
+ * 一个byte转为2个hex字符
+ *
+ * @param src byte数组
+ * @return 16进制大写字符串
+ */
+ private static String bytes2Hex(byte[] src) {
+ char[] res = new char[src.length << 1];
+ final char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
+ for (int i = 0, j = 0; i < src.length; i++) {
+ res[j++] = hexDigits[src[i] >>> 4 & 0x0f];
+ res[j++] = hexDigits[src[i] & 0x0f];
+ }
+ return new String(res);
+ }
+
+}
diff --git a/ruoyi-api/src/main/resources/create_sql/pda_apk_version.sql b/ruoyi-api/src/main/resources/create_sql/pda_apk_version.sql
new file mode 100644
index 0000000..f8d4761
--- /dev/null
+++ b/ruoyi-api/src/main/resources/create_sql/pda_apk_version.sql
@@ -0,0 +1,15 @@
+-- auto-generated definition
+create table pda_apk_version
+(
+ objid int auto_increment comment '主键标识'
+ primary key,
+ version_code int null comment '版本号',
+ version_name varchar(20) null comment '版本名',
+ modify_content varchar(100) null comment '信息',
+ download_url varchar(200) null comment '位置',
+ apk_size int null comment '文件大小',
+ apk_md5 varchar(200) null comment '文件标识',
+ create_time datetime default CURRENT_TIMESTAMP null comment '创建时间'
+)
+ comment '手持版本升级' charset = utf8
+ row_format = DYNAMIC;
\ No newline at end of file
diff --git a/ruoyi-api/src/main/resources/create_sql/pda_versionMenu.sql b/ruoyi-api/src/main/resources/create_sql/pda_versionMenu.sql
new file mode 100644
index 0000000..aed8f25
--- /dev/null
+++ b/ruoyi-api/src/main/resources/create_sql/pda_versionMenu.sql
@@ -0,0 +1,22 @@
+-- 菜单 SQL
+insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('手持版本升级', '3', '1', '/pda/pda_version', 'C', '0', 'pda:pda_version:view', '#', 'admin', sysdate(), '', null, '手持版本升级菜单');
+
+-- 按钮父菜单ID
+SELECT @parentId := LAST_INSERT_ID();
+
+-- 按钮 SQL
+insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('手持版本升级查询', @parentId, '1', '#', 'F', '0', 'pda:pda_version:list', '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('手持版本升级新增', @parentId, '2', '#', 'F', '0', 'pda:pda_version:add', '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('手持版本升级修改', @parentId, '3', '#', 'F', '0', 'pda:pda_version:edit', '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('手持版本升级删除', @parentId, '4', '#', 'F', '0', 'pda:pda_version:remove', '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('手持版本升级导出', @parentId, '5', '#', 'F', '0', 'pda:pda_version:export', '#', 'admin', sysdate(), '', null, '');
diff --git a/ruoyi-api/src/main/resources/mapper/ApiMapper.xml b/ruoyi-api/src/main/resources/mapper/ApiMapper.xml
new file mode 100644
index 0000000..bd2c8e3
--- /dev/null
+++ b/ruoyi-api/src/main/resources/mapper/ApiMapper.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-api/src/main/resources/mapper/LoginMapper.xml b/ruoyi-api/src/main/resources/mapper/LoginMapper.xml
new file mode 100644
index 0000000..a2cd261
--- /dev/null
+++ b/ruoyi-api/src/main/resources/mapper/LoginMapper.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-api/src/main/resources/mapper/PdaApkVersionMapper.xml b/ruoyi-api/src/main/resources/mapper/PdaApkVersionMapper.xml
new file mode 100644
index 0000000..ae153bb
--- /dev/null
+++ b/ruoyi-api/src/main/resources/mapper/PdaApkVersionMapper.xml
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select objid, version_code, version_name, modify_content, download_url, apk_size, apk_md5, create_time from pda_apk_version
+
+
+
+
+
+
+
+ insert into pda_apk_version
+
+ version_code,
+ version_name,
+ modify_content,
+ download_url,
+ apk_size,
+ apk_md5,
+ create_time,
+
+
+ #{versionCode},
+ #{versionName},
+ #{modifyContent},
+ #{downloadUrl},
+ #{apkSize},
+ #{apkMd5},
+ #{createTime},
+
+
+
+
+ update pda_apk_version
+
+ version_code = #{versionCode},
+ version_name = #{versionName},
+ modify_content = #{modifyContent},
+ download_url = #{downloadUrl},
+ apk_size = #{apkSize},
+ apk_md5 = #{apkMd5},
+ create_time = #{createTime},
+
+ where objid = #{objid}
+
+
+
+ delete from pda_apk_version where objid = #{objid}
+
+
+
+ delete from pda_apk_version where objid in
+
+ #{objid}
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-api/src/main/resources/templates/pda/pda_version/add.html b/ruoyi-api/src/main/resources/templates/pda/pda_version/add.html
new file mode 100644
index 0000000..41c00d3
--- /dev/null
+++ b/ruoyi-api/src/main/resources/templates/pda/pda_version/add.html
@@ -0,0 +1,125 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-api/src/main/resources/templates/pda/pda_version/edit.html b/ruoyi-api/src/main/resources/templates/pda/pda_version/edit.html
new file mode 100644
index 0000000..ea7536f
--- /dev/null
+++ b/ruoyi-api/src/main/resources/templates/pda/pda_version/edit.html
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-api/src/main/resources/templates/pda/pda_version/pda_version.html b/ruoyi-api/src/main/resources/templates/pda/pda_version/pda_version.html
new file mode 100644
index 0000000..1aaee4e
--- /dev/null
+++ b/ruoyi-api/src/main/resources/templates/pda/pda_version/pda_version.html
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ShiroConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ShiroConfig.java
index 417fdbf..7c90fc5 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ShiroConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ShiroConfig.java
@@ -313,6 +313,8 @@ public class ShiroConfig
filterChainDefinitionMap.put("/ajax/**", "anon");
filterChainDefinitionMap.put("/js/**", "anon");
filterChainDefinitionMap.put("/ruoyi/**", "anon");
+ filterChainDefinitionMap.put("/api/**", "anon");
+ filterChainDefinitionMap.put("/profile/**/**", "anon");
filterChainDefinitionMap.put("/captcha/captchaImage**", "anon");
// 匿名访问不鉴权注解列表
List permitAllUrl = SpringUtils.getBean(PermitAllUrlProperties.class).getUrls();
diff --git a/ruoyi-generator/src/main/resources/generator.yml b/ruoyi-generator/src/main/resources/generator.yml
index 73562c7..153127a 100644
--- a/ruoyi-generator/src/main/resources/generator.yml
+++ b/ruoyi-generator/src/main/resources/generator.yml
@@ -4,10 +4,10 @@ gen:
# 作者
author: ruoyi
# 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool
- packageName: com.ruoyi.system
+ packageName: com.ruoyi.pm
# 自动去除表前缀,默认是false
- autoRemovePre: false
+ autoRemovePre: true
# 表前缀(生成类名不会包含表前缀,多个用逗号分隔)
- tablePrefix: sys_
+ tablePrefix: pm_
# 是否允许生成文件覆盖到本地(自定义路径),默认不允许
allowOverwrite: false
\ No newline at end of file
diff --git a/ruoyi-generator/src/main/resources/vm/java/controller.java.vm b/ruoyi-generator/src/main/resources/vm/java/controller.java.vm
index 7fdd56c..28856e5 100644
--- a/ruoyi-generator/src/main/resources/vm/java/controller.java.vm
+++ b/ruoyi-generator/src/main/resources/vm/java/controller.java.vm
@@ -1,6 +1,7 @@
package ${packageName}.controller;
import java.util.List;
+
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@@ -26,14 +27,13 @@ import com.ruoyi.common.core.domain.Ztree;
/**
* ${functionName}Controller
- *
+ *
* @author ${author}
* @date ${datetime}
*/
@Controller
@RequestMapping("/${moduleName}/${businessName}")
-public class ${ClassName}Controller extends BaseController
-{
+public class ${ClassName}Controller extends BaseController {
private String prefix = "${moduleName}/${businessName}";
@Autowired
@@ -41,37 +41,34 @@ public class ${ClassName}Controller extends BaseController
@RequiresPermissions("${permissionPrefix}:view")
@GetMapping()
- public String ${businessName}()
- {
+ public String ${businessName}() {
return prefix + "/${businessName}";
}
-#if($table.crud || $table.sub)
- /**
- * 查询${functionName}列表
- */
- @RequiresPermissions("${permissionPrefix}:list")
- @PostMapping("/list")
- @ResponseBody
- public TableDataInfo list(${ClassName} ${className})
- {
- startPage();
- List<${ClassName}> list = ${className}Service.select${ClassName}List(${className});
- return getDataTable(list);
- }
-#elseif($table.tree)
- /**
- * 查询${functionName}树列表
- */
- @RequiresPermissions("${permissionPrefix}:list")
- @PostMapping("/list")
- @ResponseBody
- public List<${ClassName}> list(${ClassName} ${className})
- {
- List<${ClassName}> list = ${className}Service.select${ClassName}List(${className});
- return list;
- }
-#end
+ #if($table.crud || $table.sub)
+ /**
+ * 查询${functionName}列表
+ */
+ @RequiresPermissions("${permissionPrefix}:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(${ClassName} ${className}) {
+ startPage();
+ List<${ClassName}> list = ${className}Service.select${ClassName}List(${className});
+ return getDataTable(list);
+ }
+ #elseif($table.tree)
+ /**
+ * 查询${functionName}树列表
+ */
+ @RequiresPermissions("${permissionPrefix}:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public List<${ClassName}> list(${ClassName} ${className}) {
+ List<${ClassName}> list = ${className}Service.select${ClassName}List(${className});
+ return list;
+ }
+ #end
/**
* 导出${functionName}列表
@@ -80,37 +77,33 @@ public class ${ClassName}Controller extends BaseController
@Log(title = "${functionName}", businessType = BusinessType.EXPORT)
@PostMapping("/export")
@ResponseBody
- public AjaxResult export(${ClassName} ${className})
- {
+ public AjaxResult export(${ClassName} ${className}) {
List<${ClassName}> list = ${className}Service.select${ClassName}List(${className});
- ExcelUtil<${ClassName}> util = new ExcelUtil<${ClassName}>(${ClassName}.class);
+ ExcelUtil<${ClassName}> util = new ExcelUtil<${ClassName}>(${ClassName}. class);
return util.exportExcel(list, "${functionName}数据");
}
-#if($table.crud || $table.sub)
- /**
- * 新增${functionName}
- */
- @RequiresPermissions("${permissionPrefix}:add")
- @GetMapping("/add")
- public String add()
- {
- return prefix + "/add";
- }
-#elseif($table.tree)
- /**
- * 新增${functionName}
- */
- @GetMapping(value = { "/add/{${pkColumn.javaField}}", "/add/" })
- public String add(@PathVariable(value = "${pkColumn.javaField}", required = false) Long ${pkColumn.javaField}, ModelMap mmap)
- {
- if (StringUtils.isNotNull(${pkColumn.javaField}))
- {
- mmap.put("${className}", ${className}Service.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField}));
+ #if($table.crud || $table.sub)
+ /**
+ * 新增${functionName}
+ */
+ @RequiresPermissions("${permissionPrefix}:add")
+ @GetMapping("/add")
+ public String add() {
+ return prefix + "/add";
}
- return prefix + "/add";
- }
-#end
+ #elseif($table.tree)
+ /**
+ * 新增${functionName}
+ */
+ @GetMapping(value = {"/add/{${pkColumn.javaField}}", "/add/"})
+ public String add(@PathVariable(value = "${pkColumn.javaField}", required = false)Long ${pkColumn.javaField}, ModelMap mmap) {
+ if (StringUtils.isNotNull(${pkColumn.javaField})) {
+ mmap.put("${className}", ${className}Service.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField}));
+ }
+ return prefix + "/add";
+ }
+ #end
/**
* 新增保存${functionName}
@@ -119,8 +112,7 @@ public class ${ClassName}Controller extends BaseController
@Log(title = "${functionName}", businessType = BusinessType.INSERT)
@PostMapping("/add")
@ResponseBody
- public AjaxResult addSave(${ClassName} ${className})
- {
+ public AjaxResult addSave(${ClassName} ${className}) {
return toAjax(${className}Service.insert${ClassName}(${className}));
}
@@ -129,9 +121,9 @@ public class ${ClassName}Controller extends BaseController
*/
@RequiresPermissions("${permissionPrefix}:edit")
@GetMapping("/edit/{${pkColumn.javaField}}")
- public String edit(@PathVariable("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField}, ModelMap mmap)
- {
- ${ClassName} ${className} = ${className}Service.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField});
+ public String edit(@PathVariable("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField}, ModelMap mmap) {
+ ${ClassName} ${className} =
+ ${className}Service.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField});
mmap.put("${className}", ${className});
return prefix + "/edit";
}
@@ -143,61 +135,55 @@ public class ${ClassName}Controller extends BaseController
@Log(title = "${functionName}", businessType = BusinessType.UPDATE)
@PostMapping("/edit")
@ResponseBody
- public AjaxResult editSave(${ClassName} ${className})
- {
+ public AjaxResult editSave(${ClassName} ${className}) {
return toAjax(${className}Service.update${ClassName}(${className}));
}
-#if($table.crud || $table.sub)
- /**
- * 删除${functionName}
- */
- @RequiresPermissions("${permissionPrefix}:remove")
- @Log(title = "${functionName}", businessType = BusinessType.DELETE)
- @PostMapping( "/remove")
- @ResponseBody
- public AjaxResult remove(String ids)
- {
- return toAjax(${className}Service.delete${ClassName}By${pkColumn.capJavaField}s(ids));
- }
-#elseif($table.tree)
- /**
- * 删除
- */
- @RequiresPermissions("${permissionPrefix}:remove")
- @Log(title = "${functionName}", businessType = BusinessType.DELETE)
- @GetMapping("/remove/{${pkColumn.javaField}}")
- @ResponseBody
- public AjaxResult remove(@PathVariable("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField})
- {
- return toAjax(${className}Service.delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField}));
- }
-#end
-#if($table.tree)
-
- /**
- * 选择${functionName}树
- */
-#set($BusinessName=$businessName.substring(0,1).toUpperCase() + ${businessName.substring(1)})
- @GetMapping(value = { "/select${BusinessName}Tree/{${pkColumn.javaField}}", "/select${BusinessName}Tree/" })
- public String select${BusinessName}Tree(@PathVariable(value = "${pkColumn.javaField}", required = false) Long ${pkColumn.javaField}, ModelMap mmap)
- {
- if (StringUtils.isNotNull(${pkColumn.javaField}))
- {
- mmap.put("${className}", ${className}Service.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField}));
+ #if($table.crud || $table.sub)
+ /**
+ * 删除${functionName}
+ */
+ @RequiresPermissions("${permissionPrefix}:remove")
+ @Log(title = "${functionName}", businessType = BusinessType.DELETE)
+ @PostMapping("/remove")
+ @ResponseBody
+ public AjaxResult remove(String ids) {
+ return toAjax(${className}Service.delete${ClassName}By${pkColumn.capJavaField}s(ids));
}
- return prefix + "/tree";
- }
+ #elseif($table.tree)
+ /**
+ * 删除
+ */
+ @RequiresPermissions("${permissionPrefix}:remove")
+ @Log(title = "${functionName}", businessType = BusinessType.DELETE)
+ @GetMapping("/remove/{${pkColumn.javaField}}")
+ @ResponseBody
+ public AjaxResult remove(@PathVariable("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField}) {
+ return toAjax(${className}Service.delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField}));
+ }
+ #end
+ #if($table.tree)
- /**
- * 加载${functionName}树列表
- */
- @GetMapping("/treeData")
- @ResponseBody
- public List treeData()
- {
- List ztrees = ${className}Service.select${ClassName}Tree();
- return ztrees;
- }
-#end
+ /**
+ * 选择${functionName}树
+ */
+ #set($BusinessName=$businessName.substring(0,1).toUpperCase() + ${businessName.substring(1)})
+ @GetMapping(value = {"/select${BusinessName}Tree/{${pkColumn.javaField}}", "/select${BusinessName}Tree/"})
+ public String select${BusinessName}Tree(@PathVariable(value = "${pkColumn.javaField}", required = false)Long ${pkColumn.javaField}, ModelMap mmap) {
+ if (StringUtils.isNotNull(${pkColumn.javaField})) {
+ mmap.put("${className}", ${className}Service.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField}));
+ }
+ return prefix + "/tree";
+ }
+
+ /**
+ * 加载${functionName}树列表
+ */
+ @GetMapping("/treeData")
+ @ResponseBody
+ public List treeData() {
+ List ztrees = ${className}Service.select${ClassName}Tree();
+ return ztrees;
+ }
+ #end
}
diff --git a/ruoyi-generator/src/main/resources/vm/java/domain.java.vm b/ruoyi-generator/src/main/resources/vm/java/domain.java.vm
index 0bf2c1f..f41a08e 100644
--- a/ruoyi-generator/src/main/resources/vm/java/domain.java.vm
+++ b/ruoyi-generator/src/main/resources/vm/java/domain.java.vm
@@ -14,7 +14,7 @@ import com.ruoyi.common.core.domain.TreeEntity;
/**
* ${functionName}对象 ${tableName}
- *
+ *
* @author ${author}
* @date ${datetime}
*/
@@ -23,8 +23,7 @@ import com.ruoyi.common.core.domain.TreeEntity;
#elseif($table.tree)
#set($Entity="TreeEntity")
#end
-public class ${ClassName} extends ${Entity}
-{
+public class ${ClassName} extends ${Entity}{
private static final long serialVersionUID = 1L;
#foreach ($column in $columns)
@@ -62,12 +61,12 @@ public class ${ClassName} extends ${Entity}
#else
#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
#end
- public void set${AttrName}($column.javaType $column.javaField)
+ public void set${AttrName}($column.javaType $column.javaField)
{
this.$column.javaField = $column.javaField;
}
- public $column.javaType get${AttrName}()
+ public $column.javaType get${AttrName}()
{
return $column.javaField;
}
diff --git a/ruoyi-generator/src/main/resources/vm/java/service.java.vm b/ruoyi-generator/src/main/resources/vm/java/service.java.vm
index 765c9d6..fb49d1d 100644
--- a/ruoyi-generator/src/main/resources/vm/java/service.java.vm
+++ b/ruoyi-generator/src/main/resources/vm/java/service.java.vm
@@ -1,6 +1,7 @@
package ${packageName}.service;
import java.util.List;
+
import ${packageName}.domain.${ClassName};
#if($table.tree)
import com.ruoyi.common.core.domain.Ztree;
@@ -8,15 +9,14 @@ import com.ruoyi.common.core.domain.Ztree;
/**
* ${functionName}Service接口
- *
+ *
* @author ${author}
* @date ${datetime}
*/
-public interface I${ClassName}Service
-{
+public interface I${ClassName}Service {
/**
* 查询${functionName}
- *
+ *
* @param ${pkColumn.javaField} ${functionName}主键
* @return ${functionName}
*/
@@ -24,7 +24,7 @@ public interface I${ClassName}Service
/**
* 查询${functionName}列表
- *
+ *
* @param ${className} ${functionName}
* @return ${functionName}集合
*/
@@ -32,7 +32,7 @@ public interface I${ClassName}Service
/**
* 新增${functionName}
- *
+ *
* @param ${className} ${functionName}
* @return 结果
*/
@@ -40,7 +40,7 @@ public interface I${ClassName}Service
/**
* 修改${functionName}
- *
+ *
* @param ${className} ${functionName}
* @return 结果
*/
@@ -48,7 +48,7 @@ public interface I${ClassName}Service
/**
* 批量删除${functionName}
- *
+ *
* @param ${pkColumn.javaField}s 需要删除的${functionName}主键集合
* @return 结果
*/
@@ -56,18 +56,18 @@ public interface I${ClassName}Service
/**
* 删除${functionName}信息
- *
+ *
* @param ${pkColumn.javaField} ${functionName}主键
* @return 结果
*/
public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField});
-#if($table.tree)
+ #if($table.tree)
- /**
- * 查询${functionName}树列表
- *
- * @return 所有${functionName}信息
- */
- public List select${ClassName}Tree();
-#end
+ /**
+ * 查询${functionName}树列表
+ *
+ * @return 所有${functionName}信息
+ */
+ public List select${ClassName}Tree();
+ #end
}
diff --git a/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm b/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm
index 242b1c7..a93b241 100644
--- a/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm
+++ b/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm
@@ -1,24 +1,26 @@
package ${packageName}.service.impl;
import java.util.List;
-#if($table.tree)
-import java.util.ArrayList;
-import com.ruoyi.common.core.domain.Ztree;
-#end
-#foreach ($column in $columns)
-#if($column.javaField == 'createTime' || $column.javaField == 'updateTime')
-import com.ruoyi.common.utils.DateUtils;
-#break
-#end
-#end
+ #if($table.tree)
+ import java.util.ArrayList;
+
+ import com.ruoyi.common.core.domain.Ztree;
+ #end
+ #foreach ($column in $columns)
+ #if($column.javaField == 'createTime' || $column.javaField == 'updateTime')
+ import com.ruoyi.common.utils.DateUtils;
+ #break
+ #end
+ #end
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-#if($table.sub)
-import java.util.ArrayList;
-import com.ruoyi.common.utils.StringUtils;
-import org.springframework.transaction.annotation.Transactional;
-import ${packageName}.domain.${subClassName};
-#end
+ #if($table.sub)
+ import java.util.ArrayList;
+
+ import com.ruoyi.common.utils.StringUtils;
+ import org.springframework.transaction.annotation.Transactional;
+ import ${packageName}.domain.${subClassName};
+ #end
import ${packageName}.mapper.${ClassName}Mapper;
import ${packageName}.domain.${ClassName};
import ${packageName}.service.I${ClassName}Service;
@@ -26,188 +28,178 @@ import com.ruoyi.common.core.text.Convert;
/**
* ${functionName}Service业务层处理
- *
+ *
* @author ${author}
* @date ${datetime}
*/
@Service
-public class ${ClassName}ServiceImpl implements I${ClassName}Service
-{
+public class ${ClassName}ServiceImpl implements I${ClassName}Service {
@Autowired
private ${ClassName}Mapper ${className}Mapper;
/**
* 查询${functionName}
- *
+ *
* @param ${pkColumn.javaField} ${functionName}主键
* @return ${functionName}
*/
@Override
- public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField})
- {
+ public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) {
return ${className}Mapper.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField});
}
/**
* 查询${functionName}列表
- *
+ *
* @param ${className} ${functionName}
* @return ${functionName}
*/
@Override
- public List<${ClassName}> select${ClassName}List(${ClassName} ${className})
- {
+ public List<${ClassName}> select${ClassName}List(${ClassName} ${className}) {
return ${className}Mapper.select${ClassName}List(${className});
}
/**
* 新增${functionName}
- *
+ *
* @param ${className} ${functionName}
* @return 结果
*/
-#if($table.sub)
- @Transactional
-#end
+ #if($table.sub)
+ @Transactional
+ #end
@Override
- public int insert${ClassName}(${ClassName} ${className})
- {
-#foreach ($column in $columns)
-#if($column.javaField == 'createTime')
- ${className}.setCreateTime(DateUtils.getNowDate());
-#end
-#end
-#if($table.sub)
- int rows = ${className}Mapper.insert${ClassName}(${className});
- insert${subClassName}(${className});
- return rows;
-#else
- return ${className}Mapper.insert${ClassName}(${className});
-#end
+ public int insert${ClassName}(${ClassName} ${className}) {
+ #foreach ($column in $columns)
+ #if($column.javaField == 'createTime')
+ ${className}.setCreateTime(DateUtils.getNowDate());
+ #end
+ #end
+ #if($table.sub)
+ int rows = ${className}Mapper.insert${ClassName}(${className});
+ insert${subClassName}(${className});
+ return rows;
+ #else
+ return ${className}Mapper.insert${ClassName}(${className});
+ #end
}
/**
* 修改${functionName}
- *
+ *
* @param ${className} ${functionName}
* @return 结果
*/
-#if($table.sub)
- @Transactional
-#end
+ #if($table.sub)
+ @Transactional
+ #end
@Override
- public int update${ClassName}(${ClassName} ${className})
- {
-#foreach ($column in $columns)
-#if($column.javaField == 'updateTime')
- ${className}.setUpdateTime(DateUtils.getNowDate());
-#end
-#end
-#if($table.sub)
- ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${className}.get${pkColumn.capJavaField}());
- insert${subClassName}(${className});
-#end
+ public int update${ClassName}(${ClassName} ${className}) {
+ #foreach ($column in $columns)
+ #if($column.javaField == 'updateTime')
+ ${className}.setUpdateTime(DateUtils.getNowDate());
+ #end
+ #end
+ #if($table.sub)
+ ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${className}.get${pkColumn.capJavaField}())
+ ;
+ insert${subClassName}(${className});
+ #end
return ${className}Mapper.update${ClassName}(${className});
}
/**
* 批量删除${functionName}
- *
+ *
* @param ${pkColumn.javaField}s 需要删除的${functionName}主键
* @return 结果
*/
-#if($table.sub)
- @Transactional
-#end
+ #if($table.sub)
+ @Transactional
+ #end
@Override
- public int delete${ClassName}By${pkColumn.capJavaField}s(String ${pkColumn.javaField}s)
- {
-#if($table.sub)
- ${className}Mapper.delete${subClassName}By${subTableFkClassName}s(Convert.toStrArray(${pkColumn.javaField}s));
-#end
+ public int delete${ClassName}By${pkColumn.capJavaField}s(String ${pkColumn.javaField}s) {
+ #if($table.sub)
+ ${className}Mapper.delete${subClassName}By${subTableFkClassName}s(Convert.toStrArray(${pkColumn.javaField}s));
+ #end
return ${className}Mapper.delete${ClassName}By${pkColumn.capJavaField}s(Convert.toStrArray(${pkColumn.javaField}s));
}
/**
* 删除${functionName}信息
- *
+ *
* @param ${pkColumn.javaField} ${functionName}主键
* @return 结果
*/
-#if($table.sub)
- @Transactional
-#end
+ #if($table.sub)
+ @Transactional
+ #end
@Override
- public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField})
- {
-#if($table.sub)
- ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${pkColumn.javaField});
-#end
+ public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) {
+ #if($table.sub)
+ ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${pkColumn.javaField});
+ #end
return ${className}Mapper.delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField});
}
-#if($table.tree)
+ #if($table.tree)
- /**
- * 查询${functionName}树列表
- *
- * @return 所有${functionName}信息
- */
- @Override
- public List select${ClassName}Tree()
- {
- List<${ClassName}> ${className}List = ${className}Mapper.select${ClassName}List(new ${ClassName}());
- List ztrees = new ArrayList();
- for (${ClassName} ${className} : ${className}List)
- {
- Ztree ztree = new Ztree();
-#if($treeCode.length() > 2 && $treeCode.substring(1,2).matches("[A-Z]"))
-#set($TreeCode=$treeCode)
-#else
-#set($TreeCode=$treeCode.substring(0,1).toUpperCase() + ${treeCode.substring(1)})
-#end
-#if($treeParentCode.length() > 2 && $treeParentCode.substring(1,2).matches("[A-Z]"))
-#set($TreeParentCode=$treeParentCode)
-#else
-#set($TreeParentCode=$treeParentCode.substring(0,1).toUpperCase() + ${treeParentCode.substring(1)})
-#end
-#if($treeName.length() > 2 && $treeName.substring(1,2).matches("[A-Z]"))
-#set($TreeName=$treeName)
-#else
-#set($TreeName=$treeName.substring(0,1).toUpperCase() + ${treeName.substring(1)})
-#end
- ztree.setId(${className}.get${TreeCode}());
- ztree.setpId(${className}.get${TreeParentCode}());
- ztree.setName(${className}.get${TreeName}());
- ztree.setTitle(${className}.get${TreeName}());
- ztrees.add(ztree);
- }
- return ztrees;
- }
-#end
-#if($table.sub)
-
- /**
- * 新增${subTable.functionName}信息
- *
- * @param ${className} ${functionName}对象
- */
- public void insert${subClassName}(${ClassName} ${className})
- {
- List<${subClassName}> ${subclassName}List = ${className}.get${subClassName}List();
- ${pkColumn.javaType} ${pkColumn.javaField} = ${className}.get${pkColumn.capJavaField}();
- if (StringUtils.isNotNull(${subclassName}List))
- {
- List<${subClassName}> list = new ArrayList<${subClassName}>();
- for (${subClassName} ${subclassName} : ${subclassName}List)
+ /**
+ * 查询${functionName}树列表
+ *
+ * @return 所有${functionName}信息
+ */
+ @Override
+ public List select${ClassName}Tree() {
+ List<${ClassName}> ${className}List = ${className}Mapper.select${ClassName}List(new ${ClassName}());
+ List ztrees = new ArrayList();
+ for (${ClassName} ${className} :${className}List)
{
- ${subclassName}.set${subTableFkClassName}(${pkColumn.javaField});
- list.add(${subclassName});
+ Ztree ztree = new Ztree();
+ #if($treeCode.length() > 2 && $treeCode.substring(1,2).matches("[A-Z]"))
+ #set($TreeCode=$treeCode)
+ #else
+ #set($TreeCode=$treeCode.substring(0,1).toUpperCase() + ${treeCode.substring(1)})
+ #end
+ #if($treeParentCode.length() > 2 && $treeParentCode.substring(1,2).matches("[A-Z]"))
+ #set($TreeParentCode=$treeParentCode)
+ #else
+ #set($TreeParentCode=$treeParentCode.substring(0,1).toUpperCase() + ${treeParentCode.substring(1)})
+ #end
+ #if($treeName.length() > 2 && $treeName.substring(1,2).matches("[A-Z]"))
+ #set($TreeName=$treeName)
+ #else
+ #set($TreeName=$treeName.substring(0,1).toUpperCase() + ${treeName.substring(1)})
+ #end
+ ztree.setId(${className}.get${TreeCode}());
+ ztree.setpId(${className}.get${TreeParentCode}());
+ ztree.setName(${className}.get${TreeName}());
+ ztree.setTitle(${className}.get${TreeName}());
+ ztrees.add(ztree);
}
- if (list.size() > 0)
- {
- ${className}Mapper.batch${subClassName}(list);
+ return ztrees;
+ }
+ #end
+ #if($table.sub)
+
+ /**
+ * 新增${subTable.functionName}信息
+ *
+ * @param ${className} ${functionName}对象
+ */
+ public void insert${subClassName}(${ClassName} ${className}) {
+ List<${subClassName}> ${subclassName}List = ${className}.get${subClassName}List();
+ ${pkColumn.javaType} ${pkColumn.javaField} = ${className}.get${pkColumn.capJavaField}();
+ if (StringUtils.isNotNull(${subclassName}List)) {
+ List<${subClassName}> list = new ArrayList<${subClassName}>();
+ for (${subClassName} ${subclassName} :${subclassName}List)
+ {
+ ${subclassName}.set${subTableFkClassName}(${pkColumn.javaField});
+ list.add(${subclassName});
+ }
+ if (list.size() > 0) {
+ ${className}Mapper.batch${subClassName}(list);
+ }
}
}
- }
-#end
+ #end
}
diff --git a/ruoyi-pm/pom.xml b/ruoyi-pm/pom.xml
new file mode 100644
index 0000000..0169ee2
--- /dev/null
+++ b/ruoyi-pm/pom.xml
@@ -0,0 +1,28 @@
+
+
+ 4.0.0
+
+ com.ruoyi
+ ruoyi
+ 4.8.1
+
+
+ ruoyi-pm
+
+ 页面
+
+
+
+
+ com.ruoyi
+ ruoyi-common
+
+
+ com.ruoyi
+ ruoyi-system
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-pm/src/main/java/com/ruoyi/pm/controller/PmBasePenaltyTypeController.java b/ruoyi-pm/src/main/java/com/ruoyi/pm/controller/PmBasePenaltyTypeController.java
new file mode 100644
index 0000000..9441458
--- /dev/null
+++ b/ruoyi-pm/src/main/java/com/ruoyi/pm/controller/PmBasePenaltyTypeController.java
@@ -0,0 +1,144 @@
+package com.ruoyi.pm.controller;
+
+import java.util.List;
+
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.pm.domain.PmBasePenaltyType;
+import com.ruoyi.pm.service.IPmBasePenaltyTypeService;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.core.domain.Ztree;
+
+/**
+ * 处罚类型维护Controller
+ *
+ * @author ruoyi
+ * @date 2025-11-27
+ */
+@Controller
+@RequestMapping("/pm/base_penalty_type")
+public class PmBasePenaltyTypeController extends BaseController {
+ private String prefix = "pm/base_penalty_type";
+
+ @Autowired
+ private IPmBasePenaltyTypeService pmBasePenaltyTypeService;
+
+ @RequiresPermissions("pm:base_penalty_type:view")
+ @GetMapping()
+ public String base_penalty_type() {
+ return prefix + "/base_penalty_type";
+ }
+
+ /**
+ * 查询处罚类型维护树列表
+ */
+ @RequiresPermissions("pm:base_penalty_type:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public List list(PmBasePenaltyType pmBasePenaltyType) {
+ List list = pmBasePenaltyTypeService.selectPmBasePenaltyTypeList(pmBasePenaltyType);
+ return list;
+ }
+
+ /**
+ * 导出处罚类型维护列表
+ */
+ @RequiresPermissions("pm:base_penalty_type:export")
+ @Log(title = "处罚类型维护", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult export(PmBasePenaltyType pmBasePenaltyType) {
+ List list = pmBasePenaltyTypeService.selectPmBasePenaltyTypeList(pmBasePenaltyType);
+ ExcelUtil util = new ExcelUtil(PmBasePenaltyType. class);
+ return util.exportExcel(list, "处罚类型维护数据");
+ }
+
+ /**
+ * 新增处罚类型维护
+ */
+ @GetMapping(value = {"/add/{penaltyTypeId}", "/add/"})
+ public String add(@PathVariable(value = "penaltyTypeId", required = false)Long penaltyTypeId, ModelMap mmap) {
+ if (StringUtils.isNotNull(penaltyTypeId)) {
+ mmap.put("pmBasePenaltyType", pmBasePenaltyTypeService.selectPmBasePenaltyTypeByPenaltyTypeId(penaltyTypeId));
+ }
+ return prefix + "/add";
+ }
+
+ /**
+ * 新增保存处罚类型维护
+ */
+ @RequiresPermissions("pm:base_penalty_type:add")
+ @Log(title = "处罚类型维护", businessType = BusinessType.INSERT)
+ @PostMapping("/add")
+ @ResponseBody
+ public AjaxResult addSave(PmBasePenaltyType pmBasePenaltyType) {
+ return toAjax(pmBasePenaltyTypeService.insertPmBasePenaltyType(pmBasePenaltyType));
+ }
+
+ /**
+ * 修改处罚类型维护
+ */
+ @RequiresPermissions("pm:base_penalty_type:edit")
+ @GetMapping("/edit/{penaltyTypeId}")
+ public String edit(@PathVariable("penaltyTypeId") Long penaltyTypeId, ModelMap mmap) {
+ PmBasePenaltyType pmBasePenaltyType =
+ pmBasePenaltyTypeService.selectPmBasePenaltyTypeByPenaltyTypeId(penaltyTypeId);
+ mmap.put("pmBasePenaltyType", pmBasePenaltyType);
+ return prefix + "/edit";
+ }
+
+ /**
+ * 修改保存处罚类型维护
+ */
+ @RequiresPermissions("pm:base_penalty_type:edit")
+ @Log(title = "处罚类型维护", businessType = BusinessType.UPDATE)
+ @PostMapping("/edit")
+ @ResponseBody
+ public AjaxResult editSave(PmBasePenaltyType pmBasePenaltyType) {
+ return toAjax(pmBasePenaltyTypeService.updatePmBasePenaltyType(pmBasePenaltyType));
+ }
+
+ /**
+ * 删除
+ */
+ @RequiresPermissions("pm:base_penalty_type:remove")
+ @Log(title = "处罚类型维护", businessType = BusinessType.DELETE)
+ @GetMapping("/remove/{penaltyTypeId}")
+ @ResponseBody
+ public AjaxResult remove(@PathVariable("penaltyTypeId") Long penaltyTypeId) {
+ return toAjax(pmBasePenaltyTypeService.deletePmBasePenaltyTypeByPenaltyTypeId(penaltyTypeId));
+ }
+
+ /**
+ * 选择处罚类型维护树
+ */
+ @GetMapping(value = {"/selectBase_penalty_typeTree/{penaltyTypeId}", "/selectBase_penalty_typeTree/"})
+ public String selectBase_penalty_typeTree(@PathVariable(value = "penaltyTypeId", required = false)Long penaltyTypeId, ModelMap mmap) {
+ if (StringUtils.isNotNull(penaltyTypeId)) {
+ mmap.put("pmBasePenaltyType", pmBasePenaltyTypeService.selectPmBasePenaltyTypeByPenaltyTypeId(penaltyTypeId));
+ }
+ return prefix + "/tree";
+ }
+
+ /**
+ * 加载处罚类型维护树列表
+ */
+ @GetMapping("/treeData")
+ @ResponseBody
+ public List treeData() {
+ List ztrees = pmBasePenaltyTypeService.selectPmBasePenaltyTypeTree();
+ return ztrees;
+ }
+}
diff --git a/ruoyi-pm/src/main/java/com/ruoyi/pm/controller/PmBasePersonInfoController.java b/ruoyi-pm/src/main/java/com/ruoyi/pm/controller/PmBasePersonInfoController.java
new file mode 100644
index 0000000..192c44d
--- /dev/null
+++ b/ruoyi-pm/src/main/java/com/ruoyi/pm/controller/PmBasePersonInfoController.java
@@ -0,0 +1,117 @@
+package com.ruoyi.pm.controller;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.pm.domain.PmBasePersonInfo;
+import com.ruoyi.pm.service.IPmBasePersonInfoService;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 人员信息Controller
+ *
+ * @author ruoyi
+ * @date 2025-11-26
+ */
+@Controller
+@RequestMapping("/pm/base_person_info")
+public class PmBasePersonInfoController extends BaseController {
+ private final String prefix = "pm/base_person_info";
+
+ @Autowired
+ private IPmBasePersonInfoService pmBasePersonInfoService;
+
+ @RequiresPermissions("pm:base_person_info:view")
+ @GetMapping()
+ public String base_person_info() {
+ System.out.println("base_person_info");
+ return prefix + "/base_person_info";
+ }
+
+ /**
+ * 查询人员信息列表
+ */
+ @RequiresPermissions("pm:base_person_info:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(PmBasePersonInfo pmBasePersonInfo) {
+ startPage();
+ List list = pmBasePersonInfoService.selectPmBasePersonInfoList(pmBasePersonInfo);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出人员信息列表
+ */
+ @RequiresPermissions("pm:base_person_info:export")
+ @Log(title = "人员信息", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult export(PmBasePersonInfo pmBasePersonInfo) {
+ List list = pmBasePersonInfoService.selectPmBasePersonInfoList(pmBasePersonInfo);
+ ExcelUtil util = new ExcelUtil(PmBasePersonInfo.class);
+ return util.exportExcel(list, "人员信息数据");
+ }
+
+ /**
+ * 新增人员信息
+ */
+ @RequiresPermissions("pm:base_person_info:add")
+ @GetMapping("/add")
+ public String add() {
+ return prefix + "/add";
+ }
+
+ /**
+ * 新增保存人员信息
+ */
+ @RequiresPermissions("pm:base_person_info:add")
+ @Log(title = "人员信息", businessType = BusinessType.INSERT)
+ @PostMapping("/add")
+ @ResponseBody
+ public AjaxResult addSave(PmBasePersonInfo pmBasePersonInfo) {
+ return toAjax(pmBasePersonInfoService.insertPmBasePersonInfo(pmBasePersonInfo));
+ }
+
+ /**
+ * 修改人员信息
+ */
+ @RequiresPermissions("pm:base_person_info:edit")
+ @GetMapping("/edit/{basePersonId}")
+ public String edit(@PathVariable("basePersonId") Long basePersonId, ModelMap mmap) {
+ PmBasePersonInfo pmBasePersonInfo = pmBasePersonInfoService.selectPmBasePersonInfoByBasePersonId(basePersonId);
+ mmap.put("pmBasePersonInfo", pmBasePersonInfo);
+ return prefix + "/edit";
+ }
+
+ /**
+ * 修改保存人员信息
+ */
+ @RequiresPermissions("pm:base_person_info:edit")
+ @Log(title = "人员信息", businessType = BusinessType.UPDATE)
+ @PostMapping("/edit")
+ @ResponseBody
+ public AjaxResult editSave(PmBasePersonInfo pmBasePersonInfo) {
+ return toAjax(pmBasePersonInfoService.updatePmBasePersonInfo(pmBasePersonInfo));
+ }
+
+ /**
+ * 删除人员信息
+ */
+ @RequiresPermissions("pm:base_person_info:remove")
+ @Log(title = "人员信息", businessType = BusinessType.DELETE)
+ @PostMapping("/remove")
+ @ResponseBody
+ public AjaxResult remove(String ids) {
+ return toAjax(pmBasePersonInfoService.deletePmBasePersonInfoByBasePersonIds(ids));
+ }
+}
diff --git a/ruoyi-pm/src/main/java/com/ruoyi/pm/controller/PmRecordPenaltyController.java b/ruoyi-pm/src/main/java/com/ruoyi/pm/controller/PmRecordPenaltyController.java
new file mode 100644
index 0000000..209c61c
--- /dev/null
+++ b/ruoyi-pm/src/main/java/com/ruoyi/pm/controller/PmRecordPenaltyController.java
@@ -0,0 +1,117 @@
+package com.ruoyi.pm.controller;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.pm.domain.PmRecordPenalty;
+import com.ruoyi.pm.service.IPmRecordPenaltyService;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 处罚记录Controller
+ *
+ * @author ruoyi
+ * @date 2025-11-27
+ */
+@Controller
+@RequestMapping("/pm/record_penalty")
+public class PmRecordPenaltyController extends BaseController {
+ private String prefix = "pm/record_penalty";
+
+ @Autowired
+ private IPmRecordPenaltyService pmRecordPenaltyService;
+
+ @RequiresPermissions("pm:record_penalty:view")
+ @GetMapping()
+ public String record_penalty() {
+ return prefix + "/record_penalty";
+ }
+
+ /**
+ * 查询处罚记录列表
+ */
+ @RequiresPermissions("pm:record_penalty:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(PmRecordPenalty pmRecordPenalty) {
+ startPage();
+ List list = pmRecordPenaltyService.selectPmRecordPenaltyList(pmRecordPenalty);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出处罚记录列表
+ */
+ @RequiresPermissions("pm:record_penalty:export")
+ @Log(title = "处罚记录", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult export(PmRecordPenalty pmRecordPenalty) {
+ List list = pmRecordPenaltyService.selectPmRecordPenaltyList(pmRecordPenalty);
+ ExcelUtil util = new ExcelUtil(PmRecordPenalty.class);
+ return util.exportExcel(list, "处罚记录数据");
+ }
+
+ /**
+ * 新增处罚记录
+ */
+ @RequiresPermissions("pm:record_penalty:add")
+ @GetMapping("/add")
+ public String add() {
+ return prefix + "/add";
+ }
+
+ /**
+ * 新增保存处罚记录
+ */
+ @RequiresPermissions("pm:record_penalty:add")
+ @Log(title = "处罚记录", businessType = BusinessType.INSERT)
+ @PostMapping("/add")
+ @ResponseBody
+ public AjaxResult addSave(PmRecordPenalty pmRecordPenalty) {
+ return toAjax(pmRecordPenaltyService.insertPmRecordPenalty(pmRecordPenalty));
+ }
+
+ /**
+ * 修改处罚记录
+ */
+ @RequiresPermissions("pm:record_penalty:edit")
+ @GetMapping("/edit/{recordPenaltyId}")
+ public String edit(@PathVariable("recordPenaltyId") Long recordPenaltyId, ModelMap mmap) {
+ PmRecordPenalty pmRecordPenalty =
+ pmRecordPenaltyService.selectPmRecordPenaltyByRecordPenaltyId(recordPenaltyId);
+ mmap.put("pmRecordPenalty", pmRecordPenalty);
+ return prefix + "/edit";
+ }
+
+ /**
+ * 修改保存处罚记录
+ */
+ @RequiresPermissions("pm:record_penalty:edit")
+ @Log(title = "处罚记录", businessType = BusinessType.UPDATE)
+ @PostMapping("/edit")
+ @ResponseBody
+ public AjaxResult editSave(PmRecordPenalty pmRecordPenalty) {
+ return toAjax(pmRecordPenaltyService.updatePmRecordPenalty(pmRecordPenalty));
+ }
+
+ /**
+ * 删除处罚记录
+ */
+ @RequiresPermissions("pm:record_penalty:remove")
+ @Log(title = "处罚记录", businessType = BusinessType.DELETE)
+ @PostMapping("/remove")
+ @ResponseBody
+ public AjaxResult remove(String ids) {
+ return toAjax(pmRecordPenaltyService.deletePmRecordPenaltyByRecordPenaltyIds(ids));
+ }
+}
diff --git a/ruoyi-pm/src/main/java/com/ruoyi/pm/controller/PmRecordSanController.java b/ruoyi-pm/src/main/java/com/ruoyi/pm/controller/PmRecordSanController.java
new file mode 100644
index 0000000..b043430
--- /dev/null
+++ b/ruoyi-pm/src/main/java/com/ruoyi/pm/controller/PmRecordSanController.java
@@ -0,0 +1,121 @@
+package com.ruoyi.pm.controller;
+
+import java.util.List;
+
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.pm.domain.PmRecordSan;
+import com.ruoyi.pm.service.IPmRecordSanService;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 扫描查询记录Controller
+ *
+ * @author ruoyi
+ * @date 2025-11-27
+ */
+@Controller
+@RequestMapping("/pm/record_san")
+public class PmRecordSanController extends BaseController {
+ private String prefix = "pm/record_san";
+
+ @Autowired
+ private IPmRecordSanService pmRecordSanService;
+
+ @RequiresPermissions("pm:record_san:view")
+ @GetMapping()
+ public String record_san() {
+ return prefix + "/record_san";
+ }
+
+ /**
+ * 查询扫描查询记录列表
+ */
+ @RequiresPermissions("pm:record_san:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(PmRecordSan pmRecordSan) {
+ startPage();
+ List list = pmRecordSanService.selectPmRecordSanList(pmRecordSan);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出扫描查询记录列表
+ */
+ @RequiresPermissions("pm:record_san:export")
+ @Log(title = "扫描查询记录", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult export(PmRecordSan pmRecordSan) {
+ List list = pmRecordSanService.selectPmRecordSanList(pmRecordSan);
+ ExcelUtil util = new ExcelUtil(PmRecordSan. class);
+ return util.exportExcel(list, "扫描查询记录数据");
+ }
+
+ /**
+ * 新增扫描查询记录
+ */
+ @RequiresPermissions("pm:record_san:add")
+ @GetMapping("/add")
+ public String add() {
+ return prefix + "/add";
+ }
+
+ /**
+ * 新增保存扫描查询记录
+ */
+ @RequiresPermissions("pm:record_san:add")
+ @Log(title = "扫描查询记录", businessType = BusinessType.INSERT)
+ @PostMapping("/add")
+ @ResponseBody
+ public AjaxResult addSave(PmRecordSan pmRecordSan) {
+ return toAjax(pmRecordSanService.insertPmRecordSan(pmRecordSan));
+ }
+
+ /**
+ * 修改扫描查询记录
+ */
+ @RequiresPermissions("pm:record_san:edit")
+ @GetMapping("/edit/{recordSanId}")
+ public String edit(@PathVariable("recordSanId") Long recordSanId, ModelMap mmap) {
+ PmRecordSan pmRecordSan =
+ pmRecordSanService.selectPmRecordSanByRecordSanId(recordSanId);
+ mmap.put("pmRecordSan", pmRecordSan);
+ return prefix + "/edit";
+ }
+
+ /**
+ * 修改保存扫描查询记录
+ */
+ @RequiresPermissions("pm:record_san:edit")
+ @Log(title = "扫描查询记录", businessType = BusinessType.UPDATE)
+ @PostMapping("/edit")
+ @ResponseBody
+ public AjaxResult editSave(PmRecordSan pmRecordSan) {
+ return toAjax(pmRecordSanService.updatePmRecordSan(pmRecordSan));
+ }
+
+ /**
+ * 删除扫描查询记录
+ */
+ @RequiresPermissions("pm:record_san:remove")
+ @Log(title = "扫描查询记录", businessType = BusinessType.DELETE)
+ @PostMapping("/remove")
+ @ResponseBody
+ public AjaxResult remove(String ids) {
+ return toAjax(pmRecordSanService.deletePmRecordSanByRecordSanIds(ids));
+ }
+}
diff --git a/ruoyi-pm/src/main/java/com/ruoyi/pm/domain/PmBasePenaltyType.java b/ruoyi-pm/src/main/java/com/ruoyi/pm/domain/PmBasePenaltyType.java
new file mode 100644
index 0000000..2391059
--- /dev/null
+++ b/ruoyi-pm/src/main/java/com/ruoyi/pm/domain/PmBasePenaltyType.java
@@ -0,0 +1,103 @@
+package com.ruoyi.pm.domain;
+
+import java.math.BigDecimal;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.TreeEntity;
+
+/**
+ * 处罚类型维护对象 pm_base_penalty_type
+ *
+ * @author ruoyi
+ * @date 2025-11-27
+ */
+public class PmBasePenaltyType extends TreeEntity{
+ private static final long serialVersionUID = 1L;
+
+ /** 处罚类型主键 */
+ private Long penaltyTypeId;
+
+ /** 类型编码 */
+ @Excel(name = "类型编码")
+ private String penaltyTypeCode;
+
+ /** 处罚说明 */
+ @Excel(name = "处罚说明")
+ private String penaltyInfo;
+
+ /** 处罚金额 */
+ @Excel(name = "处罚金额")
+ private BigDecimal penaltyAmount;
+
+ /** 类型状态 */
+ @Excel(name = "类型状态")
+ private String typeState;
+
+ public void setPenaltyTypeId(Long penaltyTypeId)
+ {
+ this.penaltyTypeId = penaltyTypeId;
+ }
+
+ public Long getPenaltyTypeId()
+ {
+ return penaltyTypeId;
+ }
+
+ public void setPenaltyTypeCode(String penaltyTypeCode)
+ {
+ this.penaltyTypeCode = penaltyTypeCode;
+ }
+
+ public String getPenaltyTypeCode()
+ {
+ return penaltyTypeCode;
+ }
+
+ public void setPenaltyInfo(String penaltyInfo)
+ {
+ this.penaltyInfo = penaltyInfo;
+ }
+
+ public String getPenaltyInfo()
+ {
+ return penaltyInfo;
+ }
+
+ public void setPenaltyAmount(BigDecimal penaltyAmount)
+ {
+ this.penaltyAmount = penaltyAmount;
+ }
+
+ public BigDecimal getPenaltyAmount()
+ {
+ return penaltyAmount;
+ }
+
+ public void setTypeState(String typeState)
+ {
+ this.typeState = typeState;
+ }
+
+ public String getTypeState()
+ {
+ return typeState;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("penaltyTypeId", getPenaltyTypeId())
+ .append("penaltyTypeCode", getPenaltyTypeCode())
+ .append("penaltyInfo", getPenaltyInfo())
+ .append("penaltyAmount", getPenaltyAmount())
+ .append("parentId", getParentId())
+ .append("typeState", getTypeState())
+ .append("remark", getRemark())
+ .append("createBy", getCreateBy())
+ .append("createTime", getCreateTime())
+ .append("updateBy", getUpdateBy())
+ .append("updateTime", getUpdateTime())
+ .toString();
+ }
+}
diff --git a/ruoyi-pm/src/main/java/com/ruoyi/pm/domain/PmBasePersonInfo.java b/ruoyi-pm/src/main/java/com/ruoyi/pm/domain/PmBasePersonInfo.java
new file mode 100644
index 0000000..c0ec84c
--- /dev/null
+++ b/ruoyi-pm/src/main/java/com/ruoyi/pm/domain/PmBasePersonInfo.java
@@ -0,0 +1,180 @@
+package com.ruoyi.pm.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 人员信息对象 pm_base_person_info
+ *
+ * @author ruoyi
+ * @date 2025-11-26
+ */
+public class PmBasePersonInfo extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 人员表主键 */
+ private Long basePersonId;
+
+ /** RFID编码 */
+ @Excel(name = "RFID编码")
+ private String rfidId;
+
+ /** 工号 */
+ @Excel(name = "工号")
+ private String employeeId;
+
+ /** 姓名 */
+ @Excel(name = "姓名")
+ private String peopleName;
+
+ /** 性别 */
+ @Excel(name = "性别")
+ private String peopleSex;
+
+ /** 驾驶证代号 */
+ @Excel(name = "驾驶证代号")
+ private String driverCode;
+
+ /** 联系电话 */
+ @Excel(name = "联系电话")
+ private String phoneNumber;
+
+ /** 照片 */
+ @Excel(name = "照片")
+ private String photoPath;
+
+ /** 有效日期截止 */
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ @Excel(name = "有效日期截止", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date joinDate;
+
+ /** 学历 */
+ @Excel(name = "学历")
+ private String academicQualification;
+
+ public void setBasePersonId(Long basePersonId)
+ {
+ this.basePersonId = basePersonId;
+ }
+
+ public Long getBasePersonId()
+ {
+ return basePersonId;
+ }
+
+ public void setRfidId(String rfidId)
+ {
+ this.rfidId = rfidId;
+ }
+
+ public String getRfidId()
+ {
+ return rfidId;
+ }
+
+ public void setEmployeeId(String employeeId)
+ {
+ this.employeeId = employeeId;
+ }
+
+ public String getEmployeeId()
+ {
+ return employeeId;
+ }
+
+ public void setPeopleName(String peopleName)
+ {
+ this.peopleName = peopleName;
+ }
+
+ public String getPeopleName()
+ {
+ return peopleName;
+ }
+
+ public void setPeopleSex(String peopleSex)
+ {
+ this.peopleSex = peopleSex;
+ }
+
+ public String getPeopleSex()
+ {
+ return peopleSex;
+ }
+
+ public void setDriverCode(String driverCode)
+ {
+ this.driverCode = driverCode;
+ }
+
+ public String getDriverCode()
+ {
+ return driverCode;
+ }
+
+ public void setPhoneNumber(String phoneNumber)
+ {
+ this.phoneNumber = phoneNumber;
+ }
+
+ public String getPhoneNumber()
+ {
+ return phoneNumber;
+ }
+
+ public void setPhotoPath(String photoPath)
+ {
+ this.photoPath = photoPath;
+ }
+
+ public String getPhotoPath()
+ {
+ return photoPath;
+ }
+
+ public void setJoinDate(Date joinDate)
+ {
+ this.joinDate = joinDate;
+ }
+
+ public Date getJoinDate()
+ {
+ return joinDate;
+ }
+
+ public void setAcademicQualification(String academicQualification)
+ {
+ this.academicQualification = academicQualification;
+ }
+
+ public String getAcademicQualification()
+ {
+ return academicQualification;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("basePersonId", getBasePersonId())
+ .append("rfidId", getRfidId())
+ .append("employeeId", getEmployeeId())
+ .append("peopleName", getPeopleName())
+ .append("peopleSex", getPeopleSex())
+ .append("driverCode", getDriverCode())
+ .append("phoneNumber", getPhoneNumber())
+ .append("photoPath", getPhotoPath())
+ .append("joinDate", getJoinDate())
+ .append("academicQualification", getAcademicQualification())
+ .append("remark", getRemark())
+ .append("createBy", getCreateBy())
+ .append("createTime", getCreateTime())
+ .append("updateBy", getUpdateBy())
+ .append("updateTime", getUpdateTime())
+ .toString();
+ }
+}
diff --git a/ruoyi-pm/src/main/java/com/ruoyi/pm/domain/PmRecordPenalty.java b/ruoyi-pm/src/main/java/com/ruoyi/pm/domain/PmRecordPenalty.java
new file mode 100644
index 0000000..98a9dae
--- /dev/null
+++ b/ruoyi-pm/src/main/java/com/ruoyi/pm/domain/PmRecordPenalty.java
@@ -0,0 +1,140 @@
+package com.ruoyi.pm.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 处罚记录对象 pm_record_penalty
+ *
+ * @author ruoyi
+ * @date 2025-11-27
+ */
+public class PmRecordPenalty extends BaseEntity{
+ private static final long serialVersionUID = 1L;
+
+ /** 处罚记录主键 */
+ private Long recordPenaltyId;
+
+ /** 处罚类型 */
+ @Excel(name = "处罚类型")
+ private String penaltyType;
+
+ /** 类型编码 */
+ @Excel(name = "类型编码")
+ private String penaltyTypeCode;
+
+ /** 处罚说明 */
+ @Excel(name = "处罚说明")
+ private String penaltyInfo;
+
+ /** 处罚金额 */
+ @Excel(name = "处罚金额")
+ private Double penaltyAmount;
+
+ /** 处罚人员 */
+ @Excel(name = "处罚人员")
+ private Long basePersonId;
+
+ /** 处理状态 */
+ @Excel(name = "处理状态")
+ private String processState;
+
+ private PmBasePersonInfo basePersonInfo;
+
+ public PmBasePersonInfo getBasePersonInfo() {
+ return basePersonInfo;
+ }
+
+ public void setBasePersonInfo(PmBasePersonInfo basePersonInfo) {
+ this.basePersonInfo = basePersonInfo;
+ }
+
+ public void setRecordPenaltyId(Long recordPenaltyId)
+ {
+ this.recordPenaltyId = recordPenaltyId;
+ }
+
+ public Long getRecordPenaltyId()
+ {
+ return recordPenaltyId;
+ }
+
+ public void setPenaltyType(String penaltyType)
+ {
+ this.penaltyType = penaltyType;
+ }
+
+ public String getPenaltyType()
+ {
+ return penaltyType;
+ }
+
+ public void setPenaltyTypeCode(String penaltyTypeCode)
+ {
+ this.penaltyTypeCode = penaltyTypeCode;
+ }
+
+ public String getPenaltyTypeCode()
+ {
+ return penaltyTypeCode;
+ }
+
+ public void setPenaltyInfo(String penaltyInfo)
+ {
+ this.penaltyInfo = penaltyInfo;
+ }
+
+ public String getPenaltyInfo()
+ {
+ return penaltyInfo;
+ }
+
+ public void setPenaltyAmount(Double penaltyAmount)
+ {
+ this.penaltyAmount = penaltyAmount;
+ }
+
+ public Double getPenaltyAmount()
+ {
+ return penaltyAmount;
+ }
+
+ public void setBasePersonId(Long basePersonId)
+ {
+ this.basePersonId = basePersonId;
+ }
+
+ public Long getBasePersonId()
+ {
+ return basePersonId;
+ }
+
+ public void setProcessState(String processState)
+ {
+ this.processState = processState;
+ }
+
+ public String getProcessState()
+ {
+ return processState;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("recordPenaltyId", getRecordPenaltyId())
+ .append("penaltyType", getPenaltyType())
+ .append("penaltyTypeCode", getPenaltyTypeCode())
+ .append("penaltyInfo", getPenaltyInfo())
+ .append("penaltyAmount", getPenaltyAmount())
+ .append("basePersonId", getBasePersonId())
+ .append("processState", getProcessState())
+ .append("createBy", getCreateBy())
+ .append("createTime", getCreateTime())
+ .append("updateBy", getUpdateBy())
+ .append("updateTime", getUpdateTime())
+ .toString();
+ }
+}
diff --git a/ruoyi-pm/src/main/java/com/ruoyi/pm/domain/PmRecordSan.java b/ruoyi-pm/src/main/java/com/ruoyi/pm/domain/PmRecordSan.java
new file mode 100644
index 0000000..2c62def
--- /dev/null
+++ b/ruoyi-pm/src/main/java/com/ruoyi/pm/domain/PmRecordSan.java
@@ -0,0 +1,95 @@
+package com.ruoyi.pm.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 扫描查询记录对象 pm_record_san
+ *
+ * @author ruoyi
+ * @date 2025-11-27
+ */
+public class PmRecordSan extends BaseEntity{
+ private static final long serialVersionUID = 1L;
+
+ /** 扫描记录主键 */
+ private Long recordSanId;
+
+ /** 查询人 */
+ @Excel(name = "查询人")
+ private String queryUser;
+
+ /** 扫描RFID */
+ @Excel(name = "扫描RFID")
+ private String queryRfid;
+
+ /** 人员表主键 */
+ @Excel(name = "人员表主键")
+ private Long basePersonId;
+
+ private PmBasePersonInfo basePersonInfo;
+
+ public PmBasePersonInfo getBasePersonInfo() {
+ return basePersonInfo;
+ }
+
+ public void setBasePersonInfo(PmBasePersonInfo basePersonInfo) {
+ this.basePersonInfo = basePersonInfo;
+ }
+
+ public void setRecordSanId(Long recordSanId)
+ {
+ this.recordSanId = recordSanId;
+ }
+
+ public Long getRecordSanId()
+ {
+ return recordSanId;
+ }
+
+ public void setQueryUser(String queryUser)
+ {
+ this.queryUser = queryUser;
+ }
+
+ public String getQueryUser()
+ {
+ return queryUser;
+ }
+
+ public void setQueryRfid(String queryRfid)
+ {
+ this.queryRfid = queryRfid;
+ }
+
+ public String getQueryRfid()
+ {
+ return queryRfid;
+ }
+
+ public void setBasePersonId(Long basePersonId)
+ {
+ this.basePersonId = basePersonId;
+ }
+
+ public Long getBasePersonId()
+ {
+ return basePersonId;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("recordSanId", getRecordSanId())
+ .append("queryUser", getQueryUser())
+ .append("queryRfid", getQueryRfid())
+ .append("basePersonId", getBasePersonId())
+ .append("createBy", getCreateBy())
+ .append("createTime", getCreateTime())
+ .append("updateBy", getUpdateBy())
+ .append("updateTime", getUpdateTime())
+ .toString();
+ }
+}
diff --git a/ruoyi-pm/src/main/java/com/ruoyi/pm/mapper/PmBasePenaltyTypeMapper.java b/ruoyi-pm/src/main/java/com/ruoyi/pm/mapper/PmBasePenaltyTypeMapper.java
new file mode 100644
index 0000000..a7ff663
--- /dev/null
+++ b/ruoyi-pm/src/main/java/com/ruoyi/pm/mapper/PmBasePenaltyTypeMapper.java
@@ -0,0 +1,61 @@
+package com.ruoyi.pm.mapper;
+
+import java.util.List;
+import com.ruoyi.pm.domain.PmBasePenaltyType;
+
+/**
+ * 处罚类型维护Mapper接口
+ *
+ * @author ruoyi
+ * @date 2025-11-27
+ */
+public interface PmBasePenaltyTypeMapper
+{
+ /**
+ * 查询处罚类型维护
+ *
+ * @param penaltyTypeId 处罚类型维护主键
+ * @return 处罚类型维护
+ */
+ public PmBasePenaltyType selectPmBasePenaltyTypeByPenaltyTypeId(Long penaltyTypeId);
+
+ /**
+ * 查询处罚类型维护列表
+ *
+ * @param pmBasePenaltyType 处罚类型维护
+ * @return 处罚类型维护集合
+ */
+ public List selectPmBasePenaltyTypeList(PmBasePenaltyType pmBasePenaltyType);
+
+ /**
+ * 新增处罚类型维护
+ *
+ * @param pmBasePenaltyType 处罚类型维护
+ * @return 结果
+ */
+ public int insertPmBasePenaltyType(PmBasePenaltyType pmBasePenaltyType);
+
+ /**
+ * 修改处罚类型维护
+ *
+ * @param pmBasePenaltyType 处罚类型维护
+ * @return 结果
+ */
+ public int updatePmBasePenaltyType(PmBasePenaltyType pmBasePenaltyType);
+
+ /**
+ * 删除处罚类型维护
+ *
+ * @param penaltyTypeId 处罚类型维护主键
+ * @return 结果
+ */
+ public int deletePmBasePenaltyTypeByPenaltyTypeId(Long penaltyTypeId);
+
+ /**
+ * 批量删除处罚类型维护
+ *
+ * @param penaltyTypeIds 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deletePmBasePenaltyTypeByPenaltyTypeIds(String[] penaltyTypeIds);
+}
diff --git a/ruoyi-pm/src/main/java/com/ruoyi/pm/mapper/PmBasePersonInfoMapper.java b/ruoyi-pm/src/main/java/com/ruoyi/pm/mapper/PmBasePersonInfoMapper.java
new file mode 100644
index 0000000..d4089c4
--- /dev/null
+++ b/ruoyi-pm/src/main/java/com/ruoyi/pm/mapper/PmBasePersonInfoMapper.java
@@ -0,0 +1,63 @@
+package com.ruoyi.pm.mapper;
+
+import java.util.List;
+import com.ruoyi.pm.domain.PmBasePersonInfo;
+
+/**
+ * 人员信息Mapper接口
+ *
+ * @author ruoyi
+ * @date 2025-11-26
+ */
+public interface PmBasePersonInfoMapper
+{
+ /**
+ * 查询人员信息
+ *
+ * @param basePersonId 人员信息主键
+ * @return 人员信息
+ */
+ public PmBasePersonInfo selectPmBasePersonInfoByBasePersonId(Long basePersonId);
+
+ /**
+ * 查询人员信息列表
+ *
+ * @param pmBasePersonInfo 人员信息
+ * @return 人员信息集合
+ */
+ public List selectPmBasePersonInfoList(PmBasePersonInfo pmBasePersonInfo);
+
+ /**
+ * 新增人员信息
+ *
+ * @param pmBasePersonInfo 人员信息
+ * @return 结果
+ */
+ public int insertPmBasePersonInfo(PmBasePersonInfo pmBasePersonInfo);
+
+ /**
+ * 修改人员信息
+ *
+ * @param pmBasePersonInfo 人员信息
+ * @return 结果
+ */
+ public int updatePmBasePersonInfo(PmBasePersonInfo pmBasePersonInfo);
+
+ /**
+ * 删除人员信息
+ *
+ * @param basePersonId 人员信息主键
+ * @return 结果
+ */
+ public int deletePmBasePersonInfoByBasePersonId(Long basePersonId);
+
+ /**
+ * 批量删除人员信息
+ *
+ * @param basePersonIds 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deletePmBasePersonInfoByBasePersonIds(String[] basePersonIds);
+
+ PmBasePersonInfo selectPersonInfoByEpc(String epc);
+}
diff --git a/ruoyi-pm/src/main/java/com/ruoyi/pm/mapper/PmRecordPenaltyMapper.java b/ruoyi-pm/src/main/java/com/ruoyi/pm/mapper/PmRecordPenaltyMapper.java
new file mode 100644
index 0000000..8376f02
--- /dev/null
+++ b/ruoyi-pm/src/main/java/com/ruoyi/pm/mapper/PmRecordPenaltyMapper.java
@@ -0,0 +1,61 @@
+package com.ruoyi.pm.mapper;
+
+import java.util.List;
+import com.ruoyi.pm.domain.PmRecordPenalty;
+
+/**
+ * 处罚记录Mapper接口
+ *
+ * @author ruoyi
+ * @date 2025-11-27
+ */
+public interface PmRecordPenaltyMapper
+{
+ /**
+ * 查询处罚记录
+ *
+ * @param recordPenaltyId 处罚记录主键
+ * @return 处罚记录
+ */
+ public PmRecordPenalty selectPmRecordPenaltyByRecordPenaltyId(Long recordPenaltyId);
+
+ /**
+ * 查询处罚记录列表
+ *
+ * @param pmRecordPenalty 处罚记录
+ * @return 处罚记录集合
+ */
+ public List selectPmRecordPenaltyList(PmRecordPenalty pmRecordPenalty);
+
+ /**
+ * 新增处罚记录
+ *
+ * @param pmRecordPenalty 处罚记录
+ * @return 结果
+ */
+ public int insertPmRecordPenalty(PmRecordPenalty pmRecordPenalty);
+
+ /**
+ * 修改处罚记录
+ *
+ * @param pmRecordPenalty 处罚记录
+ * @return 结果
+ */
+ public int updatePmRecordPenalty(PmRecordPenalty pmRecordPenalty);
+
+ /**
+ * 删除处罚记录
+ *
+ * @param recordPenaltyId 处罚记录主键
+ * @return 结果
+ */
+ public int deletePmRecordPenaltyByRecordPenaltyId(Long recordPenaltyId);
+
+ /**
+ * 批量删除处罚记录
+ *
+ * @param recordPenaltyIds 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deletePmRecordPenaltyByRecordPenaltyIds(String[] recordPenaltyIds);
+}
diff --git a/ruoyi-pm/src/main/java/com/ruoyi/pm/mapper/PmRecordSanMapper.java b/ruoyi-pm/src/main/java/com/ruoyi/pm/mapper/PmRecordSanMapper.java
new file mode 100644
index 0000000..e07e05c
--- /dev/null
+++ b/ruoyi-pm/src/main/java/com/ruoyi/pm/mapper/PmRecordSanMapper.java
@@ -0,0 +1,61 @@
+package com.ruoyi.pm.mapper;
+
+import java.util.List;
+import com.ruoyi.pm.domain.PmRecordSan;
+
+/**
+ * 扫描查询记录Mapper接口
+ *
+ * @author ruoyi
+ * @date 2025-11-27
+ */
+public interface PmRecordSanMapper
+{
+ /**
+ * 查询扫描查询记录
+ *
+ * @param recordSanId 扫描查询记录主键
+ * @return 扫描查询记录
+ */
+ public PmRecordSan selectPmRecordSanByRecordSanId(Long recordSanId);
+
+ /**
+ * 查询扫描查询记录列表
+ *
+ * @param pmRecordSan 扫描查询记录
+ * @return 扫描查询记录集合
+ */
+ public List selectPmRecordSanList(PmRecordSan pmRecordSan);
+
+ /**
+ * 新增扫描查询记录
+ *
+ * @param pmRecordSan 扫描查询记录
+ * @return 结果
+ */
+ public int insertPmRecordSan(PmRecordSan pmRecordSan);
+
+ /**
+ * 修改扫描查询记录
+ *
+ * @param pmRecordSan 扫描查询记录
+ * @return 结果
+ */
+ public int updatePmRecordSan(PmRecordSan pmRecordSan);
+
+ /**
+ * 删除扫描查询记录
+ *
+ * @param recordSanId 扫描查询记录主键
+ * @return 结果
+ */
+ public int deletePmRecordSanByRecordSanId(Long recordSanId);
+
+ /**
+ * 批量删除扫描查询记录
+ *
+ * @param recordSanIds 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deletePmRecordSanByRecordSanIds(String[] recordSanIds);
+}
diff --git a/ruoyi-pm/src/main/java/com/ruoyi/pm/service/IPmBasePenaltyTypeService.java b/ruoyi-pm/src/main/java/com/ruoyi/pm/service/IPmBasePenaltyTypeService.java
new file mode 100644
index 0000000..2e556c3
--- /dev/null
+++ b/ruoyi-pm/src/main/java/com/ruoyi/pm/service/IPmBasePenaltyTypeService.java
@@ -0,0 +1,69 @@
+package com.ruoyi.pm.service;
+
+import java.util.List;
+
+import com.ruoyi.pm.domain.PmBasePenaltyType;
+import com.ruoyi.common.core.domain.Ztree;
+
+/**
+ * 处罚类型维护Service接口
+ *
+ * @author ruoyi
+ * @date 2025-11-27
+ */
+public interface IPmBasePenaltyTypeService {
+ /**
+ * 查询处罚类型维护
+ *
+ * @param penaltyTypeId 处罚类型维护主键
+ * @return 处罚类型维护
+ */
+ public PmBasePenaltyType selectPmBasePenaltyTypeByPenaltyTypeId(Long penaltyTypeId);
+
+ /**
+ * 查询处罚类型维护列表
+ *
+ * @param pmBasePenaltyType 处罚类型维护
+ * @return 处罚类型维护集合
+ */
+ public List selectPmBasePenaltyTypeList(PmBasePenaltyType pmBasePenaltyType);
+
+ /**
+ * 新增处罚类型维护
+ *
+ * @param pmBasePenaltyType 处罚类型维护
+ * @return 结果
+ */
+ public int insertPmBasePenaltyType(PmBasePenaltyType pmBasePenaltyType);
+
+ /**
+ * 修改处罚类型维护
+ *
+ * @param pmBasePenaltyType 处罚类型维护
+ * @return 结果
+ */
+ public int updatePmBasePenaltyType(PmBasePenaltyType pmBasePenaltyType);
+
+ /**
+ * 批量删除处罚类型维护
+ *
+ * @param penaltyTypeIds 需要删除的处罚类型维护主键集合
+ * @return 结果
+ */
+ public int deletePmBasePenaltyTypeByPenaltyTypeIds(String penaltyTypeIds);
+
+ /**
+ * 删除处罚类型维护信息
+ *
+ * @param penaltyTypeId 处罚类型维护主键
+ * @return 结果
+ */
+ public int deletePmBasePenaltyTypeByPenaltyTypeId(Long penaltyTypeId);
+
+ /**
+ * 查询处罚类型维护树列表
+ *
+ * @return 所有处罚类型维护信息
+ */
+ public List selectPmBasePenaltyTypeTree();
+}
diff --git a/ruoyi-pm/src/main/java/com/ruoyi/pm/service/IPmBasePersonInfoService.java b/ruoyi-pm/src/main/java/com/ruoyi/pm/service/IPmBasePersonInfoService.java
new file mode 100644
index 0000000..de8c1e0
--- /dev/null
+++ b/ruoyi-pm/src/main/java/com/ruoyi/pm/service/IPmBasePersonInfoService.java
@@ -0,0 +1,63 @@
+package com.ruoyi.pm.service;
+
+import java.util.List;
+import com.ruoyi.pm.domain.PmBasePersonInfo;
+
+/**
+ * 人员信息Service接口
+ *
+ * @author ruoyi
+ * @date 2025-11-26
+ */
+public interface IPmBasePersonInfoService
+{
+ /**
+ * 查询人员信息
+ *
+ * @param basePersonId 人员信息主键
+ * @return 人员信息
+ */
+ public PmBasePersonInfo selectPmBasePersonInfoByBasePersonId(Long basePersonId);
+
+ /**
+ * 查询人员信息列表
+ *
+ * @param pmBasePersonInfo 人员信息
+ * @return 人员信息集合
+ */
+ public List selectPmBasePersonInfoList(PmBasePersonInfo pmBasePersonInfo);
+
+ /**
+ * 新增人员信息
+ *
+ * @param pmBasePersonInfo 人员信息
+ * @return 结果
+ */
+ public int insertPmBasePersonInfo(PmBasePersonInfo pmBasePersonInfo);
+
+ /**
+ * 修改人员信息
+ *
+ * @param pmBasePersonInfo 人员信息
+ * @return 结果
+ */
+ public int updatePmBasePersonInfo(PmBasePersonInfo pmBasePersonInfo);
+
+ /**
+ * 批量删除人员信息
+ *
+ * @param basePersonIds 需要删除的人员信息主键集合
+ * @return 结果
+ */
+ public int deletePmBasePersonInfoByBasePersonIds(String basePersonIds);
+
+ /**
+ * 删除人员信息信息
+ *
+ * @param basePersonId 人员信息主键
+ * @return 结果
+ */
+ public int deletePmBasePersonInfoByBasePersonId(Long basePersonId);
+
+ PmBasePersonInfo selectPersonInfoByEpc(String epc);
+}
diff --git a/ruoyi-pm/src/main/java/com/ruoyi/pm/service/IPmRecordPenaltyService.java b/ruoyi-pm/src/main/java/com/ruoyi/pm/service/IPmRecordPenaltyService.java
new file mode 100644
index 0000000..a7ab8ac
--- /dev/null
+++ b/ruoyi-pm/src/main/java/com/ruoyi/pm/service/IPmRecordPenaltyService.java
@@ -0,0 +1,61 @@
+package com.ruoyi.pm.service;
+
+import java.util.List;
+
+import com.ruoyi.pm.domain.PmRecordPenalty;
+
+/**
+ * 处罚记录Service接口
+ *
+ * @author ruoyi
+ * @date 2025-11-27
+ */
+public interface IPmRecordPenaltyService {
+ /**
+ * 查询处罚记录
+ *
+ * @param recordPenaltyId 处罚记录主键
+ * @return 处罚记录
+ */
+ public PmRecordPenalty selectPmRecordPenaltyByRecordPenaltyId(Long recordPenaltyId);
+
+ /**
+ * 查询处罚记录列表
+ *
+ * @param pmRecordPenalty 处罚记录
+ * @return 处罚记录集合
+ */
+ public List selectPmRecordPenaltyList(PmRecordPenalty pmRecordPenalty);
+
+ /**
+ * 新增处罚记录
+ *
+ * @param pmRecordPenalty 处罚记录
+ * @return 结果
+ */
+ public int insertPmRecordPenalty(PmRecordPenalty pmRecordPenalty);
+
+ /**
+ * 修改处罚记录
+ *
+ * @param pmRecordPenalty 处罚记录
+ * @return 结果
+ */
+ public int updatePmRecordPenalty(PmRecordPenalty pmRecordPenalty);
+
+ /**
+ * 批量删除处罚记录
+ *
+ * @param recordPenaltyIds 需要删除的处罚记录主键集合
+ * @return 结果
+ */
+ public int deletePmRecordPenaltyByRecordPenaltyIds(String recordPenaltyIds);
+
+ /**
+ * 删除处罚记录信息
+ *
+ * @param recordPenaltyId 处罚记录主键
+ * @return 结果
+ */
+ public int deletePmRecordPenaltyByRecordPenaltyId(Long recordPenaltyId);
+}
diff --git a/ruoyi-pm/src/main/java/com/ruoyi/pm/service/IPmRecordSanService.java b/ruoyi-pm/src/main/java/com/ruoyi/pm/service/IPmRecordSanService.java
new file mode 100644
index 0000000..639cfbb
--- /dev/null
+++ b/ruoyi-pm/src/main/java/com/ruoyi/pm/service/IPmRecordSanService.java
@@ -0,0 +1,61 @@
+package com.ruoyi.pm.service;
+
+import java.util.List;
+
+import com.ruoyi.pm.domain.PmRecordSan;
+
+/**
+ * 扫描查询记录Service接口
+ *
+ * @author ruoyi
+ * @date 2025-11-27
+ */
+public interface IPmRecordSanService {
+ /**
+ * 查询扫描查询记录
+ *
+ * @param recordSanId 扫描查询记录主键
+ * @return 扫描查询记录
+ */
+ public PmRecordSan selectPmRecordSanByRecordSanId(Long recordSanId);
+
+ /**
+ * 查询扫描查询记录列表
+ *
+ * @param pmRecordSan 扫描查询记录
+ * @return 扫描查询记录集合
+ */
+ public List selectPmRecordSanList(PmRecordSan pmRecordSan);
+
+ /**
+ * 新增扫描查询记录
+ *
+ * @param pmRecordSan 扫描查询记录
+ * @return 结果
+ */
+ public int insertPmRecordSan(PmRecordSan pmRecordSan);
+
+ /**
+ * 修改扫描查询记录
+ *
+ * @param pmRecordSan 扫描查询记录
+ * @return 结果
+ */
+ public int updatePmRecordSan(PmRecordSan pmRecordSan);
+
+ /**
+ * 批量删除扫描查询记录
+ *
+ * @param recordSanIds 需要删除的扫描查询记录主键集合
+ * @return 结果
+ */
+ public int deletePmRecordSanByRecordSanIds(String recordSanIds);
+
+ /**
+ * 删除扫描查询记录信息
+ *
+ * @param recordSanId 扫描查询记录主键
+ * @return 结果
+ */
+ public int deletePmRecordSanByRecordSanId(Long recordSanId);
+}
diff --git a/ruoyi-pm/src/main/java/com/ruoyi/pm/service/impl/PmBasePenaltyTypeServiceImpl.java b/ruoyi-pm/src/main/java/com/ruoyi/pm/service/impl/PmBasePenaltyTypeServiceImpl.java
new file mode 100644
index 0000000..f615e8b
--- /dev/null
+++ b/ruoyi-pm/src/main/java/com/ruoyi/pm/service/impl/PmBasePenaltyTypeServiceImpl.java
@@ -0,0 +1,116 @@
+package com.ruoyi.pm.service.impl;
+
+import com.ruoyi.common.core.domain.Ztree;
+import com.ruoyi.common.core.text.Convert;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.ShiroUtils;
+import com.ruoyi.pm.domain.PmBasePenaltyType;
+import com.ruoyi.pm.mapper.PmBasePenaltyTypeMapper;
+import com.ruoyi.pm.service.IPmBasePenaltyTypeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 处罚类型维护Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2025-11-27
+ */
+@Service
+public class PmBasePenaltyTypeServiceImpl implements IPmBasePenaltyTypeService {
+ @Autowired
+ private PmBasePenaltyTypeMapper pmBasePenaltyTypeMapper;
+
+ /**
+ * 查询处罚类型维护
+ *
+ * @param penaltyTypeId 处罚类型维护主键
+ * @return 处罚类型维护
+ */
+ @Override
+ public PmBasePenaltyType selectPmBasePenaltyTypeByPenaltyTypeId(Long penaltyTypeId) {
+ return pmBasePenaltyTypeMapper.selectPmBasePenaltyTypeByPenaltyTypeId(penaltyTypeId);
+ }
+
+ /**
+ * 查询处罚类型维护列表
+ *
+ * @param pmBasePenaltyType 处罚类型维护
+ * @return 处罚类型维护
+ */
+ @Override
+ public List selectPmBasePenaltyTypeList(PmBasePenaltyType pmBasePenaltyType) {
+ return pmBasePenaltyTypeMapper.selectPmBasePenaltyTypeList(pmBasePenaltyType);
+ }
+
+ /**
+ * 新增处罚类型维护
+ *
+ * @param pmBasePenaltyType 处罚类型维护
+ * @return 结果
+ */
+ @Override
+ public int insertPmBasePenaltyType(PmBasePenaltyType pmBasePenaltyType) {
+ pmBasePenaltyType.setCreateTime(DateUtils.getNowDate());
+ pmBasePenaltyType.setCreateBy(ShiroUtils.getLoginName());
+ return pmBasePenaltyTypeMapper.insertPmBasePenaltyType(pmBasePenaltyType);
+ }
+
+ /**
+ * 修改处罚类型维护
+ *
+ * @param pmBasePenaltyType 处罚类型维护
+ * @return 结果
+ */
+ @Override
+ public int updatePmBasePenaltyType(PmBasePenaltyType pmBasePenaltyType) {
+ pmBasePenaltyType.setUpdateTime(DateUtils.getNowDate());
+ pmBasePenaltyType.setUpdateBy(ShiroUtils.getLoginName());
+ return pmBasePenaltyTypeMapper.updatePmBasePenaltyType(pmBasePenaltyType);
+ }
+
+ /**
+ * 批量删除处罚类型维护
+ *
+ * @param penaltyTypeIds 需要删除的处罚类型维护主键
+ * @return 结果
+ */
+ @Override
+ public int deletePmBasePenaltyTypeByPenaltyTypeIds(String penaltyTypeIds) {
+ return pmBasePenaltyTypeMapper.deletePmBasePenaltyTypeByPenaltyTypeIds(Convert.toStrArray(penaltyTypeIds));
+ }
+
+ /**
+ * 删除处罚类型维护信息
+ *
+ * @param penaltyTypeId 处罚类型维护主键
+ * @return 结果
+ */
+ @Override
+ public int deletePmBasePenaltyTypeByPenaltyTypeId(Long penaltyTypeId) {
+ return pmBasePenaltyTypeMapper.deletePmBasePenaltyTypeByPenaltyTypeId(penaltyTypeId);
+ }
+
+ /**
+ * 查询处罚类型维护树列表
+ *
+ * @return 所有处罚类型维护信息
+ */
+ @Override
+ public List selectPmBasePenaltyTypeTree() {
+ List pmBasePenaltyTypeList = pmBasePenaltyTypeMapper.selectPmBasePenaltyTypeList(new PmBasePenaltyType());
+ List ztrees = new ArrayList();
+ for (PmBasePenaltyType pmBasePenaltyType : pmBasePenaltyTypeList) {
+ Ztree ztree = new Ztree();
+ ztree.setId(pmBasePenaltyType.getPenaltyTypeId());
+ ztree.setpId(pmBasePenaltyType.getParentId());
+ ztree.setName(pmBasePenaltyType.getPenaltyInfo());
+ ztree.setTitle(pmBasePenaltyType.getPenaltyInfo());
+ ztrees.add(ztree);
+ }
+ return ztrees;
+ }
+}
diff --git a/ruoyi-pm/src/main/java/com/ruoyi/pm/service/impl/PmBasePersonInfoServiceImpl.java b/ruoyi-pm/src/main/java/com/ruoyi/pm/service/impl/PmBasePersonInfoServiceImpl.java
new file mode 100644
index 0000000..6727b17
--- /dev/null
+++ b/ruoyi-pm/src/main/java/com/ruoyi/pm/service/impl/PmBasePersonInfoServiceImpl.java
@@ -0,0 +1,99 @@
+package com.ruoyi.pm.service.impl;
+
+import com.ruoyi.common.core.text.Convert;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.ShiroUtils;
+import com.ruoyi.pm.domain.PmBasePersonInfo;
+import com.ruoyi.pm.mapper.PmBasePersonInfoMapper;
+import com.ruoyi.pm.service.IPmBasePersonInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 人员信息Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2025-11-26
+ */
+@Service
+public class PmBasePersonInfoServiceImpl implements IPmBasePersonInfoService {
+ @Autowired
+ private PmBasePersonInfoMapper pmBasePersonInfoMapper;
+
+ /**
+ * 查询人员信息
+ *
+ * @param basePersonId 人员信息主键
+ * @return 人员信息
+ */
+ @Override
+ public PmBasePersonInfo selectPmBasePersonInfoByBasePersonId(Long basePersonId) {
+ return pmBasePersonInfoMapper.selectPmBasePersonInfoByBasePersonId(basePersonId);
+ }
+
+ /**
+ * 查询人员信息列表
+ *
+ * @param pmBasePersonInfo 人员信息
+ * @return 人员信息
+ */
+ @Override
+ public List selectPmBasePersonInfoList(PmBasePersonInfo pmBasePersonInfo) {
+ return pmBasePersonInfoMapper.selectPmBasePersonInfoList(pmBasePersonInfo);
+ }
+
+ /**
+ * 新增人员信息
+ *
+ * @param pmBasePersonInfo 人员信息
+ * @return 结果
+ */
+ @Override
+ public int insertPmBasePersonInfo(PmBasePersonInfo pmBasePersonInfo) {
+ pmBasePersonInfo.setCreateBy(ShiroUtils.getLoginName());
+ pmBasePersonInfo.setCreateTime(DateUtils.getNowDate());
+ return pmBasePersonInfoMapper.insertPmBasePersonInfo(pmBasePersonInfo);
+ }
+
+ /**
+ * 修改人员信息
+ *
+ * @param pmBasePersonInfo 人员信息
+ * @return 结果
+ */
+ @Override
+ public int updatePmBasePersonInfo(PmBasePersonInfo pmBasePersonInfo) {
+ pmBasePersonInfo.setUpdateBy(ShiroUtils.getLoginName());
+ pmBasePersonInfo.setUpdateTime(DateUtils.getNowDate());
+ return pmBasePersonInfoMapper.updatePmBasePersonInfo(pmBasePersonInfo);
+ }
+
+ /**
+ * 批量删除人员信息
+ *
+ * @param basePersonIds 需要删除的人员信息主键
+ * @return 结果
+ */
+ @Override
+ public int deletePmBasePersonInfoByBasePersonIds(String basePersonIds) {
+ return pmBasePersonInfoMapper.deletePmBasePersonInfoByBasePersonIds(Convert.toStrArray(basePersonIds));
+ }
+
+ /**
+ * 删除人员信息信息
+ *
+ * @param basePersonId 人员信息主键
+ * @return 结果
+ */
+ @Override
+ public int deletePmBasePersonInfoByBasePersonId(Long basePersonId) {
+ return pmBasePersonInfoMapper.deletePmBasePersonInfoByBasePersonId(basePersonId);
+ }
+
+ @Override
+ public PmBasePersonInfo selectPersonInfoByEpc(String epc) {
+ return pmBasePersonInfoMapper.selectPersonInfoByEpc(epc);
+ }
+}
diff --git a/ruoyi-pm/src/main/java/com/ruoyi/pm/service/impl/PmRecordPenaltyServiceImpl.java b/ruoyi-pm/src/main/java/com/ruoyi/pm/service/impl/PmRecordPenaltyServiceImpl.java
new file mode 100644
index 0000000..f1495da
--- /dev/null
+++ b/ruoyi-pm/src/main/java/com/ruoyi/pm/service/impl/PmRecordPenaltyServiceImpl.java
@@ -0,0 +1,93 @@
+package com.ruoyi.pm.service.impl;
+
+import com.ruoyi.common.core.text.Convert;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.ShiroUtils;
+import com.ruoyi.pm.domain.PmRecordPenalty;
+import com.ruoyi.pm.mapper.PmRecordPenaltyMapper;
+import com.ruoyi.pm.service.IPmRecordPenaltyService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 处罚记录Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2025-11-27
+ */
+@Service
+public class PmRecordPenaltyServiceImpl implements IPmRecordPenaltyService {
+ @Autowired
+ private PmRecordPenaltyMapper pmRecordPenaltyMapper;
+
+ /**
+ * 查询处罚记录
+ *
+ * @param recordPenaltyId 处罚记录主键
+ * @return 处罚记录
+ */
+ @Override
+ public PmRecordPenalty selectPmRecordPenaltyByRecordPenaltyId(Long recordPenaltyId) {
+ return pmRecordPenaltyMapper.selectPmRecordPenaltyByRecordPenaltyId(recordPenaltyId);
+ }
+
+ /**
+ * 查询处罚记录列表
+ *
+ * @param pmRecordPenalty 处罚记录
+ * @return 处罚记录
+ */
+ @Override
+ public List selectPmRecordPenaltyList(PmRecordPenalty pmRecordPenalty) {
+ return pmRecordPenaltyMapper.selectPmRecordPenaltyList(pmRecordPenalty);
+ }
+
+ /**
+ * 新增处罚记录
+ *
+ * @param pmRecordPenalty 处罚记录
+ * @return 结果
+ */
+ @Override
+ public int insertPmRecordPenalty(PmRecordPenalty pmRecordPenalty) {
+ pmRecordPenalty.setCreateTime(DateUtils.getNowDate());
+ return pmRecordPenaltyMapper.insertPmRecordPenalty(pmRecordPenalty);
+ }
+
+ /**
+ * 修改处罚记录
+ *
+ * @param pmRecordPenalty 处罚记录
+ * @return 结果
+ */
+ @Override
+ public int updatePmRecordPenalty(PmRecordPenalty pmRecordPenalty) {
+ pmRecordPenalty.setUpdateTime(DateUtils.getNowDate());
+ pmRecordPenalty.setUpdateBy(ShiroUtils.getLoginName());
+ return pmRecordPenaltyMapper.updatePmRecordPenalty(pmRecordPenalty);
+ }
+
+ /**
+ * 批量删除处罚记录
+ *
+ * @param recordPenaltyIds 需要删除的处罚记录主键
+ * @return 结果
+ */
+ @Override
+ public int deletePmRecordPenaltyByRecordPenaltyIds(String recordPenaltyIds) {
+ return pmRecordPenaltyMapper.deletePmRecordPenaltyByRecordPenaltyIds(Convert.toStrArray(recordPenaltyIds));
+ }
+
+ /**
+ * 删除处罚记录信息
+ *
+ * @param recordPenaltyId 处罚记录主键
+ * @return 结果
+ */
+ @Override
+ public int deletePmRecordPenaltyByRecordPenaltyId(Long recordPenaltyId) {
+ return pmRecordPenaltyMapper.deletePmRecordPenaltyByRecordPenaltyId(recordPenaltyId);
+ }
+}
diff --git a/ruoyi-pm/src/main/java/com/ruoyi/pm/service/impl/PmRecordSanServiceImpl.java b/ruoyi-pm/src/main/java/com/ruoyi/pm/service/impl/PmRecordSanServiceImpl.java
new file mode 100644
index 0000000..5e63850
--- /dev/null
+++ b/ruoyi-pm/src/main/java/com/ruoyi/pm/service/impl/PmRecordSanServiceImpl.java
@@ -0,0 +1,90 @@
+package com.ruoyi.pm.service.impl;
+
+import java.util.List;
+ import com.ruoyi.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.pm.mapper.PmRecordSanMapper;
+import com.ruoyi.pm.domain.PmRecordSan;
+import com.ruoyi.pm.service.IPmRecordSanService;
+import com.ruoyi.common.core.text.Convert;
+
+/**
+ * 扫描查询记录Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2025-11-27
+ */
+@Service
+public class PmRecordSanServiceImpl implements IPmRecordSanService {
+ @Autowired
+ private PmRecordSanMapper pmRecordSanMapper;
+
+ /**
+ * 查询扫描查询记录
+ *
+ * @param recordSanId 扫描查询记录主键
+ * @return 扫描查询记录
+ */
+ @Override
+ public PmRecordSan selectPmRecordSanByRecordSanId(Long recordSanId) {
+ return pmRecordSanMapper.selectPmRecordSanByRecordSanId(recordSanId);
+ }
+
+ /**
+ * 查询扫描查询记录列表
+ *
+ * @param pmRecordSan 扫描查询记录
+ * @return 扫描查询记录
+ */
+ @Override
+ public List selectPmRecordSanList(PmRecordSan pmRecordSan) {
+ return pmRecordSanMapper.selectPmRecordSanList(pmRecordSan);
+ }
+
+ /**
+ * 新增扫描查询记录
+ *
+ * @param pmRecordSan 扫描查询记录
+ * @return 结果
+ */
+ @Override
+ public int insertPmRecordSan(PmRecordSan pmRecordSan) {
+ pmRecordSan.setCreateTime(DateUtils.getNowDate());
+ return pmRecordSanMapper.insertPmRecordSan(pmRecordSan);
+ }
+
+ /**
+ * 修改扫描查询记录
+ *
+ * @param pmRecordSan 扫描查询记录
+ * @return 结果
+ */
+ @Override
+ public int updatePmRecordSan(PmRecordSan pmRecordSan) {
+ pmRecordSan.setUpdateTime(DateUtils.getNowDate());
+ return pmRecordSanMapper.updatePmRecordSan(pmRecordSan);
+ }
+
+ /**
+ * 批量删除扫描查询记录
+ *
+ * @param recordSanIds 需要删除的扫描查询记录主键
+ * @return 结果
+ */
+ @Override
+ public int deletePmRecordSanByRecordSanIds(String recordSanIds) {
+ return pmRecordSanMapper.deletePmRecordSanByRecordSanIds(Convert.toStrArray(recordSanIds));
+ }
+
+ /**
+ * 删除扫描查询记录信息
+ *
+ * @param recordSanId 扫描查询记录主键
+ * @return 结果
+ */
+ @Override
+ public int deletePmRecordSanByRecordSanId(Long recordSanId) {
+ return pmRecordSanMapper.deletePmRecordSanByRecordSanId(recordSanId);
+ }
+}
diff --git a/ruoyi-pm/src/main/resources/create_menu_sql/base_person_infoMenu.sql b/ruoyi-pm/src/main/resources/create_menu_sql/base_person_infoMenu.sql
new file mode 100644
index 0000000..f2ee23e
--- /dev/null
+++ b/ruoyi-pm/src/main/resources/create_menu_sql/base_person_infoMenu.sql
@@ -0,0 +1,22 @@
+-- 菜单 SQL
+insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('人员信息', '4', '1', '/pm/base_person_info', 'C', '0', 'pm:base_person_info:view', '#', 'admin', sysdate(), '', null, '人员信息菜单');
+
+-- 按钮父菜单ID
+SELECT @parentId := LAST_INSERT_ID();
+
+-- 按钮 SQL
+insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('人员信息查询', @parentId, '1', '#', 'F', '0', 'pm:base_person_info:list', '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('人员信息新增', @parentId, '2', '#', 'F', '0', 'pm:base_person_info:add', '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('人员信息修改', @parentId, '3', '#', 'F', '0', 'pm:base_person_info:edit', '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('人员信息删除', @parentId, '4', '#', 'F', '0', 'pm:base_person_info:remove', '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('人员信息导出', @parentId, '5', '#', 'F', '0', 'pm:base_person_info:export', '#', 'admin', sysdate(), '', null, '');
diff --git a/ruoyi-pm/src/main/resources/create_menu_sql/record_penaltyMenu.sql b/ruoyi-pm/src/main/resources/create_menu_sql/record_penaltyMenu.sql
new file mode 100644
index 0000000..84ac14d
--- /dev/null
+++ b/ruoyi-pm/src/main/resources/create_menu_sql/record_penaltyMenu.sql
@@ -0,0 +1,22 @@
+-- 菜单 SQL
+insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('处罚记录', '2000', '1', '/pm/record_penalty', 'C', '0', 'pm:record_penalty:view', '#', 'admin', sysdate(), '', null, '处罚记录菜单');
+
+-- 按钮父菜单ID
+SELECT @parentId := LAST_INSERT_ID();
+
+-- 按钮 SQL
+insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('处罚记录查询', @parentId, '1', '#', 'F', '0', 'pm:record_penalty:list', '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('处罚记录新增', @parentId, '2', '#', 'F', '0', 'pm:record_penalty:add', '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('处罚记录修改', @parentId, '3', '#', 'F', '0', 'pm:record_penalty:edit', '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('处罚记录删除', @parentId, '4', '#', 'F', '0', 'pm:record_penalty:remove', '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('处罚记录导出', @parentId, '5', '#', 'F', '0', 'pm:record_penalty:export', '#', 'admin', sysdate(), '', null, '');
diff --git a/ruoyi-pm/src/main/resources/create_menu_sql/record_sanMenu.sql b/ruoyi-pm/src/main/resources/create_menu_sql/record_sanMenu.sql
new file mode 100644
index 0000000..fdeb5ff
--- /dev/null
+++ b/ruoyi-pm/src/main/resources/create_menu_sql/record_sanMenu.sql
@@ -0,0 +1,22 @@
+-- 菜单 SQL
+insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('扫描查询记录', '2000', '1', '/pm/record_san', 'C', '0', 'pm:record_san:view', '#', 'admin', sysdate(), '', null, '扫描查询记录菜单');
+
+-- 按钮父菜单ID
+SELECT @parentId := LAST_INSERT_ID();
+
+-- 按钮 SQL
+insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('扫描查询记录查询', @parentId, '1', '#', 'F', '0', 'pm:record_san:list', '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('扫描查询记录新增', @parentId, '2', '#', 'F', '0', 'pm:record_san:add', '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('扫描查询记录修改', @parentId, '3', '#', 'F', '0', 'pm:record_san:edit', '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('扫描查询记录删除', @parentId, '4', '#', 'F', '0', 'pm:record_san:remove', '#', 'admin', sysdate(), '', null, '');
+
+insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
+values('扫描查询记录导出', @parentId, '5', '#', 'F', '0', 'pm:record_san:export', '#', 'admin', sysdate(), '', null, '');
diff --git a/ruoyi-pm/src/main/resources/mapper/pm/PmBasePenaltyTypeMapper.xml b/ruoyi-pm/src/main/resources/mapper/pm/PmBasePenaltyTypeMapper.xml
new file mode 100644
index 0000000..47e79ea
--- /dev/null
+++ b/ruoyi-pm/src/main/resources/mapper/pm/PmBasePenaltyTypeMapper.xml
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select penalty_type_id, penalty_type_code, penalty_info, penalty_amount, parent_id, type_state, remark, create_by, create_time, update_by, update_time from pm_base_penalty_type
+
+
+
+
+
+
+
+ insert into pm_base_penalty_type
+
+ penalty_type_code,
+ penalty_info,
+ penalty_amount,
+ parent_id,
+ type_state,
+ remark,
+ create_by,
+ create_time,
+ update_by,
+ update_time,
+
+
+ #{penaltyTypeCode},
+ #{penaltyInfo},
+ #{penaltyAmount},
+ #{parentId},
+ #{typeState},
+ #{remark},
+ #{createBy},
+ #{createTime},
+ #{updateBy},
+ #{updateTime},
+
+
+
+
+ update pm_base_penalty_type
+
+ penalty_type_code = #{penaltyTypeCode},
+ penalty_info = #{penaltyInfo},
+ penalty_amount = #{penaltyAmount},
+ parent_id = #{parentId},
+ type_state = #{typeState},
+ remark = #{remark},
+ create_by = #{createBy},
+ create_time = #{createTime},
+ update_by = #{updateBy},
+ update_time = #{updateTime},
+
+ where penalty_type_id = #{penaltyTypeId}
+
+
+
+ delete from pm_base_penalty_type where penalty_type_id = #{penaltyTypeId}
+
+
+
+ delete from pm_base_penalty_type where penalty_type_id in
+
+ #{penaltyTypeId}
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-pm/src/main/resources/mapper/pm/PmBasePersonInfoMapper.xml b/ruoyi-pm/src/main/resources/mapper/pm/PmBasePersonInfoMapper.xml
new file mode 100644
index 0000000..c0a5dbe
--- /dev/null
+++ b/ruoyi-pm/src/main/resources/mapper/pm/PmBasePersonInfoMapper.xml
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select base_person_id, rfid_id, employee_id, people_name, people_sex, driver_code, phone_number, photo_path, join_date, academic_qualification, remark, create_by, create_time, update_by, update_time from pm_base_person_info
+
+
+
+
+
+
+
+ insert into pm_base_person_info
+
+ rfid_id,
+ employee_id,
+ people_name,
+ people_sex,
+ driver_code,
+ phone_number,
+ photo_path,
+ join_date,
+ academic_qualification,
+ remark,
+ create_by,
+ create_time,
+ update_by,
+ update_time,
+
+
+ #{rfidId},
+ #{employeeId},
+ #{peopleName},
+ #{peopleSex},
+ #{driverCode},
+ #{phoneNumber},
+ #{photoPath},
+ #{joinDate},
+ #{academicQualification},
+ #{remark},
+ #{createBy},
+ #{createTime},
+ #{updateBy},
+ #{updateTime},
+
+
+
+
+ update pm_base_person_info
+
+ rfid_id = #{rfidId},
+ employee_id = #{employeeId},
+ people_name = #{peopleName},
+ people_sex = #{peopleSex},
+ driver_code = #{driverCode},
+ phone_number = #{phoneNumber},
+ photo_path = #{photoPath},
+ join_date = #{joinDate},
+ academic_qualification = #{academicQualification},
+ remark = #{remark},
+ create_by = #{createBy},
+ create_time = #{createTime},
+ update_by = #{updateBy},
+ update_time = #{updateTime},
+
+ where base_person_id = #{basePersonId}
+
+
+
+ delete from pm_base_person_info where base_person_id = #{basePersonId}
+
+
+
+ delete from pm_base_person_info where base_person_id in
+
+ #{basePersonId}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-pm/src/main/resources/mapper/pm/PmRecordPenaltyMapper.xml b/ruoyi-pm/src/main/resources/mapper/pm/PmRecordPenaltyMapper.xml
new file mode 100644
index 0000000..a80346f
--- /dev/null
+++ b/ruoyi-pm/src/main/resources/mapper/pm/PmRecordPenaltyMapper.xml
@@ -0,0 +1,115 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select record_penalty_id,
+ penalty_type,
+ penalty_type_code,
+ penalty_info,
+ penalty_amount,
+ rp.base_person_id,
+ process_state,
+ rp.create_by,
+ rp.create_time,
+ rp.update_by,
+ rp.update_time,
+ rfid_id,
+ employee_id,
+ people_name,
+ driver_code
+ from pm_record_penalty rp
+ left join pm_base_person_info pbpi on rp.base_person_id = pbpi.base_person_id
+
+
+
+
+
+
+
+ insert into pm_record_penalty
+
+ penalty_type,
+ penalty_type_code,
+ penalty_info,
+ penalty_amount,
+ base_person_id,
+ process_state,
+ create_by,
+ create_time,
+ update_by,
+ update_time,
+
+
+ #{penaltyType},
+ #{penaltyTypeCode},
+ #{penaltyInfo},
+ #{penaltyAmount},
+ #{basePersonId},
+ #{processState},
+ #{createBy},
+ #{createTime},
+ #{updateBy},
+ #{updateTime},
+
+
+
+
+ update pm_record_penalty
+
+ penalty_type = #{penaltyType},
+ penalty_type_code = #{penaltyTypeCode},
+ penalty_info = #{penaltyInfo},
+ penalty_amount = #{penaltyAmount},
+ base_person_id = #{basePersonId},
+ process_state = #{processState},
+ create_by = #{createBy},
+ create_time = #{createTime},
+ update_by = #{updateBy},
+ update_time = #{updateTime},
+
+ where record_penalty_id = #{recordPenaltyId}
+
+
+
+ delete from pm_record_penalty where record_penalty_id = #{recordPenaltyId}
+
+
+
+ delete from pm_record_penalty where record_penalty_id in
+
+ #{recordPenaltyId}
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-pm/src/main/resources/mapper/pm/PmRecordSanMapper.xml b/ruoyi-pm/src/main/resources/mapper/pm/PmRecordSanMapper.xml
new file mode 100644
index 0000000..de2522b
--- /dev/null
+++ b/ruoyi-pm/src/main/resources/mapper/pm/PmRecordSanMapper.xml
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select record_san_id,
+ query_user,
+ query_rfid,
+ rs.base_person_id,
+ rs.create_by,
+ rs.create_time,
+ rs.update_by,
+ rs.update_time,
+ rfid_id,
+ employee_id,
+ people_name,
+ driver_code
+ from pm_record_san rs
+ left join bgs_personnel_management.pm_base_person_info pbpi on rs.base_person_id = pbpi.base_person_id
+
+
+
+
+
+
+
+ insert into pm_record_san
+
+ query_user,
+ query_rfid,
+ base_person_id,
+ create_by,
+ create_time,
+ update_by,
+ update_time,
+
+
+ #{queryUser},
+ #{queryRfid},
+ #{basePersonId},
+ #{createBy},
+ #{createTime},
+ #{updateBy},
+ #{updateTime},
+
+
+
+
+ update pm_record_san
+
+ query_user = #{queryUser},
+ query_rfid = #{queryRfid},
+ base_person_id = #{basePersonId},
+ create_by = #{createBy},
+ create_time = #{createTime},
+ update_by = #{updateBy},
+ update_time = #{updateTime},
+
+ where record_san_id = #{recordSanId}
+
+
+
+ delete from pm_record_san where record_san_id = #{recordSanId}
+
+
+
+ delete from pm_record_san where record_san_id in
+
+ #{recordSanId}
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-pm/src/main/resources/templates/pm/base_penalty_type/add.html b/ruoyi-pm/src/main/resources/templates/pm/base_penalty_type/add.html
new file mode 100644
index 0000000..6b64cf7
--- /dev/null
+++ b/ruoyi-pm/src/main/resources/templates/pm/base_penalty_type/add.html
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-pm/src/main/resources/templates/pm/base_penalty_type/base_penalty_type.html b/ruoyi-pm/src/main/resources/templates/pm/base_penalty_type/base_penalty_type.html
new file mode 100644
index 0000000..85d46bc
--- /dev/null
+++ b/ruoyi-pm/src/main/resources/templates/pm/base_penalty_type/base_penalty_type.html
@@ -0,0 +1,155 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-pm/src/main/resources/templates/pm/base_penalty_type/edit.html b/ruoyi-pm/src/main/resources/templates/pm/base_penalty_type/edit.html
new file mode 100644
index 0000000..2a2ac56
--- /dev/null
+++ b/ruoyi-pm/src/main/resources/templates/pm/base_penalty_type/edit.html
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-pm/src/main/resources/templates/pm/base_penalty_type/tree.html b/ruoyi-pm/src/main/resources/templates/pm/base_penalty_type/tree.html
new file mode 100644
index 0000000..01d3875
--- /dev/null
+++ b/ruoyi-pm/src/main/resources/templates/pm/base_penalty_type/tree.html
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-pm/src/main/resources/templates/pm/base_person_info/add.html b/ruoyi-pm/src/main/resources/templates/pm/base_person_info/add.html
new file mode 100644
index 0000000..4865170
--- /dev/null
+++ b/ruoyi-pm/src/main/resources/templates/pm/base_person_info/add.html
@@ -0,0 +1,137 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-pm/src/main/resources/templates/pm/base_person_info/base_person_info.html b/ruoyi-pm/src/main/resources/templates/pm/base_person_info/base_person_info.html
new file mode 100644
index 0000000..2926b1d
--- /dev/null
+++ b/ruoyi-pm/src/main/resources/templates/pm/base_person_info/base_person_info.html
@@ -0,0 +1,171 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-pm/src/main/resources/templates/pm/base_person_info/edit.html b/ruoyi-pm/src/main/resources/templates/pm/base_person_info/edit.html
new file mode 100644
index 0000000..84452a5
--- /dev/null
+++ b/ruoyi-pm/src/main/resources/templates/pm/base_person_info/edit.html
@@ -0,0 +1,144 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-pm/src/main/resources/templates/pm/record_penalty/add.html b/ruoyi-pm/src/main/resources/templates/pm/record_penalty/add.html
new file mode 100644
index 0000000..fe00375
--- /dev/null
+++ b/ruoyi-pm/src/main/resources/templates/pm/record_penalty/add.html
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-pm/src/main/resources/templates/pm/record_penalty/edit.html b/ruoyi-pm/src/main/resources/templates/pm/record_penalty/edit.html
new file mode 100644
index 0000000..d7443ee
--- /dev/null
+++ b/ruoyi-pm/src/main/resources/templates/pm/record_penalty/edit.html
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-pm/src/main/resources/templates/pm/record_penalty/record_penalty.html b/ruoyi-pm/src/main/resources/templates/pm/record_penalty/record_penalty.html
new file mode 100644
index 0000000..ed7fa78
--- /dev/null
+++ b/ruoyi-pm/src/main/resources/templates/pm/record_penalty/record_penalty.html
@@ -0,0 +1,179 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-pm/src/main/resources/templates/pm/record_san/add.html b/ruoyi-pm/src/main/resources/templates/pm/record_san/add.html
new file mode 100644
index 0000000..7712794
--- /dev/null
+++ b/ruoyi-pm/src/main/resources/templates/pm/record_san/add.html
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-pm/src/main/resources/templates/pm/record_san/edit.html b/ruoyi-pm/src/main/resources/templates/pm/record_san/edit.html
new file mode 100644
index 0000000..7e1ec41
--- /dev/null
+++ b/ruoyi-pm/src/main/resources/templates/pm/record_san/edit.html
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-pm/src/main/resources/templates/pm/record_san/record_san.html b/ruoyi-pm/src/main/resources/templates/pm/record_san/record_san.html
new file mode 100644
index 0000000..3434f3d
--- /dev/null
+++ b/ruoyi-pm/src/main/resources/templates/pm/record_san/record_san.html
@@ -0,0 +1,136 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file