From 48d2fcc6e04d9fdf61e079d427186338a1816dba Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期四, 13 十一月 2025 11:59:30 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/maanshan' into maanshan
---
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java | 257 +++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 237 insertions(+), 20 deletions(-)
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java
index 612951a..b81ac6f 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java
@@ -1,15 +1,19 @@
package com.doumee.service.business.impl;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
-import com.doumee.core.model.LoginUserInfo;
-import com.doumee.core.model.PageData;
-import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.dao.UserActionMapper;
+import com.doumee.service.business.third.model.LoginUserInfo;
+import com.doumee.service.business.third.model.PageData;
+import com.doumee.service.business.third.model.PageWrap;
import com.doumee.core.utils.*;
import com.doumee.core.wx.wxPlat.WxPlatConstants;
import com.doumee.core.wx.wxPlat.WxPlatNotice;
import com.doumee.dao.business.*;
+import com.doumee.dao.business.dao.MemberMapper;
import com.doumee.dao.business.dao.SmsConfigMapper;
import com.doumee.dao.business.dao.SmsEmailMapper;
import com.doumee.dao.business.join.ApproveJoinMapper;
@@ -18,6 +22,7 @@
import com.doumee.dao.business.vo.ApproveDataVO;
import com.doumee.dao.business.vo.DateIntervalVO;
+import com.doumee.dao.business.model.Member;
import com.doumee.dao.system.SystemUserMapper;
import com.doumee.dao.system.join.NoticesJoinMapper;
import com.doumee.dao.system.model.Notices;
@@ -32,6 +37,7 @@
import com.doumee.service.business.third.EmayService;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang3.StringUtils;
+import org.checkerframework.checker.units.qual.C;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -39,9 +45,11 @@
import java.time.LocalDateTime;
import java.time.ZoneId;
+import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.Date;
+import java.util.stream.Collectors;
/**
* 杞﹁締_鐢ㄨ溅鐢宠淇℃伅琛⊿ervice瀹炵幇
@@ -53,7 +61,11 @@
@Autowired
private CarUseBookMapper carUseBookMapper;
+ @Autowired
+ private ApproveMapper approveMapper;
+ @Autowired
+ private UserActionMapper userActionMapper;
@Autowired
private CarUseBookJoinMapper carUseBookJoinMapper;
@@ -146,7 +158,7 @@
}
carUseBookMapper.insert(carUseBook);
//鐢ㄨ溅鐢宠 瀹℃壒璁板綍鍒涘缓
- approveService.createApproveFlow(carUseBook.getType()==0?3:4,carUseBook.getId(),carUseBook.getMemberId());
+ approveService.createApproveFlow(carUseBook.getType()==0?3:4,carUseBook.getId(),carUseBook.getMemberId(),null);
//鍙戦�佸井淇″叕浼楀彿閫氱煡
//鍙戦�佸井淇″叕浼楀彿閫氱煡
WxPlatNotice wxPlatNotice = new WxPlatNotice();
@@ -156,10 +168,8 @@
wxPlatNotice.sendCarUseBookTemplateNotice(systemDictDataBiz,
wxNoticeConfigMapper,carUseBook,
WxPlatConstants.carUseBookContent.carUseBookUpload,
- systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_ACCESS_TOKEN).getCode(),
Arrays.asList(systemUser.getOpenid().split(",")),0);
}
-
return carUseBook.getId();
}
@@ -167,7 +177,38 @@
public void deleteById(Integer id) {
carUseBookMapper.deleteById(id);
}
+ @Override
+ @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+ public void deleteById(Integer id,LoginUserInfo user) {
+ Date date = new Date();
+ MPJLambdaWrapper<CarUseBook> queryWrapper = new MPJLambdaWrapper<>();
+ queryWrapper.selectAll(CarUseBook.class);
+ queryWrapper.select("t1.name",CarUseBook::getMemberName);
+ queryWrapper.leftJoin(Member.class,Member::getId,CarUseBook::getMemberId)
+ .eq(CarUseBook::getId,id)
+ .eq(CarUseBook::getIsdeleted,Constants.ZERO)
+ .last("limit 1" );
+ CarUseBook model = carUseBookMapper.selectJoinOne(CarUseBook.class,queryWrapper);
+ if(model==null ||Constants.equalsInteger(Constants.ONE,model.getIsdeleted())){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ carUseBookMapper.update(null,new UpdateWrapper<CarUseBook>().lambda()
+ .set(CarUseBook::getIsdeleted,Constants.ONE)
+ .set(CarUseBook::getEditDate,date)
+ .set(CarUseBook::getEditor,user.getId())
+ .eq(CarUseBook::getId,id));
+ String[] params = new String[3];
+ params[0] = user.getRealname();
+ params[1]=DateUtil.getPlusTime2(date);
+ params[2]=model.getCarCode()+"-銆愪箻杞︿汉锛�"+model.getMemberNames()+" 銆�-銆愰绾︿汉锛�"+model.getMemberName()+"銆�-銆愭椂闂达細"+DateUtil.getPlusTime2(model.getStartTime())+"-"+DateUtil.getPlusTime2(model.getEndTime())+"銆�";
+ //璁板綍鍒犻櫎鏃ュ織
+ UserActionServiceImpl.saveUserActionBiz(user,id,Constants.UserActionType.CAR_BOOK_DEL,userActionMapper,date,params, JSONObject.toJSONString(model));
+ VisitsServiceImpl.dealCancelNoticesData(noticesJoinMapper,approveMapper,"绯荤粺鍒犻櫎",model.getId(),
+ Constants.equalsInteger(model.getType(),Constants.ZERO)?Constants.approveObjectType.cityUseCar:Constants.approveObjectType.unCityUseCar,
+ Constants.noticesObjectType.useCar
+ );
+ }
@Override
public void delete(CarUseBook carUseBook) {
UpdateWrapper<CarUseBook> deleteWrapper = new UpdateWrapper<>(carUseBook);
@@ -216,15 +257,14 @@
.leftJoin(Member.class,Member::getId,CarUseBook::getDriverId)
.leftJoin("company t4 on t1.company_id=t4.id")
.eq(CarUseBook::getId,id)
+ .eq(CarUseBook::getIsdeleted,Constants.ZERO)
.last("limit 1" );
CarUseBook model = carUseBookMapper.selectJoinOne(CarUseBook.class,queryWrapper);
if(Objects.isNull(model)){
throw new BusinessException(ResponseStatus.DATA_EMPTY);
}
- ApproveDataVO approveDataVO = approveService.arrangeApprovedData(id,
- Constants.equalsInteger(model.getType(),Constants.ZERO)?3:4,
- memberId);
- List<Approve> approveList = approveDataVO.getApproveList();
+ model.setApproveDateVO(getApproveDataVO(memberId,model));
+ List<Approve> approveList = model.getApproveDateVO().getApproveList();
if(Constants.equalsInteger(model.getStatus(),Constants.FOUR)){
String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
+systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
@@ -247,8 +287,30 @@
approve.setCheckDate(model.getCancelTime());
approveList.add(approve);
}
- model.setApproveDateVO(approveDataVO);
+
+ Notices notices = noticesJoinMapper.selectOne(new QueryWrapper<Notices>().lambda()
+ .eq(Notices::getObjId,id)
+ .eq(Notices::getType,Constants.noticesObjectType.useCar)
+ .eq(Notices::getUserId,memberId)
+ .eq(Notices::getSendacopy,Constants.ZERO)
+ .orderByDesc(Notices::getId).last(" limit 1 "));
+ if(Objects.nonNull(notices)){
+ if(Constants.equalsInteger(notices.getStatus(),Constants.ZERO)){
+ model.setInfo("寰呮垜澶勭悊");
+ }else{
+ model.setInfo(notices.getInfo());
+ }
+ }
+
+
return model;
+ }
+
+ private ApproveDataVO getApproveDataVO( Integer memberId,CarUseBook model) {
+ ApproveDataVO approveDataVO = approveService.arrangeApprovedData(model.getId(),
+ Constants.equalsInteger(model.getType(),Constants.ZERO)?3:4,
+ memberId);
+ return approveDataVO;
}
@Override
@@ -277,7 +339,8 @@
queryWrapper.select("t4.company_name_path",CarUseBook::getCompanyName);
queryWrapper.leftJoin(Member.class,Member::getId,CarUseBook::getMemberId)
.leftJoin(Member.class,Member::getId,CarUseBook::getDriverId)
- .leftJoin("company t4 on t1.company_id=t4.id"); //鏁版嵁鏉冮檺寮�濮�--------------------start----------------
+ .leftJoin("company t4 on t1.company_id=t4.id");
+ //鏁版嵁鏉冮檺寮�濮�--------------------start----------------
LoginUserInfo userInfo =pageWrap.getModel().getLoginUserInfo();
if(userInfo!=null && userInfo.getCompanyIdList()!=null){
if( userInfo.getCompanyIdList().size() ==0){
@@ -328,8 +391,8 @@
.and(StringUtils.isNotBlank(pageWrap.getModel().getMemberName()), ms->ms.like(Member::getName,pageWrap.getModel().getMemberName())
.or().like(Member::getPhone,pageWrap.getModel().getMemberName()))
- .ge(Objects.nonNull(pageWrap.getModel().getQueryStartTime()), CarUseBook::getPlanUseDate,pageWrap.getModel().getQueryStartTime())
- .le(Objects.nonNull(pageWrap.getModel().getQueryEndTime()),CarUseBook::getPlanUseDate,pageWrap.getModel().getQueryEndTime())
+ .ge(Objects.nonNull(pageWrap.getModel().getQueryStartTime()), CarUseBook::getCreateDate,pageWrap.getModel().getQueryStartTime())
+ .le(Objects.nonNull(pageWrap.getModel().getQueryEndTime()),CarUseBook::getCreateDate,pageWrap.getModel().getQueryEndTime())
.orderByDesc(Visits::getCreateDate)
;
for(PageWrap.SortData sortData: pageWrap.getSorts()) {
@@ -339,7 +402,13 @@
queryWrapper.orderByAsc(sortData.getProperty());
}
}
- return PageData.from(carUseBookMapper.selectJoinPage(page, CarUseBook.class, queryWrapper));
+ PageData<CarUseBook> result =PageData.from(carUseBookMapper.selectJoinPage(page, CarUseBook.class, queryWrapper));
+ if(result!=null && result.getRecords()!=null){
+ for(CarUseBook carUseBook:result.getRecords()){
+ carUseBook.setHasRole(getHasBackRoleBiz(carUseBook,pageWrap.getModel().getLoginUserInfo()));
+ }
+ }
+ return result;
}
@Override
@@ -368,6 +437,7 @@
.selectAs(Member::getName,CarUseBook::getMemberName)
.selectAs(Member::getPhone,CarUseBook::getMemberMobile)
.leftJoin(Member.class,Member::getId,CarUseBook::getMemberId)
+ .eq(CarUseBook::getIsdeleted,Constants.ZERO)
.eq(CarUseBook::getCarId,carUseBook.getCarId())
.in(CarUseBook::getStatus,0,1,2)
.apply(" ( " +
@@ -479,9 +549,12 @@
@Override
public void revoke(Integer id, String info, LoginUserInfo loginUserInfo){
CarUseBook carUseBook = carUseBookMapper.selectById(id);
- if(Objects.isNull(carUseBook)){
- throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鐢ㄨ溅鐢宠淇℃伅");
- }
+ if(Objects.isNull(carUseBook) || Constants.equalsInteger(carUseBook.getIsdeleted(),Constants.ONE)){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鐢ㄨ溅鐢宠淇℃伅");
+ }
+ if(getHasBackRoleBiz(carUseBook,loginUserInfo) == Constants.ZERO){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝鏃犳潈闄愯鎾ら攢鎿嶄綔锛�");
+ }
carUseBook.setCancelInfo(info);
carUseBook.setCancelTime(new Date());
carUseBook.setCancelStatus(Constants.ONE);
@@ -499,7 +572,7 @@
.set(Approve::getStatus,Constants.FOUR)
.set(Approve::getCheckInfo,"鐢ㄨ溅鐢宠鍙栨秷")
.in(Approve::getStatus,Constants.ZERO,Constants.ONE)
- .in(Approve::getObjType,Constants.approveObjectType.cityUseCar,Constants.approveObjectType.unCityUseCar)
+ .in(Approve::getObjType,Constants.approveObjectType.cityUseCar,Constants.approveObjectType.unCityUseCar)
.eq(Approve::getObjId,id)
);
@@ -527,7 +600,6 @@
wxNoticeConfigMapper,
carUseBook,
WxPlatConstants.carUseBookContent.carUseBookCancel,
- systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_ACCESS_TOKEN).getCode(),
Arrays.asList(systemUser.getOpenid().split(",")),
Constants.TWO);
}
@@ -535,5 +607,150 @@
}
}
+ /**
+ * 鏌ヨ褰撳墠鐧婚檰鐢ㄦ埛鏄惁鍏锋湁閫�鍥炵敵璇风殑鏉冮檺
+ * 鐢宠浜哄彧鑳藉湪寰呭鏍镐箣鍓嶆挙閿�锛屾淳杞﹀憳鍙互鍦ㄥ緟瀹℃牳銆佸鏍镐腑銆佸鎵归�氳繃杩涜鎾ら攢
+ * @param carUseBook
+ * @param loginUserInfo
+ * @return
+ */
+ private int getHasBackRoleBiz(CarUseBook carUseBook, LoginUserInfo loginUserInfo) {
+ if(Constants.equalsInteger(carUseBook.getCreator(),loginUserInfo.getId())
+ && Constants.equalsInteger(carUseBook.getStatus(),Constants.ZERO)){
+ //鐢宠浜哄彲浠ユ挙閿�鑷繁鐢宠涓殑鐢宠璁板綍
+ return Constants.ONE;
+ }
+ if(Constants.equalsInteger(carUseBook.getStatus(),Constants.TWO)
+ && carUseBook.getStartTime()!=null
+ && System.currentTimeMillis() >= carUseBook.getStartTime().getTime()){
+ //瀹℃壒閫氳繃锛屼絾鏄� 宸插埌鍙戣溅鏃堕棿锛屼笉鍙互鎾ら攢
+ return Constants.ZERO;
+ }
+ if((Constants.equalsInteger(carUseBook.getStatus(),Constants.ZERO))
+ ||Constants.equalsInteger(carUseBook.getStatus(),Constants.ONE)
+ ||Constants.equalsInteger(carUseBook.getStatus(),Constants.TWO)){
+ //瀹℃壒浜哄彲浠ユ挙閿� 鑷繁瀹℃壒鐨勭敵璇疯褰�
+ Approve approve = approveJoinMapper.selectOne(new QueryWrapper<Approve>().lambda()
+ .eq(Approve::getIsdeleted,Constants.ZERO)
+ .ge(Approve::getLevel,Constants.ZERO)
+ .eq(Approve::getChekorId,loginUserInfo.getMemberId())
+ .eq(Approve::getObjId,carUseBook.getId())
+ .eq(Approve::getObjType,carUseBook.getType()==0?3:4)
+ .last("limit 1"));
+ if(approve!=null){
+ return Constants.ONE;
+ }
+ }
+ return Constants.ZERO;
+ }
+
+ @Override
+ public void jdyPushCarUseBook(String dataInfo){
+ JSONObject dataInfoJSON = JSONObject.parseObject(dataInfo);
+ if(dataInfoJSON.isEmpty()){
+ return;
+ }
+ String op = dataInfoJSON.getString("op");
+ //鍒犻櫎锛歞ata_remove 鏂板锛歞ata_add 淇敼锛歞ata_update
+ if(StringUtils.isEmpty(op)){
+ return;
+ }
+
+ JSONObject dataJSON = dataInfoJSON.getJSONObject("data");
+ String no = dataJSON.getString("no");
+ if(StringUtils.isEmpty(no)){
+ return;
+ }
+ if(op.equals("data_remove")){
+ carUseBookJoinMapper.update(new UpdateWrapper<CarUseBook>().lambda()
+ .set(CarUseBook::getEditDate,DateUtil.getCurrDateTime())
+ .set(CarUseBook::getIsdeleted,Constants.ONE).eq(CarUseBook::getJdyId,no));
+ return;
+ }
+ Integer status = dataJSON.getInteger("flowState");
+ if(Objects.isNull(status)||!(Constants.equalsInteger(status,Constants.ONE)||Constants.equalsInteger(status,Constants.TWO))){
+ return;
+ }
+
+ String carCode = dataJSON.getString("car_no");
+ String startDate = dataJSON.getString("start_date");
+ String endDate = dataJSON.getString("end_date");
+ String typeInfo = dataJSON.getString("scope");
+ String reason = dataJSON.getString("reason");
+ String addr = dataJSON.getString("addr");
+
+ CarUseBook carUseBook = carUseBookJoinMapper.selectOne(new QueryWrapper<CarUseBook>()
+ .lambda().eq(CarUseBook::getJdyId,no).last("limit 1"));
+ if(Objects.isNull(carUseBook)){
+ carUseBook = new CarUseBook();
+ carUseBook.setCreateDate(new Date());
+ carUseBook.setEditDate(new Date());
+ carUseBook.setJdyId(no);
+ }else{
+ carUseBook.setEditDate(new Date());
+ }
+ carUseBook.setIsdeleted(Constants.equalsInteger(status,Constants.ONE)?Constants.ZERO:Constants.ONE);
+ carUseBook.setCarCode(StringUtils.isBlank(carCode)?null:carCode);
+ if(StringUtils.isNotBlank(carCode)){
+ Cars cars = carsMapper.selectOne(new QueryWrapper<Cars>().lambda()
+ .eq(Cars::getIsdeleted,Constants.ZERO)
+ .eq(Cars::getCode,carCode).last("limit 1"));
+ carUseBook.setCarId(Objects.nonNull(cars)?cars.getId():null);
+ }
+ carUseBook.setStartTime(StringUtils.isBlank(startDate)?null:DateUtil.getISO8601DateByStr(startDate));
+ carUseBook.setEndTime(StringUtils.isBlank(endDate)?null:DateUtil.getISO8601DateByStr(endDate));
+ carUseBook.setTypeInfo(StringUtils.isBlank(typeInfo)?null:typeInfo);
+ carUseBook.setContent(StringUtils.isBlank(typeInfo)?null:reason);
+ carUseBook.setAddr(StringUtils.isBlank(typeInfo)?null:addr);
+ carUseBook.setStatus(Constants.TWO);
+ JSONObject driverJSON = dataJSON.getJSONObject("driver");
+ if(!driverJSON.isEmpty()){
+ String driverName = driverJSON.getString("name");
+ String driverUserName = driverJSON.getString("username");
+ if(StringUtils.isNotBlank(driverUserName)){
+ Member driverMember = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted,Constants.ZERO).eq(Member::getDdId,driverUserName).last("limit 1 "));
+ if(Objects.nonNull(driverMember)){
+ carUseBook.setDriverId(driverMember.getId());
+ }
+ }
+ }
+ JSONObject createJSON = dataJSON.getJSONObject("creator");
+ if(!driverJSON.isEmpty()){
+ String createName = createJSON.getString("name");
+ String createUserName = createJSON.getString("username");
+ if(StringUtils.isNotBlank(createUserName)){
+ Member createMember = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted,Constants.ZERO).eq(Member::getDdId,createUserName).last("limit 1 "));
+ if(Objects.nonNull(createMember)){
+ carUseBook.setMemberId(createMember.getId());
+ }
+ }
+ }
+
+ JSONArray usersArray = dataJSON.getJSONArray("users");
+ if(!usersArray.isEmpty()){
+ String names = "";
+ List<String> userDDIdList = new ArrayList<>();
+ for (int i = 0; i < usersArray.size(); i++) {
+ JSONObject userJSON = usersArray.getJSONObject(i);
+ String name = createJSON.getString("name");
+ String userName = createJSON.getString("username");
+ userDDIdList.add(userName);
+ names = names +
+ (StringUtils.isNotBlank(names)?",":"")
+ + name;
+ }
+ if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(userDDIdList)){
+ List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted,Constants.ZERO).in(Member::getDdId,userDDIdList));
+ if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(memberList)){
+ names = String.join(",",memberList.stream().map(i->i.getName()).collect(Collectors.toList()));
+ carUseBook.setMemberIds(String.join(",",memberList.stream().map(i->i.getId().toString()).collect(Collectors.toList())));
+ }
+ }
+ carUseBook.setMemberNames(names);
+ }
+ carUseBookMapper.insertOrUpdate(carUseBook);
+ }
+
+
}
--
Gitblit v1.9.3