wanghao 6 months ago
parent 3386610822
commit 31be5bbe21

@ -239,6 +239,7 @@
<module>ruoyi-quartz</module>
<module>ruoyi-generator</module>
<module>ruoyi-common</module>
<module>ruoyi-pm</module>
</modules>
<packaging>pom</packaging>

@ -67,6 +67,18 @@
<artifactId>ruoyi-generator</artifactId>
</dependency>
<!-- 项目管理模块-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-pm</artifactId>
<version>4.8.1</version>
</dependency>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-api</artifactId>
<version>4.8.1</version>
</dependency>
</dependencies>
<build>

@ -7,7 +7,7 @@ ruoyi:
# 版权年份
copyrightYear: 2025
# 实例演示开关
demoEnabled: false
demoEnabled: true
# 文件路径 示例( Windows配置D:/ruoyi/uploadPathLinux配置 /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
# 踢出之前登录的/之后登录的用户,默认踢出之前登录的用户

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>ruoyi</artifactId>
<groupId>com.ruoyi</groupId>
<version>4.8.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ruoyi-api</artifactId>
<dependencies>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-pm</artifactId>
<version>4.8.1</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>

@ -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("未查询到该人员信息");
}
}

@ -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;
}
}

@ -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<PdaApkVersion> 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<PdaApkVersion> list = pdaApkVersionService.selectPdaApkVersionList(pdaApkVersion);
ExcelUtil<PdaApkVersion> util = new ExcelUtil<PdaApkVersion>(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));
}
}

@ -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 + '\'' +
'}';
}
}

@ -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;
}
}

@ -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;
}
}

@ -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;
}
}

@ -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<String> 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<String> getEpcList() {
return epcList;
}
public void setEpcList(List<String> 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;
}
}

@ -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;
}
}

@ -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<String> epcList;
private String areaCode;
private String submitUser;
private String useUser;
public List<String> getEpcList() {
return epcList;
}
public void setEpcList(List<String> 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;
}
}

@ -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();
}
}

@ -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 + '\'' + '}';
}
}

@ -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 {
}

@ -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<String> selectMenuNameByUserID(Integer userID);
APKVersion getVersion();
List<String> selectMenuName();
SysUser login_getUser1(@Param("name")String name, @Param("passw")String md5Str);
}

@ -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<PdaApkVersion> 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);
}

@ -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<PdaApkVersion> 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);
}

@ -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;
}

@ -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<String> 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();
}
}

@ -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<PdaApkVersion> 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);
}
}

@ -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 md5true
* @param file
* @return
*/
public static boolean isFileValid(String md5, File file) {
return StringUtils.isEmpty(md5) || md5.equals(Md5Utils.getFileMD5(file));
}
/**
* byte2hex
*
* @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);
}
}

@ -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;

@ -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, '');

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.api.mapper.ApiMapper">
</mapper>

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.api.mapper.LoginMapper">
<!--登陆-->
<select id="login_getUser" resultType="java.lang.Integer">
SELECT user_id FROM sys_user where login_name=#{name} and `password`=#{passw} limit 1;
</select>
<select id="login_getUser1" resultMap="com.ruoyi.system.mapper.SysUserMapper.SysUserResult">
SELECT user_id,dept_id FROM sys_user where login_name=#{name} and `password`=#{passw} limit 1;
</select>
<select id="login_findSalt" resultType="java.lang.String">
SELECT salt FROM sys_user where login_name=#{name}
</select>
<select id="selectMenuName" resultType="java.lang.String">
select menu_name
from sys_menu where parent_id=2027 order by order_num
</select>
<select id="selectMenuNameByUserID" resultType="java.lang.String">
select menu_name
from sys_role_menu r
left join sys_menu m on r.menu_id = m.menu_id
where r.role_id in (select role_id from sys_user_role where user_id=#{userID})
and parent_id=2027
group by menu_name,m.menu_id,m.order_num
order by m.order_num;
</select>
<resultMap type="com.ruoyi.api.domain.APKVersion" id="PdaApkVersionResult">
<result property="VersionCode" column="version_code" />
<result property="VersionName" column="version_name" />
<result property="ModifyContent" column="modify_content" />
<result property="DownloadUrl" column="download_url" />
<result property="ApkSize" column="apk_size" />
<result property="ApkMd5" column="apk_md5" />
</resultMap>
<select id="getVersion" resultMap="PdaApkVersionResult">
select version_code, version_name, modify_content, download_url, apk_size, apk_md5 from pda_apk_version order by create_time desc limit 1
</select>
</mapper>

@ -0,0 +1,82 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.api.mapper.PdaApkVersionMapper">
<resultMap type="com.ruoyi.api.domain.PdaApkVersion" id="PdaApkVersionResult">
<result property="objid" column="objid"/>
<result property="versionCode" column="version_code"/>
<result property="versionName" column="version_name"/>
<result property="modifyContent" column="modify_content"/>
<result property="downloadUrl" column="download_url"/>
<result property="apkSize" column="apk_size"/>
<result property="apkMd5" column="apk_md5"/>
<result property="createTime" column="create_time"/>
</resultMap>
<sql id="selectPdaApkVersionVo">
select objid, version_code, version_name, modify_content, download_url, apk_size, apk_md5, create_time from pda_apk_version
</sql>
<select id="selectPdaApkVersionList" parameterType="PdaApkVersion" resultMap="PdaApkVersionResult">
<include refid="selectPdaApkVersionVo"/>
<where>
<if test="versionCode != null ">and version_code = #{versionCode}</if>
</where>
</select>
<select id="selectPdaApkVersionByObjid" parameterType="Long" resultMap="PdaApkVersionResult">
<include refid="selectPdaApkVersionVo"/>
where objid = #{objid}
</select>
<insert id="insertPdaApkVersion" parameterType="PdaApkVersion" useGeneratedKeys="true" keyProperty="objid">
insert into pda_apk_version
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="versionCode != null">version_code,</if>
<if test="versionName != null">version_name,</if>
<if test="modifyContent != null">modify_content,</if>
<if test="downloadUrl != null">download_url,</if>
<if test="apkSize != null">apk_size,</if>
<if test="apkMd5 != null">apk_md5,</if>
<if test="createTime != null">create_time,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="versionCode != null">#{versionCode},</if>
<if test="versionName != null">#{versionName},</if>
<if test="modifyContent != null">#{modifyContent},</if>
<if test="downloadUrl != null">#{downloadUrl},</if>
<if test="apkSize != null">#{apkSize},</if>
<if test="apkMd5 != null">#{apkMd5},</if>
<if test="createTime != null">#{createTime},</if>
</trim>
</insert>
<update id="updatePdaApkVersion" parameterType="PdaApkVersion">
update pda_apk_version
<trim prefix="SET" suffixOverrides=",">
<if test="versionCode != null">version_code = #{versionCode},</if>
<if test="versionName != null">version_name = #{versionName},</if>
<if test="modifyContent != null">modify_content = #{modifyContent},</if>
<if test="downloadUrl != null">download_url = #{downloadUrl},</if>
<if test="apkSize != null">apk_size = #{apkSize},</if>
<if test="apkMd5 != null">apk_md5 = #{apkMd5},</if>
<if test="createTime != null">create_time = #{createTime},</if>
</trim>
where objid = #{objid}
</update>
<delete id="deletePdaApkVersionByObjid" parameterType="Long">
delete from pda_apk_version where objid = #{objid}
</delete>
<delete id="deletePdaApkVersionByObjids" parameterType="String">
delete from pda_apk_version where objid in
<foreach item="objid" collection="array" open="(" separator="," close=")">
#{objid}
</foreach>
</delete>
</mapper>

@ -0,0 +1,125 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('新增手持版本升级')" />
<th:block th:include="include :: bootstrap-fileinput-css"/>
<th:block th:include="include :: summernote-css" />
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-pda_version-add">
<div class="form-group">
<label class="col-sm-3 control-label">版本号:</label>
<div class="col-sm-8">
<input name="versionCode" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">版本名:</label>
<div class="col-sm-8">
<input name="versionName" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">信息:</label>
<div class="col-sm-8">
<input type="hidden" class="form-control" name="modifyContent">
<div class="summernote" id="modifyContent"></div>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">位置:</label>
<div class="col-sm-8">
<!-- <input type="hidden" name="downloadUrl">-->
<!-- <div class="file-loading">-->
<!-- <input class="form-control file-upload" id="downloadUrl" name="file" type="file">-->
<input id="filePath" name="filePath" class="form-control" type="file">
<!-- </div>-->
</div>
</div>
</form>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: bootstrap-fileinput-js"/>
<th:block th:include="include :: summernote-js" />
<script th:inline="javascript">
var prefix = ctx + "pda/pda_version"
$("#form-pda_version-add").validate({
focusCleanup: true
});
function submitHandler() {
// if ($.validate.form()) {
// $.operate.save(prefix + "/add", $('#form-pda_version-add').serialize());
// }
var formData = new FormData();
if ($('#filePath')[0].files[0] == null) {
$.modal.alertWarning("请先选择文件路径");
return false;
}
formData.append('versionCode', $("input[name='versionCode']").val());
formData.append('versionName', $("input[name='versionName']").val());
formData.append('modifyContent', $("input[name='modifyContent']").val());
formData.append('file', $('#filePath')[0].files[0]);
$.ajax({
url: prefix + "/add",
type: 'post',
cache: false,
data: formData,
processData: false,
contentType: false,
dataType: "json",
success: function(result) {
$.operate.successCallback(result);
}
});
}
// $(".file-upload").fileinput({
// uploadUrl: ctx + 'common/upload',
// maxFileCount: 1,
// autoReplace: true
// }).on('fileuploaded', function (event, data, previewId, index) {
// $("input[name='" + event.currentTarget.id + "']").val(data.response.url)
// }).on('fileremoved', function (event, id, index) {
// $("input[name='" + event.currentTarget.id + "']").val('')
// })
$(function() {
$('.summernote').summernote({
lang: 'zh-CN',
dialogsInBody: true,
callbacks: {
onChange: function(contents, $edittable) {
$("input[name='" + this.id + "']").val(contents);
},
onImageUpload: function(files) {
var obj = this;
var data = new FormData();
data.append("file", files[0]);
$.ajax({
type: "post",
url: ctx + "common/upload",
data: data,
cache: false,
contentType: false,
processData: false,
dataType: 'json',
success: function(result) {
if (result.code == web_status.SUCCESS) {
$('#' + obj.id).summernote('insertImage', result.url);
} else {
$.modal.alertError(result.msg);
}
},
error: function(error) {
$.modal.alertWarning("图片上传失败。");
}
});
}
}
});
});
</script>
</body>
</html>

@ -0,0 +1,114 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('修改手持版本升级')" />
<th:block th:include="include :: bootstrap-fileinput-css"/>
<th:block th:include="include :: summernote-css" />
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-pda_version-edit" th:object="${pdaApkVersion}">
<input name="objid" th:field="*{objid}" type="hidden">
<div class="form-group">
<label class="col-sm-3 control-label">版本号:</label>
<div class="col-sm-8">
<input name="versionCode" th:field="*{versionCode}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">版本名:</label>
<div class="col-sm-8">
<input name="versionName" th:field="*{versionName}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">信息:</label>
<div class="col-sm-8">
<input type="hidden" class="form-control" th:field="*{modifyContent}">
<div class="summernote" id="modifyContent"></div>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">位置:</label>
<div class="col-sm-8">
<input type="hidden" name="downloadUrl" th:field="*{downloadUrl}">
<div class="file-loading">
<input class="form-control file-upload" id="downloadUrl" name="file" type="file">
</div>
</div>
</div>
</form>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: bootstrap-fileinput-js"/>
<th:block th:include="include :: summernote-js" />
<script th:inline="javascript">
var prefix = ctx + "pda/pda_version";
$("#form-pda_version-edit").validate({
focusCleanup: true
});
function submitHandler() {
if ($.validate.form()) {
$.operate.save(prefix + "/edit", $('#form-pda_version-edit').serialize());
}
}
$(".file-upload").each(function (i) {
var val = $("input[name='" + this.id + "']").val()
$(this).fileinput({
'uploadUrl': ctx + 'common/upload',
initialPreviewAsData: true,
initialPreview: [val],
maxFileCount: 1,
autoReplace: true
}).on('fileuploaded', function (event, data, previewId, index) {
$("input[name='" + event.currentTarget.id + "']").val(data.response.url)
}).on('fileremoved', function (event, id, index) {
$("input[name='" + event.currentTarget.id + "']").val('')
})
$(this).fileinput('_initFileActions');
});
$(function() {
$('.summernote').each(function(i) {
$('#' + this.id).summernote({
lang: 'zh-CN',
dialogsInBody: true,
callbacks: {
onChange: function(contents, $edittable) {
$("input[name='" + this.id + "']").val(contents);
},
onImageUpload: function(files) {
var obj = this;
var data = new FormData();
data.append("file", files[0]);
$.ajax({
type: "post",
url: ctx + "common/upload",
data: data,
cache: false,
contentType: false,
processData: false,
dataType: 'json',
success: function(result) {
if (result.code == web_status.SUCCESS) {
$('#' + obj.id).summernote('insertImage', result.url);
} else {
$.modal.alertError(result.msg);
}
},
error: function(error) {
$.modal.alertWarning("图片上传失败。");
}
});
}
}
});
var content = $("input[name='" + this.id + "']").val();
$('#' + this.id).summernote('code', content);
})
});
</script>
</body>
</html>

@ -0,0 +1,112 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
<th:block th:include="include :: header('手持版本升级列表')" />
</head>
<body class="gray-bg">
<div class="container-div">
<div class="row">
<div class="col-sm-12 search-collapse">
<form id="formId">
<div class="select-list">
<ul>
<li>
<label>版本号:</label>
<input type="text" name="versionCode"/>
</li>
<li>
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
</li>
</ul>
</div>
</form>
</div>
<div class="btn-group-sm" id="toolbar" role="group">
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="pda:pda_version:add">
<i class="fa fa-plus"></i> 添加
</a>
<!-- <a class="btn btn-primary single disabled" onclick="$.operate.edit()" shiro:hasPermission="pda:pda_version:edit">-->
<!-- <i class="fa fa-edit"></i> 删除-->
<!-- </a>-->
<!-- <a class="btn btn-danger multiple disabled" onclick="$.operate.removeAll()" shiro:hasPermission="pda:pda_version:remove">-->
<!-- <i class="fa fa-remove"></i> 删除-->
<!-- </a>-->
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="pda:pda_version:export">
<i class="fa fa-download"></i> 导出
</a>
</div>
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-table"></table>
</div>
</div>
</div>
<th:block th:include="include :: footer" />
<script th:inline="javascript">
var editFlag = [[${@permission.hasPermi('pda:pda_version:edit')}]];
var removeFlag = [[${@permission.hasPermi('pda:pda_version:remove')}]];
var prefix = ctx + "pda/pda_version";
$(function() {
var options = {
url: prefix + "/list",
createUrl: prefix + "/add",
updateUrl: prefix + "/edit/{id}",
removeUrl: prefix + "/remove",
exportUrl: prefix + "/export",
modalName: "手持版本升级",
sortName: "versionCode",
sortOrder: "desc",
columns: [{
checkbox: true
},
{
field: 'objid',
title: '主键标识',
visible: false
},
{
field: 'versionCode',
title: '版本号'
},
{
field: 'versionName',
title: '版本名'
},
{
field: 'modifyContent',
title: '信息'
},
{
field: 'downloadUrl',
title: '位置'
},
{
field: 'apkSize',
title: '文件大小'
},
{
field: 'apkMd5',
title: '文件标识'
},
{
field: 'createTime',
title: '创建时间'
},
{
title: '操作',
align: 'center',
formatter: function(value, row, index) {
var actions = [];
// actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.objid + '\')"><i class="fa fa-edit"></i>删除</a> ');
actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.objid + '\')"><i class="fa fa-remove"></i>删除</a>');
return actions.join('');
}
}]
};
$.table.init(options);
});
</script>
</body>
</html>

@ -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<String> permitAllUrl = SpringUtils.getBean(PermitAllUrlProperties.class).getUrls();

@ -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

@ -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<Ztree> treeData()
{
List<Ztree> 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<Ztree> treeData() {
List<Ztree> ztrees = ${className}Service.select${ClassName}Tree();
return ztrees;
}
#end
}

@ -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;
}

@ -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<Ztree> select${ClassName}Tree();
#end
/**
* 查询${functionName}树列表
*
* @return 所有${functionName}信息
*/
public List<Ztree> select${ClassName}Tree();
#end
}

@ -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<Ztree> select${ClassName}Tree()
{
List<${ClassName}> ${className}List = ${className}Mapper.select${ClassName}List(new ${ClassName}());
List<Ztree> ztrees = new ArrayList<Ztree>();
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<Ztree> select${ClassName}Tree() {
List<${ClassName}> ${className}List = ${className}Mapper.select${ClassName}List(new ${ClassName}());
List<Ztree> ztrees = new ArrayList<Ztree>();
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
}

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi</artifactId>
<version>4.8.1</version>
</parent>
<artifactId>ruoyi-pm</artifactId>
<description>
页面
</description>
<dependencies>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common</artifactId>
</dependency>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-system</artifactId>
</dependency>
</dependencies>
</project>

@ -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<PmBasePenaltyType> list(PmBasePenaltyType pmBasePenaltyType) {
List<PmBasePenaltyType> 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<PmBasePenaltyType> list = pmBasePenaltyTypeService.selectPmBasePenaltyTypeList(pmBasePenaltyType);
ExcelUtil<PmBasePenaltyType> util = new ExcelUtil<PmBasePenaltyType>(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<Ztree> treeData() {
List<Ztree> ztrees = pmBasePenaltyTypeService.selectPmBasePenaltyTypeTree();
return ztrees;
}
}

@ -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<PmBasePersonInfo> 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<PmBasePersonInfo> list = pmBasePersonInfoService.selectPmBasePersonInfoList(pmBasePersonInfo);
ExcelUtil<PmBasePersonInfo> util = new ExcelUtil<PmBasePersonInfo>(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));
}
}

@ -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<PmRecordPenalty> 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<PmRecordPenalty> list = pmRecordPenaltyService.selectPmRecordPenaltyList(pmRecordPenalty);
ExcelUtil<PmRecordPenalty> util = new ExcelUtil<PmRecordPenalty>(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));
}
}

@ -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<PmRecordSan> 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<PmRecordSan> list = pmRecordSanService.selectPmRecordSanList(pmRecordSan);
ExcelUtil<PmRecordSan> util = new ExcelUtil<PmRecordSan>(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));
}
}

@ -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();
}
}

@ -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();
}
}

@ -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();
}
}

@ -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();
}
}

@ -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<PmBasePenaltyType> 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);
}

@ -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<PmBasePersonInfo> 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);
}

@ -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<PmRecordPenalty> 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);
}

@ -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<PmRecordSan> 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);
}

@ -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<PmBasePenaltyType> 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<Ztree> selectPmBasePenaltyTypeTree();
}

@ -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<PmBasePersonInfo> 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);
}

@ -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<PmRecordPenalty> 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);
}

@ -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<PmRecordSan> 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);
}

@ -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<PmBasePenaltyType> 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<Ztree> selectPmBasePenaltyTypeTree() {
List<PmBasePenaltyType> pmBasePenaltyTypeList = pmBasePenaltyTypeMapper.selectPmBasePenaltyTypeList(new PmBasePenaltyType());
List<Ztree> ztrees = new ArrayList<Ztree>();
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;
}
}

@ -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<PmBasePersonInfo> 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);
}
}

@ -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<PmRecordPenalty> 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);
}
}

@ -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<PmRecordSan> 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);
}
}

@ -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, '');

@ -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, '');

@ -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, '');

@ -0,0 +1,100 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.pm.mapper.PmBasePenaltyTypeMapper">
<resultMap type="PmBasePenaltyType" id="PmBasePenaltyTypeResult">
<result property="penaltyTypeId" column="penalty_type_id" />
<result property="penaltyTypeCode" column="penalty_type_code" />
<result property="penaltyInfo" column="penalty_info" />
<result property="penaltyAmount" column="penalty_amount" />
<result property="parentId" column="parent_id" />
<result property="typeState" column="type_state" />
<result property="remark" column="remark" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="parentName" column="parent_name" />
</resultMap>
<sql id="selectPmBasePenaltyTypeVo">
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
</sql>
<select id="selectPmBasePenaltyTypeList" parameterType="PmBasePenaltyType" resultMap="PmBasePenaltyTypeResult">
<include refid="selectPmBasePenaltyTypeVo"/>
<where>
<if test="penaltyTypeCode != null and penaltyTypeCode != ''"> and penalty_type_code = #{penaltyTypeCode}</if>
<if test="penaltyInfo != null and penaltyInfo != ''"> and penalty_info like concat('%', #{penaltyInfo}, '%')</if>
<if test="parentId != null "> and parent_id = #{parentId}</if>
<if test="typeState != null and typeState != ''"> and type_state = #{typeState}</if>
</where>
order by parent_id
</select>
<select id="selectPmBasePenaltyTypeByPenaltyTypeId" parameterType="Long" resultMap="PmBasePenaltyTypeResult">
select t.penalty_type_id, t.penalty_type_code, t.penalty_info, t.penalty_amount, t.parent_id, t.type_state, t.remark, t.create_by, t.create_time, t.update_by, t.update_time, p.penalty_info as parent_name
from pm_base_penalty_type t
left join pm_base_penalty_type p on p.penalty_type_id = t.parent_id
where t.penalty_type_id = #{penaltyTypeId}
</select>
<insert id="insertPmBasePenaltyType" parameterType="PmBasePenaltyType" useGeneratedKeys="true" keyProperty="penaltyTypeId">
insert into pm_base_penalty_type
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="penaltyTypeCode != null">penalty_type_code,</if>
<if test="penaltyInfo != null">penalty_info,</if>
<if test="penaltyAmount != null">penalty_amount,</if>
<if test="parentId != null">parent_id,</if>
<if test="typeState != null">type_state,</if>
<if test="remark != null">remark,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="penaltyTypeCode != null">#{penaltyTypeCode},</if>
<if test="penaltyInfo != null">#{penaltyInfo},</if>
<if test="penaltyAmount != null">#{penaltyAmount},</if>
<if test="parentId != null">#{parentId},</if>
<if test="typeState != null">#{typeState},</if>
<if test="remark != null">#{remark},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
</trim>
</insert>
<update id="updatePmBasePenaltyType" parameterType="PmBasePenaltyType">
update pm_base_penalty_type
<trim prefix="SET" suffixOverrides=",">
<if test="penaltyTypeCode != null">penalty_type_code = #{penaltyTypeCode},</if>
<if test="penaltyInfo != null">penalty_info = #{penaltyInfo},</if>
<if test="penaltyAmount != null">penalty_amount = #{penaltyAmount},</if>
<if test="parentId != null">parent_id = #{parentId},</if>
<if test="typeState != null">type_state = #{typeState},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
</trim>
where penalty_type_id = #{penaltyTypeId}
</update>
<delete id="deletePmBasePenaltyTypeByPenaltyTypeId" parameterType="Long">
delete from pm_base_penalty_type where penalty_type_id = #{penaltyTypeId}
</delete>
<delete id="deletePmBasePenaltyTypeByPenaltyTypeIds" parameterType="String">
delete from pm_base_penalty_type where penalty_type_id in
<foreach item="penaltyTypeId" collection="array" open="(" separator="," close=")">
#{penaltyTypeId}
</foreach>
</delete>
</mapper>

@ -0,0 +1,128 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.pm.mapper.PmBasePersonInfoMapper">
<resultMap type="PmBasePersonInfo" id="PmBasePersonInfoResult">
<result property="basePersonId" column="base_person_id" />
<result property="rfidId" column="rfid_id" />
<result property="employeeId" column="employee_id" />
<result property="peopleName" column="people_name" />
<result property="peopleSex" column="people_sex" />
<result property="driverCode" column="driver_code" />
<result property="phoneNumber" column="phone_number" />
<result property="photoPath" column="photo_path" />
<result property="joinDate" column="join_date" />
<result property="academicQualification" column="academic_qualification" />
<result property="remark" column="remark" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
</resultMap>
<sql id="selectPmBasePersonInfoVo">
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
</sql>
<select id="selectPmBasePersonInfoList" parameterType="PmBasePersonInfo" resultMap="PmBasePersonInfoResult">
<include refid="selectPmBasePersonInfoVo"/>
<where>
<if test="rfidId != null and rfidId != ''"> and rfid_id like concat('%', #{rfidId}, '%')</if>
<if test="employeeId != null and employeeId != ''"> and employee_id like concat('%', #{employeeId}, '%')</if>
<if test="peopleName != null and peopleName != ''"> and people_name like concat('%', #{peopleName}, '%')</if>
<if test="peopleSex != null and peopleSex != ''"> and people_sex = #{peopleSex}</if>
<if test="academicQualification != null and academicQualification != ''"> and academic_qualification = #{academicQualification}</if>
</where>
</select>
<select id="selectPmBasePersonInfoByBasePersonId" parameterType="Long" resultMap="PmBasePersonInfoResult">
<include refid="selectPmBasePersonInfoVo"/>
where base_person_id = #{basePersonId}
</select>
<insert id="insertPmBasePersonInfo" parameterType="PmBasePersonInfo" useGeneratedKeys="true" keyProperty="basePersonId">
insert into pm_base_person_info
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="rfidId != null">rfid_id,</if>
<if test="employeeId != null">employee_id,</if>
<if test="peopleName != null and peopleName != ''">people_name,</if>
<if test="peopleSex != null and peopleSex != ''">people_sex,</if>
<if test="driverCode != null and driverCode != ''">driver_code,</if>
<if test="phoneNumber != null">phone_number,</if>
<if test="photoPath != null">photo_path,</if>
<if test="joinDate != null">join_date,</if>
<if test="academicQualification != null">academic_qualification,</if>
<if test="remark != null">remark,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="rfidId != null">#{rfidId},</if>
<if test="employeeId != null">#{employeeId},</if>
<if test="peopleName != null and peopleName != ''">#{peopleName},</if>
<if test="peopleSex != null and peopleSex != ''">#{peopleSex},</if>
<if test="driverCode != null and driverCode != ''">#{driverCode},</if>
<if test="phoneNumber != null">#{phoneNumber},</if>
<if test="photoPath != null">#{photoPath},</if>
<if test="joinDate != null">#{joinDate},</if>
<if test="academicQualification != null">#{academicQualification},</if>
<if test="remark != null">#{remark},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
</trim>
</insert>
<update id="updatePmBasePersonInfo" parameterType="PmBasePersonInfo">
update pm_base_person_info
<trim prefix="SET" suffixOverrides=",">
<if test="rfidId != null">rfid_id = #{rfidId},</if>
<if test="employeeId != null">employee_id = #{employeeId},</if>
<if test="peopleName != null and peopleName != ''">people_name = #{peopleName},</if>
<if test="peopleSex != null and peopleSex != ''">people_sex = #{peopleSex},</if>
<if test="driverCode != null and driverCode != ''">driver_code = #{driverCode},</if>
<if test="phoneNumber != null">phone_number = #{phoneNumber},</if>
<if test="photoPath != null">photo_path = #{photoPath},</if>
<if test="joinDate != null">join_date = #{joinDate},</if>
<if test="academicQualification != null">academic_qualification = #{academicQualification},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
</trim>
where base_person_id = #{basePersonId}
</update>
<delete id="deletePmBasePersonInfoByBasePersonId" parameterType="Long">
delete from pm_base_person_info where base_person_id = #{basePersonId}
</delete>
<delete id="deletePmBasePersonInfoByBasePersonIds" parameterType="String">
delete from pm_base_person_info where base_person_id in
<foreach item="basePersonId" collection="array" open="(" separator="," close=")">
#{basePersonId}
</foreach>
</delete>
<select id="selectPersonInfoByEpc" resultMap="PmBasePersonInfoResult">
select base_person_id,
rfid_id,
employee_id,
people_name,
people_sex,
driver_code,
phone_number,
photo_path,
join_date,
academic_qualification
from pm_base_person_info
where rfid_id = #{epc}
</select>
</mapper>

@ -0,0 +1,115 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.pm.mapper.PmRecordPenaltyMapper">
<resultMap type="PmRecordPenalty" id="PmRecordPenaltyResult">
<result property="recordPenaltyId" column="record_penalty_id" />
<result property="penaltyType" column="penalty_type" />
<result property="penaltyTypeCode" column="penalty_type_code" />
<result property="penaltyInfo" column="penalty_info" />
<result property="penaltyAmount" column="penalty_amount" />
<result property="basePersonId" column="base_person_id" />
<result property="processState" column="process_state" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<association property="basePersonInfo" javaType="PmBasePersonInfo" resultMap="com.ruoyi.pm.mapper.PmBasePersonInfoMapper.PmBasePersonInfoResult"/>
</resultMap>
<sql id="selectPmRecordPenaltyVo">
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
</sql>
<select id="selectPmRecordPenaltyList" parameterType="PmRecordPenalty" resultMap="PmRecordPenaltyResult">
<include refid="selectPmRecordPenaltyVo"/>
<where>
<if test="penaltyType != null and penaltyType != ''"> and penalty_type = #{penaltyType}</if>
<if test="penaltyTypeCode != null and penaltyTypeCode != ''"> and penalty_type_code = #{penaltyTypeCode}</if>
<if test="penaltyInfo != null and penaltyInfo != ''"> and penalty_info like concat('%', #{penaltyInfo}, '%')</if>
<if test="processState != null and processState != ''"> and process_state = #{processState}</if>
<if test="params.beginCreateTime != null and params.beginCreateTime != '' and params.endCreateTime != null and params.endCreateTime != ''"> and create_time between #{params.beginCreateTime} and #{params.endCreateTime}</if>
<if test="params.beginUpdateTime != null and params.beginUpdateTime != '' and params.endUpdateTime != null and params.endUpdateTime != ''"> and update_time between #{params.beginUpdateTime} and #{params.endUpdateTime}</if>
</where>
</select>
<select id="selectPmRecordPenaltyByRecordPenaltyId" parameterType="Long" resultMap="PmRecordPenaltyResult">
<include refid="selectPmRecordPenaltyVo"/>
where record_penalty_id = #{recordPenaltyId}
</select>
<insert id="insertPmRecordPenalty" parameterType="PmRecordPenalty" useGeneratedKeys="true" keyProperty="recordPenaltyId">
insert into pm_record_penalty
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="penaltyType != null">penalty_type,</if>
<if test="penaltyTypeCode != null">penalty_type_code,</if>
<if test="penaltyInfo != null">penalty_info,</if>
<if test="penaltyAmount != null">penalty_amount,</if>
<if test="basePersonId != null">base_person_id,</if>
<if test="processState != null">process_state,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="penaltyType != null">#{penaltyType},</if>
<if test="penaltyTypeCode != null">#{penaltyTypeCode},</if>
<if test="penaltyInfo != null">#{penaltyInfo},</if>
<if test="penaltyAmount != null">#{penaltyAmount},</if>
<if test="basePersonId != null">#{basePersonId},</if>
<if test="processState != null">#{processState},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
</trim>
</insert>
<update id="updatePmRecordPenalty" parameterType="PmRecordPenalty">
update pm_record_penalty
<trim prefix="SET" suffixOverrides=",">
<if test="penaltyType != null">penalty_type = #{penaltyType},</if>
<if test="penaltyTypeCode != null">penalty_type_code = #{penaltyTypeCode},</if>
<if test="penaltyInfo != null">penalty_info = #{penaltyInfo},</if>
<if test="penaltyAmount != null">penalty_amount = #{penaltyAmount},</if>
<if test="basePersonId != null">base_person_id = #{basePersonId},</if>
<if test="processState != null">process_state = #{processState},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
</trim>
where record_penalty_id = #{recordPenaltyId}
</update>
<delete id="deletePmRecordPenaltyByRecordPenaltyId" parameterType="Long">
delete from pm_record_penalty where record_penalty_id = #{recordPenaltyId}
</delete>
<delete id="deletePmRecordPenaltyByRecordPenaltyIds" parameterType="String">
delete from pm_record_penalty where record_penalty_id in
<foreach item="recordPenaltyId" collection="array" open="(" separator="," close=")">
#{recordPenaltyId}
</foreach>
</delete>
</mapper>

@ -0,0 +1,97 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.pm.mapper.PmRecordSanMapper">
<resultMap type="PmRecordSan" id="PmRecordSanResult">
<result property="recordSanId" column="record_san_id" />
<result property="queryUser" column="query_user" />
<result property="queryRfid" column="query_rfid" />
<result property="basePersonId" column="base_person_id" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<association property="basePersonInfo" javaType="PmBasePersonInfo" resultMap="com.ruoyi.pm.mapper.PmBasePersonInfoMapper.PmBasePersonInfoResult"/>
</resultMap>
<sql id="selectPmRecordSanVo">
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
</sql>
<select id="selectPmRecordSanList" parameterType="PmRecordSan" resultMap="PmRecordSanResult">
<include refid="selectPmRecordSanVo"/>
<where>
<if test="queryUser != null and queryUser != ''"> and query_user = #{queryUser}</if>
<if test="queryRfid != null and queryRfid != ''"> and query_rfid like concat('%', #{queryRfid}, '%')</if>
</where>
</select>
<select id="selectPmRecordSanByRecordSanId" parameterType="Long" resultMap="PmRecordSanResult">
<include refid="selectPmRecordSanVo"/>
where record_san_id = #{recordSanId}
</select>
<insert id="insertPmRecordSan" parameterType="PmRecordSan" useGeneratedKeys="true" keyProperty="recordSanId">
insert into pm_record_san
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="queryUser != null">query_user,</if>
<if test="queryRfid != null">query_rfid,</if>
<if test="basePersonId != null">base_person_id,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="queryUser != null">#{queryUser},</if>
<if test="queryRfid != null">#{queryRfid},</if>
<if test="basePersonId != null">#{basePersonId},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
</trim>
</insert>
<update id="updatePmRecordSan" parameterType="PmRecordSan">
update pm_record_san
<trim prefix="SET" suffixOverrides=",">
<if test="queryUser != null">query_user = #{queryUser},</if>
<if test="queryRfid != null">query_rfid = #{queryRfid},</if>
<if test="basePersonId != null">base_person_id = #{basePersonId},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
</trim>
where record_san_id = #{recordSanId}
</update>
<delete id="deletePmRecordSanByRecordSanId" parameterType="Long">
delete from pm_record_san where record_san_id = #{recordSanId}
</delete>
<delete id="deletePmRecordSanByRecordSanIds" parameterType="String">
delete from pm_record_san where record_san_id in
<foreach item="recordSanId" collection="array" open="(" separator="," close=")">
#{recordSanId}
</foreach>
</delete>
</mapper>

@ -0,0 +1,98 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('新增处罚类型维护')" />
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-base_penalty_type-add">
<div class="col-xs-12">
<div class="form-group">
<label class="col-sm-3 control-label">上级类型:</label>
<div class="col-sm-8">
<div class="input-group">
<input id="treeId" name="parentId" type="hidden" th:value="${pmBasePenaltyType?.penaltyTypeId}"/>
<input class="form-control" type="text" onclick="selectBase_penalty_typeTree()" id="treeName" readonly="true" th:value="${pmBasePenaltyType?.penaltyInfo}">
<span class="input-group-addon"><i class="fa fa-search"></i></span>
</div>
</div>
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="col-sm-3 control-label" is-required>处罚名称:</label>
<div class="col-sm-8">
<input name="penaltyInfo" class="form-control" type="text" required >
</div>
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="col-sm-3 control-label">类型编码:</label>
<div class="col-sm-8">
<input name="penaltyTypeCode" class="form-control" type="text">
</div>
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="col-sm-3 control-label">处罚金额:</label>
<div class="col-sm-8">
<input name="penaltyAmount" class="form-control" type="text">
</div>
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="col-sm-3 control-label">类型状态:</label>
<div class="col-sm-8">
<select name="typeState" class="form-control" th:with="type=${@dict.getType('sys_normal_disable')}">
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
</select>
</div>
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="col-sm-3 control-label">备注:</label>
<div class="col-sm-8">
<textarea name="remark" class="form-control" rows="3"></textarea>
</div>
</div>
</div>
</form>
</div>
<th:block th:include="include :: footer" />
<script th:inline="javascript">
var prefix = ctx + "pm/base_penalty_type"
$("#form-base_penalty_type-add").validate({
focusCleanup: true
});
function submitHandler() {
if ($.validate.form()) {
$.operate.save(prefix + "/add", $('#form-base_penalty_type-add').serialize());
}
}
/*处罚类型维护-新增-选择父处罚类型维护树*/
function selectBase_penalty_typeTree() {
var options = {
title: '处罚类型维护选择',
width: "380",
url: prefix + "/selectBase_penalty_typeTree/" + $("#treeId").val(),
callBack: doSubmit
};
$.modal.openOptions(options);
}
function doSubmit(index, layero){
var body = $.modal.getChildFrame(index);
$("#treeId").val(body.find('#treeId').val());
$("#treeName").val(body.find('#treeName').val());
$.modal.close(index);
}
</script>
</body>
</html>

@ -0,0 +1,155 @@
<!DOCTYPE html>
<html lang="zh" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="include :: header('处罚类型维护列表')"/>
</head>
<body class="gray-bg">
<div class="container-div">
<div class="row">
<div class="col-sm-12 search-collapse">
<form id="formId">
<div class="select-list">
<ul>
<li>
<label>类型编码:</label>
<input name="penaltyTypeCode" type="text"/>
</li>
<li>
<label>处罚说明:</label>
<input name="penaltyInfo" type="text"/>
</li>
<!-- <li> -->
<!-- <label>父级ID</label> -->
<!-- <input type="text" name="parentId"/> -->
<!-- </li> -->
<li>
<label>类型状态:</label>
<select name="typeState" th:with="type=${@dict.getType('sys_normal_disable')}">
<option value="">所有</option>
<option th:each="dict : ${type}" th:text="${dict.dictLabel}"
th:value="${dict.dictValue}"></option>
</select>
</li>
<li>
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.treeTable.search()"><i
class="fa fa-search"></i>&nbsp;搜索</a>
<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i
class="fa fa-refresh"></i>&nbsp;重置</a>
</li>
</ul>
</div>
</form>
</div>
<div class="btn-group-sm" id="toolbar" role="group">
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="pm:base_penalty_type:add">
<i class="fa fa-plus"></i> 新增
</a>
<a class="btn btn-primary" onclick="$.operate.edit()" shiro:hasPermission="pm:base_penalty_type:edit">
<i class="fa fa-edit"></i> 修改
</a>
<a class="btn btn-info" id="expandAllBtn">
<i class="fa fa-exchange"></i> 展开/折叠
</a>
</div>
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-tree-table"></table>
</div>
</div>
</div>
<th:block th:include="include :: footer"/>
<script th:inline="javascript">
var addFlag = [[${@permission.hasPermi('pm:base_penalty_type:add')}]];
var editFlag = [[${@permission.hasPermi('pm:base_penalty_type:edit')}]];
var removeFlag = [[${@permission.hasPermi('pm:base_penalty_type:remove')}]];
var typeStateDatas = [[${@dict.getType('sys_normal_disable')}]];
var prefix = ctx + "pm/base_penalty_type";
$(function () {
var options = {
code: "penaltyTypeId",
parentCode: "parentId",
expandColumn: "1",
uniqueId: "penaltyTypeId",
url: prefix + "/list",
createUrl: prefix + "/add/{id}",
updateUrl: prefix + "/edit/{id}",
removeUrl: prefix + "/remove/{id}",
modalName: "处罚类型维护",
columns: [
{
field: 'selectItem',
radio: true
},
{
field: 'penaltyInfo',
title: '处罚类型/说明',
},
{
field: 'penaltyTypeCode',
title: '类型编码',
},
{
field: 'penaltyAmount',
title: '处罚金额(元)',
},
{
field: 'parentId',
title: '父级ID',
align: 'left',
visible: false
},
{
field: 'typeState',
title: '类型状态',
formatter: function (value, row, index) {
return $.table.selectDictLabel(typeStateDatas, value);
}
},
{
field: 'remark',
title: '备注',
},
{
field: 'createBy',
title: '创建人',
align: 'left',
visible: false
},
{
field: 'createTime',
title: '创建时间',
align: 'left'
},
{
field: 'updateBy',
title: '更新人',
align: 'left',
visible: false
},
{
field: 'updateTime',
title: '更新时间',
align: 'left'
},
{
title: '操作',
align: 'center',
align: 'left',
formatter: function (value, row, index) {
var actions = [];
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.penaltyTypeId + '\')"><i class="fa fa-edit"></i>编辑</a> ');
actions.push('<a class="btn btn-info btn-xs ' + addFlag + '" href="javascript:void(0)" onclick="$.operate.add(\'' + row.penaltyTypeId + '\')"><i class="fa fa-plus"></i>新增</a> ');
actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.penaltyTypeId + '\')"><i class="fa fa-remove"></i>删除</a>');
return actions.join('');
}
}]
};
$.treeTable.init(options);
});
</script>
</body>
</html>

@ -0,0 +1,101 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="include :: header('修改处罚类型维护')"/>
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-base_penalty_type-edit" th:object="${pmBasePenaltyType}">
<input name="penaltyTypeId" th:field="*{penaltyTypeId}" type="hidden">
<div class="col-xs-12">
<div class="form-group">
<label class="col-sm-3 control-label">上级类型:</label>
<div class="col-sm-8">
<div class="input-group">
<input id="treeId" name="parentId" type="hidden" th:field="*{parentId}"/>
<input class="form-control" type="text" onclick="selectBase_penalty_typeTree()" id="treeName"
readonly="true" th:field="*{parentName}">
<span class="input-group-addon"><i class="fa fa-search"></i></span>
</div>
</div>
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="col-sm-3 control-label">处罚名称:</label>
<div class="col-sm-8">
<input name="penaltyInfo" th:field="*{penaltyInfo}" class="form-control" type="text">
</div>
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="col-sm-3 control-label">类型编码:</label>
<div class="col-sm-8">
<input name="penaltyTypeCode" th:field="*{penaltyTypeCode}" class="form-control" type="text">
</div>
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="col-sm-3 control-label">处罚金额:</label>
<div class="col-sm-8">
<input name="penaltyAmount" th:field="*{penaltyAmount}" class="form-control" type="text">
</div>
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="col-sm-3 control-label">类型状态:</label>
<div class="col-sm-8">
<select name="typeState" class="form-control" th:with="type=${@dict.getType('sys_normal_disable')}">
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"
th:field="*{typeState}"></option>
</select>
</div>
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="col-sm-3 control-label">备注:</label>
<div class="col-sm-8">
<textarea name="remark" th:field="*{remark}" class="form-control"></textarea>
</div>
</div>
</div>
</form>
</div>
<th:block th:include="include :: footer"/>
<script th:inline="javascript">
var prefix = ctx + "pm/base_penalty_type";
$("#form-base_penalty_type-edit").validate({
focusCleanup: true
});
function submitHandler() {
if ($.validate.form()) {
$.operate.save(prefix + "/edit", $('#form-base_penalty_type-edit').serialize());
}
}
/*处罚类型维护-编辑-选择父处罚类型维护树*/
function selectBase_penalty_typeTree() {
var options = {
title: '处罚类型维护选择',
width: "380",
url: prefix + "/selectBase_penalty_typeTree/" + $("#treeId").val(),
callBack: doSubmit
};
$.modal.openOptions(options);
}
function doSubmit(index, layero) {
var body = $.modal.getChildFrame(index);
$("#treeId").val(body.find('#treeId').val());
$("#treeName").val(body.find('#treeName').val());
$.modal.close(index);
}
</script>
</body>
</html>

@ -0,0 +1,49 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('处罚类型维护树选择')" />
<th:block th:include="include :: ztree-css" />
</head>
<style>
body{height:auto;font-family: "Microsoft YaHei";}
button{font-family: "SimSun","Helvetica Neue",Helvetica,Arial;}
</style>
<body class="hold-transition box box-main">
<input id="treeId" name="treeId" type="hidden" th:value="${pmBasePenaltyType?.penaltyTypeId}"/>
<input id="treeName" name="treeName" type="hidden" th:value="${pmBasePenaltyType?.penaltyInfo}"/>
<div class="wrapper"><div class="treeShowHideButton" onclick="$.tree.toggleSearch();">
<label id="btnShow" title="显示搜索" style="display:none;"></label>
<label id="btnHide" title="隐藏搜索"></label>
</div>
<div class="treeSearchInput" id="search">
<label for="keyword">关键字:</label><input type="text" class="empty" id="keyword" maxlength="50">
<button class="btn" id="btn" onclick="$.tree.searchNode()"> 搜索 </button>
</div>
<div class="treeExpandCollapse">
<a href="javascript:;" onclick="$.tree.expand()">展开</a> /
<a href="javascript:;" onclick="$.tree.collapse()">折叠</a>
</div>
<div id="tree" class="ztree treeselect"></div>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: ztree-js" />
<script th:inline="javascript">
$(function() {
var url = ctx + "pm/base_penalty_type/treeData";
var options = {
url: url,
expandLevel: 2,
onClick : zOnClick
};
$.tree.init(options);
});
function zOnClick(event, treeId, treeNode) {
var treeId = treeNode.id;
var treeName = treeNode.name;
$("#treeId").val(treeId);
$("#treeName").val(treeName);
}
</script>
</body>
</html>

@ -0,0 +1,137 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('新增人员信息')" />
<th:block th:include="include :: datetimepicker-css" />
<th:block th:include="include :: bootstrap-fileinput-css"/>
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-base_person_info-add">
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label">RFID编码</label>
<div class="col-sm-8">
<input name="rfidId" class="form-control" type="text">
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label">工号:</label>
<div class="col-sm-8">
<input name="employeeId" class="form-control" type="text">
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label is-required">姓名:</label>
<div class="col-sm-8">
<input name="peopleName" class="form-control" type="text" required>
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label is-required">性别:</label>
<div class="col-sm-8">
<select name="peopleSex" class="form-control" th:with="type=${@dict.getType('sys_user_sex')}" required>
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
</select>
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label is-required">驾驶证代号:</label>
<div class="col-sm-8">
<input name="driverCode" class="form-control" type="text" required>
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label">联系电话:</label>
<div class="col-sm-8">
<input name="phoneNumber" class="form-control" type="text">
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label">有效日期截止:</label>
<div class="col-sm-8">
<div class="input-group date">
<input name="joinDate" class="form-control" placeholder="yyyy-MM-dd" type="text">
<span class="input-group-addon"><i class="fa fa-calendar"></i></span>
</div>
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label">学历:</label>
<div class="col-sm-8">
<select name="academicQualification" class="form-control" th:with="type=${@dict.getType('academic_qualification')}">
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
</select>
</div>
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="col-sm-2 control-label">备注:</label>
<div class="col-sm-9">
<textarea name="remark" class="form-control"></textarea>
</div>
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="col-sm-2 control-label">照片:</label>
<div class="col-sm-9">
<input type="hidden" name="photoPath">
<div class="file-loading">
<input class="form-control file-upload" id="photoPath" name="file" type="file">
</div>
</div>
</div>
</div>
</form>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: datetimepicker-js" />
<th:block th:include="include :: bootstrap-fileinput-js"/>
<script th:inline="javascript">
var prefix = ctx + "pm/base_person_info"
$("#form-base_person_info-add").validate({
focusCleanup: true
});
function submitHandler() {
if ($.validate.form()) {
$.operate.save(prefix + "/add", $('#form-base_person_info-add').serialize());
}
}
$("input[name='joinDate']").datetimepicker({
format: "yyyy-mm-dd",
minView: "month",
autoclose: true
});
$(".file-upload").fileinput({
uploadUrl: ctx + 'common/upload',
maxFileCount: 1,
autoReplace: true
}).on('fileuploaded', function (event, data, previewId, index) {
$("input[name='" + event.currentTarget.id + "']").val(data.response.fileName)
}).on('fileremoved', function (event, id, index) {
$("input[name='" + event.currentTarget.id + "']").val('')
})
</script>
</body>
</html>

@ -0,0 +1,171 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
<th:block th:include="include :: header('人员信息列表')" />
</head>
<body class="gray-bg">
<div class="container-div">
<div class="row">
<div class="col-sm-12 search-collapse">
<form id="formId">
<div class="select-list">
<ul>
<li>
RFID编码
<input type="text" name="rfidId"/>
</li>
<li>
<label>工号:</label>
<input type="text" name="employeeId"/>
</li>
<li>
<label>姓名:</label>
<input type="text" name="peopleName"/>
</li>
<li>
<label>性别:</label>
<select name="peopleSex" th:with="type=${@dict.getType('sys_user_sex')}">
<option value="">所有</option>
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
</select>
</li>
<li>
<label>学历:</label>
<select name="academicQualification" th:with="type=${@dict.getType('academic_qualification')}">
<option value="">所有</option>
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
</select>
</li>
<li>
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
</li>
</ul>
</div>
</form>
</div>
<div class="btn-group-sm" id="toolbar" role="group">
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="pm:base_person_info:add">
<i class="fa fa-plus"></i> 添加
</a>
<a class="btn btn-primary single disabled" onclick="$.operate.edit()" shiro:hasPermission="pm:base_person_info:edit">
<i class="fa fa-edit"></i> 修改
</a>
<a class="btn btn-danger multiple disabled" onclick="$.operate.removeAll()" shiro:hasPermission="pm:base_person_info:remove">
<i class="fa fa-remove"></i> 删除
</a>
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="pm:base_person_info:export">
<i class="fa fa-download"></i> 导出
</a>
</div>
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-table"></table>
</div>
</div>
</div>
<th:block th:include="include :: footer" />
<script th:inline="javascript">
var editFlag = [[${@permission.hasPermi('pm:base_person_info:edit')}]];
var removeFlag = [[${@permission.hasPermi('pm:base_person_info:remove')}]];
var peopleSexDatas = [[${@dict.getType('sys_user_sex')}]];
var academicQualificationDatas = [[${@dict.getType('academic_qualification')}]];
var prefix = ctx + "pm/base_person_info";
$(function() {
var options = {
url: prefix + "/list",
createUrl: prefix + "/add",
updateUrl: prefix + "/edit/{id}",
removeUrl: prefix + "/remove",
exportUrl: prefix + "/export",
modalName: "人员信息",
columns: [{
checkbox: true
},
{
field: 'basePersonId',
title: '人员表主键',
visible: false
},
{
field: 'rfidId',
title: 'RFID编码'
},
{
field: 'employeeId',
title: '工号'
},
{
field: 'peopleName',
title: '姓名'
},
{
field: 'peopleSex',
title: '性别',
formatter: function(value, row, index) {
return $.table.selectDictLabel(peopleSexDatas, value);
}
},
{
field: 'driverCode',
title: '驾驶证代号'
},
{
field: 'phoneNumber',
title: '联系电话'
},
{
field: 'photoPath',
title: '照片',
formatter: function (value, row, index) {
return $.table.imageView(value,300,300);
}
},
{
field: 'joinDate',
title: '有效日期截止'
},
{
field: 'academicQualification',
title: '学历',
formatter: function(value, row, index) {
return $.table.selectDictLabel(academicQualificationDatas, value);
}
},
{
field: 'remark',
title: '备注'
},
{
field: 'createBy',
title: '创建人'
},
{
field: 'createTime',
title: '创建时间'
},
{
field: 'updateBy',
title: '更新人'
},
{
field: 'updateTime',
title: '更新时间'
},
{
title: '操作',
align: 'center',
formatter: function(value, row, index) {
var actions = [];
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.basePersonId + '\')"><i class="fa fa-edit"></i>编辑</a> ');
actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.basePersonId + '\')"><i class="fa fa-remove"></i>删除</a>');
return actions.join('');
}
}]
};
$.table.init(options);
});
</script>
</body>
</html>

@ -0,0 +1,144 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('修改人员信息')" />
<th:block th:include="include :: datetimepicker-css" />
<th:block th:include="include :: bootstrap-fileinput-css"/>
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-base_person_info-edit" th:object="${pmBasePersonInfo}">
<input name="basePersonId" th:field="*{basePersonId}" type="hidden">
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label">RFID编码</label>
<div class="col-sm-8">
<input name="rfidId" th:field="*{rfidId}" class="form-control" type="text">
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label">工号:</label>
<div class="col-sm-8">
<input name="employeeId" th:field="*{employeeId}" class="form-control" type="text">
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label is-required">姓名:</label>
<div class="col-sm-8">
<input name="peopleName" th:field="*{peopleName}" class="form-control" type="text" required>
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label is-required">性别:</label>
<div class="col-sm-8">
<select name="peopleSex" class="form-control" th:with="type=${@dict.getType('sys_user_sex')}" required>
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}" th:field="*{peopleSex}"></option>
</select>
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label is-required">驾驶证代号:</label>
<div class="col-sm-8">
<input name="driverCode" th:field="*{driverCode}" class="form-control" type="text" required>
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label">联系电话:</label>
<div class="col-sm-8">
<input name="phoneNumber" th:field="*{phoneNumber}" class="form-control" type="text">
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label">有效日期截止:</label>
<div class="col-sm-8">
<div class="input-group date">
<input name="joinDate" th:value="${#dates.format(pmBasePersonInfo.joinDate, 'yyyy-MM-dd')}" class="form-control" placeholder="yyyy-MM-dd" type="text">
<span class="input-group-addon"><i class="fa fa-calendar"></i></span>
</div>
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label">学历:</label>
<div class="col-sm-8">
<select name="academicQualification" class="form-control" th:with="type=${@dict.getType('academic_qualification')}">
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}" th:field="*{academicQualification}"></option>
</select>
</div>
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="col-sm-3 control-label">备注:</label>
<div class="col-sm-9">
<textarea name="remark" class="form-control">[[*{remark}]]</textarea>
</div>
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="col-sm-3 control-label">照片:</label>
<div class="col-sm-9">
<input type="hidden" name="photoPath" th:field="*{photoPath}">
<div class="file-loading">
<input class="form-control file-upload" id="photoPath" name="file" type="file">
</div>
</div>
</div>
</div>
</form>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: datetimepicker-js" />
<th:block th:include="include :: bootstrap-fileinput-js"/>
<script th:inline="javascript">
var prefix = ctx + "pm/base_person_info";
$("#form-base_person_info-edit").validate({
focusCleanup: true
});
function submitHandler() {
if ($.validate.form()) {
$.operate.save(prefix + "/edit", $('#form-base_person_info-edit').serialize());
}
}
$("input[name='joinDate']").datetimepicker({
format: "yyyy-mm-dd",
minView: "month",
autoclose: true
});
$(".file-upload").each(function (i) {
var val = $("input[name='" + this.id + "']").val()
$(this).fileinput({
'uploadUrl': ctx + 'common/upload',
initialPreviewAsData: true,
initialPreview: [val],
maxFileCount: 1,
autoReplace: true
}).on('fileuploaded', function (event, data, previewId, index) {
$("input[name='" + event.currentTarget.id + "']").val(data.response.fileName)
}).on('fileremoved', function (event, id, index) {
$("input[name='" + event.currentTarget.id + "']").val('')
})
$(this).fileinput('_initFileActions');
});
</script>
</body>
</html>

@ -0,0 +1,67 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('新增处罚记录')" />
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-record_penalty-add">
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label">类型编码:</label>
<div class="col-sm-8">
<input name="penaltyTypeCode" class="form-control" type="text">
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label">处罚说明:</label>
<div class="col-sm-8">
<input name="penaltyInfo" class="form-control" type="text">
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label">处罚金额:</label>
<div class="col-sm-8">
<input name="penaltyAmount" class="form-control" type="text">
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label">处罚人员:</label>
<div class="col-sm-8">
<input name="basePersonId" class="form-control" type="text">
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label">处理状态:</label>
<div class="col-sm-8">
<select name="processState" class="form-control" th:with="type=${@dict.getType('record_penalty_state')}">
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
</select>
</div>
</div>
</div>
</form>
</div>
<th:block th:include="include :: footer" />
<script th:inline="javascript">
var prefix = ctx + "pm/record_penalty"
$("#form-record_penalty-add").validate({
focusCleanup: true
});
function submitHandler() {
if ($.validate.form()) {
$.operate.save(prefix + "/add", $('#form-record_penalty-add').serialize());
}
}
</script>
</body>
</html>

@ -0,0 +1,68 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('修改处罚记录')" />
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-record_penalty-edit" th:object="${pmRecordPenalty}">
<input name="recordPenaltyId" th:field="*{recordPenaltyId}" type="hidden">
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label">类型编码:</label>
<div class="col-sm-8">
<input name="penaltyTypeCode" th:field="*{penaltyTypeCode}" class="form-control" type="text">
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label">处罚说明:</label>
<div class="col-sm-8">
<input name="penaltyInfo" th:field="*{penaltyInfo}" class="form-control" type="text">
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label">处罚金额:</label>
<div class="col-sm-8">
<input name="penaltyAmount" th:field="*{penaltyAmount}" class="form-control" type="text">
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label">处罚人员:</label>
<div class="col-sm-8">
<input name="basePersonId" th:field="*{basePersonId}" class="form-control" type="text">
</div>
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label class="col-sm-4 control-label">处理状态:</label>
<div class="col-sm-8">
<select name="processState" class="form-control" th:with="type=${@dict.getType('record_penalty_state')}">
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}" th:field="*{processState}"></option>
</select>
</div>
</div>
</div>
</form>
</div>
<th:block th:include="include :: footer" />
<script th:inline="javascript">
var prefix = ctx + "pm/record_penalty";
$("#form-record_penalty-edit").validate({
focusCleanup: true
});
function submitHandler() {
if ($.validate.form()) {
$.operate.save(prefix + "/edit", $('#form-record_penalty-edit').serialize());
}
}
</script>
</body>
</html>

@ -0,0 +1,179 @@
<!DOCTYPE html>
<html lang="zh" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="include :: header('处罚记录列表')"/>
</head>
<body class="gray-bg">
<div class="container-div">
<div class="row">
<div class="col-sm-12 search-collapse">
<form id="formId">
<div class="select-list">
<ul>
<li>
<label>类型编码:</label>
<input name="penaltyTypeCode" type="text"/>
</li>
<li>
<label>处罚说明:</label>
<input name="penaltyInfo" type="text"/>
</li>
<li>
<label>处理状态:</label>
<select name="processState" th:with="type=${@dict.getType('record_penalty_state')}">
<option value="">所有</option>
<option th:each="dict : ${type}" th:text="${dict.dictLabel}"
th:value="${dict.dictValue}"></option>
</select>
</li>
<li class="select-time">
<label>记录时间:</label>
<input class="time-input" id="startTime" name="params[beginCreateTime]" placeholder="开始时间"
type="text"/>
<span>-</span>
<input class="time-input" id="endTime" name="params[endCreateTime]" placeholder="结束时间"
type="text"/>
</li>
<li class="select-time">
<label>处理时间:</label>
<input class="time-input" id="startTime" name="params[beginUpdateTime]" placeholder="开始时间"
type="text"/>
<span>-</span>
<input class="time-input" id="endTime" name="params[endUpdateTime]" placeholder="结束时间"
type="text"/>
</li>
<li>
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i
class="fa fa-search"></i>&nbsp;搜索</a>
<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i
class="fa fa-refresh"></i>&nbsp;重置</a>
</li>
</ul>
</div>
</form>
</div>
<div class="btn-group-sm" id="toolbar" role="group">
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="pm:record_penalty:add">
<i class="fa fa-plus"></i> 添加
</a>
<a class="btn btn-primary single disabled" onclick="$.operate.edit()"
shiro:hasPermission="pm:record_penalty:edit">
<i class="fa fa-edit"></i> 修改
</a>
<a class="btn btn-danger multiple disabled" onclick="$.operate.removeAll()"
shiro:hasPermission="pm:record_penalty:remove">
<i class="fa fa-remove"></i> 删除
</a>
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="pm:record_penalty:export">
<i class="fa fa-download"></i> 导出
</a>
</div>
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-table"></table>
</div>
</div>
</div>
<th:block th:include="include :: footer"/>
<script th:inline="javascript">
var editFlag = [[${@permission.hasPermi('pm:record_penalty:edit')}]];
var removeFlag = [[${@permission.hasPermi('pm:record_penalty:remove')}]];
var processStateDatas = [[${@dict.getType('record_penalty_state')}]];
var prefix = ctx + "pm/record_penalty";
$(function () {
var options = {
url: prefix + "/list",
createUrl: prefix + "/add",
updateUrl: prefix + "/edit/{id}",
removeUrl: prefix + "/remove",
exportUrl: prefix + "/export",
modalName: "处罚记录",
columns: [{
checkbox: true
},
{
field: 'recordPenaltyId',
title: '处罚记录主键',
visible: false
},
{
field: 'penaltyType',
title: '处罚类型'
},
{
field: 'penaltyTypeCode',
title: '类型编码'
},
{
field: 'penaltyInfo',
title: '处罚说明'
},
{
field: 'penaltyAmount',
title: '处罚金额'
},
// {
// field: 'basePersonId',
// title: '处罚人员'
// },
{
field: 'basePersonInfo.employeeId',
title: '工号'
},
{
field: 'basePersonInfo.peopleName',
title: '人员姓名'
},
{
field: 'basePersonInfo.driverCode',
title: '驾驶证代号'
},
{
field: 'basePersonInfo.phoneNumber',
title: '联系电话'
},
{
field: 'processState',
title: '处理状态',
formatter: function (value, row, index) {
return $.table.selectDictLabel(processStateDatas, value);
}
},
{
field: 'createBy',
title: '记录人'
},
{
field: 'createTime',
title: '记录时间'
},
{
field: 'updateBy',
title: '处理人'
},
{
field: 'updateTime',
title: '处理时间'
},
{
title: '操作',
align: 'center',
formatter: function (value, row, index) {
var actions = [];
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.recordPenaltyId + '\')"><i class="fa fa-edit"></i>编辑</a> ');
actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.recordPenaltyId + '\')"><i class="fa fa-remove"></i>删除</a>');
return actions.join('');
}
}]
};
$.table.init(options);
});
</script>
</body>
</html>

@ -0,0 +1,49 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('新增扫描查询记录')" />
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-record_san-add">
<div class="col-xs-12">
<div class="form-group">
<label class="col-sm-3 control-label">查询人:</label>
<div class="col-sm-8">
<input name="queryUser" class="form-control" type="text">
</div>
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="col-sm-3 control-label">扫描RFID</label>
<div class="col-sm-8">
<input name="queryRfid" class="form-control" type="text">
</div>
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="col-sm-3 control-label">人员表主键:</label>
<div class="col-sm-8">
<input name="basePersonId" class="form-control" type="text">
</div>
</div>
</div>
</form>
</div>
<th:block th:include="include :: footer" />
<script th:inline="javascript">
var prefix = ctx + "pm/record_san"
$("#form-record_san-add").validate({
focusCleanup: true
});
function submitHandler() {
if ($.validate.form()) {
$.operate.save(prefix + "/add", $('#form-record_san-add').serialize());
}
}
</script>
</body>
</html>

@ -0,0 +1,50 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('修改扫描查询记录')" />
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-record_san-edit" th:object="${pmRecordSan}">
<input name="recordSanId" th:field="*{recordSanId}" type="hidden">
<div class="col-xs-12">
<div class="form-group">
<label class="col-sm-3 control-label">查询人:</label>
<div class="col-sm-8">
<input name="queryUser" th:field="*{queryUser}" class="form-control" type="text">
</div>
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="col-sm-3 control-label">扫描RFID</label>
<div class="col-sm-8">
<input name="queryRfid" th:field="*{queryRfid}" class="form-control" type="text">
</div>
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="col-sm-3 control-label">人员表主键:</label>
<div class="col-sm-8">
<input name="basePersonId" th:field="*{basePersonId}" class="form-control" type="text">
</div>
</div>
</div>
</form>
</div>
<th:block th:include="include :: footer" />
<script th:inline="javascript">
var prefix = ctx + "pm/record_san";
$("#form-record_san-edit").validate({
focusCleanup: true
});
function submitHandler() {
if ($.validate.form()) {
$.operate.save(prefix + "/edit", $('#form-record_san-edit').serialize());
}
}
</script>
</body>
</html>

@ -0,0 +1,136 @@
<!DOCTYPE html>
<html lang="zh" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="include :: header('扫描查询记录列表')"/>
</head>
<body class="gray-bg">
<div class="container-div">
<div class="row">
<div class="col-sm-12 search-collapse">
<form id="formId">
<div class="select-list">
<ul>
<li>
<label>查询人:</label>
<input name="queryUser" type="text"/>
</li>
<li>
扫描RFID
<input name="queryRfid" type="text"/>
</li>
<li>
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i
class="fa fa-search"></i>&nbsp;搜索</a>
<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i
class="fa fa-refresh"></i>&nbsp;重置</a>
</li>
</ul>
</div>
</form>
</div>
<div class="btn-group-sm" id="toolbar" role="group">
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="pm:record_san:add">
<i class="fa fa-plus"></i> 添加
</a>
<a class="btn btn-primary single disabled" onclick="$.operate.edit()"
shiro:hasPermission="pm:record_san:edit">
<i class="fa fa-edit"></i> 修改
</a>
<a class="btn btn-danger multiple disabled" onclick="$.operate.removeAll()"
shiro:hasPermission="pm:record_san:remove">
<i class="fa fa-remove"></i> 删除
</a>
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="pm:record_san:export">
<i class="fa fa-download"></i> 导出
</a>
</div>
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-table"></table>
</div>
</div>
</div>
<th:block th:include="include :: footer"/>
<script th:inline="javascript">
var editFlag = [[${@permission.hasPermi('pm:record_san:edit')}]];
var removeFlag = [[${@permission.hasPermi('pm:record_san:remove')}]];
var prefix = ctx + "pm/record_san";
$(function () {
var options = {
url: prefix + "/list",
createUrl: prefix + "/add",
updateUrl: prefix + "/edit/{id}",
removeUrl: prefix + "/remove",
exportUrl: prefix + "/export",
modalName: "扫描查询记录",
columns: [{
checkbox: true
},
{
field: 'recordSanId',
title: '扫描记录主键',
visible: false
},
{
field: 'queryUser',
title: '查询人'
},
{
field: 'queryRfid',
title: '扫描RFID'
},
// {
// field: 'basePersonId',
// title: '人员表主键'
// },
//
{
field: 'basePersonInfo.employeeId',
title: '工号'
},
{
field: 'basePersonInfo.peopleName',
title: '人员姓名'
},
{
field: 'basePersonInfo.driverCode',
title: '驾驶证代号'
},
{
field: 'basePersonInfo.phoneNumber',
title: '联系电话'
},
{
field: 'createBy',
title: '创建人'
},
{
field: 'createTime',
title: '创建时间'
},
{
field: 'updateBy',
title: '更新人'
},
{
field: 'updateTime',
title: '更新时间'
},
{
title: '操作',
align: 'center',
formatter: function (value, row, index) {
var actions = [];
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.recordSanId + '\')"><i class="fa fa-edit"></i>编辑</a> ');
actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.recordSanId + '\')"><i class="fa fa-remove"></i>删除</a>');
return actions.join('');
}
}]
};
$.table.init(options);
});
</script>
</body>
</html>
Loading…
Cancel
Save