package com.ruoyi.station.service.impl;
|
|
import java.util.*;
|
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.ruoyi.common.constant.UrlConstant;
|
import com.ruoyi.common.utils.DateUtils;
|
import com.ruoyi.common.utils.IdUtils;
|
import com.ruoyi.common.utils.StringUtils;
|
import com.ruoyi.station.domain.*;
|
import com.ruoyi.station.mapper.*;
|
import com.ruoyi.station.model.AreaDoorModel;
|
import com.ruoyi.station.model.DeptUsersModel;
|
import com.ruoyi.station.model.TmpDataModel;
|
import com.ruoyi.station.model.WorkUserModel;
|
import com.ruoyi.station.service.*;
|
import org.apache.ibatis.annotations.Param;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.http.HttpEntity;
|
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.MediaType;
|
import org.springframework.http.ResponseEntity;
|
import org.springframework.stereotype.Service;
|
import com.ruoyi.common.core.text.Convert;
|
import org.springframework.util.LinkedMultiValueMap;
|
import org.springframework.util.MultiValueMap;
|
import org.springframework.web.client.RestTemplate;
|
|
/**
|
* 工单Service业务层处理
|
*
|
* @author ruoyi
|
* @date 2020-08-10
|
*/
|
@Service
|
public class MjWorkOrderServiceImpl implements IMjWorkOrderService
|
{
|
@Autowired
|
private MjWorkOrderMapper mjWorkOrderMapper;
|
|
@Autowired
|
private MjDeptMapper mjDeptMapper;
|
|
@Autowired
|
private MjWorkUserMapper mjWorkUserMapper;
|
|
@Autowired
|
private MjAreaManagementMapper mjAreaManagementMapper;
|
|
@Autowired
|
private MjDoorMapper mjDoorMapper;
|
|
@Autowired
|
private IMjWorkUserPushService mjWorkUserPushService;
|
|
@Autowired
|
private MjFingerprintReadHeadMapper mjFingerprintReadHeadMapper;
|
|
@Autowired
|
private MjOrderDetailMapper mjOrderDetailMapper;
|
|
@Autowired
|
private IMjAuthorizeDetailService mjAuthorizeDetailService;
|
|
@Autowired
|
private IMjFingerprintService mjFingerprintService;
|
|
@Autowired
|
private IMjFingerprintReadHeadService mjFingerprintReadHeadService;
|
|
@Autowired
|
private IMjTemplateAreacontentService iMjTemplateAreacontentService;
|
@Autowired
|
private IMjAreaManagementService iMjAreaManagementService;
|
/**
|
* 查询工单
|
*
|
* @param id 工单ID
|
* @return 工单
|
*/
|
@Override
|
public MjWorkOrder selectMjWorkOrderById(String id)
|
{
|
return mjWorkOrderMapper.selectMjWorkOrderById(id);
|
}
|
|
/**
|
* 查询工单列表
|
*
|
* @param mjWorkOrder 工单
|
* @return 工单
|
*/
|
@Override
|
public List<MjWorkOrder> selectMjWorkOrderList(MjWorkOrder mjWorkOrder)
|
{
|
return mjWorkOrderMapper.selectMjWorkOrderList(mjWorkOrder);
|
}
|
|
/**
|
* 新增工单
|
*
|
* @param mjWorkOrder 工单
|
* @return 结果
|
*/
|
@Override
|
public int insertMjWorkOrder(MjWorkOrder mjWorkOrder)
|
{
|
mjWorkOrder.setCreateTime(DateUtils.getNowDate());
|
return mjWorkOrderMapper.insertMjWorkOrder(mjWorkOrder);
|
}
|
|
/**
|
* 修改工单
|
*
|
* @param mjWorkOrder 工单
|
* @return 结果
|
*/
|
@Override
|
public int updateMjWorkOrder(MjWorkOrder mjWorkOrder)
|
{
|
mjWorkOrder.setUpdateTime(DateUtils.getNowDate());
|
return mjWorkOrderMapper.updateMjWorkOrder(mjWorkOrder);
|
}
|
|
/**
|
* 删除工单对象
|
*
|
* @param ids 需要删除的数据ID
|
* @return 结果
|
*/
|
@Override
|
public int deleteMjWorkOrderByIds(String ids)
|
{
|
return mjWorkOrderMapper.deleteMjWorkOrderByIds(Convert.toStrArray(ids));
|
}
|
|
/**
|
* 删除工单信息
|
*
|
* @param id 工单ID
|
* @return 结果
|
*/
|
@Override
|
public int deleteMjWorkOrderById(String id)
|
{
|
return mjWorkOrderMapper.deleteMjWorkOrderById(id);
|
}
|
|
/**
|
* 根据当前时间获取有效工单
|
* @return
|
*/
|
@Override
|
public List<MjWorkOrder> selectMjWorkOrderByDate() {
|
return mjWorkOrderMapper.selectMjWorkOrderByDate();
|
}
|
|
|
/**
|
* 根据当前时间获取失效工单
|
* @return
|
*/
|
@Override
|
public List<MjWorkOrder> selectMjWorkOrderByDateForInvalid() {
|
return mjWorkOrderMapper.selectMjWorkOrderByDateForInvalid();
|
}
|
|
/**
|
* 根据获取用户id获取有效工单
|
* @param userId
|
* @return
|
*/
|
@Override
|
public MjWorkOrder selectValidOrderByUserId(Long userId) {
|
return mjWorkOrderMapper.selectValidOrderByUserId(userId);
|
}
|
|
List<DeptUsersModel> depts = null;
|
/**
|
* 获取部门用户列表
|
* @return
|
*/
|
@Override
|
public List<DeptUsersModel> selectDeptUsersList() {
|
depts = mjDeptMapper.selectMjDeptListByDeptParentId("0");
|
if(depts != null && depts.size() > 0) {
|
getDeptChildren(depts);
|
}
|
return depts;
|
}
|
|
List<AreaDoorModel> areaDoorModels = null;
|
/**
|
* 获取区域门禁
|
* @return
|
*/
|
@Override
|
public List<AreaDoorModel> selectAreaDoorList() {
|
areaDoorModels = mjAreaManagementMapper.selectAreaListByAreaParentId("0");
|
if(areaDoorModels != null && areaDoorModels.size() > 0) {
|
getAreaChildren(areaDoorModels);
|
}
|
return areaDoorModels;
|
}
|
|
/**
|
* 递归获取部门用户信息
|
* @param depts
|
*/
|
private void getDeptChildren(List<DeptUsersModel> depts) {
|
for(DeptUsersModel dept : depts) {
|
if(dept != null && StringUtils.isNotEmpty(dept.getId())) {
|
List<DeptUsersModel> deptChildList = mjDeptMapper.selectMjDeptListByDeptParentId(dept.getId());
|
if(deptChildList != null && deptChildList.size() > 0) {
|
dept.setChildren(deptChildList);
|
getDeptChildren(dept.getChildren());
|
}else {
|
List<DeptUsersModel> deptModels = mjWorkUserMapper.selectUserListByDeptId(dept.getId());
|
if(deptModels != null) {
|
dept.setChildren(deptModels);
|
}
|
}
|
}
|
}
|
}
|
|
/**
|
* 递归获取区域门禁信息
|
* @param areaDoorModels
|
*/
|
private void getAreaChildren(List<AreaDoorModel> areaDoorModels) {
|
for(AreaDoorModel areaDoor : areaDoorModels) {
|
if(areaDoor != null && StringUtils.isNotEmpty(areaDoor.getId())) {
|
List<AreaDoorModel> areaDoorChildren = mjAreaManagementMapper.selectAreaListByAreaParentId(areaDoor.getId());
|
if(areaDoorChildren != null && areaDoorChildren.size() > 0) {
|
/* List<AreaDoorModel> doorList = mjDoorMapper.selectDoorListByAreaId(areaDoor.getId());
|
if(doorList != null && doorList.size() > 0) {
|
areaDoor.setChildren(doorList);
|
}*/
|
if(areaDoor.getChildren() != null && areaDoor.getChildren().size() > 0) {
|
for(AreaDoorModel area : areaDoorChildren) {
|
areaDoor.getChildren().add(area);
|
}
|
}else {
|
areaDoor.setChildren(areaDoorChildren);
|
}
|
getAreaChildren(areaDoor.getChildren());
|
}else {
|
/*List<AreaDoorModel> doorList = mjDoorMapper.selectDoorListByAreaId(areaDoor.getId());
|
if(doorList != null) {
|
areaDoor.setChildren(doorList);
|
}*/
|
}
|
}
|
}
|
}
|
|
/**
|
* 获取区域ids
|
* @param areaIds
|
* @return
|
*/
|
@Override
|
public Map<String, String> getAreaIds(String areaIds, String areaNames) {
|
Set<String> areaIdSet = new HashSet<>();
|
Set<String> areaNamesSet = new HashSet<>();
|
Set<String> areaIdsSet = new HashSet<>();
|
Map<String, String> map = new HashMap();
|
|
String[] areaIdArr = areaIds.split(",");
|
String[] areaNameArr = areaNames.split(",");
|
|
for(String areaId : areaIdArr) {
|
areaIdSet.add(areaId.trim());
|
}
|
areaIdsSet.addAll(areaIdSet);
|
|
for(String areaName : areaNameArr) {
|
areaNamesSet.add(areaName.trim());
|
}
|
|
for(String areaId : areaIdSet) {
|
getAreaPid(areaId, areaIdsSet, areaNamesSet); //递归获取父areaId
|
}
|
|
List<String> list = new ArrayList<>(areaIdsSet);
|
List<String> namelist = new ArrayList<>(areaNamesSet);
|
String areaIdsStr = String.join(",", list);
|
String areaNamesStr = String.join(",", namelist);
|
map.put("areaIdsStr", areaIdsStr);
|
map.put("areaNamesStr", areaNamesStr);
|
return map;
|
}
|
|
/**
|
* 递归获取父areaId
|
* @param areaId
|
* @param areaIdsSet
|
*/
|
private void getAreaPid(String areaId, Set<String> areaIdsSet, Set<String> areaNamesSet) {
|
MjAreaManagement areaManagement = mjAreaManagementMapper.selectParentAreaByAreaId(areaId);
|
if(areaManagement != null) {
|
areaIdsSet.add(areaManagement.getId().trim());
|
areaNamesSet.add(areaManagement.getAreaName().trim());
|
getAreaPid(areaManagement.getId(), areaIdsSet, areaNamesSet);
|
}
|
}
|
|
/**
|
* 修改工单
|
* @param mjWorkOrder
|
* @return
|
*/
|
@Override
|
public List<MjOrderDetail> updateOrder(MjWorkOrder mjWorkOrder) {
|
|
/*List<String> newAreaIds = new ArrayList<>();
|
List<String> newUserIds = new ArrayList<>();
|
Set<String> beforeAreaIds = new HashSet<>();
|
List<String> beforeUserIds = new ArrayList<>();*/
|
|
MjOrderDetail orderDetail = new MjOrderDetail();
|
orderDetail.setOrderId(mjWorkOrder.getId());
|
List<MjOrderDetail> orderDetails = mjOrderDetailMapper.selectMjOrderDetailList(orderDetail);
|
if(orderDetails != null) {
|
/*if(StringUtils.isNotEmpty(beforeOrder.getAreaIds())) {
|
String[] beforeAreaIdsArr = beforeOrder.getAreaIds().split(",");
|
beforeAreaIds = Arrays.asList(beforeAreaIdsArr);
|
}*/
|
mjWorkOrder.setUpdateTime(new Date());
|
int num = mjWorkOrderMapper.updateMjWorkOrder(mjWorkOrder); //修改订单
|
if(num>0) {
|
for(MjOrderDetail detail : orderDetails) {
|
mjOrderDetailMapper.deleteMjOrderDetailById(detail.getId()); //删除order_detail
|
/*if(detail != null && StringUtils.isNotEmpty(detail.getAreaId())) {
|
beforeAreaIds.add(detail.getAreaId()); //获取修改前订单的区域
|
}
|
if(detail != null && detail.getUserId() != null) {
|
beforeUserIds.add(detail.getUserId().toString()); //获取修改前订单的用户
|
}*/
|
}
|
|
//王浩杰 2020-09-14
|
// if(StringUtils.isNotEmpty(mjWorkOrder.getTempAreaId())){
|
// String as = mjWorkOrder.getAreaIds();
|
// String an = mjWorkOrder.getAreaNames();
|
// MjTemplateAreacontent mjTemplateAreacontent = new MjTemplateAreacontent();
|
// mjTemplateAreacontent.setTemplatId(mjWorkOrder.getTempAreaId());
|
// List<MjTemplateAreacontent> mjTemplateAreacontents = iMjTemplateAreacontentService.selectMjTemplateAreacontentList(mjTemplateAreacontent);
|
// for(MjTemplateAreacontent mjTemplateAreacontent1:mjTemplateAreacontents){
|
// if(as.indexOf(mjTemplateAreacontent1.getAreaId())==-1){
|
// if(StringUtils.isNotEmpty(as)){
|
// as+=","+mjTemplateAreacontent1.getAreaId();
|
// MjAreaManagement areaManagement = iMjAreaManagementService.selectMjAreaManagementById(mjTemplateAreacontent1.getAreaId());
|
// an+=","+areaManagement.getAreaName();
|
// }else{
|
// as+=mjTemplateAreacontent1.getAreaId();
|
// MjAreaManagement areaManagement = iMjAreaManagementService.selectMjAreaManagementById(mjTemplateAreacontent1.getAreaId());
|
// an+=areaManagement.getAreaName();
|
// }
|
// }
|
// }
|
// mjWorkOrder.setAreaIds(as);
|
// mjWorkOrder.setAreaNames(an);
|
// }
|
//王浩杰 2020-09-14
|
|
//Map<String, String> map = getAreaIds(mjWorkOrder.getAreaIds(), mjWorkOrder.getAreaNames());
|
if(mjWorkOrder.getUserId() != null) {
|
MjOrderDetail detail = new MjOrderDetail();
|
String id = IdUtils.getUUIDInOrderId()+"";
|
detail.setId(id);
|
detail.setUserId(Long.parseLong(mjWorkOrder.getUserId()));
|
detail.setUserName(mjWorkOrder.getUserName());
|
detail.setOrderId(mjWorkOrder.getId());
|
detail.setMainUser(1);
|
// detail.setAreaId(map.get("areaIdsStr"));
|
// detail.setAreaName(map.get("areaNamesStr"));
|
detail.setAreaId(mjWorkOrder.getAreaIds());
|
detail.setAreaName(mjWorkOrder.getAreaNames());
|
detail.setAuthorizeResult("0");
|
detail.setAuthorizeType("0");
|
detail.setCreateTime(new Date());
|
mjOrderDetailMapper.insertMjOrderDetail(detail);
|
}
|
if(StringUtils.isNotEmpty(mjWorkOrder.getUserIds()) && StringUtils.isNotEmpty(mjWorkOrder.getUserNames())) {
|
String[] userIds = mjWorkOrder.getUserIds().split(",");
|
String[] userNames = mjWorkOrder.getUserNames().split(",");
|
for(int i=0; i<userIds.length; i++) {
|
MjOrderDetail detail = new MjOrderDetail();
|
String id = IdUtils.getUUIDInOrderId()+"";
|
detail.setId(id);
|
detail.setUserId(Long.parseLong(userIds[i]));
|
detail.setUserName(userNames[i]);
|
detail.setOrderId(mjWorkOrder.getId());
|
// detail.setAreaId(map.get("areaIdsStr"));
|
// detail.setAreaName(map.get("areaNamesStr"));
|
detail.setAreaId(mjWorkOrder.getAreaIds());
|
detail.setAreaName(mjWorkOrder.getAreaNames());
|
detail.setMainUser(0);
|
detail.setAuthorizeResult("0");
|
detail.setAuthorizeType("0");
|
detail.setCreateTime(new Date());
|
mjOrderDetailMapper.insertMjOrderDetail(detail);
|
}
|
}
|
}
|
/*if(StringUtils.isNotEmpty(mjWorkOrder.getUserIds())) {
|
String[] newUserIdsArr = mjWorkOrder.getUserIds().split(",");
|
newUserIds = Arrays.asList(newUserIdsArr); //获取修改后订单的用户
|
}
|
beforeUserIds.removeAll(newUserIds);//获取被删除的用户
|
|
if(StringUtils.isNotEmpty(mjWorkOrder.getAreaIds())) {
|
String[] newAreaIdsArr = mjWorkOrder.getAreaIds().split(",");
|
newAreaIds = Arrays.asList(newAreaIdsArr); //获取修改后订单的区域
|
}
|
beforeAreaIds.removeAll(newAreaIds); //获取被删除的区域
|
if(beforeAreaIds != null && beforeAreaIds.size() > 0) {
|
for(String areaId : beforeAreaIds) {
|
MjFingerprintReadHead head = new MjFingerprintReadHead();
|
head.setAreaId(areaId);
|
List<MjFingerprintReadHead> heads = mjFingerprintReadHeadMapper.selectMjFingerprintReadHeadList(head);
|
delUserTmpByUserIdAndIp(heads, beforeUserIds); //删除对应读头的用户
|
}
|
}*/
|
}
|
return orderDetails;
|
}
|
|
@Override
|
public void updateUserInReadHead(String orderId) {
|
MjAuthorizeDetail mjAuthorizeDetail = new MjAuthorizeDetail();
|
mjAuthorizeDetail.setOrderId(orderId);
|
mjAuthorizeDetail.setAuthorizeType("0");
|
List<MjAuthorizeDetail> authorizeDetails = mjAuthorizeDetailService.selectMjAuthorizeDetailList(mjAuthorizeDetail);
|
if(authorizeDetails != null && authorizeDetails.size() > 0) {
|
List<WorkUserModel> workUserModelList = new ArrayList<>();
|
List<String> areaIdList = new ArrayList<>();
|
for(MjAuthorizeDetail detail : authorizeDetails) {
|
areaIdList.add(detail.getAreaId());
|
MjFingerprintReadHead head = new MjFingerprintReadHead();
|
head.setAreaId(detail.getAreaId());
|
List<MjFingerprintReadHead> heads = mjFingerprintReadHeadMapper.selectMjFingerprintReadHeadList(head);
|
if(heads != null && heads.size() > 0 && detail.getUserId() != null) {
|
if(detail.getAuthorizeType().equals("0")) {
|
List<TmpDataModel> mjFingerprintList = mjFingerprintService.selectMjFingerprintListByUserId(detail.getUserId()); //获取负责人指纹信息
|
WorkUserModel workUserModel = domainToModel(detail, mjFingerprintList);
|
workUserModelList.add(workUserModel);
|
}else if(detail.getAuthorizeType().equals("1")) {
|
delUserTmpByUserIdAndIp(heads, detail.getUserId().toString());
|
}
|
}
|
}
|
JSONArray jsonArray=new JSONArray(Collections.singletonList(workUserModelList));
|
String userDatas = jsonArray.toString().substring(1, jsonArray.toString().length()-1);
|
addUserTmpByUserIdAndIp(userDatas, areaIdList);
|
}
|
}
|
|
//删除对应读头的用户
|
private void delUserTmpByUserIdAndIp(List<MjFingerprintReadHead> heads, String userId) {
|
if(heads != null && heads.size() > 0) {
|
for(MjFingerprintReadHead head : heads) {
|
if(StringUtils.isNotEmpty(head.getIpOrOther()) && StringUtils.isNotEmpty(head.getPort())) {
|
mjWorkUserPushService.removeFingerTmp(userId, head.getIpOrOther(), head.getPort());
|
}
|
}
|
}
|
}
|
|
//增加对应读头的用户
|
private void addUserTmpByUserIdAndIp(String value, List<String> areaIdList) {
|
RestTemplate restTemplate = new RestTemplate();
|
HttpHeaders headers = new HttpHeaders();
|
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
|
|
if(areaIdList.size() > 0) {
|
for(String areaId : areaIdList) {
|
MjFingerprintReadHead fingerprintReadHead = new MjFingerprintReadHead();
|
fingerprintReadHead.setAreaId(areaId);
|
List<MjFingerprintReadHead> fingerprintReadHeads = mjFingerprintReadHeadService.selectMjFingerprintReadHeadList(fingerprintReadHead);
|
for(MjFingerprintReadHead head : fingerprintReadHeads) {
|
MultiValueMap<String, Object> map= new LinkedMultiValueMap<>();
|
|
map.add("ip", head.getIpOrOther());
|
map.add("port", head.getPort());
|
map.add("userDatas", value);
|
|
HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(map, headers);
|
try {
|
ResponseEntity<String> response = restTemplate.postForEntity( UrlConstant.ZK_URL+"api/SDZ/ZktdelUserToOpenDoor", request , String.class );
|
System.out.println(response.getBody());
|
}catch (Exception e) {
|
e.printStackTrace();
|
return;
|
}
|
}
|
}
|
}
|
}
|
|
//转换为访问所需model
|
private WorkUserModel domainToModel(MjAuthorizeDetail detail, List<TmpDataModel> mjFingerprintList) {
|
WorkUserModel workUserModel = new WorkUserModel();
|
workUserModel.setId(detail.getUserId().toString().trim());
|
workUserModel.setName(detail.getUserName().trim());
|
workUserModel.setPass("123456");
|
workUserModel.setiPrivilege(0);
|
if(detail.getMainUser() != null && detail.getMainUser() == 1) {
|
workUserModel.setFlag("a");
|
}else {
|
workUserModel.setFlag("x");
|
}
|
|
workUserModel.setTmpDatas(mjFingerprintList);
|
return workUserModel;
|
}
|
|
/**
|
* 工作票号查重
|
* @param orderNo
|
* @return
|
*/
|
@Override
|
public Integer checkOrderNoRepeat(String orderNo) {
|
return mjWorkOrderMapper.checkOrderNoRepeat(orderNo);
|
}
|
|
/**
|
* 根据年份获取工作票数量
|
* @param yearTime
|
* @return
|
*/
|
@Override
|
public Integer selectOrderCountByYear(String yearTime) {
|
return mjWorkOrderMapper.selectOrderCountByYear(yearTime);
|
}
|
|
@Override
|
public String getOrderName(String orderId) {
|
return mjWorkOrderMapper.getOrderName(orderId);
|
}
|
}
|