Merge remote-tracking branch 'origin/deng' into deng

This commit is contained in:
Timer
2026-03-05 02:59:30 +08:00
21 changed files with 5019 additions and 3070 deletions

View File

@ -0,0 +1,194 @@
package com.sipai.controller.administration;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@Controller
@RequestMapping("/administration/attendance")
public class AttendanceController {
private static final DateTimeFormatter DAY_FMT = DateTimeFormatter.ofPattern("yyyy-MM-dd");
@RequestMapping("/showList.do")
public String showList(HttpServletRequest request, Model model) {
return "/administration/attendanceRecordList";
}
@RequestMapping("/getList.do")
public ModelAndView getList(HttpServletRequest request, Model model,
@RequestParam(value = "page") Integer page,
@RequestParam(value = "rows") Integer rows,
@RequestParam(value = "sort", required = false) String sort,
@RequestParam(value = "order", required = false) String order) {
String name = safe(request.getParameter("search_name"));
String dept = safe(request.getParameter("search_dept"));
String status = safe(request.getParameter("search_status"));
String start = safe(request.getParameter("search_start"));
String end = safe(request.getParameter("search_end"));
LocalDate startDate = parseDay(start);
LocalDate endDate = parseDay(end);
List<Map<String, Object>> allRows = buildMockRows();
List<Map<String, Object>> filtered = new ArrayList<Map<String, Object>>();
for (Map<String, Object> item : allRows) {
String employeeNo = str(item.get("employeeNo"));
String employeeName = str(item.get("employeeName"));
String deptName = str(item.get("deptName"));
String st = str(item.get("status"));
LocalDate day = parseDay(str(item.get("attendanceDate")));
if (!name.isEmpty()) {
String q = name.toLowerCase();
if (!employeeNo.toLowerCase().contains(q) && !employeeName.toLowerCase().contains(q)) {
continue;
}
}
if (!dept.isEmpty() && !dept.equals(deptName)) {
continue;
}
if (!status.isEmpty() && !status.equals(st)) {
continue;
}
if (startDate != null && day != null && day.isBefore(startDate)) {
continue;
}
if (endDate != null && day != null && day.isAfter(endDate)) {
continue;
}
filtered.add(item);
}
sortRows(filtered, sort, order);
int total = filtered.size();
int from = Math.max(0, (page - 1) * rows);
int to = Math.min(total, from + rows);
List<Map<String, Object>> pageRows = from >= to ? Collections.<Map<String, Object>>emptyList() : filtered.subList(from, to);
JSONObject result = new JSONObject();
result.put("total", total);
result.put("rows", JSONArray.fromObject(pageRows));
model.addAttribute("result", result.toString());
return new ModelAndView("result");
}
private static void sortRows(List<Map<String, Object>> rows, String sort, String order) {
final boolean asc = "asc".equalsIgnoreCase(order);
final String sortField = (sort == null || sort.trim().isEmpty() || "id".equals(sort)) ? "attendanceDate" : sort;
Collections.sort(rows, new Comparator<Map<String, Object>>() {
@Override
public int compare(Map<String, Object> a, Map<String, Object> b) {
int cmp;
if ("employeeNo".equals(sortField)) {
cmp = str(a.get("employeeNo")).compareTo(str(b.get("employeeNo")));
} else if ("employeeName".equals(sortField)) {
cmp = str(a.get("employeeName")).compareTo(str(b.get("employeeName")));
} else if ("deptName".equals(sortField)) {
cmp = str(a.get("deptName")).compareTo(str(b.get("deptName")));
} else if ("status".equals(sortField)) {
cmp = str(a.get("status")).compareTo(str(b.get("status")));
} else if ("checkInTime".equals(sortField)) {
cmp = str(a.get("checkInTime")).compareTo(str(b.get("checkInTime")));
} else {
cmp = str(a.get("attendanceDate")).compareTo(str(b.get("attendanceDate")));
}
if (!asc) {
cmp = -cmp;
}
if (cmp == 0) {
return str(a.get("employeeNo")).compareTo(str(b.get("employeeNo")));
}
return cmp;
}
});
}
private static List<Map<String, Object>> buildMockRows() {
String[][] employees = {
{"E0001", "张三", "生产部"},
{"E0002", "李四", "设备部"},
{"E0003", "王五", "品控部"},
{"E0004", "赵六", "仓储部"},
{"E0005", "钱七", "行政部"}
};
List<Map<String, Object>> rows = new ArrayList<Map<String, Object>>();
LocalDate today = LocalDate.now();
int idSeq = 1;
for (int d = 0; d < 45; d++) {
LocalDate day = today.minusDays(d);
String dayStr = DAY_FMT.format(day);
for (int i = 0; i < employees.length; i++) {
String[] emp = employees[i];
int flag = d + i;
String status = "正常";
String checkIn = "08:55";
String checkOut = "18:05";
String workHours = "8.5";
if (flag % 19 == 0) {
status = "缺卡";
checkOut = "--";
workHours = "4.2";
} else if (flag % 11 == 0) {
status = "迟到";
checkIn = "09:" + (10 + (flag % 20));
workHours = "7.8";
} else if (flag % 13 == 0) {
status = "早退";
checkOut = "17:" + (20 + (flag % 30));
workHours = "7.1";
}
Map<String, Object> row = new LinkedHashMap<String, Object>();
row.put("id", "mock-" + idSeq++);
row.put("employeeNo", emp[0]);
row.put("employeeName", emp[1]);
row.put("deptName", emp[2]);
row.put("attendanceDate", dayStr);
row.put("checkInTime", checkIn);
row.put("checkOutTime", checkOut);
row.put("workHours", workHours);
row.put("status", status);
row.put("source", "第三方接口(MOCK)");
rows.add(row);
}
}
return rows;
}
private static String safe(String s) {
return s == null ? "" : s.trim();
}
private static String str(Object o) {
return o == null ? "" : String.valueOf(o);
}
private static LocalDate parseDay(String day) {
if (day == null || day.trim().isEmpty()) {
return null;
}
try {
return LocalDate.parse(day.trim(), DAY_FMT);
} catch (Exception ex) {
return null;
}
}
}

View File

@ -0,0 +1,114 @@
package com.sipai.controller.jsyw;
import net.sf.json.JSONArray;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@Controller
@RequestMapping("/jsyw/vehicleGate")
public class VehicleGateController {
@RequestMapping("/showList.do")
public String showList(HttpServletRequest request, Model model) {
return "/jsyw/vehicleGateList";
}
@RequestMapping("/getList.do")
public ModelAndView getList(HttpServletRequest request, Model model,
@RequestParam(value = "page", required = false, defaultValue = "1") Integer page,
@RequestParam(value = "rows", required = false, defaultValue = "10") Integer rows) {
String plateNo = safeStr(request.getParameter("plateNo")).toUpperCase(Locale.ROOT);
String passDate = safeStr(request.getParameter("passDate"));
String direction = safeStr(request.getParameter("direction"));
String status = safeStr(request.getParameter("status"));
List<Map<String, Object>> mockRows = buildMockRows();
List<Map<String, Object>> filteredRows = new ArrayList<Map<String, Object>>();
int inCount = 0;
int outCount = 0;
int abnormalCount = 0;
for (Map<String, Object> item : mockRows) {
String itemPlateNo = safeStr(item.get("plateNo")).toUpperCase(Locale.ROOT);
String itemPassTime = safeStr(item.get("passTime"));
String itemDirection = safeStr(item.get("direction"));
String itemStatus = safeStr(item.get("status"));
boolean matchPlate = plateNo.isEmpty() || itemPlateNo.contains(plateNo);
boolean matchDate = passDate.isEmpty() || itemPassTime.startsWith(passDate);
boolean matchDirection = direction.isEmpty() || direction.equals(itemDirection);
boolean matchStatus = status.isEmpty() || status.equals(itemStatus);
if (matchPlate && matchDate && matchDirection && matchStatus) {
filteredRows.add(item);
if ("IN".equals(itemDirection)) {
inCount++;
} else if ("OUT".equals(itemDirection)) {
outCount++;
}
if ("ABNORMAL".equals(itemStatus)) {
abnormalCount++;
}
}
}
int total = filteredRows.size();
int pageStart = Math.max((page - 1) * rows, 0);
int pageEnd = Math.min(pageStart + rows, total);
List<Map<String, Object>> pageRows = new ArrayList<Map<String, Object>>();
if (pageStart < pageEnd) {
pageRows = filteredRows.subList(pageStart, pageEnd);
}
JSONArray rowsJson = JSONArray.fromObject(pageRows);
String result = "{"
+ "\"total\":" + total + ","
+ "\"rows\":" + rowsJson + ","
+ "\"summaryInCount\":" + inCount + ","
+ "\"summaryOutCount\":" + outCount + ","
+ "\"summaryInsideCount\":" + (inCount - outCount) + ","
+ "\"summaryAbnormalCount\":" + abnormalCount
+ "}";
model.addAttribute("result", result);
return new ModelAndView("result");
}
private String safeStr(Object value) {
return value == null ? "" : String.valueOf(value).trim();
}
private List<Map<String, Object>> buildMockRows() {
List<Map<String, Object>> rows = new ArrayList<Map<String, Object>>();
rows.add(buildRow("鲁A12345", "IN", "2026-03-03 08:12:21", "东门1号闸", "张三", "NORMAL", "自动识别放行"));
rows.add(buildRow("鲁B66K88", "OUT", "2026-03-03 08:18:46", "东门1号闸", "李四", "NORMAL", "自动识别放行"));
rows.add(buildRow("鲁C99871", "IN", "2026-03-03 08:27:19", "南门2号闸", "王五", "ABNORMAL", "车牌识别异常,人工放行"));
rows.add(buildRow("鲁A77889", "IN", "2026-03-03 09:04:52", "北门1号闸", "赵六", "NORMAL", "自动识别放行"));
rows.add(buildRow("鲁D22319", "OUT", "2026-03-03 09:19:11", "南门2号闸", "钱七", "NORMAL", "自动识别放行"));
rows.add(buildRow("鲁E55120", "IN", "2026-03-03 10:03:35", "西门1号闸", "孙八", "NORMAL", "访客车辆"));
rows.add(buildRow("鲁F90111", "OUT", "2026-03-03 10:16:05", "北门1号闸", "周九", "ABNORMAL", "未登记离场,值班确认"));
rows.add(buildRow("鲁A0P365", "IN", "2026-03-03 10:42:30", "东门1号闸", "吴十", "NORMAL", "自动识别放行"));
return rows;
}
private Map<String, Object> buildRow(String plateNo, String direction, String passTime, String gateName,
String driverName, String status, String note) {
Map<String, Object> row = new HashMap<String, Object>();
row.put("plateNo", plateNo);
row.put("direction", direction);
row.put("passTime", passTime);
row.put("gateName", gateName);
row.put("driverName", driverName);
row.put("status", status);
row.put("note", note);
return row;
}
}

View File

@ -74,7 +74,7 @@ public class PipelineDataController {
@RequestMapping("/delete.do")
public String dodelete(HttpServletRequest request, Model model,
@RequestParam(value = "id") String id) {
@RequestParam(value = "id") Long id) {
int result = this.pipelineDataService.deleteById(id);
model.addAttribute("result", result);
return "result";
@ -83,15 +83,14 @@ public class PipelineDataController {
@RequestMapping("/deletes.do")
public String dodeletes(HttpServletRequest request, Model model,
@RequestParam(value = "ids") String ids) {
ids = ids.replace(",", "','");
int result = this.pipelineDataService.deleteByWhere("where id in ('" + ids + "')");
int result = this.pipelineDataService.deleteByWhere("where id in (" + ids + ")");
model.addAttribute("result", result);
return "result";
}
@RequestMapping("/edit.do")
public String doedit(HttpServletRequest request, Model model,
@RequestParam(value = "id") String id) {
@RequestParam(value = "id") Long id) {
PipelineData pipelineData = this.pipelineDataService.selectById(id);
model.addAttribute("pipelineData", pipelineData);
return "/pipeline/pipelineDataEdit";
@ -109,7 +108,7 @@ public class PipelineDataController {
@RequestMapping("/view.do")
public String doview(HttpServletRequest request, Model model,
@RequestParam(value = "id") String id) {
@RequestParam(value = "id") Long id) {
PipelineData pipelineData = this.pipelineDataService.selectById(id);
model.addAttribute("pipelineData", pipelineData);
return "/pipeline/pipelineDataView";

View File

@ -49,6 +49,14 @@ public class CommDaoImpl<T> implements CommDao<T> {
T o = getSqlSession().selectOne(mappernamespace+"."+Thread.currentThread().getStackTrace()[1].getMethodName(), t);
return o;
}
/**
* 根据ID查询Long类型
*/
public T selectByPrimaryKey(Long t){
T o = getSqlSession().selectOne(mappernamespace+"."+Thread.currentThread().getStackTrace()[1].getMethodName(), t);
return o;
}
/**
* wxp为activiti测试修改
* @param t
@ -62,6 +70,13 @@ public class CommDaoImpl<T> implements CommDao<T> {
return getSqlSession().delete(mappernamespace+"."+Thread.currentThread().getStackTrace()[1].getMethodName(), t);
}
/**
* 根据ID删除Long类型
*/
public int deleteByPrimaryKey(Long t) {
return getSqlSession().delete(mappernamespace+"."+Thread.currentThread().getStackTrace()[1].getMethodName(), t);
}
public int insert(T t){
return getSqlSession().insert(mappernamespace+"."+Thread.currentThread().getStackTrace()[1].getMethodName(), t);
}

View File

@ -16,32 +16,30 @@
id, pipeline_name, diameter_mm, length_m, start_burial_depth_m, end_burial_depth_m,
start_ground_elevation_m, end_ground_elevation_m, pipeline_invert_elevation_m
</sql>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" >
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
select
<include refid="Base_Column_List" />
from pipeline_data
where id = #{id,jdbcType=VARCHAR}
from tb_pipeline_data
where id = #{id,jdbcType=BIGINT}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.String" >
delete from pipeline_data
where id = #{id,jdbcType=VARCHAR}
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
delete from tb_pipeline_data
where id = #{id,jdbcType=BIGINT}
</delete>
<insert id="insert" parameterType="com.sipai.entity.pipeline.PipelineData" >
insert into pipeline_data (id, pipeline_name, diameter_mm,
<insert id="insert" parameterType="com.sipai.entity.pipeline.PipelineData" useGeneratedKeys="true" keyProperty="id" >
insert into tb_pipeline_data (pipeline_name, diameter_mm,
length_m, start_burial_depth_m, end_burial_depth_m,
start_ground_elevation_m, end_ground_elevation_m,
pipeline_invert_elevation_m)
values (#{id,jdbcType=VARCHAR}, #{pipelineName,jdbcType=VARCHAR}, #{diameterMm,jdbcType=DECIMAL},
values (#{pipelineName,jdbcType=VARCHAR}, #{diameterMm,jdbcType=DECIMAL},
#{lengthM,jdbcType=DECIMAL}, #{startBurialDepthM,jdbcType=DECIMAL}, #{endBurialDepthM,jdbcType=DECIMAL},
#{startGroundElevationM,jdbcType=DECIMAL}, #{endGroundElevationM,jdbcType=DECIMAL},
#{pipelineInvertElevationM,jdbcType=DECIMAL})
</insert>
<insert id="insertSelective" parameterType="com.sipai.entity.pipeline.PipelineData" >
insert into pipeline_data
<insert id="insertSelective" parameterType="com.sipai.entity.pipeline.PipelineData" useGeneratedKeys="true" keyProperty="id" >
insert into tb_pipeline_data
<trim prefix="(" suffix=")" suffixOverrides="," >
<if test="id != null" >
id,
</if>
<if test="pipelineName != null" >
pipeline_name,
</if>
@ -68,9 +66,7 @@
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides="," >
<if test="id != null" >
#{id,jdbcType=VARCHAR},
</if>
<if test="pipelineName != null" >
#{pipelineName,jdbcType=VARCHAR},
</if>
@ -98,7 +94,7 @@
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.sipai.entity.pipeline.PipelineData" >
update pipeline_data
update tb_pipeline_data
<set >
<if test="pipelineName != null" >
pipeline_name = #{pipelineName,jdbcType=VARCHAR},
@ -125,10 +121,10 @@
pipeline_invert_elevation_m = #{pipelineInvertElevationM,jdbcType=DECIMAL},
</if>
</set>
where id = #{id,jdbcType=VARCHAR}
where id = #{id,jdbcType=BIGINT}
</update>
<update id="updateByPrimaryKey" parameterType="com.sipai.entity.pipeline.PipelineData" >
update pipeline_data
update tb_pipeline_data
set pipeline_name = #{pipelineName,jdbcType=VARCHAR},
diameter_mm = #{diameterMm,jdbcType=DECIMAL},
length_m = #{lengthM,jdbcType=DECIMAL},
@ -137,17 +133,17 @@
start_ground_elevation_m = #{startGroundElevationM,jdbcType=DECIMAL},
end_ground_elevation_m = #{endGroundElevationM,jdbcType=DECIMAL},
pipeline_invert_elevation_m = #{pipelineInvertElevationM,jdbcType=DECIMAL}
where id = #{id,jdbcType=VARCHAR}
where id = #{id,jdbcType=BIGINT}
</update>
<select id="selectListByWhere" parameterType="java.lang.String" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from pipeline_data
from tb_pipeline_data
${where}
</select>
<delete id="deleteByWhere" parameterType="java.lang.String">
delete from
pipeline_data
tb_pipeline_data
${where}
</delete>
</mapper>

View File

@ -19,11 +19,25 @@ public class PipelineDataService implements CommService<PipelineData> {
return pipelineData;
}
/**
* 根据ID查询Long类型
*/
public PipelineData selectById(Long id) {
return pipelineDataDao.selectByPrimaryKey(id);
}
@Override
public int deleteById(String id) {
return pipelineDataDao.deleteByPrimaryKey(id);
}
/**
* 根据ID删除Long类型
*/
public int deleteById(Long id) {
return pipelineDataDao.deleteByPrimaryKey(id);
}
@Override
public int save(PipelineData pipelineData) {
return pipelineDataDao.insert(pipelineData);