Compare commits

28 Commits

Author SHA1 Message Date
6c252fe4dd 合并 2026-04-23 17:37:38 +08:00
4aeb894ba9 Merge remote-tracking branch 'origin/deng-release' into process-dev 2026-04-22 20:17:42 +08:00
2ca6153cda bug 2026-04-21 23:45:48 +08:00
6738104534 bug 2026-04-16 01:13:03 +08:00
e5da30098f Merge branch 'deng' of http://101.43.41.9:13000/xzzn/SIPAIIS_WMS_JSSW into deng 2026-04-14 20:13:49 +08:00
65c2a978b8 feat(main_JS_Company): 重构主配置与企业模块数据加载逻辑 2026-04-14 20:13:47 +08:00
80fa5872fd bug 2026-04-13 21:37:01 +08:00
5c576ddfcb bug 2026-04-09 14:16:18 +08:00
0377a0cc8c 请假补假 2026-04-09 13:12:26 +08:00
f89ab0f90d bug 2026-04-09 09:09:00 +08:00
78ec2cbe85 Merge branch 'deng' into deng-release 2026-04-08 19:17:05 +08:00
6c08c4fd1b bug 2026-04-08 19:15:15 +08:00
ebf57c2e82 请假补假 2026-04-08 10:30:34 +08:00
3c9ba8a7f5 feat(process): 优化工艺列表初始化与测点值异步获取 2026-04-08 01:11:01 +08:00
abdd3b7add Merge branch 'deng' into deng-release 2026-04-05 23:21:52 +08:00
ebe3148a58 bug 2026-04-05 23:21:30 +08:00
6d5c8bfd65 fix(file): 优化文件上传及预览逻辑,完善当前用户信息设置 2026-04-05 22:36:07 +08:00
0c8b530339 bug 2026-04-05 22:16:12 +08:00
b9d6a7458f bug 2026-04-04 14:00:29 +08:00
784ac30847 style(webapp): 注释和调整前端页面部分元素及代码 2026-04-04 01:22:16 +08:00
b0e2e58d93 Merge branch 'deng' into deng-release
# Conflicts:
#	src/main/java/com/sipai/controller/equipment/MaintenancePlanController.java
2026-04-04 01:18:42 +08:00
785654a510 bug liucheng 2026-04-04 01:17:13 +08:00
9cc4d4a988 bug 2026-04-02 01:22:19 +08:00
fadbe2b59f bug 2026-04-01 08:58:11 +08:00
f33f57f6a7 bug 2026-03-31 09:22:04 +08:00
c3babf2c4d bug 2026-03-28 00:50:10 +08:00
04610aa678 bug 2026-03-28 00:45:42 +08:00
596b2a68bf bug 2026-03-27 23:46:04 +08:00
126 changed files with 5773 additions and 83250 deletions

41
pom.xml
View File

@ -21,6 +21,12 @@
<!-- 数据<E695B0>?--> <!-- 数据<E695B0>?-->
</properties> </properties>
<dependencies> <dependencies>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>5.4.0</version>
</dependency>
<!-- spring核心<E6A0B8>?--> <!-- spring核心<E6A0B8>?-->
<dependency> <dependency>
<groupId>org.springframework</groupId> <groupId>org.springframework</groupId>
@ -369,6 +375,12 @@
<groupId>org.xhtmlrenderer</groupId> <groupId>org.xhtmlrenderer</groupId>
<artifactId>core-renderer</artifactId> <artifactId>core-renderer</artifactId>
<version>R8</version> <version>R8</version>
<exclusions>
<exclusion>
<groupId>bouncycastle</groupId>
<artifactId>bcprov-jdk14</artifactId>
</exclusion>
</exclusions>
</dependency> </dependency>
<!-- 支持css样式渲染 --> <!-- 支持css样式渲染 -->
<dependency> <dependency>
@ -597,6 +609,17 @@
<groupId>org.redisson</groupId> <groupId>org.redisson</groupId>
<artifactId>redisson</artifactId> <artifactId>redisson</artifactId>
<version>3.11.4</version> <version>3.11.4</version>
<exclusions>
<!-- 项目仍使用 jodd 3.x排除 redisson 传入的 jodd 5.x避免运行时方法签名冲突 -->
<exclusion>
<groupId>org.jodd</groupId>
<artifactId>jodd-bean</artifactId>
</exclusion>
<exclusion>
<groupId>org.jodd</groupId>
<artifactId>jodd-core</artifactId>
</exclusion>
</exclusions>
<!-- <version>3.13.3</version>--> <!-- <version>3.13.3</version>-->
</dependency> </dependency>
<!-- zkclient --> <!-- zkclient -->
@ -781,11 +804,11 @@
<version>1.6.1</version> <version>1.6.1</version>
</dependency> </dependency>
<!-- jna --> <!-- jna -->
<dependency> <!-- <dependency>-->
<groupId>net.java.dev.jna</groupId> <!-- <groupId>net.java.dev.jna</groupId>-->
<artifactId>jna</artifactId> <!-- <artifactId>jna</artifactId>-->
<version>1.0</version> <!-- <version>1.0</version>-->
</dependency> <!-- </dependency>-->
<!-- jna examples --> <!-- jna examples -->
<dependency> <dependency>
<groupId>net.java.dev.jna</groupId> <groupId>net.java.dev.jna</groupId>
@ -796,6 +819,14 @@
<build> <build>
<finalName>TGLW</finalName> <finalName>TGLW</finalName>
<resources> <resources>
<!-- <resource>-->
<!-- <directory>libs/win64</directory>-->
<!-- <targetPath>win64</targetPath>-->
<!-- <includes>-->
<!-- <include>*.dll</include>-->
<!-- </includes>-->
<!-- <filtering>false</filtering>-->
<!-- </resource>-->
<resource> <resource>
<directory>src/main/java</directory> <directory>src/main/java</directory>
<includes> <includes>

View File

@ -1,9 +0,0 @@
package com.sipai.activiti;
public class Test {
public static void main(String[] args) {
int a = 3;
int b = 3;
System.out.println(a % b);
}
}

View File

@ -483,6 +483,7 @@ public class ActivitiController {
String passFlag = request.getParameter("passFlag"); String passFlag = request.getParameter("passFlag");
if (passFlag != null && !passFlag.isEmpty()) { if (passFlag != null && !passFlag.isEmpty()) {
boolean pFlag = Boolean.parseBoolean(passFlag); boolean pFlag = Boolean.parseBoolean(passFlag);
int totalCount = list.size();
Iterator<WorkTask> iterator = list.iterator(); Iterator<WorkTask> iterator = list.iterator();
while (iterator.hasNext()) { while (iterator.hasNext()) {
WorkTask workTask = (WorkTask) iterator.next(); WorkTask workTask = (WorkTask) iterator.next();
@ -491,6 +492,10 @@ public class ActivitiController {
} }
} }
// 当 passFlag=false 过滤后返回空列表(即未识别到退回路径),则作为备用方案返回全部路径
if (list.isEmpty() && !pFlag && totalCount > 0) {
list = workflowProcessDefinitionService.getNextWorkTasks(task.getProcessDefinitionId(), task.getTaskDefinitionKey());
}
JSONArray jsonArray = new JSONArray(); JSONArray jsonArray = new JSONArray();
if (list != null && list.size() > 0) { if (list != null && list.size() > 0) {
for (WorkTask workTask : list) { for (WorkTask workTask : list) {

View File

@ -0,0 +1,400 @@
package com.sipai.controller.administration;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.sipai.entity.activiti.WorkTask;
import com.sipai.entity.administration.LeaveApply;
import com.sipai.entity.administration.LeaveCommStr;
import com.sipai.entity.base.Result;
import com.sipai.entity.business.BusinessUnit;
import com.sipai.entity.business.BusinessUnitAudit;
import com.sipai.entity.business.BusinessUnitHandle;
import com.sipai.entity.business.BusinessUnitRecord;
import com.sipai.entity.user.User;
import com.sipai.service.activiti.WorkflowProcessDefinitionService;
import com.sipai.service.activiti.WorkflowService;
import com.sipai.service.administration.LeaveApplyService;
import com.sipai.service.business.BusinessUnitAuditService;
import com.sipai.service.business.BusinessUnitHandleService;
import com.sipai.service.user.UserService;
import com.sipai.tools.ActivitiUtil;
import com.sipai.tools.CommString;
import com.sipai.tools.CommUtil;
import net.sf.json.JSONArray;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.impl.pvm.process.ActivityImpl;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.*;
@Controller
@RequestMapping("/administration/leaveApply")
public class LeaveApplyController {
@Resource
private LeaveApplyService leaveApplyService;
@Resource
private WorkflowProcessDefinitionService workflowProcessDefinitionService;
@Resource
private BusinessUnitHandleService businessUnitHandleService;
@Resource
private BusinessUnitAuditService businessUnitAuditService;
@Resource
private WorkflowService workflowService;
@Resource
private RuntimeService runtimeService;
@Resource
private TaskService taskService;
@Resource
private UserService userService;
@RequestMapping("/showList.do")
public String showList(HttpServletRequest request, Model model) {
return "/administration/leaveApplyList";
}
@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) {
if (sort == null || "id".equals(sort)) {
sort = " insdt ";
}
if (order == null) {
order = " desc ";
}
String wherestr = " where 1=1 ";
if (request.getParameter("search_code") != null && !request.getParameter("search_code").isEmpty()) {
wherestr += " and unit_id = '" + request.getParameter("search_code") + "'";
}
if (request.getParameter("search_name") != null && !request.getParameter("search_name").isEmpty()) {
wherestr += " and (reason like '%" + request.getParameter("search_name") + "%' or insuser like '%" + request.getParameter("search_name") + "%')";
}
if (request.getParameter("applyType") != null && !request.getParameter("applyType").isEmpty()) {
wherestr += " and apply_type = '" + request.getParameter("applyType") + "'";
}
PageHelper.startPage(page, rows);
List<LeaveApply> list = this.leaveApplyService.selectListByWhere(wherestr + " order by " + sort + " " + order);
PageInfo<LeaveApply> pInfo = new PageInfo<LeaveApply>(list);
JSONArray jsonArray = JSONArray.fromObject(list);
String result = "{\"total\":" + pInfo.getTotal() + ",\"rows\":" + jsonArray + "}";
model.addAttribute("result", result);
return new ModelAndView("result");
}
@RequestMapping("/add.do")
public String add(HttpServletRequest request, Model model) {
return "/administration/leaveApplyAdd";
}
@RequestMapping("/save.do")
public String save(HttpServletRequest request, Model model, @ModelAttribute LeaveApply leaveApply) {
User cu = (User) request.getSession().getAttribute("cu");
leaveApply.setId(CommUtil.getUUID());
leaveApply.setInsdt(CommUtil.nowDate());
leaveApply.setInsuser(cu.getId());
leaveApply.setState(LeaveCommStr.STATE_DRAFT);
leaveApply.setDelFlag("0");
int result = this.leaveApplyService.save(leaveApply);
String resultstr = "{\"res\":\"" + result + "\",\"id\":\"" + leaveApply.getId() + "\"}";
model.addAttribute("result", resultstr);
return "result";
}
@RequestMapping("/edit.do")
public String edit(HttpServletRequest request, Model model, @RequestParam(value = "id") String id) {
model.addAttribute("leaveApply", this.leaveApplyService.selectById(id));
return "/administration/leaveApplyEdit";
}
@RequestMapping("/update.do")
public String update(HttpServletRequest request, Model model, @ModelAttribute LeaveApply leaveApply) {
User cu = (User) request.getSession().getAttribute("cu");
leaveApply.setUpduser(cu.getId());
leaveApply.setUpddt(CommUtil.nowDate());
int result = this.leaveApplyService.update(leaveApply);
String resstr = "{\"res\":\"" + result + "\",\"id\":\"" + leaveApply.getId() + "\"}";
model.addAttribute("result", resstr);
return "result";
}
@RequestMapping("/view.do")
public String view(HttpServletRequest request, Model model, @RequestParam(value = "id") String id) {
model.addAttribute("leaveApply", this.leaveApplyService.selectById(id));
return "/administration/leaveApplyView";
}
@RequestMapping("/delete.do")
public String delete(HttpServletRequest request, Model model, @RequestParam(value = "id") String id) {
int result = this.leaveApplyService.deleteById(id);
model.addAttribute("result", result);
return "result";
}
@RequestMapping("/deletes.do")
public String deletes(HttpServletRequest request, Model model, @RequestParam(value = "ids") String ids) {
ids = ids.replace(",", "','");
int result = this.leaveApplyService.deleteByWhere("where id in ('" + ids + "')");
model.addAttribute("result", result);
return "result";
}
@RequestMapping("/startProcess.do")
public String startProcess(HttpServletRequest request, Model model, @ModelAttribute LeaveApply leaveApply) {
User cu = (User) request.getSession().getAttribute("cu");
if (leaveApply.getId() == null || leaveApply.getId().isEmpty()) {
leaveApply.setId(CommUtil.getUUID());
}
leaveApply.setInsuser(cu.getId());
leaveApply.setInsdt(CommUtil.nowDate());
int result = this.leaveApplyService.doStartProcess(leaveApply);
String resstr = "{\"res\":\"" + result + "\",\"id\":\"" + leaveApply.getId() + "\"}";
model.addAttribute("result", resstr);
return "result";
}
@RequestMapping("/showExecuteView.do")
public String showExecuteView(HttpServletRequest request, Model model) {
String id = request.getParameter("id");
LeaveApply leaveApply = this.leaveApplyService.selectById(id);
if (leaveApply == null) {
model.addAttribute("businessUnitRecords", JSONArray.fromObject(new ArrayList<BusinessUnitRecord>()));
model.addAttribute("finishFlag", false);
model.addAttribute("processStarted", false);
model.addAttribute("processMessage", "未找到对应的请假申请记录。");
if (request.getParameter("inModal") != null) {
return "administration/leaveApplyExecuteViewInModal";
}
return "administration/leaveApplyExecuteView";
}
request.setAttribute("business", leaveApply);
List<BusinessUnitRecord> businessUnitRecords = new ArrayList<BusinessUnitRecord>();
User launchUser = userService.getUserById(leaveApply.getInsuser());
String recordUser = leaveApply.getAuditMan();
BusinessUnitRecord businessUnitRecord = new BusinessUnitRecord(
leaveApply.getInsdt(), leaveApply.getInsuser(), leaveApply.getId(), leaveApply.getProcessid(),
leaveApply.getUnitId(), null, (recordUser == null || recordUser.trim().isEmpty() || "待签收".equals(recordUser))
? "提交了请假补假申请,等待审批人签收。"
: "提交了请假补假申请至" + recordUser + "进行审批。", launchUser, "流程发起");
businessUnitRecords.add(businessUnitRecord);
boolean processStarted = leaveApply.getProcessdefid() != null && !leaveApply.getProcessdefid().trim().isEmpty();
if (processStarted) {
List<WorkTask> workTasks = workflowProcessDefinitionService.getAllPDTask(leaveApply.getProcessdefid(), "desc");
List<String> keys = new ArrayList<String>();
for (WorkTask workTask : workTasks) {
keys.add(workTask.getTaskKey());
}
Set set = new HashSet();
set.addAll(keys);
keys = new ArrayList<String>();
keys.addAll(set);
for (String item : keys) {
if (BusinessUnit.UNIT_LEAVE_APPLY_HANDLE.equals(item)) {
List<BusinessUnitHandle> list = businessUnitHandleService.selectListByWhere("where businessid='" + id + "'");
for (BusinessUnitHandle businessUnitHandle : list) {
businessUnitRecord = new BusinessUnitRecord(businessUnitHandle);
businessUnitRecords.add(businessUnitRecord);
}
} else if (BusinessUnit.UNIT_LEAVE_APPLY_SECTION_AUDIT.equals(item)
|| BusinessUnit.UNIT_LEAVE_APPLY_MANAGER_AUDIT.equals(item)
|| BusinessUnit.UNIT_LEAVE_APPLY_GENERAL_MANAGER_AUDIT.equals(item)) {
List<BusinessUnitAudit> listAudit = businessUnitAuditService.selectListByWhere("where businessid='" + id + "'");
for (BusinessUnitAudit businessUnitAudit : listAudit) {
businessUnitRecord = new BusinessUnitRecord(businessUnitAudit);
businessUnitRecords.add(businessUnitRecord);
}
break;
}
}
}
if (leaveApply.getProcessid() != null && !leaveApply.getProcessid().trim().isEmpty()) {
List<HistoricTaskInstance> list = this.workflowService.getHistoryService().createHistoricTaskInstanceQuery()
.processInstanceId(leaveApply.getProcessid()).list();
for (HistoricTaskInstance task : list) {
if (task.getAssignee() == null || task.getClaimTime() == null) {
continue;
}
businessUnitRecord = new BusinessUnitRecord(task);
businessUnitRecords.add(businessUnitRecord);
}
}
Collections.sort(businessUnitRecords, new Comparator<BusinessUnitRecord>() {
public int compare(BusinessUnitRecord o1, BusinessUnitRecord o2) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
try {
Date dt1 = df.parse(o1.getInsdt());
Date dt2 = df.parse(o2.getInsdt());
if (dt1.getTime() > dt2.getTime()) {
return 1;
} else if (dt1.getTime() < dt2.getTime()) {
return -1;
}
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
});
model.addAttribute("businessUnitRecords", JSONArray.fromObject(businessUnitRecords));
long num = 0L;
if (leaveApply.getProcessid() != null && !leaveApply.getProcessid().trim().isEmpty()) {
num = runtimeService.createProcessInstanceQuery().processInstanceId(leaveApply.getProcessid()).count();
}
model.addAttribute("finishFlag", processStarted && num <= 0);
model.addAttribute("processStarted", processStarted);
model.addAttribute("processMessage", processStarted ? "" : "当前请假单尚未发起审批流程,仅显示单据信息。");
if (request.getParameter("inModal") != null) {
return "administration/leaveApplyExecuteViewInModal";
}
return "administration/leaveApplyExecuteView";
}
@RequestMapping("/showAudit.do")
public String showAudit(HttpServletRequest request, Model model) {
String taskId = request.getParameter("taskId");
String processInstanceId = request.getParameter("processInstanceId");
BusinessUnitAudit businessUnitAudit = new BusinessUnitAudit();
Task task = this.taskService.createTaskQuery().taskId(taskId).singleResult();
model.addAttribute("taskName", task.getName());
ProcessInstance pInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
businessUnitAudit.setId(CommUtil.getUUID());
businessUnitAudit.setProcessid(processInstanceId);
businessUnitAudit.setTaskid(taskId);
businessUnitAudit.setBusinessid(pInstance.getBusinessKey());
businessUnitAudit.setTaskdefinitionkey(task.getTaskDefinitionKey());
model.addAttribute("businessUnitAudit", businessUnitAudit);
model.addAttribute("leaveApply", this.leaveApplyService.selectById(pInstance.getBusinessKey()));
List<ActivityImpl> activityImpls = workflowProcessDefinitionService.getNEXTActivities(task.getProcessDefinitionId(), task.getTaskDefinitionKey());
model.addAttribute("showTargetUsersFlag", activityImpls.size() > 0);
return "administration/leaveApplyAudit";
}
@RequestMapping("/doAudit.do")
public String doAudit(HttpServletRequest request, Model model, @ModelAttribute BusinessUnitAudit businessUnitAudit) {
User cu = (User) request.getSession().getAttribute("cu");
businessUnitAudit.setInsuser(cu.getId());
businessUnitAudit.setInsdt(CommUtil.nowDate());
if (businessUnitAudit.getPassstatus() && (businessUnitAudit.getTargetusers() == null || businessUnitAudit.getTargetusers().trim().isEmpty())) {
LeaveApply leaveApply = this.leaveApplyService.selectById(businessUnitAudit.getBusinessid());
businessUnitAudit.setTargetusers(this.leaveApplyService.getDefaultCandidateUserIdsForNextTask(
leaveApply, businessUnitAudit.getTaskdefinitionkey(), businessUnitAudit.getRouteNum(), true));
}
int result = this.leaveApplyService.doAuditProcess(businessUnitAudit);
String resstr = "{\"res\":\"" + result + "\",\"id\":\"" + businessUnitAudit.getId() + "\"}";
model.addAttribute("result", resstr);
return "result";
}
@RequestMapping("/showHandle.do")
public String showHandle(HttpServletRequest request, Model model) {
String taskId = request.getParameter("taskId");
String processInstanceId = request.getParameter("processInstanceId");
String unitId = request.getParameter("unitId");
BusinessUnitHandle businessUnitHandle = new BusinessUnitHandle();
Task task = this.taskService.createTaskQuery().taskId(taskId).singleResult();
model.addAttribute("taskName", task.getName());
List<BusinessUnitHandle> businessUnitHandles = this.businessUnitHandleService.selectListByWhere("where processid='" + processInstanceId + "' and taskId='" + taskId + "'");
if (businessUnitHandles != null && businessUnitHandles.size() > 0) {
businessUnitHandle = businessUnitHandles.get(0);
businessUnitHandle.setTaskid(taskId);
} else {
businessUnitHandle.setId(CommUtil.getUUID());
businessUnitHandle.setProcessid(processInstanceId);
businessUnitHandle.setTaskid(taskId);
ProcessInstance pInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
businessUnitHandle.setBusinessid(pInstance.getBusinessKey());
businessUnitHandle.setTaskdefinitionkey(task.getTaskDefinitionKey());
businessUnitHandle.setUnitid(unitId);
}
String userIds = businessUnitHandle.getTargetusers();
if (userIds != null && !userIds.isEmpty()) {
List<User> users = userService.selectListByWhere("where id in('" + userIds.replace(",", "','") + "')");
String targetUsersName = "";
for (User user : users) {
if (!targetUsersName.isEmpty()) {
targetUsersName += ",";
}
targetUsersName += user.getCaption();
}
model.addAttribute("targetUsersName", targetUsersName);
}
model.addAttribute("businessUnitHandle", businessUnitHandle);
LeaveApply leaveApply = this.leaveApplyService.selectById(businessUnitHandle.getBusinessid());
model.addAttribute("leaveApply", leaveApply);
List<BusinessUnitAudit> businessUnitAudits = this.businessUnitAuditService.selectListByWhere("where businessId = '" + leaveApply.getId() + "' order by insdt desc");
String rejectReason = "";
if (businessUnitAudits != null && businessUnitAudits.size() > 0) {
rejectReason = businessUnitAudits.get(0).getAuditopinion();
}
model.addAttribute("rejectReason", rejectReason);
ActivityImpl activityImpl = workflowProcessDefinitionService.getNEXTActivityImpl(task.getProcessDefinitionId(), task.getTaskDefinitionKey(), CommString.ACTI_Condition_PASS);
model.addAttribute("showTargetUsersFlag", activityImpl != null && "userTask".equals(activityImpl.getProperties().get("type")));
return "administration/leaveApplyHandle";
}
@RequestMapping("/doHandle.do")
public String doHandle(HttpServletRequest request, Model model,
@ModelAttribute LeaveApply leaveApply,
@ModelAttribute BusinessUnitHandle businessUnitHandle) {
User cu = (User) request.getSession().getAttribute("cu");
int result = 0;
leaveApply.setUpduser(cu.getId());
leaveApply.setUpddt(CommUtil.nowDate());
leaveApply.setState(LeaveCommStr.STATE_SECTION_AUDIT);
result = this.leaveApplyService.update(leaveApply);
if (result > 0) {
String routeNum = request.getParameter("routeNum");
businessUnitHandle.setStatus(BusinessUnitHandle.Status_FINISH);
if (!this.businessUnitHandleService.checkExit(businessUnitHandle)) {
businessUnitHandle.setInsuser(cu.getId());
businessUnitHandle.setInsdt(CommUtil.nowDate());
result = this.businessUnitHandleService.save(businessUnitHandle);
} else {
result = this.businessUnitHandleService.update(businessUnitHandle);
}
try {
Map<String, Object> variables = new HashMap<String, Object>();
variables = ActivitiUtil.fixVariableWithRoute(variables, true, routeNum);
if (businessUnitHandle.getTargetusers() == null || businessUnitHandle.getTargetusers().trim().isEmpty()) {
businessUnitHandle.setTargetusers(this.leaveApplyService.getDefaultCandidateUserIds(
leaveApply, BusinessUnit.UNIT_LEAVE_APPLY_SECTION_AUDIT));
}
variables.put(CommString.ACTI_KEK_Candidate_Users, businessUnitHandle.getTargetusers());
variables.put(CommString.ACTI_KEK_Assignee, null);
taskService.complete(businessUnitHandle.getTaskid(), variables);
} catch (Exception e) {
e.printStackTrace();
result = 0;
}
}
String resstr = "{\"res\":\"" + result + "\",\"id\":\"" + leaveApply.getId() + "\"}";
model.addAttribute("result", resstr);
return "result";
}
@RequestMapping("/getList4Mobile.do")
public Result getList4Mobile(HttpServletRequest request, Model model) {
String wherestr = "where 1=1 order by insdt desc";
List<LeaveApply> list = this.leaveApplyService.selectListByWhere(wherestr);
JSONArray json = JSONArray.fromObject(list);
String res = "{\"total\":" + list.size() + ",\"rows\":" + json + "}";
return Result.success(res);
}
}

View File

@ -369,7 +369,9 @@ public class AlarmPointController {
this.mPointService.updateLalarmmin(alarmPoint.getUnitId(), mPoint.getMpointcode()); this.mPointService.updateLalarmmin(alarmPoint.getUnitId(), mPoint.getMpointcode());
// mPoint.setLalarmmin(null); // mPoint.setLalarmmin(null);
} }
// this.mPointService.update2(alarmPoint.getUnitId(),mPoint); // Enable TriggerAlarm to allow ScadaAlarmJob to process this MPoint
mPoint.setTriggeralarm("1");
this.mPointService.update2(alarmPoint.getUnitId(), mPoint);
} }
if (code == Result.SUCCESS) { if (code == Result.SUCCESS) {

View File

@ -197,16 +197,15 @@ public class ProAlarmController {
// Iterator<String> sIterator = jsonObject.keys(); // Iterator<String> sIterator = jsonObject.keys();
JSONArray arr = new JSONArray(); JSONArray arr = new JSONArray();
List<XServer> allxServerList = this.xServerService.selectListByWhere(" where 1=1 "); // List<XServer> allxServerList = this.xServerService.selectListByWhere(" where 1=1 ");
for (XServer xServer : // for (XServer xServer : allxServerList) {
allxServerList) {
// if (jsonObject.get(xServer.getBizid()) != null) { // if (jsonObject.get(xServer.getBizid()) != null) {
// String code_value = jsonObject.get(xServer.getBizid()).toString(); // String code_value = jsonObject.get(xServer.getBizid()).toString();
// code_value = code_value + ",data_stop_alarm"; // code_value = code_value + ",data_stop_alarm";
// code_value = code_value.replace(",", "','"); // code_value = code_value.replace(",", "','");
// List<ProAlarm> list = this.proAlarmService.selectListByWhere(xServer.getBizid(), wherestr + " and point_code in ('" + code_value + "')" // List<ProAlarm> list = this.proAlarmService.selectListByWhere(xServer.getBizid(), wherestr + " and point_code in ('" + code_value + "')"
// + orderstr); // + orderstr);
List<ProAlarm> list = this.proAlarmService.selectListByWhere(xServer.getBizid(), wherestr + orderstr); List<ProAlarm> list = this.proAlarmService.selectListByWhere(companyId, wherestr + orderstr);
// System.out.println(wherestr + " and point_code in ('" + code_value + "')"); // System.out.println(wherestr + " and point_code in ('" + code_value + "')");
if (list != null && list.size() > 0) { if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) { for (int i = 0; i < list.size(); i++) {
@ -249,7 +248,7 @@ public class ProAlarmController {
} }
// } // }
} // }
model.addAttribute("result", arr); model.addAttribute("result", arr);
return new ModelAndView("result"); return new ModelAndView("result");
} }

View File

@ -22,13 +22,13 @@ import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import sun.misc.BASE64Decoder;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.io.File; import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.util.Base64;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@ -92,15 +92,9 @@ public class BaiDuAipSpeechController {
String type = request.getParameter("type"); String type = request.getParameter("type");
String upfile_b64 = request.getParameter("upfile_b64"); String upfile_b64 = request.getParameter("upfile_b64");
BASE64Decoder decoder = new BASE64Decoder();
try { try {
//Base64解码 //Base64解码
byte[] b = decoder.decodeBuffer(upfile_b64); byte[] b = Base64.getMimeDecoder().decode(upfile_b64);
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {//调整异常数据
b[i] += 256;
}
}
String imgFilePath = "D:\\audio\\recorder.mp3"; String imgFilePath = "D:\\audio\\recorder.mp3";
File fileUploadPath = new File("D:\\audio"); File fileUploadPath = new File("D:\\audio");
if (!fileUploadPath.exists()) { if (!fileUploadPath.exists()) {
@ -129,15 +123,9 @@ public class BaiDuAipSpeechController {
String type = request.getParameter("type"); String type = request.getParameter("type");
String upfile_b64 = request.getParameter("upfile_b64"); String upfile_b64 = request.getParameter("upfile_b64");
BASE64Decoder decoder = new BASE64Decoder();
try { try {
//Base64解码 //Base64解码
byte[] b = decoder.decodeBuffer(upfile_b64); byte[] b = Base64.getMimeDecoder().decode(upfile_b64);
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {//调整异常数据
b[i] += 256;
}
}
String imgFilePath = "D:\\audio\\recorder.mp3"; String imgFilePath = "D:\\audio\\recorder.mp3";
File fileUploadPath = new File("D:\\audio"); File fileUploadPath = new File("D:\\audio");
if (!fileUploadPath.exists()) { if (!fileUploadPath.exists()) {

View File

@ -2217,12 +2217,27 @@ public class EquipmentCardController {
HttpServletResponse response, Model model) throws IOException { HttpServletResponse response, Model model) throws IOException {
String wherestr = " where 1=1 "; String wherestr = " where 1=1 ";
String unitId = request.getParameter("unitId"); String unitId = request.getParameter("unitId");
if (unitId == null || unitId.isEmpty()) {
unitId = request.getParameter("companyId");
}
String search_name = request.getParameter("search_name"); String search_name = request.getParameter("search_name");
if (search_name == null || search_name.trim().isEmpty()) {
search_name = request.getParameter("equipmentName");
}
String processSectionId = request.getParameter("processSectionId"); String processSectionId = request.getParameter("processSectionId");
if (processSectionId == null || processSectionId.trim().isEmpty() || "undefined".equals(processSectionId)) {
processSectionId = request.getParameter("processSection");
}
String equipmentClassId = request.getParameter("equipmentClassId"); String equipmentClassId = request.getParameter("equipmentClassId");
if (equipmentClassId == null || equipmentClassId.trim().isEmpty() || "undefined".equals(equipmentClassId)) {
equipmentClassId = request.getParameter("search_pid1");
}
String equipmentLevel = request.getParameter("equipmentLevel"); String equipmentLevel = request.getParameter("equipmentLevel");
String equipmentClassCode = request.getParameter("equipmentClassCode");//类似竹一的计量表 该页面仅显示一种设备类型的 String equipmentClassCode = request.getParameter("equipmentClassCode");//类似竹一的计量表 该页面仅显示一种设备类型的
String ids = request.getParameter("ids");//页面勾选的设备id String ids = request.getParameter("ids");//页面勾选的设备id
if (ids == null || ids.trim().isEmpty()) {
ids = request.getParameter("equipmentIds");
}
if (unitId != null && !unitId.isEmpty()) { if (unitId != null && !unitId.isEmpty()) {
//获取公司下所有子节点 //获取公司下所有子节点
@ -2272,6 +2287,26 @@ public class EquipmentCardController {
// System.out.println(wherestr); // System.out.println(wherestr);
if (ids != null && !ids.trim().isEmpty()) {
// 兼容前端可能携带的首尾逗号与空白,确保仅导出选中设备。
String[] idArr = ids.split(",");
StringBuilder selectedIds = new StringBuilder();
for (String id : idArr) {
if (id != null) {
String trimmedId = id.trim();
if (!trimmedId.isEmpty()) {
if (selectedIds.length() > 0) {
selectedIds.append("','");
}
selectedIds.append(trimmedId);
}
}
}
if (selectedIds.length() > 0) {
wherestr += " and id in ('" + selectedIds + "') ";
}
}
List<EquipmentCard> equipmentCards = this.equipmentCardService.selectListByWhere(wherestr); List<EquipmentCard> equipmentCards = this.equipmentCardService.selectListByWhere(wherestr);
//导出文件到指定目录,兼容Linux //导出文件到指定目录,兼容Linux
this.equipmentCardService.downloadEquipmentExcel(response, equipmentCards); this.equipmentCardService.downloadEquipmentExcel(response, equipmentCards);

View File

@ -37,6 +37,7 @@ import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.impl.pvm.process.ActivityImpl; import org.activiti.engine.impl.pvm.process.ActivityImpl;
import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task; import org.activiti.engine.task.Task;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model; import org.springframework.ui.Model;
@ -356,7 +357,7 @@ public class MaintenancePlanController {
model.addAttribute("nowDate", CommUtil.nowDate()); model.addAttribute("nowDate", CommUtil.nowDate());
String maintenancePlanId = pInstance.getBusinessKey(); String maintenancePlanId = pInstance.getBusinessKey();
List<BusinessUnitAudit> list = this.businessUnitAuditService.selectListByWhere("where businessId = '" + maintenancePlanId + "' order by insdt desc "); List<BusinessUnitAudit> list = this.businessUnitAuditService.selectListByWhere("where businessId = '" + maintenancePlanId + "' order by insdt desc ");
if (list != null && list.size() > 0) { if (CollectionUtils.isNotEmpty(list)){
model.addAttribute("businessUnitAudit", list.get(0)); model.addAttribute("businessUnitAudit", list.get(0));
} }
MaintenancePlan maintenancePlan = this.maintenancePlanService.selectById(maintenancePlanId); MaintenancePlan maintenancePlan = this.maintenancePlanService.selectById(maintenancePlanId);

View File

@ -104,7 +104,7 @@ public class KpiPlanController {
if (StringUtils.isNotBlank(positonTypeList)) { if (StringUtils.isNotBlank(positonTypeList)) {
wherestr += " and j.level_type = " + positonTypeList; wherestr += " and j.level_type = " + positonTypeList;
} }
wherestr += "and p.create_user_id ='" + id + "'"; wherestr += " and p.create_user_id ='" + id + "'";
PageHelper.startPage(page, rows); PageHelper.startPage(page, rows);
List<KpiPlan> list = kpiPlanService.selectListByWhere(wherestr + orderstr); List<KpiPlan> list = kpiPlanService.selectListByWhere(wherestr + orderstr);
@ -387,7 +387,8 @@ public class KpiPlanController {
@RequestMapping("/export.do") @RequestMapping("/export.do")
public void export(HttpServletRequest request, HttpServletResponse response, public void export(HttpServletRequest request, HttpServletResponse response,
@RequestParam(value = "periodTypeName", required = false) String periodTypeList, @RequestParam(value = "periodTypeName", required = false) String periodTypeList,
@RequestParam(value = "positionType", required = false) String positonTypeList) throws IOException { @RequestParam(value = "positionType", required = false) String positonTypeList,
@RequestParam(value = "ids", required = false) String ids) throws IOException {
// 摘自列表查询接口 start // 摘自列表查询接口 start
User cu = (User) request.getSession().getAttribute("cu"); User cu = (User) request.getSession().getAttribute("cu");
String id = cu.getId(); String id = cu.getId();
@ -399,6 +400,10 @@ public class KpiPlanController {
if (StringUtils.isNotBlank(positonTypeList) && !"null".equals(positonTypeList)) { if (StringUtils.isNotBlank(positonTypeList) && !"null".equals(positonTypeList)) {
wherestr += " and j.level_type = " + positonTypeList; wherestr += " and j.level_type = " + positonTypeList;
} }
if (StringUtils.isNotBlank(ids)) {
String idstr = ids.replace("'", "").replace(",", "','");
wherestr += " and p.id in ('" + idstr + "')";
}
wherestr += "and p.create_user_id ='" + id + "'"; wherestr += "and p.create_user_id ='" + id + "'";
List<KpiPlan> list = kpiPlanService.selectListByWhere(wherestr + orderstr); List<KpiPlan> list = kpiPlanService.selectListByWhere(wherestr + orderstr);

View File

@ -279,10 +279,8 @@ public class EquipmentPlanController {
if (company != null) { if (company != null) {
model.addAttribute("companyName", company.getSname()); model.addAttribute("companyName", company.getSname());
} }
User user = userService.getUserById(equipmentPlan.getAuditId()); String userNames = userService.getUserNamesByUserIds(equipmentPlan.getAuditId());
if (user != null) { model.addAttribute("userName", userNames);
model.addAttribute("userName", user.getCaption());
}
EquipmentPlanType equipmentPlanType_big = equipmentPlanTypeService.selectById(equipmentPlan.getPlanTypeBig()); EquipmentPlanType equipmentPlanType_big = equipmentPlanTypeService.selectById(equipmentPlan.getPlanTypeBig());
if (equipmentPlanType_big != null) { if (equipmentPlanType_big != null) {
model.addAttribute("planTypeBigName", equipmentPlanType_big.getName()); model.addAttribute("planTypeBigName", equipmentPlanType_big.getName());
@ -308,10 +306,8 @@ public class EquipmentPlanController {
if (company != null) { if (company != null) {
model.addAttribute("companyName", company.getSname()); model.addAttribute("companyName", company.getSname());
} }
User user = userService.getUserById(equipmentPlan.getAuditId()); String userNames = userService.getUserNamesByUserIds(equipmentPlan.getAuditId());
if (user != null) { model.addAttribute("userName", userNames);
model.addAttribute("userName", user.getCaption());
}
EquipmentPlanType equipmentPlanType_big = equipmentPlanTypeService.selectById(equipmentPlan.getPlanTypeBig()); EquipmentPlanType equipmentPlanType_big = equipmentPlanTypeService.selectById(equipmentPlan.getPlanTypeBig());
if (equipmentPlanType_big != null) { if (equipmentPlanType_big != null) {
model.addAttribute("planTypeBigName", equipmentPlanType_big.getName()); model.addAttribute("planTypeBigName", equipmentPlanType_big.getName());
@ -422,10 +418,8 @@ public class EquipmentPlanController {
if (company != null) { if (company != null) {
model.addAttribute("companyName", company.getSname()); model.addAttribute("companyName", company.getSname());
} }
User user = userService.getUserById(equipmentPlan.getAuditId()); String userNames = userService.getUserNamesByUserIds(equipmentPlan.getAuditId());
if (user != null) { model.addAttribute("userName", userNames);
model.addAttribute("userName", user.getCaption());
}
EquipmentPlanType equipmentPlanType_big = equipmentPlanTypeService.selectById(equipmentPlan.getPlanTypeBig()); EquipmentPlanType equipmentPlanType_big = equipmentPlanTypeService.selectById(equipmentPlan.getPlanTypeBig());
if (equipmentPlanType_big != null) { if (equipmentPlanType_big != null) {
model.addAttribute("planTypeBigName", equipmentPlanType_big.getName()); model.addAttribute("planTypeBigName", equipmentPlanType_big.getName());

View File

@ -123,7 +123,9 @@ public class PipelineDataController {
@RequestMapping("/deletes.do") @RequestMapping("/deletes.do")
public String dodeletes(HttpServletRequest request, Model model, public String dodeletes(HttpServletRequest request, Model model,
@RequestParam(value = "ids") String ids) { @RequestParam(value = "ids") String ids) {
int result = this.pipelineDataService.deleteByWhere("where id in (" + ids + ")"); // 移除末尾逗号防止SQL语法错误
String cleanIds = ids.replaceAll("[,\\s]+$", "").replaceAll("^[,\\s]+", "");
int result = this.pipelineDataService.deleteByWhere("where id in (" + cleanIds + ")");
model.addAttribute("result", result); model.addAttribute("result", result);
return "result"; return "result";
} }

View File

@ -374,6 +374,16 @@ public class RptCreateController {
@RequestMapping("/doadd.do") @RequestMapping("/doadd.do")
public String doadd(HttpServletRequest request, Model model) { public String doadd(HttpServletRequest request, Model model) {
User cu = (User) request.getSession().getAttribute("cu"); User cu = (User) request.getSession().getAttribute("cu");
String rptsetId = request.getParameter("rptsetId");
// 权限验证:检查用户是否有报表生成权限
if (rptsetId != null && !rptsetId.isEmpty()) {
if (!this.rptCreateService.checkGeneratePermission(rptsetId, cu)) {
model.addAttribute("result", "{\"res\":\"您没有该报表的生成权限\",\"msg\":\"您没有该报表的生成权限\"}");
return "result";
}
}
request.setAttribute("userId", cu.getId()); request.setAttribute("userId", cu.getId());
request.setAttribute("userName", cu.getCaption()); request.setAttribute("userName", cu.getCaption());
request.setAttribute("id", CommUtil.getUUID()); request.setAttribute("id", CommUtil.getUUID());
@ -432,6 +442,14 @@ public class RptCreateController {
String rptsetId = request.getParameter("rptsetId"); String rptsetId = request.getParameter("rptsetId");
int result = 0; int result = 0;
// 权限验证:检查用户是否有报表生成权限
if (rptCreate.getRptsetId() != null && !rptCreate.getRptsetId().isEmpty()) {
if (!this.rptCreateService.checkGeneratePermission(rptCreate.getRptsetId(), cu)) {
model.addAttribute("result", "{\"res\":\"您没有该报表的生成权限\",\"msg\":\"您没有该报表的生成权限\"}");
return new ModelAndView("result");
}
}
RptInfoSet rptInfoSet = rptInfoSetService.selectById(rptCreate.getRptsetId()); RptInfoSet rptInfoSet = rptInfoSetService.selectById(rptCreate.getRptsetId());
if (rptInfoSet != null) { if (rptInfoSet != null) {
//日报 //日报
@ -545,6 +563,15 @@ public class RptCreateController {
User cu = (User) request.getSession().getAttribute("cu"); User cu = (User) request.getSession().getAttribute("cu");
String rptsetId = request.getParameter("rptsetId"); String rptsetId = request.getParameter("rptsetId");
int result = 0; int result = 0;
// 权限验证:检查用户是否有报表生成权限
if (rptCreate.getRptsetId() != null && !rptCreate.getRptsetId().isEmpty()) {
if (!this.rptCreateService.checkGeneratePermission(rptCreate.getRptsetId(), cu)) {
model.addAttribute("result", "{\"res\":\"您没有该报表的生成权限\",\"msg\":\"您没有该报表的生成权限\"}");
return new ModelAndView("result");
}
}
RptInfoSet rptInfoSet = rptInfoSetService.selectById(rptCreate.getRptsetId()); RptInfoSet rptInfoSet = rptInfoSetService.selectById(rptCreate.getRptsetId());
if (rptInfoSet != null) { if (rptInfoSet != null) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
@ -750,13 +777,26 @@ public class RptCreateController {
@RequestMapping("/getSheet.do") @RequestMapping("/getSheet.do")
public String getSheet(HttpServletRequest request, Model model, public String getSheet(HttpServletRequest request, Model model,
@RequestParam(value = "id") String id) { @RequestParam(value = "id") String id) {
String path = "";
String name = "";
Result_Report result1 = new Result_Report(); Result_Report result1 = new Result_Report();
RptCreate rptCreate = this.rptCreateService.selectById(id); RptCreate rptCreate = this.rptCreateService.selectById(id);
if (rptCreate != null) {//报表生成中的预览 if (rptCreate != null) {//报表生成中的预览
// 优先使用数据库中存储的文件路径,如果没有则构造路径(兼容旧数据)
if (rptCreate.getAbspath() != null && !rptCreate.getAbspath().isEmpty()) {
path = rptCreate.getAbspath();
} else {
path = rptCreate.getRptname() + rptCreate.getId() + ".xls";
}
// 获取文件扩展名
String extension = ".xls";
if (path.toLowerCase().endsWith(".xlsx")) {
extension = ".xlsx";
}
String sourcePath = rptCreate.getRptname() + extension;
List<RptInfoSetSheet> list = rptInfoSetSheetService.selectListByWhere("where rptInfoSet_id = '" + rptCreate.getRptsetId() + "'"); List<RptInfoSetSheet> list = rptInfoSetSheetService.selectListByWhere("where rptInfoSet_id = '" + rptCreate.getRptsetId() + "'");
try { try {
String sourcePath = rptCreate.getRptname(); byte[] isb = commonFileService.getInputStreamBytes(FileNameSpaceEnum.RptCreateFile.getNameSpace(), path);
byte[] isb = commonFileService.getInputStreamBytes(FileNameSpaceEnum.RptCreateFile.getNameSpace(), CommUtil.fixRptCreateFileName(rptCreate.getRptname() + rptCreate.getId()));
if (isb == null || isb.length == 0) { if (isb == null || isb.length == 0) {
result1 = Result_Report.failed("文件不存在或已被删除"); result1 = Result_Report.failed("文件不存在或已被删除");
model.addAttribute("result", CommUtil.toJson(result1)); model.addAttribute("result", CommUtil.toJson(result1));
@ -774,7 +814,7 @@ public class RptCreateController {
List<RptInfoSetSheet> list = rptInfoSetSheetService.selectListByWhere("where rptInfoSet_id = '" + rptInfoSetFile.getMasterid() + "'"); List<RptInfoSetSheet> list = rptInfoSetSheetService.selectListByWhere("where rptInfoSet_id = '" + rptInfoSetFile.getMasterid() + "'");
try { try {
String sourcePath = ""; String sourcePath = "";
String path = rptInfoSetFile.getAbspath(); path = rptInfoSetFile.getAbspath();
// path = path.replaceAll("\\.xlsx", "").replaceAll("\\.xls", ""); // path = path.replaceAll("\\.xlsx", "").replaceAll("\\.xls", "");
// byte[] isb = commonFileService.getInputStreamBytes(FileNameSpaceEnum.RptInfoSetFile.getNameSpace(), CommUtil.fixRptCreateFileName(path)); // byte[] isb = commonFileService.getInputStreamBytes(FileNameSpaceEnum.RptInfoSetFile.getNameSpace(), CommUtil.fixRptCreateFileName(path));
byte[] isb = commonFileService.getInputStreamBytes(FileNameSpaceEnum.RptInfoSetFile.getNameSpace(), path); byte[] isb = commonFileService.getInputStreamBytes(FileNameSpaceEnum.RptInfoSetFile.getNameSpace(), path);
@ -850,8 +890,18 @@ public class RptCreateController {
String name = ""; String name = "";
RptCreate rptCreate = this.rptCreateService.selectById(id); RptCreate rptCreate = this.rptCreateService.selectById(id);
if (rptCreate != null) { if (rptCreate != null) {
// 优先使用数据库中存储的文件路径,如果没有则构造路径(兼容旧数据)
if (rptCreate.getAbspath() != null && !rptCreate.getAbspath().isEmpty()) {
path = rptCreate.getAbspath();
} else {
path = rptCreate.getRptname() + rptCreate.getId() + ".xls"; path = rptCreate.getRptname() + rptCreate.getId() + ".xls";
name = rptCreate.getRptname() + ".xls"; }
// 获取文件扩展名
String extension = ".xls";
if (path.toLowerCase().endsWith(".xlsx")) {
extension = ".xlsx";
}
name = rptCreate.getRptname() + extension;
} }
byte[] bytes = commonFileService.getInputStreamBytes(FileNameSpaceEnum.RptCreateFile.getNameSpace(), path); byte[] bytes = commonFileService.getInputStreamBytes(FileNameSpaceEnum.RptCreateFile.getNameSpace(), path);
if (bytes == null || bytes.length == 0) { if (bytes == null || bytes.length == 0) {

View File

@ -123,6 +123,13 @@ public class RptDayLogController {
User cu = (User) request.getSession().getAttribute("cu"); User cu = (User) request.getSession().getAttribute("cu");
String userId = cu.getId(); String userId = cu.getId();
// 权限验证:检查用户是否有填报权限
// if (!this.rptDayLogService.checkInputPermission(rptdeptId, cu)) {
// Result result = Result.failed("您没有该报表的填报权限");
// model.addAttribute("result", CommUtil.toJson(result));
// return "result";
// }
JSONObject jsonObject = this.rptDayLogService.getJson(null,rptdeptId,rptdt,userId); JSONObject jsonObject = this.rptDayLogService.getJson(null,rptdeptId,rptdt,userId);
Result result = Result.success(jsonObject); Result result = Result.success(jsonObject);
@ -149,6 +156,14 @@ public class RptDayLogController {
@RequestParam(value = "rptdeptId") String rptdeptId) throws IOException { @RequestParam(value = "rptdeptId") String rptdeptId) throws IOException {
User cu = (User) request.getSession().getAttribute("cu"); User cu = (User) request.getSession().getAttribute("cu");
String userId = cu.getId(); String userId = cu.getId();
// 权限验证:检查用户是否有填报权限
if (!this.rptDayLogService.checkInputPermission(rptdeptId, cu)) {
Result result = Result.failed("您没有该报表的填报权限");
model.addAttribute("result", CommUtil.toJson(result));
return "result";
}
JSONObject jsonObject = this.rptDayLogService.getJson(id,rptdeptId,null,userId); JSONObject jsonObject = this.rptDayLogService.getJson(id,rptdeptId,null,userId);
model.addAttribute("rptDayLog", jsonObject); model.addAttribute("rptDayLog", jsonObject);
// return "/report/reportdetail"; // return "/report/reportdetail";
@ -191,11 +206,19 @@ public class RptDayLogController {
} }
@RequestMapping("/dosave.do") @RequestMapping("/dosave.do")
public String dosave(HttpServletRequest request,Model model){ public ModelAndView dosave(HttpServletRequest request,Model model){
User cu = (User) request.getSession().getAttribute("cu"); User cu = (User) request.getSession().getAttribute("cu");
String userId = cu.getId(); String userId = cu.getId();
String json = request.getParameter("json"); String json = request.getParameter("json");
JSONObject jsonObject = JSONObject.fromObject(json); JSONObject jsonObject = JSONObject.fromObject(json);
// 权限验证:检查用户是否有填报权限
String rptdeptId = (String) jsonObject.get("rptdeptId");
if (!this.rptDayLogService.checkInputPermission(rptdeptId, cu)) {
model.addAttribute("result", "{\"res\":\"您没有该报表的填报权限\",\"msg\":\"您没有该报表的填报权限\"}");
return new ModelAndView("result");
}
if (jsonObject.get("id")==null||jsonObject.get("id").equals("")) { if (jsonObject.get("id")==null||jsonObject.get("id").equals("")) {
jsonObject.put("id", CommUtil.getUUID()); jsonObject.put("id", CommUtil.getUUID());
} }
@ -206,12 +229,12 @@ public class RptDayLogController {
e.printStackTrace(); e.printStackTrace();
Result result = Result.failed("插入失败"); Result result = Result.failed("插入失败");
model.addAttribute("result", CommUtil.toJson(result)); model.addAttribute("result", CommUtil.toJson(result));
return "result"; return new ModelAndView("result");
} }
Result result = Result.success(null); Result result = Result.success(null);
model.addAttribute("result", CommUtil.toJson(result)); model.addAttribute("result", CommUtil.toJson(result));
return "result"; return new ModelAndView("result");
} }
@RequestMapping("/onekeyAudit.do")//一键审核 @RequestMapping("/onekeyAudit.do")//一键审核
@ -228,6 +251,29 @@ public class RptDayLogController {
@RequestMapping("/dodeletes.do") @RequestMapping("/dodeletes.do")
public String dodels(HttpServletRequest request,Model model, public String dodels(HttpServletRequest request,Model model,
@RequestParam(value="ids") String ids){ @RequestParam(value="ids") String ids){
// User cu = (User) request.getSession().getAttribute("cu");
// String userId = cu.getId();
// 获取rptdeptId假设从参数或第一个ID推断
// String rptdeptId = request.getParameter("rptdeptId");
// if (rptdeptId == null || rptdeptId.isEmpty()) {
// // 如果没有提供rptdeptId从第一个ID获取
// String[] idArray = ids.split(",");
// if (idArray.length > 0) {
// RptDayLog rptDayLog = this.rptDayLogService.selectById(idArray[0]);
// if (rptDayLog != null) {
// rptdeptId = rptDayLog.getRptdeptId();
// }
// }
// }
// 权限验证:检查用户是否有生成权限
// if (!this.rptDayLogService.checkGeneratePermission(rptdeptId, cu)) {
// Result result = Result.failed("您没有该报表的删除权限,无法删除");// 生成权限=删除权限
// model.addAttribute("result", CommUtil.toJson(result));
// return "result";
// }
String[] idArray = ids.split(","); String[] idArray = ids.split(",");
try { try {
for (int i = 0; i < idArray.length; i++) { for (int i = 0; i < idArray.length; i++) {
@ -268,6 +314,14 @@ public class RptDayLogController {
@RequestParam(value = "rptdeptId", required=false) String rptdeptId) { @RequestParam(value = "rptdeptId", required=false) String rptdeptId) {
User cu = (User) request.getSession().getAttribute("cu"); User cu = (User) request.getSession().getAttribute("cu");
String userId = cu.getId(); String userId = cu.getId();
// 权限验证:检查用户是否有填报权限
if (!this.rptDayLogService.checkInputPermission(rptdeptId, cu)) {
Result result = Result.failed("您没有该报表的填报权限");
model.addAttribute("result", CommUtil.toJson(result));
return "result";
}
MultipartRequest multipartRequest = (MultipartRequest)request; MultipartRequest multipartRequest = (MultipartRequest)request;
List<MultipartFile> fileList = multipartRequest.getFiles("filelist"); List<MultipartFile> fileList = multipartRequest.getFiles("filelist");

View File

@ -222,18 +222,50 @@ public class SafetyCertificateController {
@RequestMapping("/deletes.do") @RequestMapping("/deletes.do")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public String delete(HttpServletRequest request, Model model, String[] ids) throws IOException { public String delete(HttpServletRequest request, Model model,
@RequestParam(value = "ids", required = false) String ids,
@RequestParam(value = "staffIds", required = false) String staffIds) throws IOException {
int result = 0; int result = 0;
for (String id : ids) {
// 兼容:支持 ids/staffIds 传 CSV也支持重复参数数组
Set<String> idSet = new LinkedHashSet<>(parseRequestIds(request, "ids", ids));
idSet.addAll(parseRequestIds(request, "staffIds", staffIds));
for (String id : idSet) {
result += service.deleteById(id); result += service.deleteById(id);
}
for (String id : ids) {
safetyFilesService.deleteByBizId(id); safetyFilesService.deleteByBizId(id);
} }
model.addAttribute("result", result); model.addAttribute("result", result);
return "result"; return "result";
} }
private List<String> parseRequestIds(HttpServletRequest request, String paramName, String rawIds) {
List<String> result = new ArrayList<>(parseIdTokens(rawIds));
String[] values = request.getParameterValues(paramName);
if (values != null) {
for (String value : values) {
result.addAll(parseIdTokens(value));
}
}
return result;
}
private List<String> parseIdTokens(String rawIds) {
List<String> result = new ArrayList<>();
if (org.apache.commons.lang3.StringUtils.isBlank(rawIds) || "null".equals(rawIds)) {
return result;
}
String[] split = rawIds.split(",");
for (String id : split) {
String value = org.apache.commons.lang3.StringUtils.trim(id);
if (org.apache.commons.lang3.StringUtils.isNotBlank(value) && value.matches("^[0-9A-Za-z_-]+$")) {
result.add(value);
}
}
return result;
}
/** /**
* 跳转导入页面 * 跳转导入页面
* *

View File

@ -181,8 +181,8 @@ public class SafetyCheckComprehensiveController {
SafetyCheckStatusEnum.RESPONSE.getTaskTitle(), SafetyCheckStatusEnum.RESPONSE.getTaskTitle(),
bean.getDutyUserId(), // 当前节点审批人 bean.getDutyUserId(), // 当前节点审批人
bean.getDutyUserName(), // 当前节点审批人 bean.getDutyUserName(), // 当前节点审批人
null, // 抄送人 bean.getCopyUserId(), // 抄送人
null,// 抄送人 bean.getCopyUserName(),// 抄送人
null); null);
} }
return Result.success(); return Result.success();
@ -377,10 +377,9 @@ public class SafetyCheckComprehensiveController {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Result response(HttpServletRequest request, SafetyCheckComprehensive bean, String processInstanceId, int pass) throws IOException, ServiceException { public Result response(HttpServletRequest request, SafetyCheckComprehensive bean, String processInstanceId, int pass) throws IOException, ServiceException {
safetyCheckActivityService.audit(bean.getConfirmUserId(), processInstanceId, pass);
//通过 //通过
if (pass == 1) { if (pass == 1) {
safetyCheckActivityService.audit(bean.getConfirmUserId(), processInstanceId, pass);
bean.setStatus(SafetyCheckStatusEnum.COMPLETE.getId()); bean.setStatus(SafetyCheckStatusEnum.COMPLETE.getId());
service.update(bean); service.update(bean);
@ -403,6 +402,7 @@ public class SafetyCheckComprehensiveController {
} }
//不通过 //不通过
else { else {
safetyCheckActivityService.audit(bean.getDutyUserId(), processInstanceId, pass);
bean.setStatus(SafetyCheckStatusEnum.APPLY.getId()); bean.setStatus(SafetyCheckStatusEnum.APPLY.getId());
service.update(bean); service.update(bean);
safetyFlowTaskService.saveWorkFlowRecord(true, safetyFlowTaskService.saveWorkFlowRecord(true,

View File

@ -236,8 +236,8 @@ public class SafetyCheckDaylyController {
SafetyCheckStatusEnum.RESPONSE.getTaskTitle(), SafetyCheckStatusEnum.RESPONSE.getTaskTitle(),
bean.getDutyUserId(), // 当前节点审批人 bean.getDutyUserId(), // 当前节点审批人
bean.getDutyUserName(), // 当前节点审批人 bean.getDutyUserName(), // 当前节点审批人
null, // 抄送人 bean.getCopyUserId(), // 抄送人
null,// 抄送人 bean.getCopyUserName(),// 抄送人
null); null);
} }
@ -373,10 +373,9 @@ public class SafetyCheckDaylyController {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Result response(HttpServletRequest request, SafetyCheckDayly bean, String processInstanceId, int pass) throws IOException, ServiceException { public Result response(HttpServletRequest request, SafetyCheckDayly bean, String processInstanceId, int pass) throws IOException, ServiceException {
safetyCheckActivityService.audit(bean.getConfirmUserId(), processInstanceId, pass);
//通过 //通过
if (pass == 1) { if (pass == 1) {
safetyCheckActivityService.audit(bean.getConfirmUserId(), processInstanceId, pass);
bean.setStatus(SafetyCheckStatusEnum.COMPLETE.getId()); bean.setStatus(SafetyCheckStatusEnum.COMPLETE.getId());
safetyCheckDaylyService.update(bean); safetyCheckDaylyService.update(bean);
@ -400,6 +399,7 @@ public class SafetyCheckDaylyController {
} }
//不通过 //不通过
else { else {
safetyCheckActivityService.audit(bean.getDutyUserId(), processInstanceId, pass);
bean.setStatus(SafetyCheckStatusEnum.APPLY.getId()); bean.setStatus(SafetyCheckStatusEnum.APPLY.getId());
safetyCheckDaylyService.update(bean); safetyCheckDaylyService.update(bean);
safetyFlowTaskService.saveWorkFlowRecord(true, safetyFlowTaskService.saveWorkFlowRecord(true,

View File

@ -197,8 +197,8 @@ public class SafetyCheckSpecialController {
SafetyCheckStatusEnum.RESPONSE.getTaskTitle(), SafetyCheckStatusEnum.RESPONSE.getTaskTitle(),
bean.getDutyUserId(), // 当前节点审批人 bean.getDutyUserId(), // 当前节点审批人
bean.getDutyUserName(), // 当前节点审批人 bean.getDutyUserName(), // 当前节点审批人
null, // 抄送人 bean.getCopyUserId(), // 抄送人
null,// 抄送人 bean.getCopyUserName(),// 抄送人
null); null);
} }
return Result.success(); return Result.success();
@ -393,10 +393,9 @@ public class SafetyCheckSpecialController {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Result response(HttpServletRequest request, SafetyCheckSpecial bean, String processInstanceId, int pass) throws IOException, ServiceException { public Result response(HttpServletRequest request, SafetyCheckSpecial bean, String processInstanceId, int pass) throws IOException, ServiceException {
safetyCheckActivityService.audit(bean.getConfirmUserId(), processInstanceId, pass);
//通过 //通过
if (pass == 1) { if (pass == 1) {
safetyCheckActivityService.audit(bean.getConfirmUserId(), processInstanceId, pass);
bean.setStatus(SafetyCheckStatusEnum.COMPLETE.getId()); bean.setStatus(SafetyCheckStatusEnum.COMPLETE.getId());
service.update(bean); service.update(bean);
@ -419,6 +418,7 @@ public class SafetyCheckSpecialController {
} }
//不通过 //不通过
else { else {
safetyCheckActivityService.audit(bean.getDutyUserId(), processInstanceId, pass);
bean.setStatus(SafetyCheckStatusEnum.APPLY.getId()); bean.setStatus(SafetyCheckStatusEnum.APPLY.getId());
service.update(bean); service.update(bean);
safetyFlowTaskService.saveWorkFlowRecord(true, safetyFlowTaskService.saveWorkFlowRecord(true,

View File

@ -339,18 +339,39 @@ public class SafetyExternalCertificateController {
@RequestMapping("/deletes.do") @RequestMapping("/deletes.do")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public String delete(HttpServletRequest request, Model model, String[] ids) throws IOException { public String delete(HttpServletRequest request, Model model,
@RequestParam(value = "ids", required = false) String ids,
@RequestParam(value = "staffIds", required = false) String staffIds) throws IOException {
int result = 0; int result = 0;
for (String id : ids) {
// 兼容:支持 ids/staffIds 传 CSV也支持重复参数数组
Set<String> certificateIdSet = new LinkedHashSet<>(parseRequestIds(request, "ids", ids));
Set<String> staffIdSet = new LinkedHashSet<>(parseRequestIds(request, "staffIds", staffIds));
for (String id : certificateIdSet) {
result += service.deleteById(id); result += service.deleteById(id);
}
for (String id : ids) {
safetyFilesService.deleteByBizId(id); safetyFilesService.deleteByBizId(id);
} }
for (String staffId : staffIdSet) {
safetyExternalStaffService.deleteById(staffId);
}
model.addAttribute("result", result); model.addAttribute("result", result);
return "result"; return "result";
} }
private List<String> parseRequestIds(HttpServletRequest request, String paramName, String rawIds) {
List<String> result = new ArrayList<>(parseExportIds(rawIds));
String[] values = request.getParameterValues(paramName);
if (values != null) {
for (String value : values) {
result.addAll(parseExportIds(value));
}
}
return result;
}
/** /**
* 跳转导入页面 * 跳转导入页面
* *
@ -538,67 +559,61 @@ public class SafetyExternalCertificateController {
public void export(HttpServletRequest request, HttpServletResponse response, public void export(HttpServletRequest request, HttpServletResponse response,
@RequestParam(value = "issueDate", required = false) String issueDate, @RequestParam(value = "issueDate", required = false) String issueDate,
@RequestParam(value = "jobType", required = false) String jobType, @RequestParam(value = "jobType", required = false) String jobType,
@RequestParam(value = "companyParam", required = false) String companyParam) throws IOException { @RequestParam(value = "companyParam", required = false) String companyParam,
// 摘自列表查询接口 start @RequestParam(value = "search_name", required = false) String searchName,
User cu = (User) request.getSession().getAttribute("cu"); @RequestParam(value = "ids", required = false) String ids,
@RequestParam(value = "staffIds", required = false) String staffIds) throws IOException {
// 与列表接口保持一致,避免“页面有数据但导出为空”
String sort = " sc.userid, sc.create_time "; String sort = " sc.userid, sc.create_time ";
String order = " desc "; String order = " desc ";
String orderstr = " order by " + sort + " " + order; String orderstr = " order by " + sort + " " + order;
String wherestr = " where flag='2' "; String wherestr = " where 1=1 ";
if (request.getParameter("search_code") != null && !request.getParameter("search_code").isEmpty()) {
List<Unit> unitlist = unitService.getUnitChildrenById(request.getParameter("search_code"));
String pidstr = "";
for (int i = 0; i < unitlist.size(); i++) {
pidstr += "'" + unitlist.get(i).getId() + "',";
}
if (pidstr != "") {
pidstr = pidstr.substring(0, pidstr.length() - 1);
wherestr += "and u.pid in (" + pidstr + ") ";
}
} else {
Company company = unitService.getCompanyByUserId(cu.getId());
String companyId = "-1";
if (company != null) {
companyId = company.getId();
}
List<User> users = unitService.getChildrenUsersById(companyId);
String userIds = "";
for (User user : users) {
if (!userIds.isEmpty()) {
userIds += "','";
}
userIds += user.getId();
}
if (!userIds.isEmpty()) {
wherestr += "and u.id in ('" + userIds + "') ";
}
}
// 搜索框筛选 // 搜索框筛选
if (request.getParameter("search_name") != null && !request.getParameter("search_name").isEmpty()) { if (StringUtils.isNotBlank(searchName)) {
wherestr += " and (sc.certificate_name like '%" + request.getParameter("search_name") + "%'" + wherestr += " and (sc.certificate_name like '%" + searchName + "%'" +
" or ses.name like '%" + request.getParameter("search_name") + "%')"; " or ses.name like '%" + searchName + "%')";
} }
// 领证时间筛选 // 领证时间筛选
if (StringUtils.isNotBlank(issueDate) && !"null".equals(issueDate)) { if (StringUtils.isNotBlank(issueDate) && !"null".equals(issueDate)) {
String[] split = issueDate.split("~"); String[] split = issueDate.split("~");
if (split.length == 2) {
String issueDate_param_start_time = split[0].trim(); String issueDate_param_start_time = split[0].trim();
String issueDate_param_end_time = split[1].trim(); String issueDate_param_end_time = split[1].trim();
wherestr += " and sc.issue_date >= '" + issueDate_param_start_time + "'" + wherestr += " and sc.issue_date >= '" + issueDate_param_start_time + "'" +
" and sc.issue_date <= '" + issueDate_param_end_time + "'"; " and sc.issue_date <= '" + issueDate_param_end_time + "'";
} }
}
//作业类型 // 作业类型
if (StringUtils.isNotBlank(jobType) && !"null".equals(jobType)) { if (StringUtils.isNotBlank(jobType) && !"null".equals(jobType)) {
wherestr += " and sc.job_type = '" + jobType + "'"; wherestr += " and sc.job_type = '" + jobType + "'";
} }
//施工单位 // 施工单位
if (StringUtils.isNotBlank(companyParam) && !"null".equals(companyParam)) { if (StringUtils.isNotBlank(companyParam) && !"null".equals(companyParam)) {
wherestr += " and ses.company = '" + companyParam + "'"; wherestr += " and ses.company = '" + companyParam + "'";
} }
// 勾选导出:有勾选则仅导出勾选数据;无勾选则按筛选条件导出全部
List<String> certificateIdList = parseExportIds(ids);
List<String> staffIdList = parseExportIds(staffIds);
if (!CollectionUtils.isEmpty(certificateIdList) || !CollectionUtils.isEmpty(staffIdList)) {
StringBuilder selectedWhere = new StringBuilder(" and (");
if (!CollectionUtils.isEmpty(certificateIdList)) {
selectedWhere.append("sc.id in (").append(joinForSqlIn(certificateIdList)).append(")");
}
if (!CollectionUtils.isEmpty(staffIdList)) {
if (!CollectionUtils.isEmpty(certificateIdList)) {
selectedWhere.append(" or ");
}
selectedWhere.append("ses.id in (").append(joinForSqlIn(staffIdList)).append(")");
}
selectedWhere.append(")");
wherestr += selectedWhere;
}
List<SafetyExternalCertificateVo> list = this.service.selectListByConditionForExternal(wherestr + orderstr); List<SafetyExternalCertificateVo> list = this.service.selectListByConditionForExternal(wherestr + orderstr);
List<SafetyExternalCertificateExcel> excelList = new ArrayList<>(); List<SafetyExternalCertificateExcel> excelList = new ArrayList<>();
SafetyExternalCertificateExcel excelEntity = null; SafetyExternalCertificateExcel excelEntity = null;
@ -607,7 +622,7 @@ public class SafetyExternalCertificateController {
BeanUtils.copyProperties(vo, excelEntity); BeanUtils.copyProperties(vo, excelEntity);
excelList.add(excelEntity); excelList.add(excelEntity);
} }
// 摘自列表查询接口 end
response.setContentType("application/vnd.ms-excel"); response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf8"); response.setCharacterEncoding("utf8");
response.setHeader("Content-disposition", "attachment;filename=" + java.net.URLEncoder.encode("外部人员证书信息", "UTF-8") + ".xlsx"); response.setHeader("Content-disposition", "attachment;filename=" + java.net.URLEncoder.encode("外部人员证书信息", "UTF-8") + ".xlsx");
@ -618,4 +633,31 @@ public class SafetyExternalCertificateController {
excelWriter.finish(); excelWriter.finish();
} }
} }
private List<String> parseExportIds(String rawIds) {
List<String> result = new ArrayList<>();
if (StringUtils.isBlank(rawIds) || "null".equals(rawIds)) {
return result;
}
String[] split = rawIds.split(",");
for (String id : split) {
String value = StringUtils.trim(id);
// 仅保留安全字符,避免拼接 SQL 时引入非法字符
if (StringUtils.isNotBlank(value) && value.matches("^[0-9A-Za-z_-]+$")) {
result.add(value);
}
}
return result;
}
private String joinForSqlIn(List<String> idList) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < idList.size(); i++) {
if (i > 0) {
sb.append(",");
}
sb.append("'").append(idList.get(i)).append("'");
}
return sb.toString();
}
} }

View File

@ -134,6 +134,12 @@ public class SewageController {
public String dosave(HttpServletRequest request,Model model, public String dosave(HttpServletRequest request,Model model,
@ModelAttribute Sewage sewage) { @ModelAttribute Sewage sewage) {
User cu = (User) request.getSession().getAttribute("cu"); User cu = (User) request.getSession().getAttribute("cu");
String contractNumber = sewage.getContractNumber() == null ? null : sewage.getContractNumber().trim();
sewage.setContractNumber(contractNumber);
if (this.sewageService.existsByContractNumber(contractNumber)) {
model.addAttribute("result", "{\"res\":\"合同编号已存在,不可重复\"}");
return "result";
}
sewage.setId(CommUtil.getUUID()); sewage.setId(CommUtil.getUUID());
int result = this.sewageService.save(sewage); int result = this.sewageService.save(sewage);
String resultstr = "{\"res\":\""+result+"\",\"id\":\""+sewage.getId()+"\"}"; String resultstr = "{\"res\":\""+result+"\",\"id\":\""+sewage.getId()+"\"}";
@ -193,6 +199,12 @@ public class SewageController {
public String doupdate(HttpServletRequest request,Model model, public String doupdate(HttpServletRequest request,Model model,
@ModelAttribute Sewage sewage) { @ModelAttribute Sewage sewage) {
User cu = (User) request.getSession().getAttribute("cu"); User cu = (User) request.getSession().getAttribute("cu");
String contractNumber = sewage.getContractNumber() == null ? null : sewage.getContractNumber().trim();
sewage.setContractNumber(contractNumber);
if (this.sewageService.existsByContractNumberExcludeId(contractNumber, sewage.getId())) {
model.addAttribute("result", "{\"res\":\"合同编号已存在,不可重复\"}");
return "result";
}
int result = this.sewageService.update(sewage); int result = this.sewageService.update(sewage);
String resstr="{\"res\":\""+result+"\",\"id\":\""+sewage.getId()+"\"}"; String resstr="{\"res\":\""+result+"\",\"id\":\""+sewage.getId()+"\"}";
model.addAttribute("result", resstr); model.addAttribute("result", resstr);
@ -348,7 +360,8 @@ public class SewageController {
@RequestMapping(value = "downloadExcelFun.do") @RequestMapping(value = "downloadExcelFun.do")
public ModelAndView downloadExcelFun(HttpServletRequest request, public ModelAndView downloadExcelFun(HttpServletRequest request,
HttpServletResponse response, Model model) throws IOException { HttpServletResponse response, Model model) throws IOException {
this.sewageService.outExcelFun(response); String ids = request.getParameter("ids");
this.sewageService.outExcelFun(response, ids);
return null; return null;
} }

View File

@ -227,7 +227,7 @@ public class PatrolModelController {
User cu=(User)request.getSession().getAttribute("cu"); User cu=(User)request.getSession().getAttribute("cu");
String companyId = request.getParameter("bizId"); String companyId = request.getParameter("bizId");
String type = request.getParameter("type"); String type = request.getParameter("type");
List<PatrolModel> list = this.patrolModelService.selectListByWhere("where unit_id = '"+companyId+"' and type='"+type+"' order by insdt"); List<PatrolModel> list = this.patrolModelService.selectListByWhere("where unit_id = '"+companyId+"' order by insdt");
ArrayList<Select2> list4select2 = new ArrayList<Select2>(); ArrayList<Select2> list4select2 = new ArrayList<Select2>();
for (int i=0;i<list.size();i++){ for (int i=0;i<list.size();i++){
Select2 select2 = new Select2(); Select2 select2 = new Select2();

View File

@ -242,10 +242,20 @@ public class ProcessSectionController {
@RequestMapping("/getProcessSection4Select.do") @RequestMapping("/getProcessSection4Select.do")
public String getProcessSection4Select(HttpServletRequest request, Model model) { public String getProcessSection4Select(HttpServletRequest request, Model model) {
String companyId = request.getParameter("companyId"); // 默认查询JSBZ??? String companyId = request.getParameter("companyId"); // 默认查询JSBZ???
Company company = this.companyService.selectByPrimaryKey(companyId); // companyId在不同页面可能来自tb_unit或tb_company统一兼容两种来源
Unit unit = this.unitService.getUnitById(companyId);
String unitType = null;
if (unit != null) {
unitType = unit.getType();
} else if (companyId != null && !companyId.isEmpty()) {
Company company = this.unitService.getCompById(companyId);
if (company != null) {
unitType = company.getType();
}
}
String wherestr = "where 1=1 and active='" + CommString.Active_True + "' "; String wherestr = "where 1=1 and active='" + CommString.Active_True + "' ";
if (company != null && company.getType().equals(CommString.UNIT_TYPE_COMPANY)) { // "C";//公司 if (CommString.UNIT_TYPE_COMPANY.equals(unitType)) { // "C";//公司
String bizs = "";//公司下属所有厂id String bizs = "";//公司下属所有厂id
List<Unit> blist = this.unitService.getParentCompanyChildrenBizByUnitid(companyId); List<Unit> blist = this.unitService.getParentCompanyChildrenBizByUnitid(companyId);
if (blist != null && blist.size() > 0) { if (blist != null && blist.size() > 0) {
@ -257,7 +267,7 @@ public class ProcessSectionController {
} }
bizs = bizs.replace(",", "','"); bizs = bizs.replace(",", "','");
wherestr += " and (unit_id='" + ProcessSection.UnitId_Sys + "' or (code not in (select code from tb_process_section where unit_id='" + ProcessSection.UnitId_Sys + "')) and unit_id in ('" + bizs + "') ) "; wherestr += " and (unit_id='" + ProcessSection.UnitId_Sys + "' or (code not in (select code from tb_process_section where unit_id='" + ProcessSection.UnitId_Sys + "')) and unit_id in ('" + bizs + "') ) ";
} else if (company != null && company.getType().equals(CommString.UNIT_TYPE_BIZ)) { // B 水厂 } else if (CommString.UNIT_TYPE_BIZ.equals(unitType)) { // B 水厂
wherestr += " and unit_id='" + companyId + "' "; wherestr += " and unit_id='" + companyId + "' ";
} }
if (request.getParameter("search_name") != null && !request.getParameter("search_name").isEmpty()) { if (request.getParameter("search_name") != null && !request.getParameter("search_name").isEmpty()) {
@ -272,13 +282,16 @@ public class ProcessSectionController {
for (int i = 0; i < processSections.size(); i++) { for (int i = 0; i < processSections.size(); i++) {
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("id", processSections.get(i).getCode()); jsonObject.put("id", processSections.get(i).getCode());
if (company != null && company.getType().equals(CommString.UNIT_TYPE_COMPANY)) { // "C";//公司 if (CommString.UNIT_TYPE_COMPANY.equals(unitType)) { // "C";//公司
if (!processSections.get(i).getUnitId().equals(ProcessSection.UnitId_Sys)) { if (!processSections.get(i).getUnitId().equals(ProcessSection.UnitId_Sys)) {
jsonObject.put("text", processSections.get(i).getSname() + "(" + processSections.get(i).getCompanySname() + ")"); jsonObject.put("text", processSections.get(i).getSname() + "(" + processSections.get(i).getCompanySname() + ")");
} else { } else {
jsonObject.put("text", processSections.get(i).getSname()); jsonObject.put("text", processSections.get(i).getSname());
} }
} else if (company != null && company.getType().equals(CommString.UNIT_TYPE_BIZ)) { // "B";//水厂 } else if (CommString.UNIT_TYPE_BIZ.equals(unitType)) { // "B";//水厂
jsonObject.put("text", processSections.get(i).getSname());
} else {
// 兜底避免前端下拉出现有id无text导致显示为空
jsonObject.put("text", processSections.get(i).getSname()); jsonObject.put("text", processSections.get(i).getSname());
} }

View File

@ -213,6 +213,9 @@ public class RoleController {
JSONArray json = JSONArray.fromObject(list); JSONArray json = JSONArray.fromObject(list);
model.addAttribute("json", json); model.addAttribute("json", json);
model.addAttribute("roleid", roleid); model.addAttribute("roleid", roleid);
if(request.getParameter("bizid") != null && !request.getParameter("bizid").isEmpty()){
model.addAttribute("companyId", request.getParameter("bizid"));
}
return "user/roleUser"; return "user/roleUser";
} }

View File

@ -30,7 +30,6 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import sun.misc.BASE64Encoder;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@ -41,6 +40,7 @@ import java.io.InputStream;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Base64;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -145,11 +145,14 @@ public class UserController {
wherestr += "and pid in (" + pidstr + ") "; wherestr += "and pid in (" + pidstr + ") ";
} }
} else { } else {
String companyId = request.getParameter("companyId");
if (StringUtils.isBlank(companyId) && cu != null && StringUtils.isNotBlank(cu.getId())) {
Company company = unitService.getCompanyByUserId(cu.getId()); Company company = unitService.getCompanyByUserId(cu.getId());
String companyId = "-1";
if (company != null) { if (company != null) {
companyId = company.getId(); companyId = company.getId();
} }
}
if (StringUtils.isNotBlank(companyId)) {
List<User> users = unitService.getChildrenUsersById(companyId); List<User> users = unitService.getChildrenUsersById(companyId);
String userIds = ""; String userIds = "";
for (User user : users) { for (User user : users) {
@ -161,6 +164,9 @@ public class UserController {
if (!userIds.isEmpty()) { if (!userIds.isEmpty()) {
wherestr += "and id in ('" + userIds + "') "; wherestr += "and id in ('" + userIds + "') ";
} }
} else {
wherestr += "and 1=0 ";
}
} }
} }
@ -587,8 +593,7 @@ public class UserController {
in.read(data); in.read(data);
in.close(); in.close();
//将二进制字节用base64编码以字符串方式存到数据库中 //将二进制字节用base64编码以字符串方式存到数据库中
BASE64Encoder encoder = new BASE64Encoder(); String headPortrait = Base64.getEncoder().encodeToString(data);
String headPortrait = encoder.encode(data);
User cu = (User) request.getSession().getAttribute("cu"); User cu = (User) request.getSession().getAttribute("cu");
UserDetail userDetail = this.userDetailService.selectByUserId(cu.getId()); UserDetail userDetail = this.userDetailService.selectByUserId(cu.getId());
int res = 0; int res = 0;
@ -853,11 +858,13 @@ public class UserController {
public String userForSelectByCompany(HttpServletRequest request, Model model) { public String userForSelectByCompany(HttpServletRequest request, Model model) {
String userIds = request.getParameter("userIds"); String userIds = request.getParameter("userIds");
String jobIds = request.getParameter("jobIds"); String jobIds = request.getParameter("jobIds");
String displayDept = request.getParameter("displayDept");
if (userIds != null && !userIds.isEmpty()) { if (userIds != null && !userIds.isEmpty()) {
List<User> list = this.userService.selectListByWhere("where id in ('" + userIds.replace(",", "','") + "') order by CHARINDEX(','+ id +',','," + userIds + ",')"); List<User> list = this.userService.selectListByWhere("where id in ('" + userIds.replace(",", "','") + "') order by CHARINDEX(','+ id +',',','" + userIds + ",')");
model.addAttribute("users", JSONArray.fromObject(list)); model.addAttribute("users", JSONArray.fromObject(list));
} }
model.addAttribute("jobIds", jobIds); model.addAttribute("jobIds", jobIds);
model.addAttribute("displayDept", displayDept);
return "user/userForSelectByCompany"; return "user/userForSelectByCompany";
} }
@ -1259,6 +1266,7 @@ public class UserController {
model.addAttribute("users", JSONArray.fromObject(list)); model.addAttribute("users", JSONArray.fromObject(list));
} }
model.addAttribute("jobIds", jobIds); model.addAttribute("jobIds", jobIds);
model.addAttribute("displayDept", request.getParameter("displayDept"));
return "user/userForSelectByWorkOrder"; return "user/userForSelectByWorkOrder";
} }
@ -1458,6 +1466,7 @@ public class UserController {
model.addAttribute("users", JSONArray.fromObject(list)); model.addAttribute("users", JSONArray.fromObject(list));
} }
model.addAttribute("jobIds", jobIds); model.addAttribute("jobIds", jobIds);
model.addAttribute("displayDept", request.getParameter("displayDept"));
return "user/userSelectLayer"; return "user/userSelectLayer";
} }

View File

@ -89,11 +89,26 @@ public class KPIPointController {
// List<MPointHistory> lists = mPointHistoryService.selectListByTableAWhere("tb_mp_11_GNJ1_F","MeasureDT='2016-01-10 10:16:57'"); // List<MPointHistory> lists = mPointHistoryService.selectListByTableAWhere("tb_mp_11_GNJ1_F","MeasureDT='2016-01-10 10:16:57'");
// int dd= mPointHistoryService.deleteByTableAWhere("tb_mp_11_GNJ1_F","MeasureDT='2016-01-10 10:16:57'"); // int dd= mPointHistoryService.deleteByTableAWhere("tb_mp_11_GNJ1_F","MeasureDT='2016-01-10 10:16:57'");
for (int i=0; i < list.size(); i++) { for (int i=0; i < list.size(); i++) {
String rawBizId = list.get(i).getBizid();
ProcessSection processSection = this.processSectionService.selectById(list.get(i).getProcesssectionid()); ProcessSection processSection = this.processSectionService.selectById(list.get(i).getProcesssectionid());
if (processSection == null && list.get(i).getProcesssectionid() != null && !list.get(i).getProcesssectionid().isEmpty()) {
// KPI里历史数据存在按code保存工艺段的场景优先按厂区code匹配再回退到系统库
List<ProcessSection> processSectionList = this.processSectionService.selectSimpleListByWhere(
"where code='" + list.get(i).getProcesssectionid() + "' and unit_id='" + rawBizId + "' "
);
if (processSectionList == null || processSectionList.isEmpty()) {
processSectionList = this.processSectionService.selectSimpleListByWhere(
"where code='" + list.get(i).getProcesssectionid() + "' and unit_id='" + ProcessSection.UnitId_Sys + "' "
);
}
if (processSectionList != null && !processSectionList.isEmpty()) {
processSection = processSectionList.get(0);
}
}
if (processSection != null) { if (processSection != null) {
list.get(i).setProcessectionname(processSection.getName()); list.get(i).setProcessectionname(processSection.getName());
} }
Company company = this.unitService.getCompById(list.get(i).getBizid()); Company company = this.unitService.getCompById(rawBizId);
if (company != null) { if (company != null) {
list.get(i).setBizid(company.getName()); list.get(i).setBizid(company.getName());
} }

View File

@ -514,6 +514,21 @@ public class MPointController {
mp.setProcessSection(processSections.get(0)); mp.setProcessSection(processSections.get(0));
} }
} }
// 取redis点位数据最新值没有就是0
for (MPoint mPoint : list) {
String id = mPoint.getId();
int num = mPoint.getId().hashCode() % 25;
RMapCache<String, String> map_redis_data = redissonClient.getMapCache(CommString.RedisMpointFlag + num);
if (map_redis_data.get(id) != null && !"".equals(map_redis_data.get(id))) {
String[] str = map_redis_data.get(id).split(";");
if (str.length >= 3 && str[1] != null && !str[1].isEmpty() && !"null".equals(str[1])) {
mPoint.setParmvalue(new BigDecimal(str[1]));
mPoint.setMeasuredt(str[2]);
} else {
mPoint.setParmvalue(BigDecimal.ZERO);
}
}
}
PageInfo<MPoint> pi = new PageInfo<MPoint>(list); PageInfo<MPoint> pi = new PageInfo<MPoint>(list);
JSONArray json = JSONArray.fromObject(list); JSONArray json = JSONArray.fromObject(list);
result = "{\"total\":" + pi.getTotal() + ",\"rows\":" + json + "}"; result = "{\"total\":" + pi.getTotal() + ",\"rows\":" + json + "}";

View File

@ -133,6 +133,9 @@ public class SchedulingController {
public String doadd(HttpServletRequest request, Model model, public String doadd(HttpServletRequest request, Model model,
@RequestParam(value = "date") String date) { @RequestParam(value = "date") String date) {
model.addAttribute("date", date.substring(0, 10)); model.addAttribute("date", date.substring(0, 10));
if(request.getParameter("bizid") != null && !request.getParameter("bizid").isEmpty()){
model.addAttribute("bizid", request.getParameter("bizid"));
}
return "work/schedulingAdd"; return "work/schedulingAdd";
} }
@ -142,6 +145,9 @@ public class SchedulingController {
String wherestr = " where s.id = '" + schedulingId + "'"; String wherestr = " where s.id = '" + schedulingId + "'";
List<Scheduling> scheduling = this.schedulingService.selectCalenderListByWhere(wherestr); List<Scheduling> scheduling = this.schedulingService.selectCalenderListByWhere(wherestr);
model.addAttribute("scheduling", scheduling.get(0)); model.addAttribute("scheduling", scheduling.get(0));
if(request.getParameter("bizid") != null && !request.getParameter("bizid").isEmpty()){
model.addAttribute("bizid", request.getParameter("bizid"));
}
return "work/schedulingEdit"; return "work/schedulingEdit";
} }
@ -475,7 +481,7 @@ public class SchedulingController {
JSONArray array = new JSONArray(); JSONArray array = new JSONArray();
String[] workpeopleids = scheduling.getWorkpeople().split(","); String[] workpeopleids = scheduling.getWorkpeople().split(",");
if (workpeopleids != null && workpeopleids.length > 0) { if (workpeopleids != null && workpeopleids.length > 0) {
if (!workpeopleids[0].equals("")) { if (!userId.equals(workpeopleids[0])) {
for (int i = 0; i < workpeopleids.length; i++) { for (int i = 0; i < workpeopleids.length; i++) {
if (!userId.equals(workpeopleids[i])) { if (!userId.equals(workpeopleids[i])) {
JSONObject object = new JSONObject(); JSONObject object = new JSONObject();
@ -1150,6 +1156,10 @@ public class SchedulingController {
} }
} }
// 获取交班表单数据
List<GroupContentFormData> formDataList = this.groupContentFormDataService.selectListByWhere(" where schedulingId='" + schedulingId + "' ");
model.addAttribute("formDataList", formDataList);
model.addAttribute("scheduling", scheduling); model.addAttribute("scheduling", scheduling);
return "work/schedulingView"; return "work/schedulingView";
} }

View File

@ -18,7 +18,6 @@ import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import sun.misc.BASE64Decoder;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.script.ScriptEngine; import javax.script.ScriptEngine;
@ -32,6 +31,7 @@ import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.Base64;
import java.util.List; import java.util.List;
@SuppressWarnings({"restriction", "unused"}) @SuppressWarnings({"restriction", "unused"})
@ -719,12 +719,7 @@ public class WordAnalysisReportStructureController {
String id = strconts[0]; String id = strconts[0];
String img = strconts[2]; String img = strconts[2];
byte[] b2 = new BASE64Decoder().decodeBuffer(img); byte[] b2 = Base64.getMimeDecoder().decode(img);
for (int i = 0; i < b2.length; ++i) {
if (b2[i] < 0) {// 调整异常数据
b2[i] += 256;
}
}
// 生成png图片 // 生成png图片
String contextPath = request.getContextPath().replace("/", ""); String contextPath = request.getContextPath().replace("/", "");
String filepathSever = request.getSession().getServletContext().getRealPath(""); String filepathSever = request.getSession().getServletContext().getRealPath("");

View File

@ -1252,22 +1252,15 @@ public class WorkorderDetailController {
@RequestMapping("/doExportRepair.do") @RequestMapping("/doExportRepair.do")
public ModelAndView doExportRepair(HttpServletRequest request, public ModelAndView doExportRepair(HttpServletRequest request,
HttpServletResponse response, Model model, HttpServletResponse response, Model model,
@RequestParam(value = "ids") String ids, @RequestParam(value = "ids", required = false) String ids,
@RequestParam(value = "type") String type) throws IOException { @RequestParam(value = "type") String type) throws IOException {
if (ids != null && !ids.equals("")) { String whereStr = buildExportWhereByIdsAndType(ids, type);
String[] id = ids.split(",");
String workorderDetailsIds = "";
for (String s : id) {
workorderDetailsIds += "'" + s + "',";
}
String whereStr = "where id in (" + workorderDetailsIds.substring(0, workorderDetailsIds.length() - 1) + ")";
try { try {
List<WorkorderDetail> workorderDetails = workorderDetailService.selectListByWhere(whereStr); List<WorkorderDetail> workorderDetails = workorderDetailService.selectListByWhere(whereStr);
this.workorderDetailService.doExportRepair(response, workorderDetails, type); this.workorderDetailService.doExportRepair(response, workorderDetails, type);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
}
return null; return null;
} }
@ -1292,22 +1285,15 @@ public class WorkorderDetailController {
@RequestMapping("/doExportRepairJS.do") @RequestMapping("/doExportRepairJS.do")
public ModelAndView doExportRepairJS(HttpServletRequest request, public ModelAndView doExportRepairJS(HttpServletRequest request,
HttpServletResponse response, Model model, HttpServletResponse response, Model model,
@RequestParam(value = "ids") String ids, @RequestParam(value = "ids", required = false) String ids,
@RequestParam(value = "type") String type) throws IOException { @RequestParam(value = "type") String type) throws IOException {
if (ids != null && !ids.equals("")) { String whereStr = buildExportWhereByIdsAndType(ids, type);
String[] id = ids.split(",");
String workorderDetailsIds = "";
for (String s : id) {
workorderDetailsIds += "'" + s + "',";
}
String whereStr = "where id in (" + workorderDetailsIds.substring(0, workorderDetailsIds.length() - 1) + ")";
try { try {
List<WorkorderDetail> workorderDetails = workorderDetailService.selectListByWhere(whereStr); List<WorkorderDetail> workorderDetails = workorderDetailService.selectListByWhere(whereStr);
this.workorderDetailService.doExportRepairJS(response, workorderDetails, type); this.workorderDetailService.doExportRepairJS(response, workorderDetails, type);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
}
return null; return null;
} }
@ -1332,26 +1318,47 @@ public class WorkorderDetailController {
@RequestMapping("/doExportMain.do") @RequestMapping("/doExportMain.do")
public ModelAndView doExportMain(HttpServletRequest request, public ModelAndView doExportMain(HttpServletRequest request,
HttpServletResponse response, Model model, HttpServletResponse response, Model model,
@RequestParam(value = "ids") String ids, @RequestParam(value = "ids", required = false) String ids,
@RequestParam(value = "type") String type) throws IOException { @RequestParam(value = "type") String type) throws IOException {
if (ids != null && !ids.equals("")) { String whereStr = buildExportWhereByIdsAndType(ids, type);
String[] id = ids.split(",");
String workorderDetailsIds = "";
for (String s : id) {
workorderDetailsIds += "'" + s + "',";
}
String whereStr = "where id in (" + workorderDetailsIds.substring(0, workorderDetailsIds.length() - 1) + ")";
// System.out.println(whereStr);
try { try {
List<WorkorderDetail> workorderDetails = workorderDetailService.selectListByWhere(whereStr); List<WorkorderDetail> workorderDetails = workorderDetailService.selectListByWhere(whereStr);
this.workorderDetailService.doExportMain(response, workorderDetails, type); this.workorderDetailService.doExportMain(response, workorderDetails, type);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
}
return null; return null;
} }
private String buildExportWhereByIdsAndType(String ids, String type) {
String normalizedIds = normalizeIds(ids);
if (!normalizedIds.isEmpty()) {
String[] idArr = normalizedIds.split(",");
StringBuilder idBuilder = new StringBuilder();
for (String item : idArr) {
String id = item.trim();
if (id.isEmpty()) {
continue;
}
if (idBuilder.length() > 0) {
idBuilder.append(",");
}
idBuilder.append("'").append(id).append("'");
}
if (idBuilder.length() > 0) {
return "where id in (" + idBuilder + ")";
}
}
return "where type = '" + type + "'";
}
private String normalizeIds(String ids) {
if (ids == null || ids.trim().isEmpty()) {
return "";
}
return ids.replace("'", "").replace(" ", "").replaceAll(",+$", "");
}
/** /**
* 日历中弹出指定日期的 维修单 * 日历中弹出指定日期的 维修单
* *

View File

@ -0,0 +1,13 @@
package com.sipai.dao.administration;
import com.sipai.dao.base.CommDaoImpl;
import com.sipai.entity.administration.LeaveApply;
import org.springframework.stereotype.Repository;
@Repository
public class LeaveApplyDao extends CommDaoImpl<LeaveApply> {
public LeaveApplyDao() {
super();
this.setMappernamespace("administration.LeaveApplyMapper");
}
}

View File

@ -5,6 +5,7 @@ import com.sipai.entity.sparepart.Sewage;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List; import java.util.List;
import java.util.Map;
@Repository @Repository
public class SewageDao extends CommDaoImpl<Sewage> { public class SewageDao extends CommDaoImpl<Sewage> {
@ -17,4 +18,12 @@ public class SewageDao extends CommDaoImpl<Sewage> {
return list; return list;
} }
public Integer selectCountByContractNumber(String contractNumber) {
return getSqlSession().selectOne(this.getMappernamespace() + "." + Thread.currentThread().getStackTrace()[1].getMethodName(), contractNumber);
}
public Integer selectCountByContractNumberExcludeId(Map<String, String> params) {
return getSqlSession().selectOne(this.getMappernamespace() + "." + Thread.currentThread().getStackTrace()[1].getMethodName(), params);
}
} }

View File

@ -50,6 +50,8 @@ public enum ProcessType {
Administration_Reserve("Administration_Reserve","预案工作"), Administration_Reserve("Administration_Reserve","预案工作"),
/*预案*/ /*预案*/
Administration_Temporary("Administration_Temporary","临时任务"), Administration_Temporary("Administration_Temporary","临时任务"),
/*请假补假*/
Administration_Leave("Administration_Leave","请假补假"),
/*工艺调整*/ /*工艺调整*/
Process_Adjustment("Process_Adjustment","工艺调整"), Process_Adjustment("Process_Adjustment","工艺调整"),
/*水质化验*/ /*水质化验*/

View File

@ -0,0 +1,267 @@
package com.sipai.entity.administration;
import com.sipai.entity.base.BusinessUnitAdapter;
public class LeaveApply extends BusinessUnitAdapter {
private String id;
private String insdt;
private String insuser;
private String upduser;
private String upddt;
private String unitId;
private String applyType;
private String leaveType;
private String startTime;
private String endTime;
private String hours;
private String days;
private String reason;
private String handoverDesc;
private String attachmentIds;
private String overtimeRefId;
private String overtimeHours;
private String actualStartTime;
private String actualEndTime;
private String state;
private String stateName;
private String auditManId;
private String auditMan;
private String submissionTime;
private String processid;
private String processdefid;
private String remark;
private String delFlag;
private String insuserName;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getInsdt() {
return insdt;
}
public void setInsdt(String insdt) {
this.insdt = insdt;
}
public String getInsuser() {
return insuser;
}
public void setInsuser(String insuser) {
this.insuser = insuser;
}
public String getUpduser() {
return upduser;
}
public void setUpduser(String upduser) {
this.upduser = upduser;
}
public String getUpddt() {
return upddt;
}
public void setUpddt(String upddt) {
this.upddt = upddt;
}
public String getUnitId() {
return unitId;
}
public void setUnitId(String unitId) {
this.unitId = unitId;
}
public String getApplyType() {
return applyType;
}
public void setApplyType(String applyType) {
this.applyType = applyType;
}
public String getLeaveType() {
return leaveType;
}
public void setLeaveType(String leaveType) {
this.leaveType = leaveType;
}
public String getStartTime() {
return startTime;
}
public void setStartTime(String startTime) {
this.startTime = startTime;
}
public String getEndTime() {
return endTime;
}
public void setEndTime(String endTime) {
this.endTime = endTime;
}
public String getHours() {
return hours;
}
public void setHours(String hours) {
this.hours = hours;
}
public String getDays() {
return days;
}
public void setDays(String days) {
this.days = days;
}
public String getReason() {
return reason;
}
public void setReason(String reason) {
this.reason = reason;
}
public String getHandoverDesc() {
return handoverDesc;
}
public void setHandoverDesc(String handoverDesc) {
this.handoverDesc = handoverDesc;
}
public String getAttachmentIds() {
return attachmentIds;
}
public void setAttachmentIds(String attachmentIds) {
this.attachmentIds = attachmentIds;
}
public String getOvertimeRefId() {
return overtimeRefId;
}
public void setOvertimeRefId(String overtimeRefId) {
this.overtimeRefId = overtimeRefId;
}
public String getOvertimeHours() {
return overtimeHours;
}
public void setOvertimeHours(String overtimeHours) {
this.overtimeHours = overtimeHours;
}
public String getActualStartTime() {
return actualStartTime;
}
public void setActualStartTime(String actualStartTime) {
this.actualStartTime = actualStartTime;
}
public String getActualEndTime() {
return actualEndTime;
}
public void setActualEndTime(String actualEndTime) {
this.actualEndTime = actualEndTime;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getStateName() {
return stateName;
}
public void setStateName(String stateName) {
this.stateName = stateName;
}
public String getAuditManId() {
return auditManId;
}
public void setAuditManId(String auditManId) {
this.auditManId = auditManId;
}
public String getAuditMan() {
return auditMan;
}
public void setAuditMan(String auditMan) {
this.auditMan = auditMan;
}
public String getSubmissionTime() {
return submissionTime;
}
public void setSubmissionTime(String submissionTime) {
this.submissionTime = submissionTime;
}
public String getProcessid() {
return processid;
}
public void setProcessid(String processid) {
this.processid = processid;
}
public String getProcessdefid() {
return processdefid;
}
public void setProcessdefid(String processdefid) {
this.processdefid = processdefid;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public String getDelFlag() {
return delFlag;
}
public void setDelFlag(String delFlag) {
this.delFlag = delFlag;
}
public String getInsuserName() {
return insuserName;
}
public void setInsuserName(String insuserName) {
this.insuserName = insuserName;
}
}

View File

@ -0,0 +1,30 @@
package com.sipai.entity.administration;
public class LeaveCommStr {
public static final String APPLY_TYPE_LEAVE = "leave";
public static final String APPLY_TYPE_COMPENSATORY = "compensatory";
public static final String STATE_DRAFT = "草稿";
public static final String STATE_SECTION_AUDIT = "科长/副科长审批";
public static final String STATE_MANAGER_AUDIT = "分管经理审批";
public static final String STATE_GENERAL_MANAGER_AUDIT = "总经理审批";
public static final String STATE_HANDLE = "退回修改";
public static final String STATE_FINISH = "已通过";
public static final String STATE_REJECT = "已驳回";
public static final String[][] APPLY_TYPES = {
{APPLY_TYPE_LEAVE, "请假"},
{APPLY_TYPE_COMPENSATORY, "补假"}
};
public static final String[][] LEAVE_TYPES = {
{"annual", "年假"},
{"personal", "事假"},
{"sick", "病假"},
{"marriage", "婚假"},
{"maternity", "产假"},
{"funeral", "丧假"},
{"adjustment", "调休"}
};
}

View File

@ -115,6 +115,11 @@ public class BusinessUnit extends SQLAdapter {
//预案工作审核流程节点 //预案工作审核流程节点
public final static String UNIT_Temporary_AUDIT = "temporary_audit";//指标审核 public final static String UNIT_Temporary_AUDIT = "temporary_audit";//指标审核
public final static String UNIT_Temporary_HANDLE = "temporary_handle";//指标业务处理 public final static String UNIT_Temporary_HANDLE = "temporary_handle";//指标业务处理
//请假补假流程节点
public final static String UNIT_LEAVE_APPLY_SECTION_AUDIT = "leave_apply_section_audit";
public final static String UNIT_LEAVE_APPLY_MANAGER_AUDIT = "leave_apply_manager_audit";
public final static String UNIT_LEAVE_APPLY_GENERAL_MANAGER_AUDIT = "leave_apply_general_manager_audit";
public final static String UNIT_LEAVE_APPLY_HANDLE = "leave_apply_handle";
/** /**
* 运行模块 * 运行模块

View File

@ -0,0 +1,160 @@
<?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="administration.LeaveApplyMapper" >
<resultMap id="BaseResultMap" type="com.sipai.entity.administration.LeaveApply" >
<id column="id" property="id" jdbcType="VARCHAR" />
<result column="insdt" property="insdt" jdbcType="TIMESTAMP" />
<result column="insuser" property="insuser" jdbcType="VARCHAR" />
<result column="upduser" property="upduser" jdbcType="VARCHAR" />
<result column="upddt" property="upddt" jdbcType="TIMESTAMP" />
<result column="unit_id" property="unitId" jdbcType="VARCHAR" />
<result column="apply_type" property="applyType" jdbcType="VARCHAR" />
<result column="leave_type" property="leaveType" jdbcType="VARCHAR" />
<result column="start_time" property="startTime" jdbcType="TIMESTAMP" />
<result column="end_time" property="endTime" jdbcType="TIMESTAMP" />
<result column="hours" property="hours" jdbcType="DECIMAL" />
<result column="days" property="days" jdbcType="DECIMAL" />
<result column="reason" property="reason" jdbcType="VARCHAR" />
<result column="handover_desc" property="handoverDesc" jdbcType="VARCHAR" />
<result column="attachment_ids" property="attachmentIds" jdbcType="VARCHAR" />
<result column="overtime_ref_id" property="overtimeRefId" jdbcType="VARCHAR" />
<result column="overtime_hours" property="overtimeHours" jdbcType="DECIMAL" />
<result column="actual_start_time" property="actualStartTime" jdbcType="TIMESTAMP" />
<result column="actual_end_time" property="actualEndTime" jdbcType="TIMESTAMP" />
<result column="state" property="state" jdbcType="VARCHAR" />
<result column="audit_man_id" property="auditManId" jdbcType="VARCHAR" />
<result column="submission_time" property="submissionTime" jdbcType="TIMESTAMP" />
<result column="processid" property="processid" jdbcType="VARCHAR" />
<result column="processdefid" property="processdefid" jdbcType="VARCHAR" />
<result column="remark" property="remark" jdbcType="VARCHAR" />
<result column="del_flag" property="delFlag" jdbcType="CHAR" />
</resultMap>
<sql id="Base_Column_List" >
id, insdt, insuser, upduser, upddt, unit_id, apply_type, leave_type, start_time, end_time,
hours, days, reason, handover_desc, attachment_ids, overtime_ref_id, overtime_hours,
actual_start_time, actual_end_time, state, audit_man_id, submission_time, processid,
processdefid, remark, del_flag
</sql>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" >
select
<include refid="Base_Column_List" />
from tb_administration_leave_apply
where id = #{id,jdbcType=VARCHAR}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.String" >
delete from tb_administration_leave_apply
where id = #{id,jdbcType=VARCHAR}
</delete>
<insert id="insert" parameterType="com.sipai.entity.administration.LeaveApply" >
insert into tb_administration_leave_apply (
id, insdt, insuser, upduser, upddt, unit_id, apply_type, leave_type, start_time, end_time,
hours, days, reason, handover_desc, attachment_ids, overtime_ref_id, overtime_hours,
actual_start_time, actual_end_time, state, submission_time, processid,
processdefid, remark, del_flag)
values (
#{id,jdbcType=VARCHAR}, #{insdt,jdbcType=TIMESTAMP}, #{insuser,jdbcType=VARCHAR}, #{upduser,jdbcType=VARCHAR}, #{upddt,jdbcType=TIMESTAMP},
#{unitId,jdbcType=VARCHAR}, #{applyType,jdbcType=VARCHAR}, #{leaveType,jdbcType=VARCHAR}, #{startTime,jdbcType=TIMESTAMP}, #{endTime,jdbcType=TIMESTAMP},
NULLIF(#{hours,jdbcType=VARCHAR}, ''), NULLIF(#{days,jdbcType=VARCHAR}, ''), #{reason,jdbcType=VARCHAR}, #{handoverDesc,jdbcType=VARCHAR}, #{attachmentIds,jdbcType=VARCHAR},
#{overtimeRefId,jdbcType=VARCHAR}, NULLIF(#{overtimeHours,jdbcType=VARCHAR}, ''), #{actualStartTime,jdbcType=TIMESTAMP}, #{actualEndTime,jdbcType=TIMESTAMP},
#{state,jdbcType=VARCHAR}, #{submissionTime,jdbcType=TIMESTAMP}, #{processid,jdbcType=VARCHAR},
#{processdefid,jdbcType=VARCHAR}, #{remark,jdbcType=VARCHAR}, #{delFlag,jdbcType=CHAR})
</insert>
<insert id="insertSelective" parameterType="com.sipai.entity.administration.LeaveApply" >
insert into tb_administration_leave_apply
<trim prefix="(" suffix=")" suffixOverrides="," >
<if test="id != null" >id,</if>
<if test="insdt != null" >insdt,</if>
<if test="insuser != null" >insuser,</if>
<if test="upduser != null" >upduser,</if>
<if test="upddt != null" >upddt,</if>
<if test="unitId != null" >unit_id,</if>
<if test="applyType != null" >apply_type,</if>
<if test="leaveType != null" >leave_type,</if>
<if test="startTime != null" >start_time,</if>
<if test="endTime != null" >end_time,</if>
<if test="hours != null" >hours,</if>
<if test="days != null" >days,</if>
<if test="reason != null" >reason,</if>
<if test="handoverDesc != null" >handover_desc,</if>
<if test="attachmentIds != null" >attachment_ids,</if>
<if test="overtimeRefId != null" >overtime_ref_id,</if>
<if test="overtimeHours != null" >overtime_hours,</if>
<if test="actualStartTime != null" >actual_start_time,</if>
<if test="actualEndTime != null" >actual_end_time,</if>
<if test="state != null" >state,</if>
<if test="submissionTime != null" >submission_time,</if>
<if test="processid != null" >processid,</if>
<if test="processdefid != null" >processdefid,</if>
<if test="remark != null" >remark,</if>
<if test="delFlag != null" >del_flag,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides="," >
<if test="id != null" >#{id,jdbcType=VARCHAR},</if>
<if test="insdt != null" >#{insdt,jdbcType=TIMESTAMP},</if>
<if test="insuser != null" >#{insuser,jdbcType=VARCHAR},</if>
<if test="upduser != null" >#{upduser,jdbcType=VARCHAR},</if>
<if test="upddt != null" >#{upddt,jdbcType=TIMESTAMP},</if>
<if test="unitId != null" >#{unitId,jdbcType=VARCHAR},</if>
<if test="applyType != null" >#{applyType,jdbcType=VARCHAR},</if>
<if test="leaveType != null" >#{leaveType,jdbcType=VARCHAR},</if>
<if test="startTime != null" >#{startTime,jdbcType=TIMESTAMP},</if>
<if test="endTime != null" >#{endTime,jdbcType=TIMESTAMP},</if>
<if test="hours != null" >NULLIF(#{hours,jdbcType=VARCHAR}, ''),</if>
<if test="days != null" >NULLIF(#{days,jdbcType=VARCHAR}, ''),</if>
<if test="reason != null" >#{reason,jdbcType=VARCHAR},</if>
<if test="handoverDesc != null" >#{handoverDesc,jdbcType=VARCHAR},</if>
<if test="attachmentIds != null" >#{attachmentIds,jdbcType=VARCHAR},</if>
<if test="overtimeRefId != null" >#{overtimeRefId,jdbcType=VARCHAR},</if>
<if test="overtimeHours != null" >NULLIF(#{overtimeHours,jdbcType=VARCHAR}, ''),</if>
<if test="actualStartTime != null" >#{actualStartTime,jdbcType=TIMESTAMP},</if>
<if test="actualEndTime != null" >#{actualEndTime,jdbcType=TIMESTAMP},</if>
<if test="state != null" >#{state,jdbcType=VARCHAR},</if>
<if test="submissionTime != null" >#{submissionTime,jdbcType=TIMESTAMP},</if>
<if test="processid != null" >#{processid,jdbcType=VARCHAR},</if>
<if test="processdefid != null" >#{processdefid,jdbcType=VARCHAR},</if>
<if test="remark != null" >#{remark,jdbcType=VARCHAR},</if>
<if test="delFlag != null" >#{delFlag,jdbcType=CHAR},</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.sipai.entity.administration.LeaveApply" >
update tb_administration_leave_apply
<set >
<if test="insdt != null" >insdt = #{insdt,jdbcType=TIMESTAMP},</if>
<if test="insuser != null" >insuser = #{insuser,jdbcType=VARCHAR},</if>
<if test="upduser != null" >upduser = #{upduser,jdbcType=VARCHAR},</if>
<if test="upddt != null" >upddt = #{upddt,jdbcType=TIMESTAMP},</if>
<if test="unitId != null" >unit_id = #{unitId,jdbcType=VARCHAR},</if>
<if test="applyType != null" >apply_type = #{applyType,jdbcType=VARCHAR},</if>
<if test="leaveType != null" >leave_type = #{leaveType,jdbcType=VARCHAR},</if>
<if test="startTime != null" >start_time = #{startTime,jdbcType=TIMESTAMP},</if>
<if test="endTime != null" >end_time = #{endTime,jdbcType=TIMESTAMP},</if>
<if test="hours != null" >hours = NULLIF(#{hours,jdbcType=VARCHAR}, ''),</if>
<if test="days != null" >days = NULLIF(#{days,jdbcType=VARCHAR}, ''),</if>
<if test="reason != null" >reason = #{reason,jdbcType=VARCHAR},</if>
<if test="handoverDesc != null" >handover_desc = #{handoverDesc,jdbcType=VARCHAR},</if>
<if test="attachmentIds != null" >attachment_ids = #{attachmentIds,jdbcType=VARCHAR},</if>
<if test="overtimeRefId != null" >overtime_ref_id = #{overtimeRefId,jdbcType=VARCHAR},</if>
<if test="overtimeHours != null" >overtime_hours = NULLIF(#{overtimeHours,jdbcType=VARCHAR}, ''),</if>
<if test="actualStartTime != null" >actual_start_time = #{actualStartTime,jdbcType=TIMESTAMP},</if>
<if test="actualEndTime != null" >actual_end_time = #{actualEndTime,jdbcType=TIMESTAMP},</if>
<if test="state != null" >state = #{state,jdbcType=VARCHAR},</if>
audit_man_id = NULL,
<if test="submissionTime != null" >submission_time = #{submissionTime,jdbcType=TIMESTAMP},</if>
<if test="processid != null" >processid = #{processid,jdbcType=VARCHAR},</if>
<if test="processdefid != null" >processdefid = #{processdefid,jdbcType=VARCHAR},</if>
<if test="remark != null" >remark = #{remark,jdbcType=VARCHAR},</if>
<if test="delFlag != null" >del_flag = #{delFlag,jdbcType=CHAR},</if>
</set>
where id = #{id,jdbcType=VARCHAR}
</update>
<select id="selectListByWhere" parameterType="java.lang.String" resultMap="BaseResultMap" >
select
<include refid="Base_Column_List" />
from tb_administration_leave_apply
${where}
</select>
<delete id="deleteByWhere" parameterType="java.lang.String" >
delete from tb_administration_leave_apply
${where}
</delete>
</mapper>

View File

@ -312,6 +312,17 @@
delete from TB_Sewage_Source delete from TB_Sewage_Source
${where} ${where}
</delete> </delete>
<select id="selectCountByContractNumber" resultType="java.lang.Integer" parameterType="java.lang.String" >
select count(1)
from TB_Sewage_Source
where contract_number = #{contractNumber,jdbcType=VARCHAR}
</select>
<select id="selectCountByContractNumberExcludeId" resultType="java.lang.Integer" parameterType="java.util.Map" >
select count(1)
from TB_Sewage_Source
where contract_number = #{contractNumber,jdbcType=VARCHAR}
and id != #{id,jdbcType=VARCHAR}
</select>
<select id="selectDistinctCityByWhere" resultMap="BaseResultMap" parameterType="java.lang.String" > <select id="selectDistinctCityByWhere" resultMap="BaseResultMap" parameterType="java.lang.String" >
select Distinct [city] as [city] select Distinct [city] as [city]
from TB_Sewage_Source from TB_Sewage_Source

View File

@ -362,9 +362,22 @@ public class WorkflowProcessDefinitionService {
String pvmTransitionId = ""; String pvmTransitionId = "";
for (WorkTask workTask : list) { for (WorkTask workTask : list) {
PvmTransition item=this.getTransition(processDefId, taskDefId,workTask.getId(),pvmTransitionId); PvmTransition item=this.getTransition(processDefId, taskDefId,workTask.getId(),pvmTransitionId);
if (item == null) {
// 未找到对应路径时默认标记为通过路径,继续处理其他任务
workTask.setPassFlag(true);
continue;
}
pvmTransitionId = item.getId(); pvmTransitionId = item.getId();
String conditionText=String.valueOf(item.getProperty("conditionText")); String conditionText=String.valueOf(item.getProperty("conditionText"));
if (conditionText!=null && conditionText.contains("!"+CommString.ACTI_KEK_Condition)) { // 检测退回路径:支持多种条件表达式格式
// ${!pass} / ${pass == false} / ${pass==false} / ${pass != true} / ${pass!=true}
boolean isRejectPath = conditionText != null && (
conditionText.contains("!"+CommString.ACTI_KEK_Condition) ||
conditionText.contains(CommString.ACTI_KEK_Condition+" == false") ||
conditionText.contains(CommString.ACTI_KEK_Condition+"==false") ||
conditionText.contains(CommString.ACTI_KEK_Condition+" != true") ||
conditionText.contains(CommString.ACTI_KEK_Condition+"!=true"));
if (isRejectPath) {
workTask.setPassFlag(false); workTask.setPassFlag(false);
}else{ }else{
workTask.setPassFlag(true); workTask.setPassFlag(true);

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,477 @@
package com.sipai.service.administration;
import com.sipai.dao.administration.LeaveApplyDao;
import com.sipai.entity.activiti.ProcessType;
import com.sipai.entity.administration.LeaveApply;
import com.sipai.entity.administration.LeaveCommStr;
import com.sipai.entity.base.BusinessUnitAdapter;
import com.sipai.entity.business.BusinessUnit;
import com.sipai.entity.business.BusinessUnitAudit;
import com.sipai.entity.business.BusinessUnitRecord;
import com.sipai.entity.maintenance.MaintenanceCommString;
import com.sipai.entity.user.User;
import com.sipai.service.activiti.WorkflowProcessDefinitionService;
import com.sipai.service.activiti.WorkflowService;
import com.sipai.service.business.BusinessUnitAuditService;
import com.sipai.service.user.JobService;
import com.sipai.service.user.UnitService;
import com.sipai.service.user.UserJobService;
import com.sipai.service.user.UserService;
import com.sipai.tools.CommService;
import org.apache.commons.lang3.StringUtils;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.LinkedHashSet;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@Service
public class LeaveApplyService implements CommService<LeaveApply> {
@Resource
private LeaveApplyDao leaveApplyDao;
@Resource
private UserService userService;
@Resource
private WorkflowProcessDefinitionService workflowProcessDefinitionService;
@Resource
private WorkflowService workflowService;
@Resource
private BusinessUnitAuditService businessUnitAuditService;
@Resource
private JobService jobService;
@Resource
private UserJobService userJobService;
@Resource
private UnitService unitService;
@Override
public LeaveApply selectById(String id) {
LeaveApply leaveApply = this.leaveApplyDao.selectByPrimaryKey(id);
this.fillExtraInfo(leaveApply);
return leaveApply;
}
@Override
public int deleteById(String id) {
return this.leaveApplyDao.deleteByPrimaryKey(id);
}
@Override
public int save(LeaveApply leaveApply) {
this.normalizeLeaveApply(leaveApply);
return this.leaveApplyDao.insert(leaveApply);
}
@Override
public int update(LeaveApply leaveApply) {
this.normalizeLeaveApply(leaveApply);
return this.leaveApplyDao.updateByPrimaryKeySelective(leaveApply);
}
@Override
public List<LeaveApply> selectListByWhere(String wherestr) {
LeaveApply leaveApply = new LeaveApply();
leaveApply.setWhere(wherestr);
List<LeaveApply> list = this.leaveApplyDao.selectListByWhere(leaveApply);
if (list != null) {
for (LeaveApply item : list) {
this.fillExtraInfo(item);
}
}
return list;
}
@Override
public int deleteByWhere(String wherestr) {
LeaveApply leaveApply = new LeaveApply();
leaveApply.setWhere(wherestr);
return this.leaveApplyDao.deleteByWhere(leaveApply);
}
public String getUserNamesByUserIds(String userIds) {
if (userIds == null || userIds.isEmpty()) {
return "";
}
userIds = userIds.replace(",", "','");
String userNames = "";
List<User> users = this.userService.selectListByWhere("where id in ('" + userIds + "')");
for (User item : users) {
if (!userNames.isEmpty()) {
userNames += ",";
}
userNames += item.getCaption();
}
return userNames;
}
@Transactional
public int doStartProcess(LeaveApply leaveApply) {
try {
this.normalizeLeaveApply(leaveApply);
String candidateUserIds = this.getDefaultCandidateUserIds(leaveApply, BusinessUnit.UNIT_LEAVE_APPLY_SECTION_AUDIT);
Map<String, Object> variables = new HashMap<String, Object>();
if (StringUtils.isBlank(candidateUserIds)) {
return MaintenanceCommString.Response_StartProcess_NoUser;
}
variables.put("userIds", candidateUserIds);
variables.put("applyType", leaveApply.getApplyType());
variables.put("leaveType", leaveApply.getLeaveType());
variables.put("days", leaveApply.getDays());
variables.put("hours", leaveApply.getHours());
variables.put("applicantId", null);
List<ProcessDefinition> processDefinitions = workflowProcessDefinitionService.getProcessDefsBykey(
ProcessType.Administration_Leave.getId() + "-" + leaveApply.getUnitId());
if (processDefinitions == null || processDefinitions.size() == 0) {
processDefinitions = workflowProcessDefinitionService.getProcessDefsBykey(ProcessType.Administration_Leave.getId());
}
if (processDefinitions == null || processDefinitions.size() == 0) {
return MaintenanceCommString.Response_StartProcess_NoProcessDef;
}
ProcessInstance processInstance = workflowService.startWorkflow(
leaveApply.getId(), leaveApply.getInsuser(), processDefinitions.get(0).getKey(), variables);
if (processInstance == null) {
throw new RuntimeException();
}
leaveApply.setProcessid(processInstance.getId());
leaveApply.setProcessdefid(processDefinitions.get(0).getId());
leaveApply.setState(LeaveCommStr.STATE_SECTION_AUDIT);
leaveApply.setSubmissionTime(leaveApply.getInsdt());
int res = 0;
LeaveApply db = this.selectById(leaveApply.getId());
if (db != null) {
res = this.leaveApplyDao.updateByPrimaryKeySelective(leaveApply);
} else {
res = this.leaveApplyDao.insert(leaveApply);
}
if (res == 1) {
User user = userService.getUserById(leaveApply.getInsuser());
String recordUser = this.getUserNamesByUserIds(candidateUserIds);
BusinessUnitRecord businessUnitRecord = new BusinessUnitRecord(
leaveApply.getInsdt(), leaveApply.getInsuser(), leaveApply.getId(), leaveApply.getProcessid(),
leaveApply.getUnitId(), null, StringUtils.isBlank(recordUser)
? "提交了请假补假申请,等待审批人签收。"
: "提交了请假补假申请至" + recordUser + "进行审批。", user, "流程发起");
businessUnitRecord.sendMessage(candidateUserIds, "");
}
return res;
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
}
}
public int updateStatus(String id) {
LeaveApply leaveApply = this.selectById(id);
List<Task> task = workflowService.getTaskService().createTaskQuery().processInstanceId(leaveApply.getProcessid()).list();
if (task != null && task.size() > 0) {
leaveApply.setState(task.get(0).getName());
} else {
leaveApply.setState(LeaveCommStr.STATE_FINISH);
}
return this.update(leaveApply);
}
@Transactional
public int doAuditProcess(BusinessUnitAudit entity) {
try {
BusinessUnitAdapter businessUnitAdapter = this.selectById(entity.getBusinessid());
int res = businessUnitAuditService.doAudit(entity, businessUnitAdapter);
if (res > 0) {
this.updateStatus(entity.getBusinessid());
}
return res;
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
}
}
private void fillExtraInfo(LeaveApply leaveApply) {
if (leaveApply == null) {
return;
}
if (leaveApply.getAuditManId() != null && !leaveApply.getAuditManId().isEmpty()) {
leaveApply.setAuditMan(this.getUserNamesByUserIds(leaveApply.getAuditManId()));
} else if (StringUtils.isNotBlank(leaveApply.getProcessid())
&& !LeaveCommStr.STATE_FINISH.equals(leaveApply.getState())
&& !LeaveCommStr.STATE_DRAFT.equals(leaveApply.getState())) {
leaveApply.setAuditMan("待签收");
}
if (leaveApply.getInsuser() != null && !leaveApply.getInsuser().isEmpty()) {
User user = this.userService.getUserById(leaveApply.getInsuser());
if (user != null) {
leaveApply.setInsuserName(user.getCaption());
}
}
leaveApply.setStateName(leaveApply.getState());
}
private void normalizeLeaveApply(LeaveApply leaveApply) {
if (leaveApply == null) {
return;
}
leaveApply.setStartTime(StringUtils.trimToNull(leaveApply.getStartTime()));
leaveApply.setEndTime(StringUtils.trimToNull(leaveApply.getEndTime()));
leaveApply.setActualStartTime(this.normalizeDateTimeValue(leaveApply.getActualStartTime()));
leaveApply.setActualEndTime(this.normalizeDateTimeValue(leaveApply.getActualEndTime()));
leaveApply.setHours(StringUtils.trimToNull(leaveApply.getHours()));
leaveApply.setDays(StringUtils.trimToNull(leaveApply.getDays()));
leaveApply.setOvertimeHours(StringUtils.trimToNull(leaveApply.getOvertimeHours()));
this.calculateDuration(leaveApply);
leaveApply.setStartTime(this.normalizeLeaveTimeValue(leaveApply.getStartTime()));
leaveApply.setEndTime(this.normalizeLeaveTimeValue(leaveApply.getEndTime()));
}
public String getDefaultCandidateUserIds(LeaveApply leaveApply) {
return this.getDefaultCandidateUserIds(leaveApply, null);
}
public String getDefaultCandidateUserIds(LeaveApply leaveApply, String taskDefinitionKey) {
if (leaveApply == null) {
return null;
}
String resourceId = StringUtils.trimToNull(taskDefinitionKey);
if (resourceId == null) {
resourceId = BusinessUnit.UNIT_LEAVE_APPLY_SECTION_AUDIT;
}
String jobIds = StringUtils.trimToNull(this.jobService.getJobs4Activiti(
leaveApply.getUnitId(), ProcessType.Administration_Leave.getId(), resourceId));
if (StringUtils.isBlank(jobIds) && !BusinessUnit.UNIT_LEAVE_APPLY_SECTION_AUDIT.equals(resourceId)) {
jobIds = StringUtils.trimToNull(this.jobService.getJobs4Activiti(
leaveApply.getUnitId(), ProcessType.Administration_Leave.getId()));
}
Set<String> unitUserIds = new LinkedHashSet<String>();
List<User> unitUsers = this.unitService.getChildrenUsersById(leaveApply.getUnitId());
if (unitUsers != null) {
for (User user : unitUsers) {
if (user != null && StringUtils.isNotBlank(user.getId())) {
unitUserIds.add(user.getId());
}
}
}
Set<String> candidateUserIds = new LinkedHashSet<String>();
if (StringUtils.isNotBlank(jobIds)) {
List<com.sipai.entity.user.UserJob> userJobs = this.userJobService.selectListByWhere(
"where jobid in ('" + jobIds.replace(",", "','") + "')");
if (userJobs != null) {
for (com.sipai.entity.user.UserJob userJob : userJobs) {
if (userJob != null && StringUtils.isNotBlank(userJob.getUserid())
&& (unitUserIds.isEmpty() || unitUserIds.contains(userJob.getUserid()))) {
candidateUserIds.add(userJob.getUserid());
}
}
}
}
if (candidateUserIds.isEmpty()) {
candidateUserIds.addAll(unitUserIds);
}
return this.joinUserIds(new ArrayList<String>(candidateUserIds));
}
public String getDefaultCandidateUserIdsForNextTask(LeaveApply leaveApply, String currentTaskDefinitionKey, Integer routeNum, boolean passStatus) {
if (leaveApply == null || StringUtils.isBlank(leaveApply.getProcessdefid()) || StringUtils.isBlank(currentTaskDefinitionKey)) {
return this.getDefaultCandidateUserIds(leaveApply);
}
List<com.sipai.entity.activiti.WorkTask> nextWorkTasks =
workflowProcessDefinitionService.getNextWorkTasks(leaveApply.getProcessdefid(), currentTaskDefinitionKey);
if (nextWorkTasks == null || nextWorkTasks.isEmpty()) {
return null;
}
int expectedRouteNum = routeNum == null ? -1 : routeNum;
boolean matchedRoute = false;
for (com.sipai.entity.activiti.WorkTask workTask : nextWorkTasks) {
if (workTask == null) {
continue;
}
if (workTask.isPassFlag() != passStatus) {
continue;
}
if (expectedRouteNum >= 0 && workTask.getRouteNum() != expectedRouteNum) {
continue;
}
matchedRoute = true;
if (!"userTask".equals(workTask.getType())) {
continue;
}
return this.getDefaultCandidateUserIds(leaveApply, workTask.getTaskKey());
}
return matchedRoute ? null : this.getDefaultCandidateUserIds(leaveApply);
}
private String joinUserIds(List<String> userIds) {
if (userIds == null || userIds.isEmpty()) {
return null;
}
StringBuilder builder = new StringBuilder();
for (String userId : userIds) {
if (StringUtils.isBlank(userId)) {
continue;
}
if (builder.length() > 0) {
builder.append(",");
}
builder.append(userId.trim());
}
return builder.length() == 0 ? null : builder.toString();
}
private void calculateDuration(LeaveApply leaveApply) {
if (StringUtils.isBlank(leaveApply.getStartTime()) || StringUtils.isBlank(leaveApply.getEndTime())) {
leaveApply.setHours(null);
leaveApply.setDays(null);
return;
}
try {
if (this.isHalfDayValue(leaveApply.getStartTime()) && this.isHalfDayValue(leaveApply.getEndTime())) {
LeaveTimePoint startPoint = this.parseLeaveTimePoint(leaveApply.getStartTime());
LeaveTimePoint endPoint = this.parseLeaveTimePoint(leaveApply.getEndTime());
int halfDays = this.calculateHalfDays(startPoint, endPoint);
if (halfDays <= 0) {
leaveApply.setHours(null);
leaveApply.setDays(null);
return;
}
leaveApply.setHours(this.formatDecimal(BigDecimal.valueOf(halfDays * 4L)));
leaveApply.setDays(this.formatDecimal(BigDecimal.valueOf(halfDays).divide(BigDecimal.valueOf(2), 1, RoundingMode.HALF_UP)));
return;
}
Date startDate = this.parseDateTime(leaveApply.getStartTime());
Date endDate = this.parseDateTime(leaveApply.getEndTime());
long diffMillis = endDate.getTime() - startDate.getTime();
if (diffMillis <= 0) {
leaveApply.setHours(null);
leaveApply.setDays(null);
return;
}
BigDecimal hours = BigDecimal.valueOf(diffMillis)
.divide(BigDecimal.valueOf(1000L * 60L * 60L), 2, RoundingMode.HALF_UP);
BigDecimal days = hours.divide(BigDecimal.valueOf(8), 2, RoundingMode.HALF_UP);
if (days.compareTo(BigDecimal.valueOf(0.5)) < 0) {
days = BigDecimal.valueOf(0.5);
}
leaveApply.setHours(this.formatDecimal(hours));
leaveApply.setDays(this.formatDecimal(days));
} catch (ParseException e) {
leaveApply.setHours(null);
leaveApply.setDays(null);
}
}
private boolean isHalfDayValue(String value) {
if (StringUtils.isBlank(value)) {
return false;
}
String trimmed = StringUtils.trim(value);
if (trimmed.matches("^\\d{4}-\\d{2}-\\d{2}\\s+(上午|下午)$")) {
return true;
}
return trimmed.matches("^\\d{4}-\\d{2}-\\d{2}\\s+(00:00(?::00)?|12:00(?::00)?)$");
}
private LeaveTimePoint parseLeaveTimePoint(String value) throws ParseException {
String[] parts = StringUtils.trim(value).split("\\s+");
if (parts.length != 2) {
throw new ParseException("Unsupported leave time format: " + value, 0);
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
sdf.setLenient(false);
Calendar calendar = Calendar.getInstance();
calendar.setTime(sdf.parse(parts[0]));
return new LeaveTimePoint(calendar, this.parsePeriodIndex(parts[1]));
}
private int calculateHalfDays(LeaveTimePoint startPoint, LeaveTimePoint endPoint) {
long diffMillis = endPoint.calendar.getTimeInMillis() - startPoint.calendar.getTimeInMillis();
int dayDiff = (int) (diffMillis / (1000 * 60 * 60 * 24));
return dayDiff * 2 + (endPoint.periodIndex - startPoint.periodIndex) + 1;
}
private int parsePeriodIndex(String period) throws ParseException {
if ("下午".equals(period) || "12:00".equals(period) || "12:00:00".equals(period)) {
return 1;
}
if ("上午".equals(period) || "00:00".equals(period) || "00:00:00".equals(period)) {
return 0;
}
throw new ParseException("Unsupported leave period: " + period, 0);
}
private String normalizeLeaveTimeValue(String value) {
if (StringUtils.isBlank(value)) {
return null;
}
String trimmed = StringUtils.trim(value);
if (!trimmed.matches("^\\d{4}-\\d{2}-\\d{2}\\s+(上午|下午)$")) {
return this.normalizeDateTimeValue(trimmed);
}
String[] parts = trimmed.split("\\s+");
return parts[0] + ("下午".equals(parts[1]) ? " 12:00:00" : " 00:00:00");
}
private String normalizeDateTimeValue(String value) {
if (StringUtils.isBlank(value)) {
return null;
}
String trimmed = StringUtils.trim(value);
String[] patterns = new String[]{"yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM-dd"};
for (String pattern : patterns) {
try {
SimpleDateFormat parser = new SimpleDateFormat(pattern);
parser.setLenient(false);
Date parsed = parser.parse(trimmed);
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return formatter.format(parsed);
} catch (ParseException e) {
// try next format
}
}
return trimmed;
}
private Date parseDateTime(String value) throws ParseException {
String trimmed = StringUtils.trim(value);
String[] patterns = new String[]{"yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM-dd"};
for (String pattern : patterns) {
try {
SimpleDateFormat parser = new SimpleDateFormat(pattern);
parser.setLenient(false);
return parser.parse(trimmed);
} catch (ParseException e) {
// try next format
}
}
throw new ParseException("Unsupported datetime format: " + value, 0);
}
private String formatDecimal(BigDecimal value) {
return value.stripTrailingZeros().toPlainString();
}
private static class LeaveTimePoint {
private final Calendar calendar;
private final int periodIndex;
private LeaveTimePoint(Calendar calendar, int periodIndex) {
this.calendar = calendar;
this.periodIndex = periodIndex;
}
}
}

View File

@ -20,9 +20,12 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
@ -351,6 +354,8 @@ public class CommonFileServiceImpl implements CommonFileService {
String errorMsg = e.getMessage(); String errorMsg = e.getMessage();
if (errorMsg != null && errorMsg.contains("NoSuchKey")) { if (errorMsg != null && errorMsg.contains("NoSuchKey")) {
logger.error("MinIO文件不存在: bucketName={}, objectName={}", nameSpace, filePath); logger.error("MinIO文件不存在: bucketName={}, objectName={}", nameSpace, filePath);
} else if (errorMsg != null && errorMsg.contains("NoSuchBucket")) {
logger.error("MinIO存储桶不存在: bucketName={}, objectName={}", nameSpace, filePath);
} else { } else {
logger.error("获取MinIO文件失败: bucketName={}, objectName={}, 错误: {}", nameSpace, filePath, errorMsg, e); logger.error("获取MinIO文件失败: bucketName={}, objectName={}, 错误: {}", nameSpace, filePath, errorMsg, e);
} }
@ -389,7 +394,7 @@ public class CommonFileServiceImpl implements CommonFileService {
CommonFile commonFile = new CommonFile(); CommonFile commonFile = new CommonFile();
commonFile.setId(CommUtil.getUUID()); commonFile.setId(CommUtil.getUUID());
commonFile.setMasterid(masterId); commonFile.setMasterid(masterId);
// 20210105 YYJ 用于文件表绑定料节点用字段 tb_doc_file内和masterId一样 // 20210105 YYJ 用于文件表绑定<EFBFBD><EFBFBD>料节点用字段 tb_doc_file内和masterId一样
// commonFile.setPid(masterId); // commonFile.setPid(masterId);
commonFile.setFilename(fileName); // 保存原始文件名用于显示 commonFile.setFilename(fileName); // 保存原始文件名用于显示
commonFile.setType(contentType); commonFile.setType(contentType);
@ -398,6 +403,19 @@ public class CommonFileServiceImpl implements CommonFileService {
commonFile.setAbspath(filePath); // 保存MinIO对象名称 commonFile.setAbspath(filePath); // 保存MinIO对象名称
commonFile.setInsdt(CommUtil.nowDate()); commonFile.setInsdt(CommUtil.nowDate());
commonFile.setSize((int) item.getSize()); commonFile.setSize((int) item.getSize());
// 获取当前用户ID并设置
try {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if (attributes != null) {
HttpServletRequest request = attributes.getRequest();
User cu = (User) request.getSession().getAttribute("cu");
if (cu != null) {
commonFile.setInsuser(cu.getId());
}
}
} catch (Exception e) {
logger.warn("无法获取当前用户信息: {}", e.getMessage());
}
res = this.insertByTable(tableName, commonFile); res = this.insertByTable(tableName, commonFile);
} catch (Exception e) { } catch (Exception e) {
logger.error("Failed to update file to MinIO for masterId: {}", masterId, e); logger.error("Failed to update file to MinIO for masterId: {}", masterId, e);

View File

@ -112,17 +112,24 @@ public class BusinessUnitAuditService implements CommService<BusinessUnitAudit>{
} }
List<HistoricActivityInstance> list=historyService.createHistoricActivityInstanceQuery().processInstanceId(entity.getProcessid()).activityId(wortTaskId) List<HistoricActivityInstance> list=historyService.createHistoricActivityInstanceQuery().processInstanceId(entity.getProcessid()).activityId(wortTaskId)
.orderByHistoricActivityInstanceStartTime().desc().list(); .orderByHistoricActivityInstanceStartTime().desc().list();
if (list != null && list.size()>0) { // 优先取历史记录中的 assignee若 assignee 为空(候选人任务未签收),则查 BusinessUnitAudit 记录获取实际提交人
variables.put(CommString.ACTI_KEK_Assignee, list.get(0).getAssignee()); String targetAssignee = null;
if (list != null && list.size() > 0) {
targetAssignee = list.get(0).getAssignee();
}
if (targetAssignee == null && !wortTaskId.isEmpty()) {
// 历史 assignee 为空时,从 BusinessUnitAudit 记录中查找该步骤的实际提交人
List<BusinessUnitAudit> previousAuditList = this.selectListByWhere(
"where businessid='" + entity.getBusinessid() + "' and taskdefinitionkey='" + wortTaskId + "' order by insdt desc");
if (previousAuditList != null && previousAuditList.size() > 0) {
targetAssignee = previousAuditList.get(0).getInsuser();
}
}
// 设置退回目标处理人(若仍为空则由流程变量 userIds 确定候选人,不再回退到工单创建人)
variables.put(CommString.ACTI_KEK_Assignee, targetAssignee);
if(entity.getAuditopinion()!=null && !entity.getAuditopinion().isEmpty()){ if(entity.getAuditopinion()!=null && !entity.getAuditopinion().isEmpty()){
taskService.addComment(entity.getTaskid(), entity.getProcessid(), entity.getAuditopinion()); taskService.addComment(entity.getTaskid(), entity.getProcessid(), entity.getAuditopinion());
} }
}else {
variables.put(CommString.ACTI_KEK_Assignee, businessUnitAdapter.getInsuser());
if(entity.getAuditopinion()!=null && !entity.getAuditopinion().isEmpty()){
taskService.addComment(entity.getTaskid(), entity.getProcessid(), entity.getAuditopinion());
}
}
} }
//int res=0; //int res=0;
taskService.complete(entity.getTaskid(), variables); taskService.complete(entity.getTaskid(), variables);
@ -141,17 +148,24 @@ public class BusinessUnitAuditService implements CommService<BusinessUnitAudit>{
BusinessUnitRecord businessUnitRecord = new BusinessUnitRecord(entity); BusinessUnitRecord businessUnitRecord = new BusinessUnitRecord(entity);
if(entity.getPassstatus()){ if(entity.getPassstatus()){
//通过 //通过
if(variables.get(CommString.ACTI_KEK_Candidate_Users)!=null){ String candidateUsers = variables.get(CommString.ACTI_KEK_Candidate_Users) != null
businessUnitRecord.sendMessage(variables.get(CommString.ACTI_KEK_Candidate_Users).toString(),""); ? variables.get(CommString.ACTI_KEK_Candidate_Users).toString() : null;
if(candidateUsers != null && !candidateUsers.isEmpty()){
// 有下一步接收人,通知下一步处理人
businessUnitRecord.sendMessage(candidateUsers, "");
}else if(variables.get(CommString.ACTI_KEK_AssigneeList) != null){
// 会签
businessUnitRecord.sendMessage(entity.getTargetusers(), "");
}else{ }else{
//会签 // 最后一步,无下一步处理人,通知当前提交人(完成确认)
if(variables.get(CommString.ACTI_KEK_AssigneeList)!=null){ if(entity.getInsuser() != null && !entity.getInsuser().isEmpty()){
businessUnitRecord.sendMessage(entity.getTargetusers(),""); businessUnitRecord.sendMessage(entity.getInsuser(), "");
} }
} }
}else{ }else{
if(variables.get(CommString.ACTI_KEK_Assignee)!=null){ // 退回:通知目标处理人(排除空值,避免错误发送)
businessUnitRecord.sendMessage(variables.get(CommString.ACTI_KEK_Assignee).toString(),""); if(variables.get(CommString.ACTI_KEK_Assignee) != null){
businessUnitRecord.sendMessage(variables.get(CommString.ACTI_KEK_Assignee).toString(), "");
} }
} }

View File

@ -2,6 +2,7 @@ package com.sipai.service.report;
import com.sipai.entity.business.BusinessUnitAudit; import com.sipai.entity.business.BusinessUnitAudit;
import com.sipai.entity.report.RptCreate; import com.sipai.entity.report.RptCreate;
import com.sipai.entity.user.User;
import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserException;
import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.ParserConfigurationException;
@ -45,4 +46,11 @@ public interface RptCreateService {
//改变状态 //改变状态
public abstract int updateStatus(String id); public abstract int updateStatus(String id);
/** 检查用户是否有报表生成权限
* @param rptInfoSetId 报表配置id
* @param user 当前用户
* @return true=有权限, false=无权限
*/
public abstract boolean checkGeneratePermission(String rptInfoSetId, User user);
} }

View File

@ -60,4 +60,18 @@ public interface RptDayLogService {
* @return * @return
*/ */
public abstract Result onekeyAudit(String ids ,User cu,String rptdeptId); public abstract Result onekeyAudit(String ids ,User cu,String rptdeptId);
/** 检查用户是否有填报权限
* @param rptdeptId 填报配置id
* @param user 当前用户
* @return true=有权限, false=无权限
*/
public abstract boolean checkInputPermission(String rptdeptId, User user);
/** 检查用户是否有生成权限
* @param rptdeptId 填报配置id
* @param user 当前用户
* @return true=有权限, false=无权限
*/
public abstract boolean checkGeneratePermission(String rptdeptId, User user);
} }

View File

@ -72,6 +72,14 @@ public interface RptInfoSetService {
*/ */
public abstract String getRptInfoSetIds(String userId, String unitId, String type); public abstract String getRptInfoSetIds(String userId, String unitId, String type);
/**
* 检查用户是否有生成权限
* @param rptInfoSetId 报表配置ID
* @param user 用户
* @return true=有权限, false=无权限
*/
public abstract boolean checkGeneratePermission(String rptInfoSetId, com.sipai.entity.user.User user);
/** /**
* *
* @param list_result * @param list_result

View File

@ -13,6 +13,7 @@ import com.sipai.entity.report.*;
import com.sipai.entity.scada.MPoint; import com.sipai.entity.scada.MPoint;
import com.sipai.entity.scada.TempReport; import com.sipai.entity.scada.TempReport;
import com.sipai.entity.user.User; import com.sipai.entity.user.User;
import com.sipai.entity.user.UserJob;
import com.sipai.entity.work.GroupDetail; import com.sipai.entity.work.GroupDetail;
import com.sipai.entity.work.Scheduling; import com.sipai.entity.work.Scheduling;
import com.sipai.service.activiti.WorkflowProcessDefinitionService; import com.sipai.service.activiti.WorkflowProcessDefinitionService;
@ -24,6 +25,7 @@ import com.sipai.service.report.*;
import com.sipai.service.scada.MPointService; import com.sipai.service.scada.MPointService;
import com.sipai.service.scada.TempReportService; import com.sipai.service.scada.TempReportService;
import com.sipai.service.user.UserService; import com.sipai.service.user.UserService;
import com.sipai.service.user.UserJobService;
import com.sipai.service.work.GroupDetailService; import com.sipai.service.work.GroupDetailService;
import com.sipai.service.work.SchedulingService; import com.sipai.service.work.SchedulingService;
import com.sipai.tools.*; import com.sipai.tools.*;
@ -107,6 +109,8 @@ public class RptCreateServiceImpl implements RptCreateService {
private BusinessUnitHandleDetailService businessUnitHandleDetailService; private BusinessUnitHandleDetailService businessUnitHandleDetailService;
@Resource @Resource
private GroupDetailService groupDetailService; private GroupDetailService groupDetailService;
@Resource
private UserJobService userJobService;
@Override @Override
public RptCreate selectById(String id) { public RptCreate selectById(String id) {
@ -833,6 +837,20 @@ public class RptCreateServiceImpl implements RptCreateService {
// System.out.println("rptdt==============================================================" + rptdt); // System.out.println("rptdt==============================================================" + rptdt);
String rpttype = rptInfoSet.getRpttype();//报表类型 String rpttype = rptInfoSet.getRpttype();//报表类型
String bucketName = "rptinfosetfile"; String bucketName = "rptinfosetfile";
String endtype = ".xls"; // 默认文件扩展名
// 首先确保report bucket存在
try {
MinioClient minioClient = new MinioClient(minioProp.getEndPoint(), minioProp.getAccessKey(), minioProp.getSecretKey());
boolean isExist = minioClient.bucketExists("report");
if (!isExist) {
minioClient.makeBucket("report");
logger.info("Created MinIO bucket: report");
}
} catch (Exception e) {
logger.error("Failed to create report bucket", e);
}
List<RptInfoSetFile> filelist = this.rptInfoSetFileService.selectListByWhere(" where masterid='" + rptInfoSet.getId() + "' "); List<RptInfoSetFile> filelist = this.rptInfoSetFileService.selectListByWhere(" where masterid='" + rptInfoSet.getId() + "' ");
String path = ""; String path = "";
try { try {
@ -843,7 +861,11 @@ public class RptCreateServiceImpl implements RptCreateService {
rptInfoSetFile.setAbspath(obj); rptInfoSetFile.setAbspath(obj);
} }
} catch (Exception e) { } catch (Exception e) {
System.out.println(e); logger.error("Failed to get template file from MinIO", e);
}
if (filelist == null || filelist.size() == 0) {
logger.error("No template file configured for report: {}", rptInfoSet.getId());
return null;
} }
if (filelist != null && filelist.size() > 0) { if (filelist != null && filelist.size() > 0) {
// 设定Excel文件所在路径 // 设定Excel文件所在路径
@ -854,7 +876,7 @@ public class RptCreateServiceImpl implements RptCreateService {
byte[] bytes_m = commonFileService.getInputStreamBytes(FileNameSpaceEnum.RptInfoSetFile.getNameSpace(), path); byte[] bytes_m = commonFileService.getInputStreamBytes(FileNameSpaceEnum.RptInfoSetFile.getNameSpace(), path);
// Check if bytes_m is null or empty // Check if bytes_m is null or empty
if (bytes_m == null || bytes_m.length == 0) { if (bytes_m == null || bytes_m.length == 0) {
logger.error("Excel file is empty or not found: " + path); logger.error("Excel template file is empty or not found: {}", path);
return null; return null;
} }
// 直接从本地文件创建Workbook, 从输入流创建Workbook // 直接从本地文件创建Workbook, 从输入流创建Workbook
@ -866,7 +888,8 @@ public class RptCreateServiceImpl implements RptCreateService {
logger.error("Failed to create workbook from file: " + path, e); logger.error("Failed to create workbook from file: " + path, e);
e.printStackTrace(); e.printStackTrace();
} }
String endtype = path.toLowerCase().endsWith(".xlsx") ? ".xlsx" : ".xls"; // 更新文件扩展名(根据模板文件)
endtype = path.toLowerCase().endsWith(".xlsx") ? ".xlsx" : ".xls";
// 生成一个样式,用在表格数据 // 生成一个样式,用在表格数据
CellStyle listStyle = null; CellStyle listStyle = null;
listStyle = workbook.createCellStyle(); listStyle = workbook.createCellStyle();
@ -1374,6 +1397,10 @@ public class RptCreateServiceImpl implements RptCreateService {
//删除文件 只保留minio中的文件 //删除文件 只保留minio中的文件
File file = new File(file3);//根据指定的文件名创建File对象 File file = new File(file3);//根据指定的文件名创建File对象
file.delete(); file.delete();
// 保存文件路径到数据库
rptCreate.setAbspath(showname + endtype);
rptCreateDao.updateByPrimaryKeySelective(rptCreate);
} catch (NoSuchAlgorithmException e) { } catch (NoSuchAlgorithmException e) {
e.printStackTrace(); e.printStackTrace();
} catch (IOException e) { } catch (IOException e) {
@ -1912,4 +1939,54 @@ public class RptCreateServiceImpl implements RptCreateService {
return false; return false;
} }
/**
* 检查用户是否有报表生成权限
* @param rptInfoSetId 报表配置id
* @param user 当前用户
* @return true=有权限, false=无权限
*/
@Override
public boolean checkGeneratePermission(String rptInfoSetId, User user) {
if (user == null || rptInfoSetId == null || rptInfoSetId.isEmpty()) {
return false;
}
// 管理员默认有权限
if ("emp01".equals(user.getId())) {
return true;
}
// 获取报表配置信息
RptInfoSet rptInfoSet = rptInfoSetService.selectById4Simple(rptInfoSetId);
if (rptInfoSet == null) {
return false;
}
String userId = user.getId();
// 检查用户是否在createusers列表中
String createusers = rptInfoSet.getCreateusers();
if (createusers != null && !createusers.isEmpty()) {
if (createusers.contains(userId)) {
return true;
}
}
// 检查用户岗位是否在generate_position列表中
String generatePosition = rptInfoSet.getGeneratePosition();
if (generatePosition != null && !generatePosition.isEmpty()) {
// 获取用户的所有岗位
List<UserJob> userJobs = userJobService.selectListByWhere(" where userid='" + userId + "'");
if (userJobs != null && !userJobs.isEmpty()) {
for (UserJob userJob : userJobs) {
if (generatePosition.contains(userJob.getJobid())) {
return true;
}
}
}
}
return false;
}
} }

View File

@ -10,16 +10,19 @@ import com.sipai.entity.scada.MPoint;
import com.sipai.entity.scada.MPointExpand; import com.sipai.entity.scada.MPointExpand;
import com.sipai.entity.scada.MPointHistory; import com.sipai.entity.scada.MPointHistory;
import com.sipai.entity.user.User; import com.sipai.entity.user.User;
import com.sipai.entity.user.UserJob;
import com.sipai.service.msg.MsgService; import com.sipai.service.msg.MsgService;
import com.sipai.service.msg.MsgServiceImpl; import com.sipai.service.msg.MsgServiceImpl;
import com.sipai.service.msg.MsgTypeService; import com.sipai.service.msg.MsgTypeService;
import com.sipai.service.report.RptDayLogService; import com.sipai.service.report.RptDayLogService;
import com.sipai.service.report.RptDayValSetService; import com.sipai.service.report.RptDayValSetService;
import com.sipai.service.report.RptDeptSetService; import com.sipai.service.report.RptDeptSetService;
import com.sipai.service.report.RptInfoSetService;
import com.sipai.service.scada.MPointExpandService; import com.sipai.service.scada.MPointExpandService;
import com.sipai.service.scada.MPointHistoryService; import com.sipai.service.scada.MPointHistoryService;
import com.sipai.service.scada.MPointService; import com.sipai.service.scada.MPointService;
import com.sipai.service.user.UserService; import com.sipai.service.user.UserService;
import com.sipai.service.user.UserJobService;
import com.sipai.tools.CommUtil; import com.sipai.tools.CommUtil;
import com.sipai.tools.SpringContextUtil; import com.sipai.tools.SpringContextUtil;
import net.sf.json.JSONArray; import net.sf.json.JSONArray;
@ -65,6 +68,11 @@ public class RptDayLogServiceImpl implements RptDayLogService {
private MsgTypeService msgtypeService; private MsgTypeService msgtypeService;
@Resource @Resource
private MPointExpandService mPointExpandService; private MPointExpandService mPointExpandService;
@Resource
private UserJobService userJobService;
@Resource
private RptInfoSetService rptInfoSetService;
@Override @Override
public RptDayLog selectById(String id) { public RptDayLog selectById(String id) {
@ -878,4 +886,87 @@ public class RptDayLogServiceImpl implements RptDayLogService {
return result; return result;
} }
@Override
public boolean checkInputPermission(String rptdeptId, User user) {
if (rptdeptId == null || user == null) {
return false;
}
RptDeptSet rptDeptSet = this.rptDeptSetService.selectById(rptdeptId);
if (rptDeptSet == null) {
return false;
}
Integer roleType = rptDeptSet.getRoleType();
String inputuser = rptDeptSet.getInputuser();
String inputjob = rptDeptSet.getInputjob();
String userId = user.getId();
// role_type=2: 不控制权限,所有人都可以填报
if (roleType != null && roleType == 2) {
return true;
}
// role_type 为 null 或空字符串: 允许所有人
if (roleType == null || roleType == 0 && (inputuser == null || inputuser.isEmpty())
|| roleType == 1 && (inputjob == null || inputjob.isEmpty())) {
return true;
}
// role_type=0: 按用户控制权限
if (roleType == 0) {
if (inputuser != null && !inputuser.isEmpty()) {
// 检查当前用户ID是否在inputuser中
String[] userIds = inputuser.split(",");
for (String uid : userIds) {
if (userId.equals(uid.trim())) {
return true;
}
}
}
return false;
}
// role_type=1: 按岗位控制权限
if (roleType == 1) {
if (inputjob != null && !inputjob.isEmpty()) {
// 获取当前用户的所有岗位
List<UserJob> userJobs = this.userJobService.selectListByWhere("where userid = '" + userId + "'");
if (userJobs != null && !userJobs.isEmpty()) {
String[] jobIds = inputjob.split(",");
for (UserJob userJob : userJobs) {
String userJobId = userJob.getJobid();
for (String jobId : jobIds) {
if (userJobId != null && userJobId.equals(jobId.trim())) {
return true;
}
}
}
}
}
return false;
}
return false;
}
@Override
public boolean checkGeneratePermission(String rptdeptId, User user) {
if (rptdeptId == null || user == null) {
return false;
}
RptDeptSet rptDeptSet = this.rptDeptSetService.selectById(rptdeptId);
if (rptDeptSet == null) {
return false;
}
String rptInfoSetId = rptDeptSet.getBizId(); // 假设bizId是RptInfoSet的ID
if (rptInfoSetId == null || rptInfoSetId.isEmpty()) {
return false;
}
return this.rptInfoSetService.checkGeneratePermission(rptInfoSetId, user);
}
} }

View File

@ -615,4 +615,49 @@ public class RptInfoSetServiceImpl implements RptInfoSetService {
} }
return list_result; return list_result;
} }
@Override
public boolean checkGeneratePermission(String rptInfoSetId, User user) {
if (rptInfoSetId == null || user == null) {
return false;
}
RptInfoSet rptInfoSet = this.selectById(rptInfoSetId);
if (rptInfoSet == null) {
return false;
}
String userId = user.getId();
String createusers = rptInfoSet.getCreateusers();
String generatePosition = rptInfoSet.getGeneratePosition();
// 检查createusers
if (createusers != null && !createusers.isEmpty()) {
String[] userIds = createusers.split(",");
for (String uid : userIds) {
if (userId.equals(uid.trim())) {
return true;
}
}
}
// 检查generatePosition
if (generatePosition != null && !generatePosition.isEmpty()) {
// 获取当前用户的所有岗位
List<UserJob> userJobs = userJobService.selectListByWhere("where userid = '" + userId + "'");
if (userJobs != null && !userJobs.isEmpty()) {
String[] jobIds = generatePosition.split(",");
for (UserJob userJob : userJobs) {
String userJobId = userJob.getJobid();
for (String jobId : jobIds) {
if (userJobId != null && userJobId.equals(jobId.trim())) {
return true;
}
}
}
}
}
return false;
}
} }

View File

@ -47,12 +47,22 @@ public class SafetyCheckActivityService {
if (processDefinitions == null || processDefinitions.size() == 0) { if (processDefinitions == null || processDefinitions.size() == 0) {
return Result.failed(company.getName() + "缺少该流程定义。"); return Result.failed(company.getName() + "缺少该流程定义。");
} }
// 防止重复发起:若该业务已有运行中的流程实例,则跳过,避免创建双倍待办任务
List<org.activiti.engine.runtime.ProcessInstance> existingInstances = workflowService.getRuntimeService()
.createProcessInstanceQuery()
.processDefinitionKey(processKey)
.processInstanceBusinessKey(bizId)
.active()
.list();
if (existingInstances != null && !existingInstances.isEmpty()) {
return Result.success();
}
// 启动流程实例 // 启动流程实例
// 设置网关条件 // 设置网关条件
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put(CommString.ACTI_KEK_Condition, 1); map.put(CommString.ACTI_KEK_Condition, 1);
map.put(CommString.ACTI_KEK_Assignee, applyUserId); map.put(CommString.ACTI_KEK_Assignee, applyUserId);
map.put(CommString.ACTI_KEK_Candidate_Users, applyUserId); map.put(CommString.ACTI_KEK_Candidate_Users, "");
// 启动流程 // 启动流程
ProcessInstance processInstance = workflowService.startWorkflow( ProcessInstance processInstance = workflowService.startWorkflow(
@ -71,7 +81,7 @@ public class SafetyCheckActivityService {
Map<String, Object> map2 = new HashMap<>(); Map<String, Object> map2 = new HashMap<>();
map2.put(CommString.ACTI_KEK_Condition, 1); map2.put(CommString.ACTI_KEK_Condition, 1);
map2.put(CommString.ACTI_KEK_Assignee, nextUserId); map2.put(CommString.ACTI_KEK_Assignee, nextUserId);
map2.put(CommString.ACTI_KEK_Candidate_Users, nextUserId); map2.put(CommString.ACTI_KEK_Candidate_Users, "");
workflowService.getTaskService().complete(task.getId(), map2); workflowService.getTaskService().complete(task.getId(), map2);
return Result.success(); return Result.success();
@ -91,10 +101,9 @@ public class SafetyCheckActivityService {
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put(CommString.ACTI_KEK_Condition, pass); map.put(CommString.ACTI_KEK_Condition, pass);
map.put(CommString.ACTI_KEK_Assignee, nextUserId); map.put(CommString.ACTI_KEK_Assignee, nextUserId);
map.put(CommString.ACTI_KEK_Candidate_Users, nextUserId); map.put(CommString.ACTI_KEK_Candidate_Users, "");
for (Task task : tasks) { // 只完成第一个任务,防止多任务场景下指数级创建待办(如因重复发起导致有多个并发任务时)
workflowService.getTaskService().complete(task.getId(), map); workflowService.getTaskService().complete(tasks.get(0).getId(), map);
}
return Result.success(); return Result.success();
} }

View File

@ -101,6 +101,9 @@ public class SafetyFilesService implements CommService<SafetyFiles> {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
List<MultipartFile> files = multipartRequest.getFiles("file"); List<MultipartFile> files = multipartRequest.getFiles("file");
for (MultipartFile mfile : files) { for (MultipartFile mfile : files) {
if (mfile == null || mfile.getSize() == 0) {
continue;
}
String suffix = mfile.getOriginalFilename().substring(mfile.getOriginalFilename().lastIndexOf(".")); String suffix = mfile.getOriginalFilename().substring(mfile.getOriginalFilename().lastIndexOf("."));
//判断保存文件的路径是否存在 //判断保存文件的路径是否存在

View File

@ -100,44 +100,65 @@ public class SafetyFlowTaskService implements CommService<SafetyFlowTask> {
String copyNames, String copyNames,
String record) throws ServiceException { String record) throws ServiceException {
SafetyFlowTask safetyFlowTask; SafetyFlowTask safetyFlowTask = null;
List<SafetyFlowTask> list = selectListByWhere(" where biz_id='" + bizId + "' order by create_time desc"); List<SafetyFlowTask> list = selectListByWhere(" where biz_id='" + bizId + "' order by create_time desc");
if (list != null && list.size() != 0 && list.get(0).getTaskName().equals(taskTitle)) {
safetyFlowTask = list.get(0);
safetyFlowTask.setIsDone(true);
safetyFlowTask.setCopy(copyNames);
safetyFlowTask.setDoneTime(DateUtil.toStr(null, new Date()));
update(safetyFlowTask);
} else if (list != null && list.size() != 0 && !list.get(0).getTaskName().equals(taskTitle)) {
safetyFlowTask = list.get(0);
safetyFlowTask.setIsDone(true);
safetyFlowTask.setCopy(copyNames);
safetyFlowTask.setDoneTime(DateUtil.toStr(null, new Date()));
update(safetyFlowTask);
safetyFlowTask = new SafetyFlowTask(); // 查找是否已存在相同taskTitle的记录
SafetyFlowTask existingTask = null;
safetyFlowTask.setId(UUID.randomUUID().toString()); if (list != null && !list.isEmpty()) {
safetyFlowTask.setBizId(bizId); for (SafetyFlowTask task : list) {
safetyFlowTask.setTaskName(taskTitle); if (task.getTaskName().equals(taskTitle)) {
safetyFlowTask.setIsDone(isDone); existingTask = task;
safetyFlowTask.setDoneTime(isDone ? DateUtil.toStr(null, new Date()) : null); break;
safetyFlowTask.setAuditor(auditorName); }
safetyFlowTask.setCopy(copyNames); }
save(safetyFlowTask); }
if (isDone) {
// 标记任务为完成
if (existingTask != null) {
// 更新已存在的记录
existingTask.setIsDone(true);
existingTask.setCopy(copyNames);
existingTask.setDoneTime(DateUtil.toStr(null, new Date()));
update(existingTask);
safetyFlowTask = existingTask;
} else { } else {
// 创建新的完成记录
safetyFlowTask = new SafetyFlowTask(); safetyFlowTask = new SafetyFlowTask();
safetyFlowTask.setId(UUID.randomUUID().toString()); safetyFlowTask.setId(UUID.randomUUID().toString());
safetyFlowTask.setBizId(bizId); safetyFlowTask.setBizId(bizId);
safetyFlowTask.setTaskName(taskTitle); safetyFlowTask.setTaskName(taskTitle);
safetyFlowTask.setIsDone(isDone); safetyFlowTask.setIsDone(true);
safetyFlowTask.setDoneTime(isDone ? DateUtil.toStr(null, new Date()) : null); safetyFlowTask.setDoneTime(DateUtil.toStr(null, new Date()));
safetyFlowTask.setAuditor(auditorName); safetyFlowTask.setAuditor(auditorName);
safetyFlowTask.setCopy(copyNames); safetyFlowTask.setCopy(copyNames);
save(safetyFlowTask); save(safetyFlowTask);
} }
} else {
// 创建待处理任务
if (existingTask == null) {
// 不存在才创建
safetyFlowTask = new SafetyFlowTask();
safetyFlowTask.setId(UUID.randomUUID().toString());
safetyFlowTask.setBizId(bizId);
safetyFlowTask.setTaskName(taskTitle);
safetyFlowTask.setIsDone(false);
safetyFlowTask.setDoneTime(null);
safetyFlowTask.setAuditor(auditorName);
safetyFlowTask.setCopy(copyNames);
save(safetyFlowTask);
} else {
// 已存在,重置为待处理状态(用于流程回退后重新处理)
existingTask.setIsDone(false);
existingTask.setDoneTime(null);
existingTask.setAuditor(auditorName);
existingTask.setCopy(copyNames);
update(existingTask);
safetyFlowTask = existingTask;
}
}
if (StringUtils.isNotEmpty(record)) { if (StringUtils.isNotEmpty(record)) {
SafetyFlowTaskDetail safetyFlowTaskDetail = new SafetyFlowTaskDetail(); SafetyFlowTaskDetail safetyFlowTaskDetail = new SafetyFlowTaskDetail();
safetyFlowTaskDetail.setId(UUID.randomUUID().toString()); safetyFlowTaskDetail.setId(UUID.randomUUID().toString());

View File

@ -1474,7 +1474,7 @@ public class MPointService {
if (DateUtil.isCellDateFormatted(cell)) { if (DateUtil.isCellDateFormatted(cell)) {
//用于转化为日期格式 //用于转化为日期格式
Date d = cell.getDateCellValue(); Date d = cell.getDateCellValue();
SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String cellDate = formater.format(d); String cellDate = formater.format(d);
return cellDate; return cellDate;
} else { } else {
@ -1510,7 +1510,7 @@ public class MPointService {
if (DateUtil.isCellDateFormatted(cell)) { if (DateUtil.isCellDateFormatted(cell)) {
//用于转化为日期格式 //用于转化为日期格式
Date d = cell.getDateCellValue(); Date d = cell.getDateCellValue();
SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String cellDate = formater.format(d); String cellDate = formater.format(d);
return cellDate; return cellDate;
} else { } else {

View File

@ -26,13 +26,16 @@ import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import static org.apache.poi.ss.usermodel.CellType.STRING; import static org.apache.poi.ss.usermodel.CellType.STRING;
@Service @Service
public class SewageService implements CommService<Sewage>{ public class SewageService implements CommService<Sewage> {
@Resource @Resource
private SewageDao SewageDao; private SewageDao SewageDao;
@Resource @Resource
@ -71,16 +74,16 @@ public class SewageService implements CommService<Sewage>{
if (processSection != null) { if (processSection != null) {
sewage.setProcessSection(processSection); sewage.setProcessSection(processSection);
} }
List<SewageInput> sewageInputList = this.sewageInputService.selectListByWhere("where sewage_id='"+sewage.getContractNumber()+"' order by insdt"); List<SewageInput> sewageInputList = this.sewageInputService.selectListByWhere("where sewage_id='" + sewage.getContractNumber() + "' order by insdt");
if(sewageInputList!=null && sewageInputList.size()>0){ if (sewageInputList != null && sewageInputList.size() > 0) {
sewage.set_input(true); sewage.set_input(true);
}else{ } else {
sewage.set_input(false); sewage.set_input(false);
} }
List<JsywPoint> jsywPointList = this.jsywPointService.selectListByWhere("where psname='"+sewage.getName()+"' order by update_date"); List<JsywPoint> jsywPointList = this.jsywPointService.selectListByWhere("where psname='" + sewage.getName() + "' order by update_date");
if(jsywPointList!=null && jsywPointList.size()>0){ if (jsywPointList != null && jsywPointList.size() > 0) {
sewage.set_point(true); sewage.set_point(true);
}else{ } else {
sewage.set_point(false); sewage.set_point(false);
} }
return sewage; return sewage;
@ -112,27 +115,29 @@ public class SewageService implements CommService<Sewage>{
if (processSection != null) { if (processSection != null) {
item.setProcessSection(processSection); item.setProcessSection(processSection);
} }
List<SewageInput> sewageInputList = this.sewageInputService.selectListByWhere4Pure("where sewage_id='"+item.getContractNumber()+"' order by insdt"); List<SewageInput> sewageInputList = this.sewageInputService.selectListByWhere4Pure("where sewage_id='" + item.getContractNumber() + "' order by insdt");
if(sewageInputList!=null && sewageInputList.size()>0){ if (sewageInputList != null && sewageInputList.size() > 0) {
item.set_input(true); item.set_input(true);
}else{ } else {
item.set_input(false); item.set_input(false);
} }
List<JsywPoint> jsywPointList = this.jsywPointService.selectListByWhere("where psname='"+item.getName()+"' order by update_date"); List<JsywPoint> jsywPointList = this.jsywPointService.selectListByWhere("where psname='" + item.getName() + "' order by update_date");
if(jsywPointList!=null && jsywPointList.size()>0){ if (jsywPointList != null && jsywPointList.size() > 0) {
item.set_point(true); item.set_point(true);
}else{ } else {
item.set_point(false); item.set_point(false);
} }
} }
return list; return list;
} }
@Override @Override
public int deleteByWhere(String wherestr) { public int deleteByWhere(String wherestr) {
Sewage sewage = new Sewage(); Sewage sewage = new Sewage();
sewage.setWhere(wherestr); sewage.setWhere(wherestr);
return SewageDao.deleteByWhere(sewage); return SewageDao.deleteByWhere(sewage);
} }
public List<Sewage> selectDistinctCityByWhere(String wherestr) { public List<Sewage> selectDistinctCityByWhere(String wherestr) {
Sewage sewage = new Sewage(); Sewage sewage = new Sewage();
sewage.setWhere(wherestr); sewage.setWhere(wherestr);
@ -140,6 +145,28 @@ public class SewageService implements CommService<Sewage>{
return list; return list;
} }
public boolean existsByContractNumber(String contractNumber) {
if (contractNumber == null || contractNumber.trim().isEmpty()) {
return false;
}
Integer count = SewageDao.selectCountByContractNumber(contractNumber.trim());
return count != null && count > 0;
}
public boolean existsByContractNumberExcludeId(String contractNumber, String id) {
if (contractNumber == null || contractNumber.trim().isEmpty()) {
return false;
}
if (id == null || id.trim().isEmpty()) {
return existsByContractNumber(contractNumber);
}
Map<String, String> params = new HashMap<String, String>();
params.put("contractNumber", contractNumber.trim());
params.put("id", id.trim());
Integer count = SewageDao.selectCountByContractNumberExcludeId(params);
return count != null && count > 0;
}
/** /**
* xls文件数据转换 * xls文件数据转换
* *
@ -171,7 +198,9 @@ public class SewageService implements CommService<Sewage>{
default: default:
return null; return null;
} }
} private String getBizId(String bizName) { }
private String getBizId(String bizName) {
String bizId = ""; String bizId = "";
List<Company> CompanyList = this.companyService.selectListByWhere("where sname = '" + bizName + "' or name = '" + bizName + "' "); List<Company> CompanyList = this.companyService.selectListByWhere("where sname = '" + bizName + "' or name = '" + bizName + "' ");
if (CompanyList != null && CompanyList.size() > 0) { if (CompanyList != null && CompanyList.size() > 0) {
@ -203,7 +232,7 @@ public class SewageService implements CommService<Sewage>{
Sewage sewage = new Sewage(); Sewage sewage = new Sewage();
HSSFCell cell = row.getCell(1); HSSFCell cell = row.getCell(1);
if (getStringVal(cell)==null) { if (getStringVal(cell) == null) {
continue; continue;
} }
sewage.setContractNumber(getStringVal(cell)); sewage.setContractNumber(getStringVal(cell));
@ -224,9 +253,9 @@ public class SewageService implements CommService<Sewage>{
cell = row.getCell(7); cell = row.getCell(7);
sewage.setPhone(getStringVal(cell)); sewage.setPhone(getStringVal(cell));
cell = row.getCell(8); cell = row.getCell(8);
List<ProcessSection> processSectionList = this.processSectionService.selectListByWhere("where name = '"+getStringVal(cell)+"' and unit_id = 'JSBZ'"); List<ProcessSection> processSectionList = this.processSectionService.selectListByWhere("where name = '" + getStringVal(cell) + "' and unit_id = 'JSBZ'");
if (processSectionList.size()>0) { if (processSectionList.size() > 0) {
sewage.setProcessSectionId(processSectionList.get(0)==null?"":processSectionList.get(0).getCode()); sewage.setProcessSectionId(processSectionList.get(0) == null ? "" : processSectionList.get(0).getCode());
} }
cell = row.getCell(9); cell = row.getCell(9);
sewage.setUnitId(this.getBizId(getStringVal(cell))); sewage.setUnitId(this.getBizId(getStringVal(cell)));
@ -241,7 +270,7 @@ public class SewageService implements CommService<Sewage>{
cell = row.getCell(14); cell = row.getCell(14);
sewage.setPermit(getStringVal(cell)); sewage.setPermit(getStringVal(cell));
cell = row.getCell(15); cell = row.getCell(15);
sewage.setDisplacement(Integer.parseInt((getStringVal(cell)==null?"0":getStringVal(cell)))); sewage.setDisplacement(Integer.parseInt((getStringVal(cell) == null ? "0" : getStringVal(cell))));
cell = row.getCell(16); cell = row.getCell(16);
sewage.setStandard(getStringVal(cell)); sewage.setStandard(getStringVal(cell));
cell = row.getCell(17); cell = row.getCell(17);
@ -259,8 +288,8 @@ public class SewageService implements CommService<Sewage>{
sewage.setId(CommUtil.getUUID()); sewage.setId(CommUtil.getUUID());
List<Sewage> selectListByWhere = this.selectListByWhere("where contract_number = '"+sewage.getContractNumber()+"'"); List<Sewage> selectListByWhere = this.selectListByWhere("where contract_number = '" + sewage.getContractNumber() + "'");
if (selectListByWhere!=null&&selectListByWhere.size()>0) { if (selectListByWhere != null && selectListByWhere.size() > 0) {
sewage.setId(selectListByWhere.get(0).getId()); sewage.setId(selectListByWhere.get(0).getId());
int result = this.update(sewage); int result = this.update(sewage);
@ -269,7 +298,7 @@ public class SewageService implements CommService<Sewage>{
} else { } else {
failNum++; failNum++;
} }
}else { } else {
int result = this.save(sewage); int result = this.save(sewage);
if (result == 1) { if (result == 1) {
@ -294,7 +323,11 @@ public class SewageService implements CommService<Sewage>{
} }
public void outExcelFun(HttpServletResponse response) throws IOException { public void outExcelFun(HttpServletResponse response) throws IOException {
String fileName = "金山排海工程有限公司纳管企业表.xls"; outExcelFun(response, null);
}
public void outExcelFun(HttpServletResponse response, String ids) throws IOException {
String fileName = "金山卫污水厂纳管企业表.xls";
String title = "纳管企业"; String title = "纳管企业";
// 声明一个工作薄 // 声明一个工作薄
HSSFWorkbook workbook = new HSSFWorkbook(); HSSFWorkbook workbook = new HSSFWorkbook();
@ -418,13 +451,13 @@ public class SewageService implements CommService<Sewage>{
handRow.setHeight((short) 500); handRow.setHeight((short) 500);
HSSFCell cell = handRow.createCell(0); HSSFCell cell = handRow.createCell(0);
cell.setCellStyle(headStyle); cell.setCellStyle(headStyle);
cell.setCellValue("金山排海工程有限公司纳管企业表"); cell.setCellValue("金山卫污水厂纳管企业表");
// 说明 // 说明
// HSSFCell smcell = handRow.createCell(5); // HSSFCell smcell = handRow.createCell(5);
// smcell.setCellStyle(tipStyle); // smcell.setCellStyle(tipStyle);
// smcell.setCellValue("注:日期格式(xxxx-xx-xx或xxxx/xx/xx), 班组类型,班组, 班次(根据系统配置名称填写),模式(填写巡检菜单里面的巡检模式) 排版日期,班组类型,班组,班次,模式都为必填项(集控班组可不填模式)。"); // smcell.setCellValue("注:日期格式(xxxx-xx-xx或xxxx/xx/xx), 班组类型,班组, 班次(根据系统配置名称填写),模式(填写巡检菜单里面的巡检模式) 排版日期,班组类型,班组,班次,模式都为必填项(集控班组可不填模式)。");
List<Sewage> list = this.selectListByWhere("where 1=1 order by contract_order asc"); List<Sewage> list = this.selectListByWhere(buildExportWhere(ids));
int n = 1; int n = 1;
if (list != null && list.size() > 0) { if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) { for (int i = 0; i < list.size(); i++) {
@ -441,7 +474,7 @@ public class SewageService implements CommService<Sewage>{
HSSFCell listcell2 = listrow1.createCell(2); HSSFCell listcell2 = listrow1.createCell(2);
listcell2.setCellStyle(listStyle); listcell2.setCellStyle(listStyle);
listcell2.setCellValue(sewage.getContractOrder()); listcell2.setCellValue(sewage.getContractOrder() == null ? 1 : sewage.getContractOrder());
HSSFCell listcell3 = listrow1.createCell(3); HSSFCell listcell3 = listrow1.createCell(3);
listcell3.setCellStyle(listStyle); listcell3.setCellStyle(listStyle);
@ -501,7 +534,7 @@ public class SewageService implements CommService<Sewage>{
HSSFCell listcell15 = listrow1.createCell(15); HSSFCell listcell15 = listrow1.createCell(15);
listcell15.setCellStyle(listStyle); listcell15.setCellStyle(listStyle);
listcell15.setCellValue((sewage.getDisplacement()==null?0:sewage.getDisplacement())); listcell15.setCellValue((sewage.getDisplacement() == null ? 0 : sewage.getDisplacement()));
HSSFCell listcell16 = listrow1.createCell(16); HSSFCell listcell16 = listrow1.createCell(16);
listcell16.setCellStyle(listStyle); listcell16.setCellStyle(listStyle);
@ -572,8 +605,33 @@ public class SewageService implements CommService<Sewage>{
workbook.close(); workbook.close();
} }
} }
private String buildExportWhere(String ids) {
String orderBy = " order by contract_order asc";
if (ids == null || ids.trim().isEmpty()) {
return "where 1=1" + orderBy;
}
String[] arr = ids.split(",");
List<String> idList = new ArrayList<String>();
for (String item : arr) {
if (item == null) {
continue;
}
String id = item.trim();
if (!id.isEmpty() && id.matches("[A-Za-z0-9-]+")) {
idList.add("'" + id + "'");
}
}
if (idList.isEmpty()) {
return "where 1=1" + orderBy;
}
String idstr = String.join(",", idList);
return "where id in (" + idstr + ")" + orderBy;
}
/** /**
* 获取树三层结构processSection为根节点sewage为子节点 * 获取树三层结构processSection为根节点sewage为子节点
*
* @方法名:getTreeList * @方法名:getTreeList
* @参数 @param * @参数 @param
* @参数 @return * @参数 @return
@ -581,22 +639,22 @@ public class SewageService implements CommService<Sewage>{
*/ */
public String getTreeList(List<Sewage> list) { public String getTreeList(List<Sewage> list) {
JSONArray list_result = new JSONArray(); JSONArray list_result = new JSONArray();
if(list!=null && list.size()>0){ if (list != null && list.size() > 0) {
String processSectionId = null; String processSectionId = null;
String unitId = null; String unitId = null;
JSONObject root_childs = new JSONObject(); JSONObject root_childs = new JSONObject();
JSONArray root_childlist = new JSONArray(); JSONArray root_childlist = new JSONArray();
JSONObject childs = new JSONObject(); JSONObject childs = new JSONObject();
JSONArray childlist = new JSONArray(); JSONArray childlist = new JSONArray();
for(int i=0;i<list.size();i++){ for (int i = 0; i < list.size(); i++) {
Sewage sewage = list.get(i); Sewage sewage = list.get(i);
if(unitId==null || unitId.isEmpty()){ if (unitId == null || unitId.isEmpty()) {
unitId = sewage.getUnitId(); unitId = sewage.getUnitId();
Company company = sewage.getCompany(); Company company = sewage.getCompany();
if(company != null){ if (company != null) {
root_childs.put("id", company.getId()); root_childs.put("id", company.getId());
root_childs.put("text", company.getName()); root_childs.put("text", company.getName());
}else{ } else {
root_childs.put("id", unitId); root_childs.put("id", unitId);
//没有关联Company或者unitId不存在 //没有关联Company或者unitId不存在
root_childs.put("text", "无区域数据"); root_childs.put("text", "无区域数据");
@ -604,7 +662,7 @@ public class SewageService implements CommService<Sewage>{
root_childs.put("pid", "-1"); root_childs.put("pid", "-1");
root_childs.put("type", "unit"); root_childs.put("type", "unit");
} }
if(!unitId.equals(sewage.getUnitId())){ if (!unitId.equals(sewage.getUnitId())) {
//向当前根节点添加所有子节点 //向当前根节点添加所有子节点
childs.put("nodes", childlist); childs.put("nodes", childlist);
root_childlist.add(childs); root_childlist.add(childs);
@ -618,10 +676,10 @@ public class SewageService implements CommService<Sewage>{
//初始设置根节点 //初始设置根节点
unitId = sewage.getUnitId(); unitId = sewage.getUnitId();
Company company = sewage.getCompany(); Company company = sewage.getCompany();
if(company != null){ if (company != null) {
root_childs.put("id", company.getId()); root_childs.put("id", company.getId());
root_childs.put("text", company.getName()); root_childs.put("text", company.getName());
}else{ } else {
root_childs.put("id", unitId); root_childs.put("id", unitId);
//没有关联Company或者unitId不存在 //没有关联Company或者unitId不存在
root_childs.put("text", "无区域数据"); root_childs.put("text", "无区域数据");
@ -631,15 +689,15 @@ public class SewageService implements CommService<Sewage>{
//初始设置根节点 //初始设置根节点
processSectionId = null; processSectionId = null;
} }
if(processSectionId==null || processSectionId.isEmpty()){ if (processSectionId == null || processSectionId.isEmpty()) {
//初始设置根节点 //初始设置根节点
processSectionId = sewage.getProcessSectionId(); processSectionId = sewage.getProcessSectionId();
ProcessSection processSection = sewage.getProcessSection(); ProcessSection processSection = sewage.getProcessSection();
if(processSection != null){ if (processSection != null) {
childs.put("id", processSection.getCode()); childs.put("id", processSection.getCode());
childs.put("text", processSection.getName()); childs.put("text", processSection.getName());
}else{ } else {
if(processSectionId.isEmpty()){ if (processSectionId.isEmpty()) {
processSectionId = "error"; processSectionId = "error";
} }
childs.put("id", processSectionId); childs.put("id", processSectionId);
@ -650,7 +708,7 @@ public class SewageService implements CommService<Sewage>{
childs.put("type", "processSection"); childs.put("type", "processSection");
} }
if(processSectionId.equals(sewage.getProcessSectionId())){ if (processSectionId.equals(sewage.getProcessSectionId())) {
//设置子节点sewage //设置子节点sewage
JSONObject child = new JSONObject(); JSONObject child = new JSONObject();
child.put("id", sewage.getId()); child.put("id", sewage.getId());
@ -658,7 +716,7 @@ public class SewageService implements CommService<Sewage>{
child.put("pid", processSectionId); child.put("pid", processSectionId);
child.put("type", "sewage"); child.put("type", "sewage");
childlist.add(child); childlist.add(child);
}else{ } else {
//向当前根节点添加所有子节点 //向当前根节点添加所有子节点
childs.put("nodes", childlist); childs.put("nodes", childlist);
root_childlist.add(childs); root_childlist.add(childs);
@ -668,11 +726,11 @@ public class SewageService implements CommService<Sewage>{
//初始设置根节点 //初始设置根节点
processSectionId = sewage.getProcessSectionId(); processSectionId = sewage.getProcessSectionId();
ProcessSection processSection = sewage.getProcessSection(); ProcessSection processSection = sewage.getProcessSection();
if(processSection != null){ if (processSection != null) {
childs.put("id", processSection.getCode()); childs.put("id", processSection.getCode());
childs.put("text", processSection.getName()); childs.put("text", processSection.getName());
}else{ } else {
if(processSectionId.isEmpty()){ if (processSectionId.isEmpty()) {
processSectionId = "error"; processSectionId = "error";
} }
childs.put("id", processSectionId); childs.put("id", processSectionId);
@ -688,7 +746,7 @@ public class SewageService implements CommService<Sewage>{
child.put("type", "sewage"); child.put("type", "sewage");
childlist.add(child); childlist.add(child);
} }
if((i+1)==list.size()){ if ((i + 1) == list.size()) {
//最后子节点结束时,向当前根节点添加所有子节点 //最后子节点结束时,向当前根节点添加所有子节点
childs.put("nodes", childlist); childs.put("nodes", childlist);
root_childlist.add(childs); root_childlist.add(childs);

View File

@ -33,4 +33,13 @@ public interface JobService {
* @return * @return
*/ */
String getJobs4Activiti(String unitId, String type); String getJobs4Activiti(String unitId, String type);
/**
* 获取流程指定节点岗位
* @param unitId 单位ID
* @param type ProcessType中的type
* @param resourceId 流程节点resourceId/taskDefinitionKey
* @return 逗号分隔的岗位ID
*/
String getJobs4Activiti(String unitId, String type, String resourceId);
} }

View File

@ -11,6 +11,7 @@ import com.sipai.entity.user.User;
import com.sipai.entity.user.UserJob; import com.sipai.entity.user.UserJob;
import com.sipai.tools.CommUtil; import com.sipai.tools.CommUtil;
import org.activiti.engine.RepositoryService; import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.Model;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -156,16 +157,50 @@ public class JobServiceImpl implements JobService {
@Override @Override
public String getJobs4Activiti(String unitId, String type) { public String getJobs4Activiti(String unitId, String type) {
return this.getJobs4Activiti(unitId, type, null);
}
@Override
public String getJobs4Activiti(String unitId, String type, String resourceId) {
Model model = this.findModel(unitId, type);
if (model == null) {
return "";
}
return this.findJobIds(model.getId(), resourceId);
}
private Model findModel(String unitId, String type) {
String sql = "select * from [ACT_RE_MODEL] where KEY_ like '%" + unitId + "%' and KEY_ = '" + type + "-" + unitId + "'"; String sql = "select * from [ACT_RE_MODEL] where KEY_ like '%" + unitId + "%' and KEY_ = '" + type + "-" + unitId + "'";
List<Model> listModel = repositoryService.createNativeModelQuery().sql(sql).list();
if (listModel != null && listModel.size() > 0) {
return listModel.get(0);
}
sql = "select * from [ACT_RE_MODEL] where KEY_ = '" + type + "'";
listModel = repositoryService.createNativeModelQuery().sql(sql).list();
if (listModel != null && listModel.size() > 0) {
return listModel.get(0);
}
return null;
}
private String findJobIds(String modelId, String resourceId) {
String jobIds = ""; String jobIds = "";
List<org.activiti.engine.repository.Model> list_model = repositoryService.createNativeModelQuery().sql(sql).list(); String where = "where model_id = '" + modelId + "'";
if (list_model != null && list_model.size() > 0) { if (resourceId != null && !resourceId.trim().isEmpty()) {
where += " and resource_id = '" + resourceId.trim() + "'";
}
ModelNodeJob modelNodeJob = new ModelNodeJob(); ModelNodeJob modelNodeJob = new ModelNodeJob();
modelNodeJob.setWhere("where model_id = '" + list_model.get(0).getId() + "'"); modelNodeJob.setWhere(where);
List<ModelNodeJob> list_model_node = modelNodeJobDao.selectListByWhere(modelNodeJob); List<ModelNodeJob> listModelNode = modelNodeJobDao.selectListByWhere(modelNodeJob);
HashSet<String> hs = new HashSet<String>(); HashSet<String> exists = new HashSet<String>();
for (int i = 0; i < list_model_node.size(); i++) { if (listModelNode != null) {
jobIds += "" + list_model_node.get(i).getJobId() + ","; for (ModelNodeJob item : listModelNode) {
if (item == null || item.getJobId() == null || item.getJobId().trim().isEmpty()) {
continue;
}
if (exists.add(item.getJobId())) {
jobIds += item.getJobId() + ",";
}
} }
} }
return jobIds; return jobIds;

View File

@ -17,7 +17,6 @@ import net.sf.json.JSONArray;
import net.sf.json.JSONObject; import net.sf.json.JSONObject;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import sun.misc.BASE64Decoder;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@ -25,6 +24,7 @@ import java.io.ByteArrayInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Base64;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -584,12 +584,7 @@ public class CameraService implements CommService<Camera> {
// System.out.println(imgData); // System.out.println(imgData);
byte[] b = new BASE64Decoder().decodeBuffer(imgData); byte[] b = Base64.getMimeDecoder().decode(imgData);
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {// 调整异常数据
b[i] += 256;
}
}
InputStream in = new ByteArrayInputStream(b); InputStream in = new ByteArrayInputStream(b);
minioTemplate.makeBucket(nameSpace); minioTemplate.makeBucket(nameSpace);
minioTemplate.putObject(nameSpace, rid + "_" + filePath + ".jpg", in, null, null, null, contentType); minioTemplate.putObject(nameSpace, rid + "_" + filePath + ".jpg", in, null, null, null, contentType);

View File

@ -9,6 +9,7 @@ import org.slf4j.LoggerFactory;
import java.io.*; import java.io.*;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
@ -19,6 +20,7 @@ import java.util.logging.Logger;
public class CameraCall { public class CameraCall {
private static HCNetSDK2 hcNetSDK = HCNetSDK2.INSTANCE; private static HCNetSDK2 hcNetSDK = HCNetSDK2.INSTANCE;
private static org.slf4j.Logger logger = LoggerFactory.getLogger(CameraCall.class); private static org.slf4j.Logger logger = LoggerFactory.getLogger(CameraCall.class);
private static final Charset GBK = Charset.forName("GBK");
HCNetSDK2.NET_DVR_USER_LOGIN_INFO m_strLoginINFO = new HCNetSDK2.NET_DVR_USER_LOGIN_INFO(); HCNetSDK2.NET_DVR_USER_LOGIN_INFO m_strLoginINFO = new HCNetSDK2.NET_DVR_USER_LOGIN_INFO();
//HCNetSDK2.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK2.NET_DVR_DEVICEINFO_V40(); //HCNetSDK2.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK2.NET_DVR_DEVICEINFO_V40();
static HCNetSDK2.NET_DVR_DEVICEINFO_V30 m_strDeviceInfo = new HCNetSDK2.NET_DVR_DEVICEINFO_V30(); static HCNetSDK2.NET_DVR_DEVICEINFO_V30 m_strDeviceInfo = new HCNetSDK2.NET_DVR_DEVICEINFO_V30();
@ -493,17 +495,8 @@ public class CameraCall {
Pointer pPlateInfo = strPlateResult.getPointer(); Pointer pPlateInfo = strPlateResult.getPointer();
pPlateInfo.write(0, pAlarmInfo.getByteArray(0, strPlateResult.size()), 0, strPlateResult.size()); pPlateInfo.write(0, pAlarmInfo.getByteArray(0, strPlateResult.size()), 0, strPlateResult.size());
strPlateResult.read(); strPlateResult.read();
try { String plateNo=new String(strPlateResult.struPlateInfo.sLicense, GBK);
String srt3=new String(strPlateResult.struPlateInfo.sLicense,"GBK"); sAlarmType = sAlarmType + ":交通抓拍上传,车牌:"+ plateNo;
sAlarmType = sAlarmType + ":交通抓拍上传,车牌:"+ srt3;
}
catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//报警设备IP地址 //报警设备IP地址
sIP = new String(pAlarmer.sDeviceIP).split("\0", 2); sIP = new String(pAlarmer.sDeviceIP).split("\0", 2);
@ -539,17 +532,8 @@ public class CameraCall {
Pointer pItsPlateInfo = strItsPlateResult.getPointer(); Pointer pItsPlateInfo = strItsPlateResult.getPointer();
pItsPlateInfo.write(0, pAlarmInfo.getByteArray(0, strItsPlateResult.size()), 0, strItsPlateResult.size()); pItsPlateInfo.write(0, pAlarmInfo.getByteArray(0, strItsPlateResult.size()), 0, strItsPlateResult.size());
strItsPlateResult.read(); strItsPlateResult.read();
try { String itsPlateNo=new String(strItsPlateResult.struPlateInfo.sLicense, GBK);
String srt3=new String(strItsPlateResult.struPlateInfo.sLicense,"GBK"); sAlarmType = sAlarmType + ",车辆类型:"+strItsPlateResult.byVehicleType + ",交通抓拍上传,车牌:"+ itsPlateNo;
sAlarmType = sAlarmType + ",车辆类型:"+strItsPlateResult.byVehicleType + ",交通抓拍上传,车牌:"+ srt3;
}
catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//报警设备IP地址 //报警设备IP地址
sIP = new String(pAlarmer.sDeviceIP).split("\0", 2); sIP = new String(pAlarmer.sDeviceIP).split("\0", 2);
@ -626,19 +610,10 @@ public class CameraCall {
Pointer pItsParkVehicle = strItsParkVehicle.getPointer(); Pointer pItsParkVehicle = strItsParkVehicle.getPointer();
pItsParkVehicle.write(0, pAlarmInfo.getByteArray(0, strItsParkVehicle.size()), 0, strItsParkVehicle.size()); pItsParkVehicle.write(0, pAlarmInfo.getByteArray(0, strItsParkVehicle.size()), 0, strItsParkVehicle.size());
strItsParkVehicle.read(); strItsParkVehicle.read();
try {
String srtParkingNo=new String(strItsParkVehicle.byParkingNo).trim(); //车位编号 String srtParkingNo=new String(strItsParkVehicle.byParkingNo).trim(); //车位编号
String srtPlate=new String(strItsParkVehicle.struPlateInfo.sLicense,"GBK").trim(); //车牌号码 String srtPlate2=new String(strItsParkVehicle.struPlateInfo.sLicense, GBK).trim(); //车牌号码
sAlarmType = sAlarmType + ",停产场数据,车位编号:"+ srtParkingNo + ",车位状态:" sAlarmType = sAlarmType + ",停产场数据,车位编号:"+ srtParkingNo + ",车位状态:"
+ strItsParkVehicle.byLocationStatus+ ",车牌:"+ srtPlate; + strItsParkVehicle.byLocationStatus+ ",车牌:"+ srtPlate2;
}
catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//报警设备IP地址 //报警设备IP地址
sIP = new String(pAlarmer.sDeviceIP).split("\0", 2); sIP = new String(pAlarmer.sDeviceIP).split("\0", 2);
@ -679,15 +654,9 @@ public class CameraCall {
pTFSInfo.write(0, pAlarmInfo.getByteArray(0, strTFSAlarmInfo.size()), 0, strTFSAlarmInfo.size()); pTFSInfo.write(0, pAlarmInfo.getByteArray(0, strTFSAlarmInfo.size()), 0, strTFSAlarmInfo.size());
strTFSAlarmInfo.read(); strTFSAlarmInfo.read();
try { String srtPlate=new String(strTFSAlarmInfo.struPlateInfo.sLicense, GBK).trim(); //车牌号码
String srtPlate=new String(strTFSAlarmInfo.struPlateInfo.sLicense,"GBK").trim(); //车牌号码
sAlarmType = sAlarmType + ":交通取证报警信息,违章类型:"+ strTFSAlarmInfo.dwIllegalType + ",车牌号码:" + srtPlate sAlarmType = sAlarmType + ":交通取证报警信息,违章类型:"+ strTFSAlarmInfo.dwIllegalType + ",车牌号码:" + srtPlate
+ ",车辆出入状态:" + strTFSAlarmInfo.struAIDInfo.byVehicleEnterState; + ",车辆出入状态:" + strTFSAlarmInfo.struAIDInfo.byVehicleEnterState;
}
catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//报警设备IP地址 //报警设备IP地址
sIP = new String(strTFSAlarmInfo.struDevInfo.struDevIP.sIpV4).split("\0", 2); sIP = new String(strTFSAlarmInfo.struDevInfo.struDevIP.sIpV4).split("\0", 2);
@ -1045,7 +1014,7 @@ public class CameraCall {
sIP = new String(pAlarmer.sDeviceIP).split("\0", 2); sIP = new String(pAlarmer.sDeviceIP).split("\0", 2);
break; break;
} }
} catch (UnsupportedEncodingException ex) { } catch (Exception ex) {
Logger.getLogger(CameraCall.class.getName()).log(Level.SEVERE, null, ex); Logger.getLogger(CameraCall.class.getName()).log(Level.SEVERE, null, ex);
} }
return true; return true;

View File

@ -8,11 +8,11 @@ import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.util.Streams; import org.apache.commons.fileupload.util.Streams;
import sun.misc.BASE64Decoder;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.io.*; import java.io.*;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Base64;
import java.util.*; import java.util.*;
/** /**
@ -129,16 +129,10 @@ public class UEditorUtil {
String base64Data = this.request.getParameter(fieldName); String base64Data = this.request.getParameter(fieldName);
this.fileName = this.getName("test.png"); this.fileName = this.getName("test.png");
this.url = savePath + "/" + this.fileName; this.url = savePath + "/" + this.fileName;
BASE64Decoder decoder = new BASE64Decoder();
try { try {
File outFile = new File(this.getPhysicalPath(this.url)); File outFile = new File(this.getPhysicalPath(this.url));
OutputStream ro = new FileOutputStream(outFile); OutputStream ro = new FileOutputStream(outFile);
byte[] b = decoder.decodeBuffer(base64Data); byte[] b = Base64.getMimeDecoder().decode(base64Data);
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {
b[i] += 256;
}
}
ro.write(b); ro.write(b);
ro.flush(); ro.flush();
ro.close(); ro.close();

View File

@ -1,11 +1,11 @@
driver=com.microsoft.sqlserver.jdbc.SQLServerDriver driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
#url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=SIPAIIS_WMS_HQAQ url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=SIPAIIS_WMS_HQAQ
url=jdbc:sqlserver://122.51.194.184:1433;DatabaseName=SIPAIIS_WMS_HQAQ #url=jdbc:sqlserver://122.51.194.184:1433;DatabaseName=SIPAIIS_WMS_HQAQ
username=sa username=sa
password=P76XB3nm36aMkN6n password=P76XB3nm36aMkN6n
#scada-url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=EIP_PRD_HQWS scada-url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=EIP_PRD_HQWS
scada-url=jdbc:sqlserver://122.51.194.184:1433;DatabaseName=EIP_PRD_HQWS #scada-url=jdbc:sqlserver://122.51.194.184:1433;DatabaseName=EIP_PRD_HQWS
scada-username=sa scada-username=sa
scada-password=P76XB3nm36aMkN6n scada-password=P76XB3nm36aMkN6n

View File

@ -0,0 +1,138 @@
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:activiti="http://activiti.org/bpmn"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"
targetNamespace="http://com.sipai.activiti">
<process id="Administration_Leave" name="请假补假流程" isExecutable="true">
<documentation>请假补假流程</documentation>
<startEvent id="startevent1" name="Start" activiti:initiator="applyUserId"/>
<userTask id="sectionChiefAudit" name="科长/副科长审批" activiti:candidateUsers="#{userIds}">
<documentation>leave_apply_section_audit</documentation>
</userTask>
<exclusiveGateway id="gatewaySection" name="科长审批判断"/>
<userTask id="managerAudit" name="分管经理审批" activiti:candidateUsers="#{userIds}">
<documentation>leave_apply_manager_audit</documentation>
</userTask>
<exclusiveGateway id="gatewayManager" name="分管经理审批判断"/>
<userTask id="generalManagerAudit" name="总经理审批" activiti:candidateUsers="#{userIds}">
<documentation>leave_apply_general_manager_audit</documentation>
</userTask>
<exclusiveGateway id="gatewayGeneralManager" name="总经理审批判断"/>
<userTask id="modifyApply" name="退回修改" activiti:assignee="${applicantId}">
<documentation>leave_apply_handle</documentation>
</userTask>
<endEvent id="endevent1" name="End"/>
<sequenceFlow id="flow1" sourceRef="startevent1" targetRef="sectionChiefAudit"/>
<sequenceFlow id="flow2" sourceRef="sectionChiefAudit" targetRef="gatewaySection"/>
<sequenceFlow id="flow3" name="通过" sourceRef="gatewaySection" targetRef="managerAudit">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${pass && route==1}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="flow4" name="驳回" sourceRef="gatewaySection" targetRef="modifyApply">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${!pass && route==0}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="flow5" sourceRef="managerAudit" targetRef="gatewayManager"/>
<sequenceFlow id="flow6" name="通过" sourceRef="gatewayManager" targetRef="generalManagerAudit">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${pass && route==1}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="flow7" name="驳回" sourceRef="gatewayManager" targetRef="modifyApply">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${!pass && route==0}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="flow8" sourceRef="modifyApply" targetRef="sectionChiefAudit"/>
<sequenceFlow id="flow9" sourceRef="generalManagerAudit" targetRef="gatewayGeneralManager"/>
<sequenceFlow id="flow10" name="通过" sourceRef="gatewayGeneralManager" targetRef="endevent1">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${pass && route==1}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="flow11" name="驳回" sourceRef="gatewayGeneralManager" targetRef="modifyApply">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${!pass && route==0}]]></conditionExpression>
</sequenceFlow>
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_Administration_Leave">
<bpmndi:BPMNPlane bpmnElement="Administration_Leave" id="BPMNPlane_Administration_Leave">
<bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">
<omgdc:Bounds height="35.0" width="35.0" x="40.0" y="110.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sectionChiefAudit" id="BPMNShape_sectionChiefAudit">
<omgdc:Bounds height="55.0" width="120.0" x="110.0" y="100.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="gatewaySection" id="BPMNShape_gatewaySection">
<omgdc:Bounds height="40.0" width="40.0" x="265.0" y="108.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="managerAudit" id="BPMNShape_managerAudit">
<omgdc:Bounds height="55.0" width="100.0" x="350.0" y="100.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="gatewayManager" id="BPMNShape_gatewayManager">
<omgdc:Bounds height="40.0" width="40.0" x="485.0" y="108.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="generalManagerAudit" id="BPMNShape_generalManagerAudit">
<omgdc:Bounds height="55.0" width="100.0" x="560.0" y="100.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="gatewayGeneralManager" id="BPMNShape_gatewayGeneralManager">
<omgdc:Bounds height="40.0" width="40.0" x="695.0" y="108.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="modifyApply" id="BPMNShape_modifyApply">
<omgdc:Bounds height="55.0" width="100.0" x="430.0" y="220.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">
<omgdc:Bounds height="35.0" width="35.0" x="800.0" y="110.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
<omgdi:waypoint x="75.0" y="127.0"/>
<omgdi:waypoint x="110.0" y="127.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
<omgdi:waypoint x="230.0" y="127.0"/>
<omgdi:waypoint x="265.0" y="128.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3">
<omgdi:waypoint x="305.0" y="128.0"/>
<omgdi:waypoint x="350.0" y="127.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow4" id="BPMNEdge_flow4">
<omgdi:waypoint x="285.0" y="148.0"/>
<omgdi:waypoint x="285.0" y="247.0"/>
<omgdi:waypoint x="430.0" y="247.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow5" id="BPMNEdge_flow5">
<omgdi:waypoint x="450.0" y="127.0"/>
<omgdi:waypoint x="485.0" y="128.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow6" id="BPMNEdge_flow6">
<omgdi:waypoint x="525.0" y="128.0"/>
<omgdi:waypoint x="560.0" y="127.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow7" id="BPMNEdge_flow7">
<omgdi:waypoint x="505.0" y="148.0"/>
<omgdi:waypoint x="505.0" y="247.0"/>
<omgdi:waypoint x="530.0" y="247.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow8" id="BPMNEdge_flow8">
<omgdi:waypoint x="430.0" y="247.0"/>
<omgdi:waypoint x="170.0" y="247.0"/>
<omgdi:waypoint x="170.0" y="155.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow9" id="BPMNEdge_flow9">
<omgdi:waypoint x="660.0" y="127.0"/>
<omgdi:waypoint x="695.0" y="128.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow10" id="BPMNEdge_flow10">
<omgdi:waypoint x="735.0" y="128.0"/>
<omgdi:waypoint x="800.0" y="127.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow11" id="BPMNEdge_flow11">
<omgdi:waypoint x="715.0" y="148.0"/>
<omgdi:waypoint x="715.0" y="247.0"/>
<omgdi:waypoint x="530.0" y="247.0"/>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>

View File

@ -1,5 +1,11 @@
{ {
"properties": { "properties": {
"id": {
"type": "keyword"
},
"mpointid": {
"type": "keyword"
},
"parmname": { "parmname": {
"type": "text", "type": "text",
"analyzer": "ik_smart", "analyzer": "ik_smart",
@ -8,6 +14,9 @@
"mpointcode": { "mpointcode": {
"type": "keyword", "type": "keyword",
"normalizer": "my_normalizer" "normalizer": "my_normalizer"
},
"measuredt": {
"type": "date"
} }
} }
} }

View File

@ -1,6 +1,15 @@
{ {
"settings": {
"analysis": { "analysis": {
"normalizer": {
"my_normalizer": {
"type": "custom",
"char_filter": [],
"filter": [
"lowercase",
"asciifolding"
]
}
},
"analyzer": { "analyzer": {
"char_analyzer": { "char_analyzer": {
"char_filter": [ "char_filter": [
@ -17,15 +26,4 @@
} }
} }
} }
},
"mappings": {
"like_search_type": {
"properties": {
"name": {
"type": "text",
"analyzer": "char_analyzer"
}
}
}
}
} }

View File

@ -1,9 +1,9 @@
#redis<69><73><EFBFBD><EFBFBD> #redis<69><73><EFBFBD><EFBFBD>
redis.host=122.51.194.184 # redis.host=122.51.194.184
# redis.host=127.0.0.1 redis.host=127.0.0.1
#<23><><EFBFBD><EFBFBD>single <20><>Ⱥcluster #<23><><EFBFBD><EFBFBD>single <20><>Ⱥcluster
redis.mode=single redis.mode=single
redis.port=26739 redis.port=6379
# redis.port=6379 # redis.port=6379
redis.password=Aa112211 redis.password=Aa112211
redis.maxIdle=100 redis.maxIdle=100
@ -22,6 +22,6 @@ defaultCacheExpireTime=3600
fep.local.cache.capacity =10000 fep.local.cache.capacity =10000
#cluster #cluster
cluster1.host.port=122.51.194.184: 26739 #cluster1.host.port=127.0.0.1:6379

View File

@ -0,0 +1,127 @@
/*
请假补假模块初始化脚本
1) 建表 tb_administration_leave_apply
2) 注册流程节点 tb_business_unit
3) 增加菜单并授权 admin
*/
IF OBJECT_ID('dbo.tb_administration_leave_apply', 'U') IS NULL
BEGIN
CREATE TABLE dbo.tb_administration_leave_apply (
id varchar(50) NOT NULL PRIMARY KEY,
insdt datetime NULL,
insuser varchar(50) NULL,
upduser varchar(50) NULL,
upddt datetime NULL,
unit_id varchar(50) NULL,
apply_type varchar(20) NULL,
leave_type varchar(20) NULL,
start_time datetime NULL,
end_time datetime NULL,
hours decimal(10,2) NULL,
days decimal(10,2) NULL,
reason varchar(1000) NULL,
handover_desc varchar(1000) NULL,
attachment_ids varchar(1000) NULL,
overtime_ref_id varchar(50) NULL,
overtime_hours decimal(10,2) NULL,
actual_start_time datetime NULL,
actual_end_time datetime NULL,
state varchar(100) NULL,
audit_man_id varchar(max) NULL,
submission_time datetime NULL,
processid varchar(100) NULL,
processdefid varchar(100) NULL,
remark varchar(1000) NULL,
del_flag char(1) NULL DEFAULT '0'
);
END
GO
IF OBJECT_ID('dbo.tb_administration_leave_apply', 'U') IS NOT NULL
AND EXISTS (
SELECT 1
FROM sys.columns
WHERE object_id = OBJECT_ID('dbo.tb_administration_leave_apply')
AND name = 'audit_man_id'
AND max_length <> -1
)
BEGIN
ALTER TABLE dbo.tb_administration_leave_apply
ALTER COLUMN audit_man_id varchar(max) NULL;
END
GO
IF NOT EXISTS (SELECT 1 FROM tb_business_unit WHERE id = 'leave_apply_section_audit')
BEGIN
INSERT INTO tb_business_unit (id, name, process_type_id, insdt, insuser, active, url, modal_id)
VALUES ('leave_apply_section_audit', N'请假补假-科长/副科长审批', 'Administration_Leave', GETDATE(), 'emp01', '1',
'administration/leaveApply/showAudit.do', 'subModal');
END
GO
IF NOT EXISTS (SELECT 1 FROM tb_business_unit WHERE id = 'leave_apply_manager_audit')
BEGIN
INSERT INTO tb_business_unit (id, name, process_type_id, insdt, insuser, active, url, modal_id)
VALUES ('leave_apply_manager_audit', N'请假补假-分管经理审批', 'Administration_Leave', GETDATE(), 'emp01', '1',
'administration/leaveApply/showAudit.do', 'subModal');
END
GO
IF NOT EXISTS (SELECT 1 FROM tb_business_unit WHERE id = 'leave_apply_general_manager_audit')
BEGIN
INSERT INTO tb_business_unit (id, name, process_type_id, insdt, insuser, active, url, modal_id)
VALUES ('leave_apply_general_manager_audit', N'请假补假-总经理审批', 'Administration_Leave', GETDATE(), 'emp01', '1',
'administration/leaveApply/showAudit.do', 'subModal');
END
GO
IF NOT EXISTS (SELECT 1 FROM tb_business_unit WHERE id = 'leave_apply_handle')
BEGIN
INSERT INTO tb_business_unit (id, name, process_type_id, insdt, insuser, active, url, modal_id)
VALUES ('leave_apply_handle', N'请假补假-退回修改', 'Administration_Leave', GETDATE(), 'emp01', '1',
'administration/leaveApply/showHandle.do', 'subModal');
END
GO
DECLARE @menuId VARCHAR(50) = 'leave_apply_menu_001';
DECLARE @menuName NVARCHAR(200) = N'请假补假申请';
DECLARE @menuLocation VARCHAR(1000) = 'administration/leaveApply/showList.do';
DECLARE @parentMenuId VARCHAR(50);
DECLARE @nextOrder INT;
SELECT TOP 1 @parentMenuId = id
FROM tb_menuitem
WHERE name IN (N'事项管理', N'行政管理')
AND type = 'menu'
ORDER BY morder;
IF @parentMenuId IS NULL
SET @parentMenuId = '-1';
SELECT @nextOrder = ISNULL(MAX(CAST(morder AS INT)), -1) + 1
FROM tb_menuitem
WHERE pid = @parentMenuId
AND type = 'menu';
IF NOT EXISTS (SELECT 1 FROM tb_menuitem WHERE id = @menuId OR location = @menuLocation)
BEGIN
INSERT INTO tb_menuitem (
id, pid, PowerID, caption, name, description, location, target, onclick, onmouseover, onmouseout,
image, altImage, tooltip, roles, page, width, height, forward, action, morder, lvl, active, type,
mainpage, count, engkey
)
VALUES (
@menuId, @parentMenuId, NULL, NULL, @menuName, NULL, @menuLocation, NULL, NULL, NULL, NULL,
'fa-calendar', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, @nextOrder, NULL, N'启用', 'menu',
NULL, NULL, NULL
);
END
GO
IF OBJECT_ID('dbo.tb_role_menu', 'U') IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM tb_role_menu WHERE roleID = 'rol0001' AND menuID = 'leave_apply_menu_001')
BEGIN
INSERT INTO tb_role_menu (roleID, menuID) VALUES ('rol0001', 'leave_apply_menu_001');
END
GO

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,14 @@
/*
请假补假流程审批人字段扩容脚本
场景:
1) audit_man_id 保存当前节点候选审批人 ID 列表
2) 组织下候选人员较多时,原 varchar(250/500) 可能被截断
*/
IF OBJECT_ID('dbo.tb_administration_leave_apply', 'U') IS NOT NULL
AND COL_LENGTH('dbo.tb_administration_leave_apply', 'audit_man_id') IS NOT NULL
BEGIN
ALTER TABLE dbo.tb_administration_leave_apply
ALTER COLUMN audit_man_id varchar(max) NULL;
END
GO

View File

@ -346,6 +346,10 @@ var processSelectNodeForHandle = function(taskId){
//选择下一节点,先选择审核结果,再选择节点 //选择下一节点,先选择审核结果,再选择节点
$.post(ext.contextPath + "/activiti/workflow/getRoutesForSelect2.do", {taskId:taskId,passFlag:passFlag}, function(data) { $.post(ext.contextPath + "/activiti/workflow/getRoutesForSelect2.do", {taskId:taskId,passFlag:passFlag}, function(data) {
$("#routeNum").empty(); $("#routeNum").empty();
if (!data || data.length === 0) {
console.warn('getRoutesForSelect2: no routes found for passFlag=' + passFlag);
return;
}
var selelct = $("#routeNum").select2({ var selelct = $("#routeNum").select2({
data: data, data: data,
placeholder:'请先选择审核结果',//默认文字提示 placeholder:'请先选择审核结果',//默认文字提示
@ -374,6 +378,10 @@ var processSelectNodeForHandle = function(taskId){
}) })
selectResult.val('').trigger("change"); selectResult.val('').trigger("change");
$.post(ext.contextPath + "/activiti/workflow/getRoutesForSelect2.do", {taskId:taskId,passFlag:true}, function(data) { $.post(ext.contextPath + "/activiti/workflow/getRoutesForSelect2.do", {taskId:taskId,passFlag:true}, function(data) {
if (!data || data.length === 0) {
console.warn('getRoutesForSelect2: no routes found for passFlag=true');
return;
}
var selelct = $("#routeNum").select2({ var selelct = $("#routeNum").select2({
data: data, data: data,
placeholder:'请先选择审核结果',//默认文字提示 placeholder:'请先选择审核结果',//默认文字提示

View File

@ -116,8 +116,11 @@ var getFileListMinioPic = function (divId, status, entityId, previews, previewCo
tbName: tbName, tbName: tbName,
bucketName: bucketName bucketName: bucketName
}, function (data) { }, function (data) {
// 清空数组而不是重新赋值,这样可以保持引用不变
previews.length = 0;
previewConfigs.length = 0;
if (data.length > 0) { if (data.length > 0) {
previews = new Array();
$('#maintenancefile').show(); $('#maintenancefile').show();
for (var i = 0; i < data.length; i++) { for (var i = 0; i < data.length; i++) {
var previewConfig = new Object(); var previewConfig = new Object();
@ -133,10 +136,9 @@ var getFileListMinioPic = function (divId, status, entityId, previews, previewCo
} }
previewConfigs.push(previewConfig); previewConfigs.push(previewConfig);
} }
showFileInput_new(divId, previews, previewConfigs);
} else {
$('#' + divId).hide();
} }
// 无论是否有数据都重新初始化控件
showFileInput_new(divId, previews, previewConfigs);
}, 'json'); }, 'json');
}; };

View File

@ -174,7 +174,7 @@
page: params.offset/params.limit+1, // 每页显示数据的开始页码 page: params.offset/params.limit+1, // 每页显示数据的开始页码
sort: params.sort, // 要排序的字段 sort: params.sort, // 要排序的字段
order: params.order, order: params.order,
search_name: $('#search_name').val(), // search_name: $('#search_name').val(),
search_code: $('#search_code').val() search_code: $('#search_code').val()
} }
}, },
@ -301,14 +301,14 @@
<label class="form-label" id="companylabel">公司</label> <label class="form-label" id="companylabel">公司</label>
<select class="form-control select2 " id="search_code" name ="search_code" style="width: 220px;"></select> <select class="form-control select2 " id="search_code" name ="search_code" style="width: 220px;"></select>
<span class="select2-selection select2-selection--single" id="company" style="width:220px;border: none;background: transparent;" ></span> <span class="select2-selection select2-selection--single" id="company" style="width:220px;border: none;background: transparent;" ></span>
<div class="form-group pull-right" > <!-- <div class="form-group pull-right" >
<div class="input-group input-group-sm" style="width: 250px;"> <div class="input-group input-group-sm" style="width: 250px;">
<input type="text" id="search_name" name="search_name" class="form-control pull-right" placeholder="名称"> <input type="text" id="search_name" name="search_name" class="form-control pull-right" placeholder="名称">
<div class="input-group-btn"> <div class="input-group-btn">
<button class="btn btn-default" onclick="dosearch();"><i class="fa fa-search"></i></button> <button class="btn btn-default" onclick="dosearch();"><i class="fa fa-search"></i></button>
</div> </div>
</div> </div>
</div> </div> -->
</div> </div>
<table id="table"></table> <table id="table"></table>
</div> </div>

View File

@ -161,6 +161,11 @@
<% request.setAttribute("Administration_Temporary", ProcessType.Administration_Temporary.getId());%> <% request.setAttribute("Administration_Temporary", ProcessType.Administration_Temporary.getId());%>
<% request.setAttribute("UNIT_Temporary_AUDIT", BusinessUnit.UNIT_Temporary_AUDIT);%> <% request.setAttribute("UNIT_Temporary_AUDIT", BusinessUnit.UNIT_Temporary_AUDIT);%>
<% request.setAttribute("UNIT_Temporary_HANDLE", BusinessUnit.UNIT_Temporary_HANDLE);%> <% request.setAttribute("UNIT_Temporary_HANDLE", BusinessUnit.UNIT_Temporary_HANDLE);%>
<% request.setAttribute("Administration_Leave", ProcessType.Administration_Leave.getId());%>
<% request.setAttribute("UNIT_LEAVE_APPLY_SECTION_AUDIT", BusinessUnit.UNIT_LEAVE_APPLY_SECTION_AUDIT);%>
<% request.setAttribute("UNIT_LEAVE_APPLY_MANAGER_AUDIT", BusinessUnit.UNIT_LEAVE_APPLY_MANAGER_AUDIT);%>
<% request.setAttribute("UNIT_LEAVE_APPLY_GENERAL_MANAGER_AUDIT", BusinessUnit.UNIT_LEAVE_APPLY_GENERAL_MANAGER_AUDIT);%>
<% request.setAttribute("UNIT_LEAVE_APPLY_HANDLE", BusinessUnit.UNIT_LEAVE_APPLY_HANDLE);%>
<%--报表--%> <%--报表--%>
<% request.setAttribute("Report_Check", ProcessType.Report_Check.getId());%> <% request.setAttribute("Report_Check", ProcessType.Report_Check.getId());%>
<% request.setAttribute("UNIT_REPORT_CREATE", BusinessUnit.UNIT_REPORT_CREATE);%> <% request.setAttribute("UNIT_REPORT_CREATE", BusinessUnit.UNIT_REPORT_CREATE);%>
@ -346,6 +351,11 @@
$("#subDiv").html(data); $("#subDiv").html(data);
openModal('contractExcuteModal'); openModal('contractExcuteModal');
}); });
} else if (type.indexOf('${Administration_Leave}') != -1) {
$.post(ext.contextPath + '/administration/leaveApply/showExecuteView.do', {id: id}, function (data) {
$("#subDiv").html(data);
openModal('contractExcuteModal');
});
} else if (type.indexOf('${Administration_Reserve}') != -1) { } else if (type.indexOf('${Administration_Reserve}') != -1) {
$.post(ext.contextPath + '/administration/organization/showProcessOrganizationView.do', {id: id}, function (data) { $.post(ext.contextPath + '/administration/organization/showProcessOrganizationView.do', {id: id}, function (data) {
$("#subDiv").html(data); $("#subDiv").html(data);
@ -879,6 +889,31 @@
default: default:
showAlert('w', '未查询到任务模块!', 'mainAlertdiv'); showAlert('w', '未查询到任务模块!', 'mainAlertdiv');
} }
} else if (type.indexOf('${Administration_Leave}') != -1) {
switch (status) {
case '${UNIT_LEAVE_APPLY_SECTION_AUDIT}':
case '${UNIT_LEAVE_APPLY_MANAGER_AUDIT}':
case '${UNIT_LEAVE_APPLY_GENERAL_MANAGER_AUDIT}':
$.post(ext.contextPath + '/administration/leaveApply/showAudit.do', {
processInstanceId: processInstanceId, taskId: taskId, businessKey: businessKey,
unitId: status
}, function (data) {
$("#subDiv").html(data);
openModal('subModal');
});
break;
case '${UNIT_LEAVE_APPLY_HANDLE}':
$.post(ext.contextPath + '/administration/leaveApply/showHandle.do', {
processInstanceId: processInstanceId, taskId: taskId, businessKey: businessKey,
unitId: status
}, function (data) {
$("#subDiv").html(data);
openModal('subModal');
});
break;
default:
showAlert('w', '未查询到任务模块!', 'mainAlertdiv');
}
} else if (type.indexOf('${Process_Adjustment}') > -1) { } else if (type.indexOf('${Process_Adjustment}') > -1) {
switch (status) { switch (status) {
case '${UNIT_PROCESSADJUSTMENT_EDIT}'://工艺申请 case '${UNIT_PROCESSADJUSTMENT_EDIT}'://工艺申请

View File

@ -0,0 +1,200 @@
<%@ page language="java" pageEncoding="UTF-8"%>
<style type="text/css">
.select2-container .select2-selection--single{height:34px;line-height:34px;}
.select2-selection__arrow{margin-top:3px;}
</style>
<script type="text/javascript">
function padNumber(num) {
return num < 10 ? "0" + num : "" + num;
}
function formatDateValue(date) {
return date.getFullYear() + "-" + padNumber(date.getMonth() + 1) + "-" + padNumber(date.getDate());
}
function normalizeDateValue(value) {
if (!value) {
return "";
}
var match = value.match(/^(\d{4}-\d{2}-\d{2})/);
return match ? match[1] : value;
}
function getHalfDayIndex(period) {
return period === "下午" ? 1 : 0;
}
function getDayNumber(dateText) {
var parts = dateText.split("-");
if (parts.length !== 3) {
return NaN;
}
return Math.floor(new Date(parseInt(parts[0], 10), parseInt(parts[1], 10) - 1, parseInt(parts[2], 10)).getTime() / (24 * 60 * 60 * 1000));
}
function syncLeaveTimeFields() {
var startDate = normalizeDateValue($("#startDate").val());
var endDate = normalizeDateValue($("#endDate").val());
var startPeriod = $("#startPeriod").val();
var endPeriod = $("#endPeriod").val();
$("#startDate").val(startDate);
$("#endDate").val(endDate);
$("#startTime").val(startDate && startPeriod ? (startDate + " " + startPeriod) : "");
$("#endTime").val(endDate && endPeriod ? (endDate + " " + endPeriod) : "");
}
function calculateLeaveDays() {
syncLeaveTimeFields();
var startDate = $("#startDate").val();
var endDate = $("#endDate").val();
var startPeriod = $("#startPeriod").val();
var endPeriod = $("#endPeriod").val();
if (!startDate || !endDate || !startPeriod || !endPeriod) {
$("#hours").val("");
$("#days").val("");
return true;
}
var startUnit = getDayNumber(startDate) * 2 + getHalfDayIndex(startPeriod);
var endUnit = getDayNumber(endDate) * 2 + getHalfDayIndex(endPeriod);
if (isNaN(startUnit) || isNaN(endUnit) || endUnit < startUnit) {
$("#hours").val("");
$("#days").val("");
return false;
}
var halfDays = endUnit - startUnit + 1;
var hours = halfDays * 4;
var days = halfDays / 2;
$("#hours").val(hours.toString());
$("#days").val(days % 1 === 0 ? days.toString() : days.toFixed(1));
return true;
}
function doSaveLeaveApply(startProcess) {
$("#subForm").bootstrapValidator('validate');
if ($("#subForm").data('bootstrapValidator').isValid()) {
if (!calculateLeaveDays()) {
showAlert('d', '结束日期时段不能早于开始日期时段');
return;
}
var url = startProcess ? "/administration/leaveApply/startProcess.do" : "/administration/leaveApply/save.do";
$.post(ext.contextPath + url, $("#subForm").serialize(), function(data) {
if (data.res == 1) {
closeModal('subModal');
$("#table").bootstrapTable('refresh');
} else if (data.res == 0) {
showAlert('d', '操作失败');
} else {
showAlert('d', data.res);
}
}, 'json');
}
}
$(function(){
$("#subForm").bootstrapValidator({
live: 'disabled',
fields: {
applyType: {validators: {notEmpty: {message: '请选择申请类型'}}},
leaveType: {validators: {notEmpty: {message: '请选择假别'}}},
startDate: {validators: {notEmpty: {message: '请选择开始日期'}}},
startPeriod: {validators: {notEmpty: {message: '请选择开始时段'}}},
endDate: {validators: {notEmpty: {message: '请选择结束日期'}}},
endPeriod: {validators: {notEmpty: {message: '请选择结束时段'}}},
reason: {validators: {notEmpty: {message: '请填写申请事由'}}}
}
});
$('#startDate,#endDate').datetimepicker({
language: 'zh-CN',
format: 'yyyy-mm-dd',
startView: 'month',
minView: 2,
maxView: 'year',
autoclose: true,
todayBtn: true,
todayHighlight: true
}).on('changeDate', function() {
calculateLeaveDays();
});
$('#startDate,#endDate,#startPeriod,#endPeriod').on('change', function() {
calculateLeaveDays();
});
var today = formatDateValue(new Date());
$("#startDate").val(today);
$("#endDate").val(today);
calculateLeaveDays();
});
</script>
<div class="modal fade" id="subModal">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span>&times;</span></button>
<h4 class="modal-title">新增请假补假申请</h4>
</div>
<div class="modal-body">
<form class="form-horizontal" id="subForm">
<input type="hidden" name="unitId" value="${param.companyId}">
<div class="form-group">
<label class="col-sm-3 control-label">申请类型</label>
<div class="col-sm-8">
<select class="form-control" name="applyType">
<option value="leave">请假</option>
<option value="compensatory">补假</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">假别</label>
<div class="col-sm-8">
<select class="form-control" name="leaveType">
<option value="annual">年假</option>
<option value="personal">事假</option>
<option value="sick">病假</option>
<option value="marriage">婚假</option>
<option value="maternity">产假</option>
<option value="funeral">丧假</option>
<option value="adjustment">调休</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">开始日期</label>
<div class="col-sm-5"><input type="text" class="form-control" id="startDate" name="startDate" autocomplete="off" placeholder="请选择日期"></div>
<div class="col-sm-3">
<select class="form-control" id="startPeriod" name="startPeriod">
<option value="上午">上午</option>
<option value="下午">下午</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">结束日期</label>
<div class="col-sm-5"><input type="text" class="form-control" id="endDate" name="endDate" autocomplete="off" placeholder="请选择日期"></div>
<div class="col-sm-3">
<select class="form-control" id="endPeriod" name="endPeriod">
<option value="上午">上午</option>
<option value="下午">下午</option>
</select>
</div>
</div>
<input type="hidden" id="startTime" name="startTime">
<input type="hidden" id="endTime" name="endTime">
<input type="hidden" id="hours" name="hours">
<div class="form-group">
<label class="col-sm-3 control-label">天数</label>
<div class="col-sm-8"><input type="text" class="form-control" id="days" name="days" readonly placeholder="自动计算"></div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">申请事由</label>
<div class="col-sm-8"><textarea class="form-control" rows="3" name="reason"></textarea></div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">工作交接</label>
<div class="col-sm-8"><textarea class="form-control" rows="2" name="handoverDesc"></textarea></div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">备注</label>
<div class="col-sm-8"><textarea class="form-control" rows="2" name="remark"></textarea></div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
<button type="button" class="btn btn-primary" onclick="doSaveLeaveApply(false)">保存</button>
<button type="button" class="btn btn-primary" onclick="doSaveLeaveApply(true)">发起审批</button>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,94 @@
<%@ page language="java" pageEncoding="UTF-8"%>
<script type="text/javascript">
function formatLeaveHalfDay(value) {
if (!value) {
return "";
}
var text = $.trim(value);
var halfDayMatch = text.match(/^(\d{4}-\d{2}-\d{2})\s+(上午|下午)$/);
if (halfDayMatch) {
return halfDayMatch[1] + " " + halfDayMatch[2];
}
var dateTimeMatch = text.match(/^(\d{4}-\d{2}-\d{2})(?:\s+(\d{1,2})(?::\d{1,2}(?::\d{1,2})?)?(?:\.\d+)?)?$/);
if (dateTimeMatch) {
var hour = dateTimeMatch[2] ? parseInt(dateTimeMatch[2], 10) : 0;
return dateTimeMatch[1] + " " + (hour >= 12 ? "下午" : "上午");
}
return text;
}
function showUser4SelectsFun() {
var userIds= $("#targetusers").val();
var jobIds= $("#targetjobs").val();
$.post(ext.contextPath + '/user/userForSelectByCompany.do', {formId:"subForm",hiddenId:"targetusers",textId:"targetUsersName",userIds:userIds,jobIds:jobIds}, function(data) {
$("#user4SelectDiv").html(data);
openModal("user4SelectModal");
});
}
function doSubmit() {
$("#subForm").bootstrapValidator('validate');
if ($("#subForm").data('bootstrapValidator').isValid()) {
$.post(ext.contextPath + "/administration/leaveApply/doAudit.do", $("#subForm").serialize(), function(data) {
if (data.res == 1) {
closeModal('subModal');
$("#table").bootstrapTable('refresh');
} else {
showAlert('d', data.res == 0 ? '操作执行失败,请重试' : data.res);
}
}, 'json');
}
}
$(function(){
processSelectNode("${businessUnitAudit.taskid}");
$("#subForm").bootstrapValidator({live:'disabled'});
$("#startTimeText").text(formatLeaveHalfDay("${leaveApply.startTime}"));
$("#endTimeText").text(formatLeaveHalfDay("${leaveApply.endTime}"));
$.post(ext.contextPath + '/administration/leaveApply/showExecuteView.do', {id:'${leaveApply.id}',inModal:'inModal'}, function(data) {
$("#showView").html(data);
});
});
</script>
<div class="modal fade" id="subModal">
<div class="modal-dialog modal-xlg">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span>&times;</span></button>
<h4 class="modal-title">审批(${taskName})</h4>
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-7 col-xs-12">
<form class="form-horizontal" id="subForm">
<div class="form-group"><label class="col-sm-3 control-label">申请类型</label><div class="col-sm-8"><p class="form-control-static">${leaveApply.applyType}</p></div></div>
<div class="form-group"><label class="col-sm-3 control-label">假别</label><div class="col-sm-8"><p class="form-control-static">${leaveApply.leaveType}</p></div></div>
<div class="form-group"><label class="col-sm-3 control-label">开始时间</label><div class="col-sm-8"><p class="form-control-static" id="startTimeText"></p></div></div>
<div class="form-group"><label class="col-sm-3 control-label">结束时间</label><div class="col-sm-8"><p class="form-control-static" id="endTimeText"></p></div></div>
<div class="form-group"><label class="col-sm-3 control-label">申请事由</label><div class="col-sm-8"><p class="form-control-static">${leaveApply.reason}</p></div></div>
<input type="hidden" name="id" value="${businessUnitAudit.id}">
<input type="hidden" name="processid" value="${businessUnitAudit.processid}">
<input type="hidden" name="taskid" value="${businessUnitAudit.taskid}">
<input type="hidden" name="businessid" value="${businessUnitAudit.businessid}">
<input type="hidden" name="unitid" value="${param.unitId}">
<input type="hidden" name="taskdefinitionkey" value="${businessUnitAudit.taskdefinitionkey}">
<div class="form-group"><label class="col-sm-3 control-label">审核结果</label><div class="col-sm-6"><select class="form-control select2" id="passstatus" name="passstatus"><option value=true>通过</option><option value=false>驳回</option></select></div></div>
<div class="form-group"><label class="col-sm-3 control-label">下一节点</label><div class="col-sm-6"><select class="form-control select2" id="routeNum" name="routeNum"></select></div></div>
<div class="form-group"><label class="col-sm-3 control-label">审核意见</label><div class="col-sm-6"><textarea class="form-control" rows="2" id="auditopinion" name="auditopinion">通过</textarea></div></div>
<div id="selectUsers" class="form-group">
<label class="col-sm-3 control-label">转至</label>
<div class="col-sm-9">
<input type="text" class="form-control" id="targetUsersName" name="targetUsersName" onclick="showUser4SelectsFun();" placeholder="可不选;不选时谁签收谁审批">
<input id="targetusers" name="targetusers" type="hidden" value="">
<input id="targetjobs" name="targetjobs" type="hidden" value="">
</div>
</div>
</form>
</div>
<div class="col-md-5 col-xs-12" id="showView"></div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
<button type="button" class="btn btn-primary" onclick="doSubmit()">审核</button>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,195 @@
<%@ page language="java" pageEncoding="UTF-8"%>
<script type="text/javascript">
function normalizeDateValue(value) {
if (!value) {
return "";
}
var match = value.match(/^(\d{4}-\d{2}-\d{2})/);
return match ? match[1] : value;
}
function getHalfDayIndex(period) {
return period === "下午" ? 1 : 0;
}
function getDayNumber(dateText) {
var parts = dateText.split("-");
if (parts.length !== 3) {
return NaN;
}
return Math.floor(new Date(parseInt(parts[0], 10), parseInt(parts[1], 10) - 1, parseInt(parts[2], 10)).getTime() / (24 * 60 * 60 * 1000));
}
function parseLeaveTimeValue(value) {
if (!value) {
return {date: "", period: "上午"};
}
var match = value.match(/^(\d{4}-\d{2}-\d{2})\s*(上午|下午)$/);
if (match) {
return {date: match[1], period: match[2]};
}
var datetimeMatch = value.match(/^(\d{4}-\d{2}-\d{2})(?:\s+(\d{1,2})(?::\d{1,2}(?::\d{1,2})?)?(?:\.\d+)?)?$/);
if (datetimeMatch) {
var hour = datetimeMatch[2] ? parseInt(datetimeMatch[2], 10) : 0;
return {date: datetimeMatch[1], period: hour >= 12 ? "下午" : "上午"};
}
return {date: "", period: "上午"};
}
function syncLeaveTimeFields() {
var startDate = normalizeDateValue($("#startDate").val());
var endDate = normalizeDateValue($("#endDate").val());
var startPeriod = $("#startPeriod").val();
var endPeriod = $("#endPeriod").val();
$("#startDate").val(startDate);
$("#endDate").val(endDate);
$("#startTime").val(startDate && startPeriod ? (startDate + " " + startPeriod) : "");
$("#endTime").val(endDate && endPeriod ? (endDate + " " + endPeriod) : "");
}
function calculateLeaveDays() {
syncLeaveTimeFields();
var startDate = $("#startDate").val();
var endDate = $("#endDate").val();
var startPeriod = $("#startPeriod").val();
var endPeriod = $("#endPeriod").val();
if (!startDate || !endDate || !startPeriod || !endPeriod) {
$("#hours").val("");
$("#days").val("");
return true;
}
var startUnit = getDayNumber(startDate) * 2 + getHalfDayIndex(startPeriod);
var endUnit = getDayNumber(endDate) * 2 + getHalfDayIndex(endPeriod);
if (isNaN(startUnit) || isNaN(endUnit) || endUnit < startUnit) {
$("#hours").val("");
$("#days").val("");
return false;
}
var halfDays = endUnit - startUnit + 1;
var hours = halfDays * 4;
var days = halfDays / 2;
$("#hours").val(hours.toString());
$("#days").val(days % 1 === 0 ? days.toString() : days.toFixed(1));
return true;
}
function doUpdateLeaveApply(startProcess) {
$("#subForm").bootstrapValidator('validate');
if ($("#subForm").data('bootstrapValidator').isValid()) {
if (!calculateLeaveDays()) {
showAlert('d', '结束日期时段不能早于开始日期时段');
return;
}
var url = startProcess ? "/administration/leaveApply/startProcess.do" : "/administration/leaveApply/update.do";
$.post(ext.contextPath + url, $("#subForm").serialize(), function(data) {
if (data.res == 1) {
closeModal('subModal');
$("#table").bootstrapTable('refresh');
} else {
showAlert('d', data.res == 0 ? '操作失败' : data.res);
}
}, 'json');
}
}
$(function(){
$("#subForm").bootstrapValidator({
live: 'disabled',
fields: {
startDate: {validators: {notEmpty: {message: '请选择开始日期'}}},
startPeriod: {validators: {notEmpty: {message: '请选择开始时段'}}},
endDate: {validators: {notEmpty: {message: '请选择结束日期'}}},
endPeriod: {validators: {notEmpty: {message: '请选择结束时段'}}},
reason: {validators: {notEmpty: {message: '请填写申请事由'}}}
}
});
$('#startDate,#endDate').datetimepicker({
language: 'zh-CN',
format: 'yyyy-mm-dd',
startView: 'month',
minView: 2,
maxView: 'year',
autoclose: true,
todayBtn: true,
todayHighlight: true
}).on('changeDate', function() {
calculateLeaveDays();
});
$('#startDate,#endDate,#startPeriod,#endPeriod').on('change', function() {
calculateLeaveDays();
});
var startInfo = parseLeaveTimeValue("${leaveApply.startTime}");
var endInfo = parseLeaveTimeValue("${leaveApply.endTime}");
$("#applyType").val("${leaveApply.applyType}");
$("#leaveType").val("${leaveApply.leaveType}");
$("#startDate").val(startInfo.date);
$("#startPeriod").val(startInfo.period);
$("#endDate").val(endInfo.date);
$("#endPeriod").val(endInfo.period);
calculateLeaveDays();
});
</script>
<div class="modal fade" id="subModal">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span>&times;</span></button>
<h4 class="modal-title">编辑请假补假申请</h4>
</div>
<div class="modal-body">
<form class="form-horizontal" id="subForm">
<input type="hidden" name="id" value="${leaveApply.id}">
<input type="hidden" name="unitId" value="${leaveApply.unitId}">
<div class="form-group">
<label class="col-sm-3 control-label">申请类型</label>
<div class="col-sm-8">
<select class="form-control" id="applyType" name="applyType">
<option value="leave">请假</option>
<option value="compensatory">补假</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">假别</label>
<div class="col-sm-8">
<select class="form-control" id="leaveType" name="leaveType">
<option value="annual">年假</option>
<option value="personal">事假</option>
<option value="sick">病假</option>
<option value="marriage">婚假</option>
<option value="maternity">产假</option>
<option value="funeral">丧假</option>
<option value="adjustment">调休</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">开始日期</label>
<div class="col-sm-5"><input class="form-control" id="startDate" name="startDate" autocomplete="off" placeholder="请选择日期"></div>
<div class="col-sm-3">
<select class="form-control" id="startPeriod" name="startPeriod">
<option value="上午">上午</option>
<option value="下午">下午</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">结束日期</label>
<div class="col-sm-5"><input class="form-control" id="endDate" name="endDate" autocomplete="off" placeholder="请选择日期"></div>
<div class="col-sm-3">
<select class="form-control" id="endPeriod" name="endPeriod">
<option value="上午">上午</option>
<option value="下午">下午</option>
</select>
</div>
</div>
<input type="hidden" id="startTime" name="startTime" value="${leaveApply.startTime}">
<input type="hidden" id="endTime" name="endTime" value="${leaveApply.endTime}">
<input type="hidden" id="hours" name="hours" value="${leaveApply.hours}">
<div class="form-group"><label class="col-sm-3 control-label">天数</label><div class="col-sm-8"><input class="form-control" id="days" name="days" value="${leaveApply.days}" readonly placeholder="自动计算"></div></div>
<div class="form-group"><label class="col-sm-3 control-label">申请事由</label><div class="col-sm-8"><textarea class="form-control" rows="3" name="reason">${leaveApply.reason}</textarea></div></div>
<div class="form-group"><label class="col-sm-3 control-label">工作交接</label><div class="col-sm-8"><textarea class="form-control" rows="2" name="handoverDesc">${leaveApply.handoverDesc}</textarea></div></div>
<div class="form-group"><label class="col-sm-3 control-label">备注</label><div class="col-sm-8"><textarea class="form-control" rows="2" name="remark">${leaveApply.remark}</textarea></div></div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
<button type="button" class="btn btn-primary" onclick="doUpdateLeaveApply(false)">保存</button>
<button type="button" class="btn btn-primary" onclick="doUpdateLeaveApply(true)">发起审批</button>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,24 @@
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
<div class="modal fade" id="leaveApplyExcuteModal">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
<h4 class="modal-title">流程详情</h4>
</div>
<div class="modal-body" style="padding-left:0;padding-right:0;">
<div class="row">
<div class="col-md-12">
<jsp:include page="/jsp/administration/leaveApplyExecuteViewInModal.jsp"></jsp:include>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,24 @@
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
<c:if test="${not empty processMessage}">
<div class="alert alert-info" style="margin-bottom:10px;">${processMessage}</div>
</c:if>
<ul class="timeline">
<c:forEach items="${businessUnitRecords}" var="item" varStatus="status">
<li>
<c:choose>
<c:when test='${finishFlag && status.last}'>
<i class="fa fa-check bg-blue"></i>
</c:when>
<c:otherwise>
<i class="fa fa-clock-o bg-grey"></i>
</c:otherwise>
</c:choose>
<div class="timeline-item">
<span class="time"><i class="fa fa-clock-o"></i> ${item.insdt.substring(0,16)}</span>
<h3 class="timeline-header"><a href="#">${item.taskName}</a> ${item.user.caption}</h3>
<div class="timeline-body">${item.record}</div>
</div>
</li>
</c:forEach>
</ul>

View File

@ -0,0 +1,196 @@
<%@ page language="java" pageEncoding="UTF-8"%>
<script type="text/javascript">
function normalizeDateValue(value) {
if (!value) {
return "";
}
var match = value.match(/^(\d{4}-\d{2}-\d{2})/);
return match ? match[1] : value;
}
function getHalfDayIndex(period) {
return period === "下午" ? 1 : 0;
}
function getDayNumber(dateText) {
var parts = dateText.split("-");
if (parts.length !== 3) {
return NaN;
}
return Math.floor(new Date(parseInt(parts[0], 10), parseInt(parts[1], 10) - 1, parseInt(parts[2], 10)).getTime() / (24 * 60 * 60 * 1000));
}
function parseLeaveTimeValue(value) {
if (!value) {
return {date: "", period: "上午"};
}
var match = value.match(/^(\d{4}-\d{2}-\d{2})\s*(上午|下午)$/);
if (match) {
return {date: match[1], period: match[2]};
}
var datetimeMatch = value.match(/^(\d{4}-\d{2}-\d{2})(?:\s+(\d{1,2})(?::\d{1,2}(?::\d{1,2})?)?(?:\.\d+)?)?$/);
if (datetimeMatch) {
var hour = datetimeMatch[2] ? parseInt(datetimeMatch[2], 10) : 0;
return {date: datetimeMatch[1], period: hour >= 12 ? "下午" : "上午"};
}
return {date: "", period: "上午"};
}
function syncLeaveTimeFields() {
var startDate = normalizeDateValue($("#startDate").val());
var endDate = normalizeDateValue($("#endDate").val());
var startPeriod = $("#startPeriod").val();
var endPeriod = $("#endPeriod").val();
$("#startDate").val(startDate);
$("#endDate").val(endDate);
$("#startTime").val(startDate && startPeriod ? (startDate + " " + startPeriod) : "");
$("#endTime").val(endDate && endPeriod ? (endDate + " " + endPeriod) : "");
}
function calculateLeaveDays() {
syncLeaveTimeFields();
var startDate = $("#startDate").val();
var endDate = $("#endDate").val();
var startPeriod = $("#startPeriod").val();
var endPeriod = $("#endPeriod").val();
if (!startDate || !endDate || !startPeriod || !endPeriod) {
$("#hours").val("");
$("#days").val("");
return true;
}
var startUnit = getDayNumber(startDate) * 2 + getHalfDayIndex(startPeriod);
var endUnit = getDayNumber(endDate) * 2 + getHalfDayIndex(endPeriod);
if (isNaN(startUnit) || isNaN(endUnit) || endUnit < startUnit) {
$("#hours").val("");
$("#days").val("");
return false;
}
var halfDays = endUnit - startUnit + 1;
var hours = halfDays * 4;
var days = halfDays / 2;
$("#hours").val(hours.toString());
$("#days").val(days % 1 === 0 ? days.toString() : days.toFixed(1));
return true;
}
function showUser4AuditSelectsFun() {
var userIds= $("#targetusers").val();
var jobIds= $("#targetjobs").val();
$.post(ext.contextPath + '/user/userForSelectByCompany.do', {formId:"subUnitForm",hiddenId:"targetusers",textId:"targetUsersName",userIds:userIds,jobIds:jobIds}, function(data) {
$("#user4SelectDiv").html(data);
openModal("user4SelectModal");
});
}
function dosubmit() {
$("#subForm").bootstrapValidator('validate');
if ($("#subForm").data('bootstrapValidator').isValid()) {
if (!calculateLeaveDays()) {
showAlert('d', '结束时间必须大于开始时间');
return;
}
var routeNum = $("#routeNum").val();
$.post(ext.contextPath + "/administration/leaveApply/doHandle.do", $("#subForm").serialize() + "&" + $("#subUnitForm").serialize() + "&routeNum=" + routeNum, function(data) {
if (data.res == 1) {
closeModal('subModal');
$("#table").bootstrapTable('refresh');
} else {
showAlert('d', data.res == 0 ? '保存失败' : data.res);
}
}, 'json');
}
}
$(function(){
processSelectNodeForHandle("${businessUnitHandle.taskid}");
$("#subForm").bootstrapValidator({live:'disabled',fields:{
startDate:{validators:{notEmpty:{message:'请选择开始日期'}}},
startPeriod:{validators:{notEmpty:{message:'请选择开始时段'}}},
endDate:{validators:{notEmpty:{message:'请选择结束日期'}}},
endPeriod:{validators:{notEmpty:{message:'请选择结束时段'}}},
reason:{validators:{notEmpty:{message:'请填写申请事由'}}}
}});
$('#startDate,#endDate').datetimepicker({
language: 'zh-CN',
format: 'yyyy-mm-dd',
startView: 'month',
minView: 2,
maxView: 'year',
autoclose: true,
todayBtn: true,
todayHighlight: true
}).on('changeDate', function() {
calculateLeaveDays();
});
$('#startDate,#endDate,#startPeriod,#endPeriod').on('change', function() {
calculateLeaveDays();
});
$.post(ext.contextPath + '/administration/leaveApply/showExecuteView.do', {id:'${leaveApply.id}',inModal:'inModal'}, function(data) {
$("#showView").html(data);
});
var startInfo = parseLeaveTimeValue("${leaveApply.startTime}");
var endInfo = parseLeaveTimeValue("${leaveApply.endTime}");
$("#startDate").val(startInfo.date);
$("#startPeriod").val(startInfo.period);
$("#endDate").val(endInfo.date);
$("#endPeriod").val(endInfo.period);
calculateLeaveDays();
});
</script>
<div class="modal fade" id="subModal">
<div class="modal-dialog modal-xlg">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span>&times;</span></button>
<h4 class="modal-title">退回修改(${taskName})</h4>
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-7 col-xs-12">
<form class="form-horizontal" id="subForm">
<input type="hidden" name="id" value="${leaveApply.id}">
<input type="hidden" name="unitId" value="${leaveApply.unitId}">
<div class="form-group"><label class="col-sm-3 control-label">申请类型</label><div class="col-sm-8"><input class="form-control" name="applyType" value="${leaveApply.applyType}"></div></div>
<div class="form-group"><label class="col-sm-3 control-label">假别</label><div class="col-sm-8"><input class="form-control" name="leaveType" value="${leaveApply.leaveType}"></div></div>
<div class="form-group">
<label class="col-sm-3 control-label">开始日期</label>
<div class="col-sm-5"><input class="form-control" id="startDate" name="startDate" autocomplete="off" placeholder="请选择日期"></div>
<div class="col-sm-3">
<select class="form-control" id="startPeriod" name="startPeriod">
<option value="上午">上午</option>
<option value="下午">下午</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">结束日期</label>
<div class="col-sm-5"><input class="form-control" id="endDate" name="endDate" autocomplete="off" placeholder="请选择日期"></div>
<div class="col-sm-3">
<select class="form-control" id="endPeriod" name="endPeriod">
<option value="上午">上午</option>
<option value="下午">下午</option>
</select>
</div>
</div>
<input type="hidden" id="startTime" name="startTime" value="${leaveApply.startTime}">
<input type="hidden" id="endTime" name="endTime" value="${leaveApply.endTime}">
<input type="hidden" id="hours" name="hours" value="${leaveApply.hours}">
<div class="form-group"><label class="col-sm-3 control-label">天数</label><div class="col-sm-8"><input class="form-control" id="days" name="days" value="${leaveApply.days}" readonly placeholder="自动计算"></div></div>
<div class="form-group"><label class="col-sm-3 control-label">申请事由</label><div class="col-sm-8"><textarea class="form-control" rows="3" name="reason">${leaveApply.reason}</textarea></div></div>
<div class="form-group"><label class="col-sm-3 control-label">工作交接</label><div class="col-sm-8"><textarea class="form-control" rows="2" name="handoverDesc">${leaveApply.handoverDesc}</textarea></div></div>
<div class="form-group"><label class="col-sm-3 control-label">备注</label><div class="col-sm-8"><textarea class="form-control" rows="2" name="remark">${leaveApply.remark}</textarea></div></div>
</form>
<form class="form-horizontal" id="subUnitForm">
<input type="hidden" name="id" value="${businessUnitHandle.id}">
<input type="hidden" name="processid" value="${businessUnitHandle.processid}">
<input type="hidden" name="taskid" value="${businessUnitHandle.taskid}">
<input type="hidden" name="businessid" value="${businessUnitHandle.businessid}">
<input type="hidden" name="taskdefinitionkey" value="${businessUnitHandle.taskdefinitionkey}">
<input type="hidden" name="unitid" value="${businessUnitHandle.unitid}">
<div class="form-group"><label class="col-sm-3 control-label">驳回意见</label><div class="col-sm-8"><textarea class="form-control" rows="2" readonly>${rejectReason}</textarea></div></div>
<div class="form-group"><label class="col-sm-3 control-label">下一节点</label><div class="col-sm-6"><select class="form-control select2" id="routeNum" name="routeNum"></select></div></div>
<div id="selectUsers" class="form-group"><label class="col-sm-3 control-label">提交至</label><div class="col-sm-9"><input type="text" class="form-control" id="targetUsersName" name="targetUsersName" onclick="showUser4AuditSelectsFun();" placeholder="可不选;不选时谁签收谁审批"><input id="targetusers" name="targetusers" type="hidden" value="${businessUnitHandle.targetusers}"><input id="targetjobs" name="targetjobs" type="hidden" value=""></div></div>
</form>
</div>
<div class="col-md-5 col-xs-12" id="showView"></div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
<button type="button" class="btn btn-primary" onclick="dosubmit()">提交</button>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,161 @@
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.springsecurity.org/jsp" prefix="security"%>
<%@ page import="com.sipai.entity.base.ServerObject" %>
<jsp:include page="/jsp/inc.jsp"></jsp:include>
<style type="text/css">
.main-header,.content-header,.main-footer{display:none;}
.table-hover>tbody>tr:hover{cursor:pointer;}
</style>
<script type="text/javascript">
var companyId = "";
var addFun = function() {
$.post(ext.contextPath + '/administration/leaveApply/add.do', {companyId: companyId}, function(data) {
$("#subDiv").html(data);
openModal('subModal');
});
};
var editFun = function(id) {
$.post(ext.contextPath + '/administration/leaveApply/edit.do', {id:id}, function(data) {
$("#subDiv").html(data);
openModal('subModal');
});
};
var viewFun = function(id) {
$.post(ext.contextPath + '/administration/leaveApply/view.do', {id:id}, function(data) {
$("#subDiv").html(data);
openModal('subModal');
});
};
var processFun = function(id) {
$.post(ext.contextPath + '/administration/leaveApply/showExecuteView.do', {id:id}, function(data) {
$("#subDiv").html(data);
openModal('leaveApplyExcuteModal');
});
};
var showNotStartedProcessTip = function() {
showAlert('i', '该请假单尚未发起审批流程');
};
var formatLeaveHalfDay = function(value) {
if (!value) {
return "";
}
var text = $.trim(value);
var halfDayMatch = text.match(/^(\d{4}-\d{2}-\d{2})\s+(上午|下午)$/);
if (halfDayMatch) {
return halfDayMatch[1] + " " + halfDayMatch[2];
}
var dateTimeMatch = text.match(/^(\d{4}-\d{2}-\d{2})(?:\s+(\d{1,2})(?::\d{1,2}(?::\d{1,2})?)?(?:\.\d+)?)?$/);
if (dateTimeMatch) {
var hour = dateTimeMatch[2] ? parseInt(dateTimeMatch[2], 10) : 0;
return dateTimeMatch[1] + " " + (hour >= 12 ? "下午" : "上午");
}
return text;
};
var applyTypeTextMap = {
"leave": "请假",
"compensatory": "补假"
};
var leaveTypeTextMap = {
"annual": "年假",
"personal": "事假",
"sick": "病假",
"marriage": "婚假",
"maternity": "产假",
"funeral": "丧假",
"adjustment": "调休"
};
var formatApplyType = function(value) {
return applyTypeTextMap[value] || value || "";
};
var formatLeaveType = function(value) {
return leaveTypeTextMap[value] || value || "";
};
var formatProcessStarted = function(row) {
return row.processdefid ? "已发起" : "未发起";
};
var deleteFun = function(id) {
$.post(ext.contextPath + '/administration/leaveApply/delete.do', {id:id}, function(data) {
if (data == 1) { $("#table").bootstrapTable('refresh'); } else { showAlert('d','删除失败','mainAlertdiv'); }
});
};
var dosearch = function(){ $("#table").bootstrapTable('refresh'); };
$(function(){
$.post(ext.contextPath + '/user/getUnitForTree.do', {ng:''}, function(data){
if (data.length > 0) {
companyId = data[0].id;
$("#search_pid").val(companyId);
$("#cname_input").val(data[0].text);
initFun();
}
}, 'json');
});
var initFun = function() {
$("#table").bootstrapTable({
url: ext.contextPath + '/administration/leaveApply/getList.do',
cache: false,
striped: true,
pagination: true,
pageList: [10,20,50],
pageSize: 10,
pageNumber: 1,
sidePagination: 'server',
queryParams: function(params) {
return {rows: params.limit,page: params.offset/params.limit+1,sort: params.sort,order: params.order,search_code: companyId,search_name: $("#search_name").val(),applyType: $("#applyType").val()};
},
sortName: 'insdt',
sortOrder: 'desc',
columns: [
{checkbox: true},
{field: 'applyType', title: '申请类型', align: 'center', formatter: function(value){ return formatApplyType(value); }},
{field: 'leaveType', title: '假别', align: 'center', formatter: function(value){ return formatLeaveType(value); }},
{field: 'startTime', title: '开始时间', align: 'center', formatter: function(value){ return formatLeaveHalfDay(value); }},
{field: 'endTime', title: '结束时间', align: 'center', formatter: function(value){ return formatLeaveHalfDay(value); }},
{field: 'days', title: '天数', align: 'center'},
{field: 'auditMan', title: '审批人', align: 'center'},
{field: 'processdefid', title: '流程状态', align: 'center', formatter: function(value,row){ return formatProcessStarted(row); }},
{field: 'stateName', title: '状态', align: 'center'},
{field: 'id', title: '操作', align: 'center', formatter: function(value,row,index){
var processLink = row.processdefid
? "<a href='javascript:processFun(\""+row.id+"\")'>流程</a>"
: "<a href='javascript:showNotStartedProcessTip()'>未发起</a>";
return "<a href='javascript:editFun(\""+row.id+"\")'>编辑</a> | "
+ processLink + " | "
+ "<a href='javascript:deleteFun(\""+row.id+"\")'>删除</a>";
}}
]
});
};
</script>
<!DOCTYPE html>
<head>
<title><%= ServerObject.atttable.get("TOPTITLE")%></title>
</head>
<body>
<section class="content">
<div id="mainAlertdiv"></div>
<div id="subDiv"></div>
<div id="user4SelectDiv"></div>
<div class="box box-primary">
<div class="box-header with-border">
<h3 class="box-title">请假补假申请</h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-primary btn-sm" onclick="addFun()">新增</button>
</div>
</div>
<div class="box-body">
<form id="searchForm" class="form-inline" style="margin-bottom:10px;">
<input type="hidden" id="search_pid">
<input type="text" id="cname_input" class="form-control" placeholder="厂区" readonly>
<input type="text" id="search_name" class="form-control" placeholder="事由关键字">
<select id="applyType" class="form-control">
<option value="">全部类型</option>
<option value="leave">请假</option>
<option value="compensatory">补假</option>
</select>
<button type="button" class="btn btn-default" onclick="dosearch()">查询</button>
</form>
<table id="table" class="table table-hover"></table>
</div>
</div>
</section>
</body>

View File

@ -0,0 +1,47 @@
<%@ page language="java" pageEncoding="UTF-8"%>
<script type="text/javascript">
function formatLeaveHalfDay(value) {
if (!value) {
return "";
}
var text = $.trim(value);
var halfDayMatch = text.match(/^(\d{4}-\d{2}-\d{2})\s+(上午|下午)$/);
if (halfDayMatch) {
return halfDayMatch[1] + " " + halfDayMatch[2];
}
var dateTimeMatch = text.match(/^(\d{4}-\d{2}-\d{2})(?:\s+(\d{1,2})(?::\d{1,2}(?::\d{1,2})?)?(?:\.\d+)?)?$/);
if (dateTimeMatch) {
var hour = dateTimeMatch[2] ? parseInt(dateTimeMatch[2], 10) : 0;
return dateTimeMatch[1] + " " + (hour >= 12 ? "下午" : "上午");
}
return text;
}
$(function(){
$("#viewStartTimeText").text(formatLeaveHalfDay("${leaveApply.startTime}"));
$("#viewEndTimeText").text(formatLeaveHalfDay("${leaveApply.endTime}"));
});
</script>
<div class="modal fade" id="subModal">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span>&times;</span></button>
<h4 class="modal-title">查看申请</h4>
</div>
<div class="modal-body">
<table class="table table-bordered">
<tr><th>申请类型</th><td>${leaveApply.applyType}</td><th>假别</th><td>${leaveApply.leaveType}</td></tr>
<tr><th>开始时间</th><td id="viewStartTimeText"></td><th>结束时间</th><td id="viewEndTimeText"></td></tr>
<tr><th>天数</th><td>${leaveApply.days}</td><th>审批人</th><td>${leaveApply.auditMan}</td></tr>
<tr><th>状态</th><td colspan="3">${leaveApply.stateName}</td></tr>
<tr><th>申请事由</th><td colspan="3">${leaveApply.reason}</td></tr>
<tr><th>工作交接</th><td colspan="3">${leaveApply.handoverDesc}</td></tr>
<tr><th>备注</th><td colspan="3">${leaveApply.remark}</td></tr>
</table>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
</div>
</div>
</div>
</div>

View File

@ -1,9 +1,10 @@
<%@ page language="java" pageEncoding="UTF-8" %> <%@ page language="java" pageEncoding="UTF-8" %>
<script type="text/javascript"> <script type="text/javascript">
var previews = new Array(); // 不重新定义这些变量,直接使用主页面的全局变量
var previewConfigs = new Array(); // var previews = new Array();
var filelist = new Array(); // var previewConfigs = new Array();
// var filelist = new Array();
//初始化fileinput控件第一次初始化 //初始化fileinput控件第一次初始化
function initFileInput(ctrlName, uploadUrl) { function initFileInput(ctrlName, uploadUrl) {
@ -55,9 +56,10 @@
//导入文件上传完成之后的事件 //导入文件上传完成之后的事件
control.on("fileuploaded", function (event, data, previewId, index) { control.on("fileuploaded", function (event, data, previewId, index) {
if (data.response.suc) { if (data.response.suc) {
<%--getFileListMinioPic('${param.divId}','edit');--%> // 直接使用主页面的全局变量重新加载文件列表
// getFileListMinioPic('abnormityFileId', 'edit', '', previews, previewConfigs);
getFileListMinioPic('${param.divId}', 'edit', '', previews, previewConfigs); getFileListMinioPic('${param.divId}', 'edit', '', previews, previewConfigs);
// 关闭上传弹窗,返回主页面
closeModal('fileInputModal');
} }
}); });
} }

View File

@ -296,8 +296,18 @@
function exportExcel() { function exportExcel() {
var periodTypeName = $('#periodTypeList').val(); var periodTypeName = $('#periodTypeList').val();
var positionType = $('#positionTypeList').val(); var positionType = $('#positionTypeList').val();
let checkedItems = $("#table").bootstrapTable('getSelections');
let ids = "";
$.each(checkedItems, function (index, item) {
ids += item.id + ",";
});
if (ids !== "") {
ids = ids.substring(0, ids.length - 1);
window.open(ext.contextPath + "/kpi/kpiPlan/export.do?periodTypeName=" + periodTypeName + "&positionType=" + positionType + "&ids=" + encodeURIComponent(ids));
} else {
window.open(ext.contextPath + "/kpi/kpiPlan/export.do?periodTypeName=" + periodTypeName + "&positionType=" + positionType); window.open(ext.contextPath + "/kpi/kpiPlan/export.do?periodTypeName=" + periodTypeName + "&positionType=" + positionType);
} }
}
</script> </script>

View File

@ -636,22 +636,29 @@
var enterpriseTotal = 0; var enterpriseTotal = 0;
var enterpriseOnline = 0; var enterpriseOnline = 0;
var enterpriseList = []; var enterpriseList = [];
var enterprisePageSize = 20; // 每页20条
var enterpriseCurrentPage = 1; // 当前页码
// 加载企业数据 // 加载企业数据(分页)
function loadEnterpriseData() { function loadEnterpriseData() {
loadEnterpriseList(enterpriseCurrentPage);
}
// 加载企业列表(分页)
function loadEnterpriseList(page) {
enterpriseCurrentPage = page;
$.ajax({ $.ajax({
type: 'POST', type: 'POST',
url: ext.contextPath + '/sparepart/sewage/getList.do', url: ext.contextPath + '/sparepart/sewage/getList.do',
data: { data: {
page: 1, page: page,
rows: 1000, rows: enterprisePageSize,
sort: "displacement", sort: "displacement",
order: "asc", order: "asc",
unitId: '0533JS', unitId: defaultUnitId,
}, },
// async: true, async: true,
// dataType: 'json', globle: false,
// globle: false,
error: function () { error: function () {
// loadEnterpriseDataMock(); // loadEnterpriseDataMock();
return false; return false;
@ -662,12 +669,37 @@
if (dataList && dataList.rows) { if (dataList && dataList.rows) {
var list = dataList.rows || []; var list = dataList.rows || [];
enterpriseTotal = dataList.total; enterpriseTotal = dataList.total;
// 统计在线数量(全部数据,不仅仅是当前页)
enterpriseOnline = list.filter(function(item) { enterpriseOnline = list.filter(function(item) {
return item._input; return item._input;
}).length; }).length;
enterpriseList = list; enterpriseList = list;
// 为每个企业查询瞬时流量
var promises = [];
list.forEach(function(item) {
if (item.ventNum) {
var mpointCode = item.ventNum + '_SSLL';
promises.push(
getMpointValueAsync(mpointCode).then(function(value) {
item.flow = value.parmvalue || '0';
})
);
} else {
item.flow = '--';
}
});
// 等待所有瞬时流量查询完成后渲染
Promise.all(promises).then(function() {
renderEnterpriseStats(); renderEnterpriseStats();
renderEnterpriseList(list); renderEnterpriseList(list);
renderEnterprisePagination();
}).catch(function() {
renderEnterpriseStats();
renderEnterpriseList(list);
renderEnterprisePagination();
});
} else { } else {
loadEnterpriseDataMock(); loadEnterpriseDataMock();
} }
@ -700,9 +732,10 @@
$('#enterprise_total').text(enterpriseTotal); $('#enterprise_total').text(enterpriseTotal);
$('#enterprise_online').text(enterpriseOnline); $('#enterprise_online').text(enterpriseOnline);
$('#enterprise_offline').text(enterpriseTotal - enterpriseOnline); $('#enterprise_offline').text(enterpriseTotal - enterpriseOnline);
// 计算总流量 // 计算总流量(当前页)
var totalFlow = enterpriseList.reduce(function(sum, item) { var totalFlow = enterpriseList.reduce(function(sum, item) {
return sum + (item.attributes && item.attributes.flow ? item.attributes.flow : 0); var flow = item.flow || 0;
return sum + (typeof flow === 'number' ? flow : 0);
}, 0); }, 0);
$('#enterprise_total_flow').text(formatNumber(totalFlow)); $('#enterprise_total_flow').text(formatNumber(totalFlow));
} }
@ -713,7 +746,7 @@
list.forEach(function(item) { list.forEach(function(item) {
var name = item.name || item.text || '--'; var name = item.name || item.text || '--';
var status = item._input ? 'online' : 'offline'; var status = item._input ? 'online' : 'offline';
var flow = item.attributes && item.attributes.flow ? item.attributes.flow : 0; var flow = item.flow || '--';
var statusClass = status === 'online' ? 'online' : 'offline'; var statusClass = status === 'online' ? 'online' : 'offline';
var statusText = status === 'online' ? '已接入' : '未接入'; var statusText = status === 'online' ? '已接入' : '未接入';
@ -734,9 +767,34 @@
$('#enterprise_list').html(html); $('#enterprise_list').html(html);
} }
// 渲染企业分页控件
function renderEnterprisePagination() {
var totalPages = Math.ceil(enterpriseTotal / enterprisePageSize);
// 更新分页信息
var pageInfo = '第 ' + enterpriseCurrentPage + '/' + totalPages + ' 页,共 ' + enterpriseTotal + ' 条';
$('#enterprise_page_info').text(pageInfo);
// 更新分页按钮
var btnHtml = '';
btnHtml += '<button class="pagination-btn" onclick="enterpriseGoToPage(1)" ' + (enterpriseCurrentPage === 1 ? 'disabled' : '') + '>首页</button>';
btnHtml += '<button class="pagination-btn" onclick="enterpriseGoToPage(' + (enterpriseCurrentPage - 1) + ')" ' + (enterpriseCurrentPage === 1 ? 'disabled' : '') + '>上一页</button>';
btnHtml += '<button class="pagination-btn" onclick="enterpriseGoToPage(' + (enterpriseCurrentPage + 1) + ')" ' + (enterpriseCurrentPage >= totalPages ? 'disabled' : '') + '>下一页</button>';
btnHtml += '<button class="pagination-btn" onclick="enterpriseGoToPage(' + totalPages + ')" ' + (enterpriseCurrentPage >= totalPages ? 'disabled' : '') + '>末页</button>';
$('#enterprise_page_btns').html(btnHtml);
}
// 企业列表分页跳转
function enterpriseGoToPage(page) {
var totalPages = Math.ceil(enterpriseTotal / enterprisePageSize);
if (page < 1) page = 1;
if (page > totalPages) page = totalPages;
loadEnterpriseList(page);
}
// 格式化数字 // 格式化数字
function formatNumber(num) { function formatNumber(num) {
if (num === null || num === undefined) return '--'; if (num === null || num === undefined || num === '--') return '--';
return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
} }
@ -746,7 +804,7 @@
type: 'GET', type: 'GET',
url: ext.contextPath + '/base/mainConfig/getJson.do', url: ext.contextPath + '/base/mainConfig/getJson.do',
async: true, async: true,
data: {unitId: unitId}, data: {unitId: defaultUnitId},
globle: false, globle: false,
error: function () { error: function () {
console.error('获取主配置数据失败'); console.error('获取主配置数据失败');
@ -850,17 +908,19 @@
initPumpStations(); initPumpStations();
} }
// 如果没有工艺配置,使用默认数据 // // 如果没有工艺配置,使用默认数据
var hasProcessConfig = mpcode.some(function(item) { return item.type === 'process'; }); // var hasProcessConfig = mpcode.some(function(item) { return item.type === 'process'; });
if (!hasProcessConfig) { // if (!hasProcessConfig) {
initProcessList(); // initProcessList();
} // }
initProcessListByConfig(code, divid);
// 如果没有告警配置,使用默认数据 // // 如果没有告警配置,使用默认数据
var hasAlarmConfig = mpcode.some(function(item) { return item.type === 'alarm'; }); // var hasAlarmConfig = mpcode.some(function(item) { return item.type === 'alarm'; });
if (!hasAlarmConfig) { // if (!hasAlarmConfig) {
initAlarmList(); // initAlarmList();
} // }
initAlarmListByConfig(code, divid)
} }
function initData() { function initData() {
@ -900,7 +960,7 @@
page: page, page: page,
sort: 'equipmentcardid', sort: 'equipmentcardid',
order: 'asc', order: 'asc',
unitId: unitId, unitId: defaultUnitId,
}, },
async: true, async: true,
globle: false, globle: false,
@ -1109,39 +1169,111 @@
return data; return data;
} }
// 根据配置初始化工艺列表 // 根据配置初始化工艺列表 - 调用工艺段接口(支持分页)
// /TGLW/user/processSection/getlist.do?rows=50&page=1&order=asc&search_code=0533JS&unitId=0533JS&search_name=&_=1775558221772
var processTotal = 0; // 工艺段总数
function initProcessListByConfig(mpointCode, containerId) { function initProcessListByConfig(mpointCode, containerId) {
loadProcessList(processCurrentPage);
}
// 加载工艺列表(分页)
function loadProcessList(page) {
processCurrentPage = page;
$.ajax({ $.ajax({
type: 'GET', type: 'GET',
url: ext.contextPath + '/work/mpoint/getProcessList.do?unitId=' + unitId + '&mpointCode=' + mpointCode, url: ext.contextPath + '/user/processSection/getlist.do',
data: {
unitId: defaultUnitId,
rows: processPageSize,
page: page,
},
async: true, async: true,
dataType: 'json',
globle: false, globle: false,
error: function () { error: function () {
processData = generateProcessData(); // processData = generateProcessData();
renderProcessTable(); // renderProcessTable();
return false; return false;
}, },
success: function (data) { success: function (data) {
if (data != null && data !== '') { if (data && data.rows) {
try { // 更新总数
var result = eval('(' + data + ')'); processTotal = data.total || data.rows.length;
if (result.status === 'pass' && result.processList) {
processData = result.processList; // 将接口返回的工艺段数据转换为表格格式
processData = [];
var rows = data.rows || [];
// 为每个工艺段获取测点值
var promises = [];
rows.forEach(function(item, index) {
var processItem = {
...item,
processName: item.text || item.name || '--',
param1: '--',
param2: '--',
param3: '--',
deviceId: item.id || ''
};
processData.push(processItem);
// 为param1, param2, param3创建获取值的Promise
['1', '2', '3'].forEach(function(suffix) {
var mpointCodeParam = item.id + '_' + suffix;
promises.push(
getMpointValueAsync(mpointCodeParam).then(function(value) {
let values = (value.parmname || '--') + ':' + (value.parmvalue || '--') + (value.unit || '')
if (suffix === '1') processItem.param1 = values;
else if (suffix === '2') processItem.param2 = values;
else if (suffix === '3') processItem.param3 = values;
})
);
});
});
// 等待所有测点值获取完成后渲染表格
Promise.all(promises).then(function() {
renderProcessTable(); renderProcessTable();
renderProcessPagination();
}).catch(function() {
renderProcessTable();
renderProcessPagination();
});
} else { } else {
processData = generateProcessData(); // processData = generateProcessData();
renderProcessTable(); // renderProcessTable();
} }
} catch (e) {
processData = generateProcessData();
renderProcessTable();
} }
});
}
// 异步获取测点值
function getMpointValueAsync(mpointCode) {
return new Promise(function(resolve) {
$.ajax({
type: 'GET',
url: ext.contextPath + '/work/mpoint/getValue.do',
data: {
unitId: defaultUnitId,
mpointCode: mpointCode
},
async: true,
dataType: 'json',
globle: false,
success: function(data) {
if (data && data.parmvalue !== undefined && data.parmvalue !== null) {
resolve(data);
// resolve(data.parmname + ':' + data.parmvalue + data.unit);
} else { } else {
processData = generateProcessData(); resolve('--');
renderProcessTable();
} }
},
error: function() {
resolve('--');
} }
}); });
});
} }
// 生成告警列表mock数据 // 生成告警列表mock数据
@ -1168,36 +1300,65 @@
return data; return data;
} }
// 根据配置初始化告警列表 // 根据配置初始化告警列表 - 调用告警接口
// 参考 proAlarmList.jsp 的接口调用
function initAlarmListByConfig(mpointCode, containerId) { function initAlarmListByConfig(mpointCode, containerId) {
// 获取当前时间和7天前时间
var endTime = new Date();
var startTime = new Date(endTime.getTime() - 7 * 24 * 60 * 60 * 1000);
var formatDate = function(date) {
return date.getFullYear() + '-' +
String(date.getMonth() + 1).padStart(2, '0') + '-' +
String(date.getDate()).padStart(2, '0') + ' ' +
String(date.getHours()).padStart(2, '0') + ':' +
String(date.getMinutes()).padStart(2, '0');
};
$.ajax({ $.ajax({
type: 'GET', type: 'POST',
url: ext.contextPath + '/work/mpoint/getAlarmList.do?unitId=' + unitId + '&mpointCode=' + mpointCode, url: ext.contextPath + '/alarm/proAlarm/getlist.do',
data: {
companyId: defaultUnitId,
search_name: '',
pSectionCode: '',
alarmType: '',
alarmlevel: '',
status: '',
sdt: formatDate(startTime),
edt: formatDate(endTime)
},
async: true, async: true,
dataType: 'json',
globle: false, globle: false,
error: function () { error: function () {
alarmData = generateAlarmData(); // alarmData = generateAlarmData();
renderAlarmTable(); // renderAlarmTable();
return false; return false;
}, },
success: function (data) { success: function (data) {
if (data != null && data !== '') { if (data && data.rows && data.rows.length > 0) {
try { // 将接口返回的告警数据转换为表格格式
var result = eval('(' + data + ')'); alarmData = [];
if (result.status === 'pass' && result.alarmList) { data.rows.forEach(function(item) {
alarmData = result.alarmList; alarmData.push({
id: item.id,
process: item.pointName || item.processSectionName || '--',
pointCode: item.pointCode || '',
status: item.status || '',
alarmLevel: item.alarmLevel || '',
alarmTime: item.alarmTime || '',
describe: item.describe || '',
alarmTypeName: item.alarmTypeName || '',
confirmerName: item.confirmerName || '',
confirmTime: item.confirmTime || '',
time: item.alarmTime ? item.alarmTime.substring(0, 16) : '--',
bizId: item.bizId || ''
});
});
renderAlarmTable(); renderAlarmTable();
} else { } else {
alarmData = generateAlarmData(); // alarmData = generateAlarmData();
renderAlarmTable(); // renderAlarmTable();
}
} catch (e) {
alarmData = generateAlarmData();
renderAlarmTable();
}
} else {
alarmData = generateAlarmData();
renderAlarmTable();
} }
} }
}); });
@ -1209,14 +1370,11 @@
} }
function renderProcessTable() { function renderProcessTable() {
var start = (processCurrentPage - 1) * processPageSize; // 服务端分页processData 已经是当前页数据
var end = Math.min(start + processPageSize, processData.length);
var pageData = processData.slice(start, end);
var html = ''; var html = '';
pageData.forEach(function(process) { processData.forEach(function(process) {
html += '<tr>'; html += '<tr>';
html += '<td>' + process.name + '</td>'; html += '<td>' + (process.processName || process.name || '--') + '</td>';
html += '<td>' + process.param1 + '</td>'; html += '<td>' + process.param1 + '</td>';
html += '<td>' + process.param2 + '</td>'; html += '<td>' + process.param2 + '</td>';
html += '<td>' + process.param3 + '</td>'; html += '<td>' + process.param3 + '</td>';
@ -1224,26 +1382,30 @@
html += '</tr>'; html += '</tr>';
}); });
$('#process_table tbody').html(html); $('#process_table tbody').html(html);
}
// 渲染工艺列表分页控件
function renderProcessPagination() {
var totalPages = Math.ceil(processTotal / processPageSize);
// 更新分页信息 // 更新分页信息
var totalPages = Math.ceil(processData.length / processPageSize); $('#process_page_info').text('第 ' + processCurrentPage + '/' + totalPages + ' 页,共 ' + processTotal + ' 条');
$('#process_page_info').text('第 ' + processCurrentPage + '/' + totalPages + ' 页,共 ' + processData.length + ' 条');
// 更新分页按钮 // 更新分页按钮
var btnHtml = ''; var btnHtml = '';
btnHtml += '<button class="pagination-btn" onclick="processGoToPage(1)" ' + (processCurrentPage === 1 ? 'disabled' : '') + '>首页</button>'; btnHtml += '<button class="pagination-btn" onclick="processGoToPage(1)" ' + (processCurrentPage === 1 ? 'disabled' : '') + '>首页</button>';
btnHtml += '<button class="pagination-btn" onclick="processGoToPage(' + (processCurrentPage - 1) + ')" ' + (processCurrentPage === 1 ? 'disabled' : '') + '>上一页</button>'; btnHtml += '<button class="pagination-btn" onclick="processGoToPage(' + (processCurrentPage - 1) + ')" ' + (processCurrentPage === 1 ? 'disabled' : '') + '>上一页</button>';
btnHtml += '<button class="pagination-btn" onclick="processGoToPage(' + (processCurrentPage + 1) + ')" ' + (processCurrentPage === totalPages ? 'disabled' : '') + '>下一页</button>'; btnHtml += '<button class="pagination-btn" onclick="processGoToPage(' + (processCurrentPage + 1) + ')" ' + (processCurrentPage >= totalPages ? 'disabled' : '') + '>下一页</button>';
// btnHtml += '<button class="pagination-btn" onclick="processGoToPage(' + totalPages + ')" ' + (processCurrentPage === totalPages ? 'disabled' : '') + '>末页</button>'; btnHtml += '<button class="pagination-btn" onclick="processGoToPage(' + totalPages + ')" ' + (processCurrentPage >= totalPages ? 'disabled' : '') + '>末页</button>';
$('#process_page_btns').html(btnHtml); $('#process_page_btns').html(btnHtml);
} }
// 工艺列表分页跳转
function processGoToPage(page) { function processGoToPage(page) {
var totalPages = Math.ceil(processData.length / processPageSize); var totalPages = Math.ceil(processTotal / processPageSize);
if (page < 1) page = 1; if (page < 1) page = 1;
if (page > totalPages) page = totalPages; if (page > totalPages) page = totalPages;
processCurrentPage = page; loadProcessList(page);
renderProcessTable();
} }
function initAlarmList() { function initAlarmList() {
@ -1595,6 +1757,12 @@
<div class="enterprise-list-wrapper" id="enterprise_list"> <div class="enterprise-list-wrapper" id="enterprise_list">
<!-- 企业卡片将通过JS动态生成 --> <!-- 企业卡片将通过JS动态生成 -->
</div> </div>
<!-- 企业分页 -->
<div class="pagination">
<span class="pagination-info" id="enterprise_page_info"></span>
<div class="pagination-btns" id="enterprise_page_btns"></div>
</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -173,8 +173,8 @@
return repo.text; return repo.text;
} // 函数用于呈现当前的选择 } // 函数用于呈现当前的选择
}); });
selelct_.val('').trigger("change"); selelct_.val('').trigger("change.select2");
selelct_.on('change', function () { selelct_.off("select2:select select2:clear").on("select2:select select2:clear", function () {
//工艺段选择后,清空原有工艺段选择的设备 //工艺段选择后,清空原有工艺段选择的设备
$("#equipmentIds").val(""); $("#equipmentIds").val("");
$("#equipname").val(""); $("#equipname").val("");

View File

@ -159,7 +159,7 @@
formatResult: function formatRepo(repo){return repo.text;}, // 函数用来渲染结果 formatResult: function formatRepo(repo){return repo.text;}, // 函数用来渲染结果
formatSelection: function formatRepoSelection(repo){return repo.text;} // 函数用于呈现当前的选择 formatSelection: function formatRepoSelection(repo){return repo.text;} // 函数用于呈现当前的选择
}); });
selelct_.val('${abnormity.processSectionId}').trigger("change"); selelct_.val('${abnormity.processSectionId}').trigger("change.select2");
},'json'); },'json');
}; };
var companyId = "${abnormity.bizId}"; var companyId = "${abnormity.bizId}";
@ -181,9 +181,9 @@
formatSelection: function formatRepoSelection(repo){return repo.text;} // 函数用于呈现当前的选择 formatSelection: function formatRepoSelection(repo){return repo.text;} // 函数用于呈现当前的选择
}); });
if(data!=null && data.length>0){ if(data!=null && data.length>0){
selelct_.val('${abnormity.processSectionId}').trigger("change"); selelct_.val('${abnormity.processSectionId}').trigger("change.select2");
} }
selelct_.on('change',function(){ selelct_.off("select2:select select2:clear").on("select2:select select2:clear",function(){
//工艺段选择后,清空原有工艺段选择的设备 //工艺段选择后,清空原有工艺段选择的设备
$("#equipmentIds").val(""); $("#equipmentIds").val("");
$("#equipname").val(""); $("#equipname").val("");

View File

@ -195,8 +195,8 @@
formatResult: function formatRepo(repo){return repo.text;}, // 函数用来渲染结果 formatResult: function formatRepo(repo){return repo.text;}, // 函数用来渲染结果
formatSelection: function formatRepoSelection(repo){return repo.text;} // 函数用于呈现当前的选择 formatSelection: function formatRepoSelection(repo){return repo.text;} // 函数用于呈现当前的选择
}); });
selelct_.val('').trigger("change"); selelct_.val('').trigger("change.select2");
selelct_.on("change",function(e){ selelct_.off("select2:select select2:clear").on("select2:select select2:clear",function(e){
dosearch(); dosearch();
}); });
},'json'); },'json');

View File

@ -156,8 +156,8 @@
return repo.text; return repo.text;
} // 函数用于呈现当前的选择 } // 函数用于呈现当前的选择
}); });
selelct_.val('').trigger("change"); selelct_.val('').trigger("change.select2");
selelct_.on("change", function (e) { selelct_.off("select2:select select2:clear").on("select2:select select2:clear", function (e) {
initAPPFun(); initAPPFun();
}); });
}, 'json'); }, 'json');
@ -493,8 +493,8 @@
return repo.text; return repo.text;
} // 函数用于呈现当前的选择 } // 函数用于呈现当前的选择
}); });
selelct_.val('').trigger("change"); selelct_.val('').trigger("change.select2");
selelct_.on("change", function (e) { selelct_.off("select2:select select2:clear").on("select2:select select2:clear", function (e) {
// dosearch(); // dosearch();
$("#table").bootstrapTable('refresh'); $("#table").bootstrapTable('refresh');
}); });

View File

@ -170,16 +170,16 @@
return repo.text; return repo.text;
} // 函数用于呈现当前的选择 } // 函数用于呈现当前的选择
}); });
selelct_.val('').trigger("change"); selelct_.val('').trigger("change.select2");
selelct_.on("change", function (e) { selelct_.off("select2:select select2:clear").on("select2:select select2:clear", function (e) {
dosearch(); dosearch();
}); });
}, 'json'); }, 'json');
var statusSelect = $("#statusSelect").select2({ var statusSelect = $("#statusSelect").select2({
minimumResultsForSearch: 10, minimumResultsForSearch: 10,
placeholder: '请选择', placeholder: '请选择',
}).val('').trigger("change"); }).val('').trigger("change.select2");
statusSelect.on("change", function (e) { statusSelect.off("select2:select select2:clear").on("select2:select select2:clear", function (e) {
dosearch(); dosearch();
}); });
$("#table").bootstrapTable({ // 对应table标签的id $("#table").bootstrapTable({ // 对应table标签的id

View File

@ -174,8 +174,8 @@
return repo.text; return repo.text;
} // 函数用于呈现当前的选择 } // 函数用于呈现当前的选择
}); });
selelct_.val("").trigger("change"); selelct_.val("").trigger("change.select2");
selelct_.on("change", function (e) { selelct_.off("select2:select select2:clear").on("select2:select select2:clear", function (e) {
dosearch(); dosearch();
}); });
}, 'json'); }, 'json');

View File

@ -354,7 +354,7 @@
</div>--%> </div>--%>
<div class="form-group" style="margin:8px"> <div class="form-group" style="margin:8px">
<button type="button" class="btn btn-default btn-file" onclick="fileinputPic('maintenanceDetailFile')" <button type="button" class="btn btn-default btn-file" onclick="fileinputPic('abnormityFileId')"
id="btn_save"><i id="btn_save"><i
class="fa fa-paperclip"></i>上传图片 class="fa fa-paperclip"></i>上传图片
</button> </button>

View File

@ -187,8 +187,8 @@
return repo.text; return repo.text;
} // 函数用于呈现当前的选择 } // 函数用于呈现当前的选择
}); });
selelct_.val("").trigger("change"); selelct_.val("").trigger("change.select2");
selelct_.on("change", function (e) { selelct_.off("select2:select select2:clear").on("select2:select select2:clear", function (e) {
dosearch(); dosearch();
}); });
}, 'json'); }, 'json');

View File

@ -271,8 +271,8 @@
formatResult: function formatRepo(repo) { return repo.text; }, // 函数用来渲染结果 formatResult: function formatRepo(repo) { return repo.text; }, // 函数用来渲染结果
formatSelection: function formatRepoSelection(repo) { return repo.text; } // 函数用于呈现当前的选择 formatSelection: function formatRepoSelection(repo) { return repo.text; } // 函数用于呈现当前的选择
}); });
selelct_.val("").trigger("change"); selelct_.val("").trigger("change.select2");
selelct_.on("change", function (e) { selelct_.off("select2:select select2:clear").on("select2:select select2:clear", function (e) {
dosearch(); dosearch();
}); });
}, 'json'); }, 'json');

View File

@ -88,7 +88,10 @@
var checkedItems = $("#table").bootstrapTable('getSelections'); var checkedItems = $("#table").bootstrapTable('getSelections');
var datas = ""; var datas = "";
$.each(checkedItems, function(index, item) { $.each(checkedItems, function(index, item) {
datas += item.id + ","; if (datas != "") {
datas += ",";
}
datas += item.id;
}); });
if (datas == "") { if (datas == "") {
showAlert('d', '请先选择记录', 'mainAlertdiv'); showAlert('d', '请先选择记录', 'mainAlertdiv');

View File

@ -78,8 +78,11 @@
rptdt: time, rptdt: time,
rptdeptId: '${param.rptdeptId}' rptdeptId: '${param.rptdeptId}'
}, function (data) { }, function (data) {
$("#rptDiv").html(data); if (data.code > 0) {
openModal('subModal'); $("#rptDiv").html(data); openModal('subModal');
} else {
showAlert('d', '您没有该报表的填报权限', 'mainAlertdiv');
}
}); });
}; };
@ -160,7 +163,7 @@
if (data.code > 0) { if (data.code > 0) {
$("#table").bootstrapTable('refresh'); $("#table").bootstrapTable('refresh');
} else { } else {
showAlert('d', '删除失败', 'mainAlertdiv'); showAlert('d', data.msg, 'mainAlertdiv');
} }
}, 'json'); }, 'json');

View File

@ -55,6 +55,7 @@
.table-hover > tbody > tr:hover { .table-hover > tbody > tr:hover {
cursor: pointer; cursor: pointer;
} }
.input-clear-a { .input-clear-a {
color: white; color: white;
@ -98,8 +99,8 @@
let text = "您确定要删除此 证书 信息?"; let text = "您确定要删除此 证书 信息?";
let delUrl = ext.contextPath + '/safety/externalCertificate/delete.do'; let delUrl = ext.contextPath + '/safety/externalCertificate/delete.do';
if(!id){ if (!id) {
id =staffId;//外部员工ID id = staffId;//外部员工ID
text = "您确定要删除此 人员 信息?" text = "您确定要删除此 人员 信息?"
delUrl = ext.contextPath + '/safety/externalStaff/delete.do'; delUrl = ext.contextPath + '/safety/externalStaff/delete.do';
} }
@ -143,11 +144,15 @@
} }
var deletesFun = function () { var deletesFun = function () {
var checkedItems = $("#table").bootstrapTable('getSelections'); var checkedItems = $("#table").bootstrapTable('getSelections');
var datas = ""; var ids = [];
var staffIds = [];
$.each(checkedItems, function (index, item) { $.each(checkedItems, function (index, item) {
datas += item.id + ","; if (item.id) {
ids.push(item.id);
staffIds.push(item.staffId || "");
}
}); });
if (datas == "") { if (ids.length === 0 && staffIds.length === 0) {
showAlert('d', '请先选择记录', 'mainAlertdiv'); showAlert('d', '请先选择记录', 'mainAlertdiv');
} else { } else {
swal({ swal({
@ -171,7 +176,10 @@
} }
}).then(function (willDelete) { }).then(function (willDelete) {
if (willDelete) { if (willDelete) {
$.post(ext.contextPath + '/safety/externalCertificate/deletes.do', {ids: datas}, function (data) { $.post(ext.contextPath + '/safety/externalCertificate/deletes.do', {
ids: ids.join(","),
staffIds: staffIds.join(",")
}, function (data) {
if (data > 0) { if (data > 0) {
$("#table").bootstrapTable('refresh'); $("#table").bootstrapTable('refresh');
// 初始化 作业类型 // 初始化 作业类型
@ -204,11 +212,24 @@
var companyParam = $('#companyParam').val(); var companyParam = $('#companyParam').val();
var issueDate = $('#reservationtimeD').val(); var issueDate = $('#reservationtimeD').val();
window.open(ext.contextPath + "/safety/externalCertificate/exportExcel.do?search_name=" + search_name var checkedItems = $("#table").bootstrapTable('getSelections');
+ "&search_code=" + search_code var ids = [];
+ "&jobType=" + jobType var staffIds = [];
+ "&issueDate=" + issueDate $.each(checkedItems, function (index, item) {
+ "&companyParam=" + companyParam if (item.id) {
ids.push(item.id);
} else if (item.staffId) {
staffIds.push(item.staffId);
}
});
window.open(ext.contextPath + "/safety/externalCertificate/exportExcel.do?search_name=" + encodeURIComponent(search_name || "")
+ "&search_code=" + encodeURIComponent(search_code || "")
+ "&jobType=" + encodeURIComponent(jobType || "")
+ "&issueDate=" + encodeURIComponent(issueDate || "")
+ "&companyParam=" + encodeURIComponent(companyParam || "")
+ "&ids=" + encodeURIComponent(ids.join(","))
+ "&staffIds=" + encodeURIComponent(staffIds.join(","))
); );
} }
@ -234,6 +255,7 @@
// 初始化 表格数据 // 初始化 表格数据
initFun(); initFun();
}); });
// 时间筛选 // 时间筛选
function initDate1() { function initDate1() {
var locale = { var locale = {
@ -288,6 +310,7 @@
} }
}); });
} }
//作业类型下拉数据 //作业类型下拉数据
function jobTypePulldown() { function jobTypePulldown() {
//选择 从事岗位 //选择 从事岗位
@ -316,8 +339,9 @@
}); });
}, 'json'); }, 'json');
} }
//施工单位下拉数据 //施工单位下拉数据
function companyPulldown(){ function companyPulldown() {
$.post(ext.contextPath + "/safety/externalStaff/companyPulldown.do", {}, function (data) { $.post(ext.contextPath + "/safety/externalStaff/companyPulldown.do", {}, function (data) {
$("#companyParam").empty(); $("#companyParam").empty();
var selelct_ = $("#companyParam").select2({ var selelct_ = $("#companyParam").select2({
@ -343,6 +367,7 @@
}); });
}, 'json'); }, 'json');
} }
// 初始表格 // 初始表格
var nowDate = new Date(); var nowDate = new Date();
var initFun = function () { var initFun = function () {
@ -391,17 +416,17 @@
field: 'company', // 返回json数据中的name field: 'company', // 返回json数据中的name
title: '施工单位名称', // 表格表头显示文字 title: '施工单位名称', // 表格表头显示文字
align: 'center', // 左右居中 align: 'center', // 左右居中
valign: 'middle', // 上下居中 valign: 'middle' // 上下居中
}, { }, {
field: 'certificateName', // 返回json数据中的name field: 'certificateName', // 返回json数据中的name
title: '证书名称', // 表格表头显示文字 title: '证书名称', // 表格表头显示文字
align: 'center', // 左右居中 align: 'center', // 左右居中
valign: 'middle', // 上下居中 valign: 'middle' // 上下居中
}, { }, {
field: 'certificateNo', // 返回json数据中的name field: 'certificateNo', // 返回json数据中的name
title: '证书编号', // 表格表头显示文字 title: '证书编号', // 表格表头显示文字
align: 'center', // 左右居中 align: 'center', // 左右居中
valign: 'middle', // 上下居中 valign: 'middle' // 上下居中
}, { }, {
field: 'jobCode', // 返回json数据中的name field: 'jobCode', // 返回json数据中的name
title: '作业项目代码', // 表格表头显示文字 title: '作业项目代码', // 表格表头显示文字
@ -411,39 +436,49 @@
field: 'jobType', // 返回json数据中的name field: 'jobType', // 返回json数据中的name
title: '作业类型', // 表格表头显示文字 title: '作业类型', // 表格表头显示文字
align: 'center', // 左右居中 align: 'center', // 左右居中
valign: 'middle', // 上下居中 valign: 'middle' // 上下居中
},{ }, {
field: 'issuingAuthority', // 返回json数据中的name field: 'issuingAuthority', // 返回json数据中的name
title: '发证部门', // 表格表头显示文字 title: '发证部门', // 表格表头显示文字
align: 'center', // 左右居中 align: 'center', // 左右居中
valign: 'middle', // 上下居中 valign: 'middle' // 上下居中
}, { }, {
field: 'issueDate', // 返回json数据中的name field: 'issueDate', // 返回json数据中的name
title: '领证时间', // 表格表头显示文字 title: '领证时间', // 表格表头显示文字
align: 'center', // 左右居中 align: 'center', // 左右居中
valign: 'middle', // 上下居中 valign: 'middle' // 上下居中
}, { }, {
field: 'expirationDate', // 返回json数据中的name field: 'expirationDate', // 返回json数据中的name
title: '有效期至', // 表格表头显示文字 title: '有效期至', // 表格表头显示文字
align: 'center', // 左右居中 align: 'center', // 左右居中
valign: 'middle', // 上下居中 valign: 'middle', // 上下居中
cellStyle:function(value,row,index){// 修改列(单元格)的颜色 cellStyle: function (value, row, index) {// 修改列(单元格)的颜色
if(value){ if (value) {
var stime = Date.parse(nowDate); var stime = Date.parse(nowDate);
var etime = Date.parse(new Date(value)); var etime = Date.parse(new Date(value));
// 两个时间戳相差的毫秒数 // 两个时间戳相差的毫秒数
var usedTime = etime - stime; var usedTime = etime - stime;
if(usedTime > 0){ if (usedTime > 0) {
// 计算相差的天数 // 计算相差的天数
var days = Math.floor(usedTime / (24 * 3600 * 1000)); var days = Math.floor(usedTime / (24 * 3600 * 1000));
if(days <= 30){ if (days <= 30) {
return {css:{"background-color":"rgba(220,29,54,1)","color":"rgba(255,255,255,1)"}}; return {
css: {
"background-color": "rgba(220,29,54,1)",
"color": "rgba(255,255,255,1)"
} }
}else{ };
return {css:{"background-color":"rgba(220,29,54,1)","color":"rgba(255,255,255,1)"}}; }
} else {
return {
css: {
"background-color": "rgba(220,29,54,1)",
"color": "rgba(255,255,255,1)"
}
};
} }
} }
return {css:{}}; return {css: {}};
} }
}, { }, {
title: "操作", title: "操作",
@ -454,7 +489,7 @@
var buts = ''; var buts = '';
buts += '<button class="btn btn-default btn-sm" title="编辑" onclick="editFun(\'' + row.id + '\')"><i class="fa fa-edit"></i><span class="hidden-md hidden-lg"> 编辑</span></button>'; buts += '<button class="btn btn-default btn-sm" title="编辑" onclick="editFun(\'' + row.id + '\')"><i class="fa fa-edit"></i><span class="hidden-md hidden-lg"> 编辑</span></button>';
buts += '<button class="btn btn-default btn-sm" title="删除" onclick="deleteFun(\'' + row.id + '\',\''+row.staffId+'\')"><i class="fa fa fa-trash-o"></i><span class="hidden-md hidden-lg">删除</span></button>'; buts += '<button class="btn btn-default btn-sm" title="删除" onclick="deleteFun(\'' + row.id + '\',\'' + row.staffId + '\')"><i class="fa fa fa-trash-o"></i><span class="hidden-md hidden-lg">删除</span></button>';
buts += '<button class="btn btn-default btn-sm" title="下载" onclick="fileDownload(\'' + row.fileId + '\')"><i class="fa fa-paperclip"></i><span class="hidden-md hidden-lg">下载</span></button>'; buts += '<button class="btn btn-default btn-sm" title="下载" onclick="fileDownload(\'' + row.fileId + '\')"><i class="fa fa-paperclip"></i><span class="hidden-md hidden-lg">下载</span></button>';
// buts += '<button class="btn btn-default btn-sm" title="查看详情" onclick="viewFun(\'' + row.id + '\')"><i class="fa fa-eye"></i><span class="hidden-md hidden-lg">查看详情</span></button>'; // buts += '<button class="btn btn-default btn-sm" title="查看详情" onclick="viewFun(\'' + row.id + '\')"><i class="fa fa-eye"></i><span class="hidden-md hidden-lg">查看详情</span></button>';
@ -500,14 +535,14 @@
* @param colspan 合并列 * @param colspan 合并列
* @param target 目标表格对象 * @param target 目标表格对象
*/ */
function mergeCells(data,fieldName,colspan,target){ function mergeCells(data, fieldName, colspan, target) {
//声明一个map计算相同属性值在data对象出现的次数和 //声明一个map计算相同属性值在data对象出现的次数和
var sortMap = {}; var sortMap = {};
for(var i = 0 ; i < data.length ; i++){ for (var i = 0; i < data.length; i++) {
for(var prop in data[i]){ for (var prop in data[i]) {
if(prop == fieldName){ if (prop == fieldName) {
var key = data[i][prop] var key = data[i][prop]
if(sortMap.hasOwnProperty(key)){ if (sortMap.hasOwnProperty(key)) {
sortMap[key] = sortMap[key] * 1 + 1; sortMap[key] = sortMap[key] * 1 + 1;
} else { } else {
sortMap[key] = 1; sortMap[key] = 1;
@ -516,17 +551,28 @@
} }
} }
} }
for(var prop in sortMap){ for (var prop in sortMap) {
// console.log(prop,sortMap[prop]) // console.log(prop,sortMap[prop])
} }
var index = 0; var index = 0;
for(var prop in sortMap){ for (var prop in sortMap) {
var count = sortMap[prop] * 1; var count = sortMap[prop] * 1;
$(target).bootstrapTable('mergeCells',{index:index, field:fieldName, colspan: colspan, rowspan: count}); $(target).bootstrapTable('mergeCells', {
$(target).bootstrapTable('mergeCells',{index:index, field:'company', colspan: colspan, rowspan: count}); index: index,
field: fieldName,
colspan: colspan,
rowspan: count
});
$(target).bootstrapTable('mergeCells', {
index: index,
field: 'company',
colspan: colspan,
rowspan: count
});
index += count; index += count;
} }
} }
var timedel = function () { var timedel = function () {
$('#reservationtimeD').val(''); $('#reservationtimeD').val('');
timeRangeEnd = null; timeRangeEnd = null;
@ -554,10 +600,12 @@
<div> <div>
<div class="form-group" style="padding:0;"> <div class="form-group" style="padding:0;">
<div class="btn-group" style="width: 300px;padding-bottom:10px;"> <div class="btn-group" style="width: 300px;padding-bottom:10px;">
<button type="button" class="btn btn-default btn-sm" onclick="addFun();" style="margin-right: 15px"><i <button type="button" class="btn btn-default btn-sm" onclick="addFun();"
style="margin-right: 15px"><i
class="fa fa-plus"></i> 新增 class="fa fa-plus"></i> 新增
</button> </button>
<button type="button" class="btn btn-default btn-sm" onclick="deletesFun();" style="margin-right: 15px"><i <button type="button" class="btn btn-default btn-sm" onclick="deletesFun();"
style="margin-right: 15px"><i
class="fa fa-trash-o"></i> 删除 class="fa fa-trash-o"></i> 删除
</button> </button>
<button type="button" class="btn btn-default btn-sm" style="margin-right: 15px" <button type="button" class="btn btn-default btn-sm" style="margin-right: 15px"
@ -575,12 +623,14 @@
<div class="form-group pull-right form-inline"> <div class="form-group pull-right form-inline">
<div class="form-group"> <div class="form-group">
<label class="form-label">施工单位名称:</label> <label class="form-label">施工单位名称:</label>
<select class="form-control select2" id="companyParam" name="companyParam" style="width: 180px;"> <select class="form-control select2" id="companyParam" name="companyParam"
style="width: 180px;">
</select> </select>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="form-label">作业类型:</label> <label class="form-label">作业类型:</label>
<select class="form-control select2" id="jobTypeParam" name="jobTypeParam" style="width: 180px;"> <select class="form-control select2" id="jobTypeParam" name="jobTypeParam"
style="width: 180px;">
</select> </select>
</div> </div>
<div class="input-group input-group-sm" style="width: 200px;"> <div class="input-group input-group-sm" style="width: 200px;">

View File

@ -129,11 +129,17 @@
}; };
var deletesFun = function () { var deletesFun = function () {
var checkedItems = $("#table").bootstrapTable('getSelections'); var checkedItems = $("#table").bootstrapTable('getSelections');
var datas = ""; var ids = [];
var staffIds = [];
$.each(checkedItems, function (index, item) { $.each(checkedItems, function (index, item) {
datas += item.id + ","; if (item.id) {
ids.push(item.id);
} else if (item.staffId) {
// 兼容模式若后续行模型提供备用ID批删也可工作
staffIds.push(item.staffId);
}
}); });
if (datas == "") { if (ids.length === 0 && staffIds.length === 0) {
showAlert('d', '请先选择记录', 'mainAlertdiv'); showAlert('d', '请先选择记录', 'mainAlertdiv');
} else { } else {
swal({ swal({
@ -157,7 +163,10 @@
} }
}).then(function (willDelete) { }).then(function (willDelete) {
if (willDelete) { if (willDelete) {
$.post(ext.contextPath + '/safety/internalCertificate/deletes.do', {ids: datas}, function (data) { $.post(ext.contextPath + '/safety/internalCertificate/deletes.do', {
ids: ids.join(","),
staffIds: staffIds.join(",")
}, function (data) {
if (data > 0) { if (data > 0) {
$("#table").bootstrapTable('refresh'); $("#table").bootstrapTable('refresh');
// 初始化 作业类型 // 初始化 作业类型
@ -313,17 +322,17 @@
field: 'jobType', // 返回json数据中的name field: 'jobType', // 返回json数据中的name
title: '作业类型', // 表格表头显示文字 title: '作业类型', // 表格表头显示文字
align: 'center', // 左右居中 align: 'center', // 左右居中
valign: 'middle', // 上下居中 valign: 'middle' // 上下居中
}, { }, {
field: 'issuingAuthority', // 返回json数据中的name field: 'issuingAuthority', // 返回json数据中的name
title: '发证机构', // 表格表头显示文字 title: '发证机构', // 表格表头显示文字
align: 'center', // 左右居中 align: 'center', // 左右居中
valign: 'middle', // 上下居中 valign: 'middle' // 上下居中
}, { }, {
field: 'issueDate', // 返回json数据中的name field: 'issueDate', // 返回json数据中的name
title: '领证时间', // 表格表头显示文字 title: '领证时间', // 表格表头显示文字
align: 'center', // 左右居中 align: 'center', // 左右居中
valign: 'middle', // 上下居中 valign: 'middle' // 上下居中
}, { }, {
field: 'expirationDate', // 返回json数据中的name field: 'expirationDate', // 返回json数据中的name
title: '有效期至', // 表格表头显示文字 title: '有效期至', // 表格表头显示文字

View File

@ -115,7 +115,7 @@ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD
var fileinput = function () { var fileinput = function () {
$('#file').click(); $('#file').click();
}; };
var filedel = function () { var filedel = function (index) {
fileList.splice(index,1) fileList.splice(index,1)
$('#test').html(initFileInputView()) $('#test').html(initFileInputView())
}; };

View File

@ -234,7 +234,8 @@ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD
{ {
formId: "addForm", formId: "addForm",
hiddenId: "userId", hiddenId: "userId",
textId: "userName" textId: "userName",
displayDept: "true"
}, function (data) { }, function (data) {
$("#user4SelectDiv").html(data); $("#user4SelectDiv").html(data);
openModal("user4SelectModal"); openModal("user4SelectModal");

View File

@ -47,6 +47,11 @@ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD
display: inline-block; display: inline-block;
vertical-align: top; vertical-align: top;
padding: 8px; padding: 8px;
width: 140px;
text-align: left;
}
.detail-row {
clear: both;
} }
</style> </style>
<script type="text/javascript"> <script type="text/javascript">
@ -253,7 +258,7 @@ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD
function initdeTail(list) { function initdeTail(list) {
let temp = `<div >` let temp = `<div >`
list.forEach((item, index) => { list.forEach((item, index) => {
temp += `<div><div class="AAA">` + item.deptName + `</div>` temp += `<div class="detail-row"><div class="AAA">` + item.deptName + `</div>`
temp += `<div class="AAA">` + item.userName + `</div>` temp += `<div class="AAA">` + item.userName + `</div>`
temp += `<div class="AAA">` + item.pass + `</div>` temp += `<div class="AAA">` + item.pass + `</div>`
temp += `<div class="AAA">` + item.time + `</div></div>` temp += `<div class="AAA">` + item.time + `</div></div>`
@ -426,8 +431,10 @@ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-2 control-label ">查看其它会签意见</label> <label class="col-sm-2 control-label ">查看其它会签意见</label>
<div class="col-sm-10">
<div id="deTail"></div> <div id="deTail"></div>
</div> </div>
</div>
<div class="form-group" style="margin-left: 39px"> <div class="form-group" style="margin-left: 39px">
<div id="fileList"></div> <div id="fileList"></div>
</div> </div>

View File

@ -400,8 +400,18 @@
//导出 //导出
function downloadExcelFun() { function downloadExcelFun() {
var checkedItems = $("#table").bootstrapTable('getSelections');
var ids = "";
$.each(checkedItems, function(index, item){
ids += item.id + ",";
});
if(ids !== ""){
ids = ids.substring(0, ids.length - 1);
window.open(ext.contextPath + "/sparepart/sewage/downloadExcelFun.do?ids=" + encodeURIComponent(ids));
}else{
window.open(ext.contextPath + "/sparepart/sewage/downloadExcelFun.do"); window.open(ext.contextPath + "/sparepart/sewage/downloadExcelFun.do");
} }
}
</script> </script>
</head> </head>
<body onload="initMenu()" class="hold-transition ${cu.themeclass} sidebar-mini"> <body onload="initMenu()" class="hold-transition ${cu.themeclass} sidebar-mini">

View File

@ -56,7 +56,7 @@
//编辑用户信息 //编辑用户信息
var editUserFun = function (roleid, bizid) { var editUserFun = function (roleid, bizid) {
$.post(ext.contextPath + '/user/showRoleUser.do', { roleid: roleid }, function (data) { $.post(ext.contextPath + '/user/showRoleUser.do', { roleid: roleid, bizid: bizid }, function (data) {
$("#subDiv_User").html(data); $("#subDiv_User").html(data);
openModal('roleUserModal'); openModal('roleUserModal');
}); });

Some files were not shown because too many files have changed in this diff Show More