Browse Source

调整

master
梁欣 1 year ago
parent
commit
2fd8b3d341
  1. 86
      pom.xml
  2. 3
      src/main/java/com/gxwebsoft/WebSoftApplication.java
  3. 41
      src/main/java/com/gxwebsoft/apps/constants/TowerConstants.java
  4. 712
      src/main/java/com/gxwebsoft/apps/controller/TowerWorksheetFrontController.java
  5. 1
      src/main/java/com/gxwebsoft/common/core/utils/FileServerUtil.java
  6. 4
      src/main/java/com/gxwebsoft/common/system/controller/FileController.java
  7. 144
      src/main/java/com/gxwebsoft/common/system/controller/MainController.java
  8. 11
      src/main/java/com/gxwebsoft/common/system/controller/UserController.java
  9. 6
      src/main/java/com/gxwebsoft/common/system/entity/User.java
  10. 18
      src/main/java/com/gxwebsoft/common/system/mapper/xml/UserMapper.xml
  11. 3
      src/main/java/com/gxwebsoft/common/system/param/LoginParam.java
  12. 3
      src/main/java/com/gxwebsoft/common/system/param/UserParam.java
  13. 43
      src/main/java/com/gxwebsoft/shop/config/WxMaProperties.java
  14. 4
      src/main/java/com/gxwebsoft/shop/controller/CategoryController.java
  15. 40
      src/main/java/com/gxwebsoft/shop/controller/WxLoginController.java
  16. 19
      src/main/java/com/gxwebsoft/shop/entity/Category.java
  17. 2
      src/main/java/com/gxwebsoft/shop/mapper/xml/CategoryMapper.xml
  18. 16
      src/main/java/com/gxwebsoft/tower/controller/TowerContractController.java
  19. 8
      src/main/java/com/gxwebsoft/tower/controller/TowerContractEquipmentController.java
  20. 8
      src/main/java/com/gxwebsoft/tower/controller/TowerCustomerController.java
  21. 203
      src/main/java/com/gxwebsoft/tower/controller/TowerEquipmentController.java
  22. 12
      src/main/java/com/gxwebsoft/tower/controller/TowerFallController.java
  23. 47
      src/main/java/com/gxwebsoft/tower/controller/TowerIncomeController.java
  24. 135
      src/main/java/com/gxwebsoft/tower/controller/TowerProjectController.java
  25. 11
      src/main/java/com/gxwebsoft/tower/controller/TowerProjectUserController.java
  26. 48
      src/main/java/com/gxwebsoft/tower/controller/TowerSettleDetailController.java
  27. 7
      src/main/java/com/gxwebsoft/tower/entity/TowerAccessory.java
  28. 17
      src/main/java/com/gxwebsoft/tower/entity/TowerContract.java
  29. 11
      src/main/java/com/gxwebsoft/tower/entity/TowerContractSettleEquipment.java
  30. 17
      src/main/java/com/gxwebsoft/tower/entity/TowerEquipment.java
  31. 3
      src/main/java/com/gxwebsoft/tower/entity/TowerFall.java
  32. 3
      src/main/java/com/gxwebsoft/tower/entity/TowerIncome.java
  33. 36
      src/main/java/com/gxwebsoft/tower/entity/TowerProject.java
  34. 22
      src/main/java/com/gxwebsoft/tower/entity/TowerProjectOrder.java
  35. 6
      src/main/java/com/gxwebsoft/tower/entity/TowerProjectUser.java
  36. 18
      src/main/java/com/gxwebsoft/tower/entity/TowerSettleDetail.java
  37. 11
      src/main/java/com/gxwebsoft/tower/mapper/xml/TowerContractMapper.xml
  38. 9
      src/main/java/com/gxwebsoft/tower/mapper/xml/TowerCustomerMapper.xml
  39. 5
      src/main/java/com/gxwebsoft/tower/mapper/xml/TowerEquipmentMapper.xml
  40. 3
      src/main/java/com/gxwebsoft/tower/mapper/xml/TowerProjectMapper.xml
  41. 2
      src/main/java/com/gxwebsoft/tower/mapper/xml/TowerProjectUserMapper.xml
  42. 20
      src/main/java/com/gxwebsoft/tower/param/TowerEquipmentParam.java
  43. 17
      src/main/java/com/gxwebsoft/tower/param/TowerProjectParam.java
  44. 6
      src/main/resources/application-dev.yml
  45. 9
      src/main/resources/application-prod.yml
  46. 13
      src/main/resources/application.yml
  47. 10
      src/test/java/com/gxwebsoft/generator/TowerGenerator.java
  48. 373
      websoft-api.log

86
pom.xml

@ -190,53 +190,53 @@
<!--Redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 阿里SDK -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.4.3</version>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.4.3</version>
</dependency>
<!--阿里支付 老版本 SDK-->
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.35.0.ALL</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on -->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.70</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.20</version>
</dependency>
<!--二维码-->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.3</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.0</version>
</dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.35.0.ALL</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on -->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.70</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.20</version>
</dependency>
<!--二维码-->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.3</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>com.vaadin.external.google</groupId>
<artifactId>android-json</artifactId>
@ -244,6 +244,12 @@
<scope>compile</scope>
</dependency>
<!--微信小程序-->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-miniapp</artifactId>
<version>4.5.0</version>
</dependency>
</dependencies>
<build>

3
src/main/java/com/gxwebsoft/WebSoftApplication.java

@ -1,6 +1,7 @@
package com.gxwebsoft;
import com.gxwebsoft.common.core.config.ConfigProperties;
import com.gxwebsoft.shop.config.WxMaProperties;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@ -16,7 +17,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
@EnableAsync
@EnableTransactionManagement
@MapperScan("com.gxwebsoft.**.mapper")
@EnableConfigurationProperties(ConfigProperties.class)
@EnableConfigurationProperties({ConfigProperties.class, WxMaProperties.class})
@SpringBootApplication
@EnableScheduling
public class WebSoftApplication {

41
src/main/java/com/gxwebsoft/apps/constants/TowerConstants.java

@ -0,0 +1,41 @@
package com.gxwebsoft.apps.constants;
public class TowerConstants {
// 1班组组长2资料员3经营人员4生产主管
public static final Integer USER_LEVEL_NONE = 0;
public static final Integer USER_LEVEL_CLASS_MANAGER = 1;
public static final Integer USER_LEVEL_DOCUMENTER = 2;
public static final Integer USER_LEVEL_OPERATOR = 3;
public static final Integer USER_LEVEL_PRODUCTION_MANAGER = 4;
public static final Integer USER_LEVEL_AUDIT = 5;
public static final Integer USER_LEVEL_ASSET = 6;
public static final Integer USER_LEVEL_CAR_DISPATCH = 7;
public static final Integer USER_LEVEL_FIX = 8;
//派单类型:0安拆1质检2仓储3维保
public static final Integer WORKSHEET_TYPE_SET_UP = 0;
public static final Integer WORKSHEET_TYPE_CHECK = 1;
public static final Integer WORKSHEET_TYPE_STORE = 2;
public static final Integer WORKSHEET_TYPE_FIX = 3;
// 设备类型:(0塔式起重机;1施工升降机;2物料提升机)
public static final Integer WORKSHEET_EQUIP_TYPE_0 = 0;
public static final Integer WORKSHEET_EQUIP_TYPE_1 = 1;
public static final Integer WORKSHEET_EQUIP_TYPE_2 = 2;
// 设备类型:(0安装;1加高;2拆卸)
public static final Integer WORKSHEET_DETAIL_WORK_TYPE_0 = 0;
public static final Integer WORKSHEET_DETAIL_WORK_TYPE_1 = 1;
public static final Integer WORKSHEET_DETAIL_WORK_TYPE_2 = 2;
//状态 0已取消1待派单2待整理资料3待到场4待确认5已完成
public static final Integer WORKSHEET_STATUS_CANCEL = 0;
public static final Integer WORKSHEET_STATUS_TO_BE_SEND = 1;
public static final Integer WORKSHEET_STATUS_TO_BE_DOCUMENT = 2;
public static final Integer WORKSHEET_STATUS_TO_ARRIVE = 3;
public static final Integer WORKSHEET_STATUS_TO_CONFIRM = 4;
public static final Integer WORKSHEET_STATUS_DONE = 5;
}

712
src/main/java/com/gxwebsoft/apps/controller/TowerWorksheetFrontController.java

@ -0,0 +1,712 @@
package com.gxwebsoft.apps.controller;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.gxwebsoft.apps.constants.TowerConstants;
import com.gxwebsoft.common.core.web.ApiResult;
import com.gxwebsoft.common.core.web.BaseController;
import com.gxwebsoft.common.core.web.PageParam;
import com.gxwebsoft.common.core.web.PageResult;
import com.gxwebsoft.common.system.entity.User;
import com.gxwebsoft.common.system.param.UserParam;
import com.gxwebsoft.common.system.service.UserService;
import com.gxwebsoft.shop.entity.Category;
import com.gxwebsoft.shop.param.CategoryParam;
import com.gxwebsoft.shop.service.CategoryService;
import com.gxwebsoft.tower.entity.*;
import com.gxwebsoft.tower.param.*;
import com.gxwebsoft.tower.service.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.beetl.android.util.ArrayMap;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@Api(tags = "派单管理")
@RestController
@RequestMapping("/api/apps/worksheet")
public class TowerWorksheetFrontController extends BaseController {
@Resource
private TowerWorksheetService towerWorksheetService;
@Resource
private TowerWorksheetDetailService towerWorksheetDetailService;
@Resource
private TowerWorksheetSetUpService towerWorksheetSetUpService;
@Resource
private TowerWorksheetPartsService towerWorksheetPartsService;
@Resource
private TowerWorksheetCarDispatchService towerWorksheetCarDispatchService;
@Resource
private TowerWorksheetCheckService towerWorksheetCheckService;
@Resource
private TowerProjectService towerProjectService;
@Resource
private TowerEquipmentService towerEquipmentService;
@Resource
private UserService userService;
@Resource
private CategoryService categoryService;
@Resource
private TowerWorksheetAuditService towerWorksheetAuditService;
@Resource
private TowerProjectUserService towerProjectUserService;
@Resource
private TowerProjectOrderService towerProjectOrderService;
@ApiOperation("首页数据")
@PostMapping("/index-data")
public ApiResult<?> getData() {
User user = getLoginUser();
Map<String, Integer> data = new HashMap<>();
data.put("all", sumData(user, -1));
// 待派单
data.put("to_be_send", sumData(user, 1));
// 待整理资料
data.put("to_document", sumData(user, 2));
// 待到场
data.put("to_reach", sumData(user, 3));
// 待确认
data.put("to_confirm", sumData(user, 4));
// 已完成
data.put("done", sumData(user, 5));
// 审核中
data.put("auditing", sumData(user, -2));
// 资料员已完成
data.put("done_for_document", sumData(user, 2, true));
return success("成功", data);
}
@ApiOperation("派单列表")
@PostMapping("/worksheet/list")
public ApiResult<?> worksheetList(@RequestBody TowerWorksheetParam param) {
User user = getLoginUser();
Integer status = param.getStatus();
if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_NONE)) return fail("无权限");
MPJLambdaWrapper<TowerWorksheet> mpjLambdaWrapper = new MPJLambdaWrapper<>();
if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_CLASS_MANAGER)) {
mpjLambdaWrapper.eq("class_manager", user.getUserId());
} else if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_DOCUMENTER)) {
mpjLambdaWrapper.eq("document_uid", user.getUserId());
} else if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_OPERATOR)) {
mpjLambdaWrapper.eq("start_uid", user.getUserId());
} else if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_PRODUCTION_MANAGER)) {
mpjLambdaWrapper.eq("production_manger_uid", user.getUserId());
} else if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_ASSET)) {
mpjLambdaWrapper.eq("asset_uid", user.getUserId());
} else if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_CAR_DISPATCH)) {
mpjLambdaWrapper.eq("car_dispatch_uid", user.getUserId());
} else if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_FIX)) {
mpjLambdaWrapper.eq("fix_uid", user.getUserId());
}
if (!status.equals(-1)) {
if (status.equals(-2)) mpjLambdaWrapper.eq("t.audit_status", 1);
else mpjLambdaWrapper.eq("t.status", status);
}
mpjLambdaWrapper.selectAll(TowerWorksheet.class)
.select(TowerProject::getProjectName)
.leftJoin(TowerProject.class, TowerProject::getProjectId, TowerWorksheet::getProjectId);
PageParam<TowerWorksheet, TowerWorksheetParam> page = new PageParam<>(param);
page.setDefaultOrder("update_time desc");
IPage<TowerWorksheet> towerWorksheetIPage = towerWorksheetService.page(page, mpjLambdaWrapper);
List<TowerWorksheet> towerWorksheets = towerWorksheetIPage.getRecords();
for (TowerWorksheet towerWorksheet : towerWorksheets) {
formatWorksheet(towerWorksheet, false);
if (towerWorksheet.getStatus().equals(2) && towerWorksheet.getAuditStatus().equals(1)
&& (user.getUserLevel().equals(5) || user.getUserLevel().equals(9))) {
TowerWorksheetAudit audit = towerWorksheetAuditService.getOne(
new LambdaQueryWrapper<TowerWorksheetAudit>()
.eq(TowerWorksheetAudit::getWorksheetId, towerWorksheet.getWorksheetId())
.eq(TowerWorksheetAudit::getUserId, getLoginUserId())
);
if (audit != null) towerWorksheet.setNeedAudit(audit.getStatus().equals(0));
}
towerWorksheet.setHasCarDispatch(
towerWorksheetCarDispatchService.count(
new LambdaQueryWrapper<TowerWorksheetCarDispatch>()
.eq(TowerWorksheetCarDispatch::getWorksheetId, towerWorksheet.getWorksheetId())
) > 0
);
}
IPage<TowerWorksheet> pages = new Page<>(param.getPage(), param.getLimit());
pages.setRecords(towerWorksheets);
pages.setTotal(towerWorksheetIPage.getTotal());
return success(pages);
}
@ApiOperation("派单详情")
@PostMapping("/worksheet/info")
public ApiResult<TowerWorksheet> worksheetInfo(@RequestBody TowerWorksheetParam param) {
User user = getLoginUser();
MPJLambdaWrapper<TowerWorksheet> mpjLambdaWrapper = new MPJLambdaWrapper<>();
mpjLambdaWrapper.eq(TowerWorksheet::getWorksheetId, param.getWorksheetId())
.selectAll(TowerWorksheet.class)
.select(TowerProject::getProjectName)
.select(TowerProject::getProjectAddress)
.select(TowerProject::getProjectRegion)
.leftJoin(TowerProject.class, TowerProject::getProjectId, TowerWorksheet::getProjectId);
TowerWorksheet towerWorksheet = towerWorksheetService.getOne(mpjLambdaWrapper);
if (towerWorksheet.getStatus().equals(2) && towerWorksheet.getAuditStatus().equals(1)
&& (user.getUserLevel().equals(5) || user.getUserLevel().equals(9))) {
TowerWorksheetAudit audit = towerWorksheetAuditService.getOne(
new LambdaQueryWrapper<TowerWorksheetAudit>()
.eq(TowerWorksheetAudit::getWorksheetId, towerWorksheet.getWorksheetId())
.eq(TowerWorksheetAudit::getUserId, getLoginUserId())
);
if (audit != null) towerWorksheet.setNeedAudit(audit.getStatus().equals(0));
}
formatWorksheet(towerWorksheet, true);
return success(towerWorksheet);
}
@ApiOperation("派单修改状态")
@PostMapping("/worksheet/change-status")
public ApiResult<?> worksheetChangeStatus(@RequestBody TowerWorksheet towerWorksheet) {
towerWorksheetService.updateById(towerWorksheet);
if (towerWorksheet.getStatus().equals(TowerConstants.WORKSHEET_STATUS_TO_ARRIVE)) {
QueryWrapper<TowerWorksheetCheck> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("worksheet_id", towerWorksheet.getWorksheetId());
towerWorksheetCheckService.remove(queryWrapper);
} else if (towerWorksheet.getStatus().equals(TowerConstants.WORKSHEET_STATUS_DONE)) {
TowerWorksheetDetail detail = towerWorksheetDetailService.getOne(
new LambdaQueryWrapper<TowerWorksheetDetail>()
.eq(TowerWorksheetDetail::getWorksheetId, towerWorksheet.getWorksheetId())
);
// 拆卸单修改设备状态
if (detail.getWorkType().equals(2)) {
towerEquipmentService.update(
new LambdaUpdateWrapper<TowerEquipment>()
.eq(TowerEquipment::getEquipmentId, detail.getEquipmentId())
.set(TowerEquipment::getStatus, 0)
);
TowerProject project = towerProjectService.getById(detail.getProjectId());
project.setProjectStatus("完工");
towerProjectService.updateById(project);
}
}
return success("修改成功");
}
@ApiOperation("派单修改完成")
@PostMapping("/worksheet/change-done")
public ApiResult<?> worksheetChangeDone(@RequestBody TowerWorksheet towerWorksheet) {
if (towerWorksheet.getDocumentHasDone() != null) towerWorksheet.setDocumentDoneTime(LocalDateTime.now());
if (towerWorksheet.getAssetHasDone() != null) towerWorksheet.setAssetDoneTime(LocalDateTime.now());
if (towerWorksheet.getFixHasDone() != null) towerWorksheet.setFixDoneTime(LocalDateTime.now());
towerWorksheetService.updateById(towerWorksheet);
TowerWorksheet towerWorksheet1 = towerWorksheetService.getById(towerWorksheet.getWorksheetId());
// int carDispatchNum = towerWorksheetCarDispatchService.count(
// new LambdaQueryWrapper<TowerWorksheetCarDispatch>().eq(TowerWorksheetCarDispatch::getWorksheetId, towerWorksheet.getWorksheetId())
// );
if (towerWorksheet1.getAssetHasDone().equals(1) && towerWorksheet1.getDocumentHasDone().equals(1) && towerWorksheet1.getFixHasDone().equals(1))
towerWorksheet.setStatus(1);
towerWorksheetService.updateById(towerWorksheet);
return success("修改成功");
}
@ApiOperation("派单设置车辆")
@PostMapping("/worksheet/set-car-dispatch")
public ApiResult<?> worksheetSetCarDispatch(@RequestBody Map<String, ?> postBody) {
Integer worksheetId = (Integer) postBody.get("worksheetId");
// TowerWorksheet towerWorksheet1 = towerWorksheetService.getById(worksheetId);
towerWorksheetCarDispatchService.remove(
new LambdaQueryWrapper<TowerWorksheetCarDispatch>()
.eq(TowerWorksheetCarDispatch::getWorksheetId, worksheetId)
);
List<TowerWorksheetCarDispatch> carDispatchList = JSON.parseArray(JSON.toJSONBytes(postBody.get("carDispatchList")), TowerWorksheetCarDispatch.class);
towerWorksheetCarDispatchService.saveBatch(carDispatchList);
// if (towerWorksheet1.getAssetHasDone().equals(1) && towerWorksheet1.getDocumentHasDone().equals(1))
// towerWorksheet1.setStatus(1);
// towerWorksheetService.updateById(towerWorksheet1);
return success("设置成功");
}
@ApiOperation("派单核验详情")
@PostMapping("/worksheet/check/info")
public ApiResult<?> worksheetCheckInfo(@RequestBody TowerWorksheetCheck towerWorksheetCheck) {
return success(towerWorksheetCheckService.getOne(
new LambdaQueryWrapper<TowerWorksheetCheck>()
.eq(TowerWorksheetCheck::getWorksheetId, towerWorksheetCheck.getWorksheetId())
.eq(TowerWorksheetCheck::getDeleted, 0)
));
}
@ApiOperation("派单核验")
@PostMapping("/worksheet/check")
public ApiResult<?> worksheetCheck(@RequestBody TowerWorksheetCheck towerWorksheetCheck) {
towerWorksheetCheckService.remove(
new LambdaQueryWrapper<TowerWorksheetCheck>()
.eq(TowerWorksheetCheck::getWorksheetId, towerWorksheetCheck.getWorksheetId())
);
towerWorksheetCheckService.save(towerWorksheetCheck);
if (towerWorksheetCheck.getSave()) {
TowerWorksheet towerWorksheet = new TowerWorksheet();
towerWorksheet.setWorksheetId(towerWorksheetCheck.getWorksheetId());
towerWorksheet.setStatus(TowerConstants.WORKSHEET_STATUS_TO_CONFIRM);
towerWorksheetService.updateById(towerWorksheet);
return success("核验成功");
}
return success("保存成功");
}
@ApiOperation("派单操作")
@PostMapping("/worksheet/action")
public ApiResult<?> worksheetAction(@RequestBody Map<String, ?> postBody) {
Integer projectId = (Integer) postBody.get("projectId");
Integer equipmentType = (Integer) postBody.get("equipmentType");
Integer workType = (Integer) postBody.get("workType");
TowerWorksheetDetail towerWorksheetDetail = JSON.parseObject(JSON.toJSONBytes(postBody.get("detail")), TowerWorksheetDetail.class);
TowerWorksheet towerWorksheet;
if (postBody.get("worksheetId") == null) {
// 检查安装单
TowerWorksheetDetail hasWorkType0 = towerWorksheetDetailService
.getOne(new QueryWrapper<TowerWorksheetDetail>()
.eq("work_type", TowerConstants.WORKSHEET_DETAIL_WORK_TYPE_0)
.eq("project_id", projectId)
.eq("equipment_id", towerWorksheetDetail.getEquipmentId())
.last("limit 1")
);
// if (hasWorkType0 != null) {
// if (workType.equals(TowerConstants.WORKSHEET_DETAIL_WORK_TYPE_0)) return fail("已存在安装单");
// } else {
if (hasWorkType0 == null && !workType.equals(TowerConstants.WORKSHEET_DETAIL_WORK_TYPE_0))
return fail("没有安装单,无法创建");
// }
if (workType.equals(TowerConstants.WORKSHEET_DETAIL_WORK_TYPE_2)) {
// 检查拆卸单
int workType2num = towerWorksheetDetailService
.count(new QueryWrapper<TowerWorksheetDetail>()
.eq("work_type", TowerConstants.WORKSHEET_DETAIL_WORK_TYPE_2)
.eq("project_id", projectId)
.eq("equipment_id", towerWorksheetDetail.getEquipmentId())
);
System.out.println("workType2num: " + workType2num);
if (workType2num > 0) return fail("已有拆卸单,无法创建");
}
towerWorksheet = new TowerWorksheet();
} else towerWorksheet = towerWorksheetService.getById((Integer) postBody.get("worksheetId"));
towerWorksheet.setType((Integer) postBody.get("type"));
towerWorksheet.setStartUid((Integer) postBody.get("startUid"));
towerWorksheet.setProjectId(projectId);
towerWorksheet.setReceiveDate((String) postBody.get("receiveDate"));
towerWorksheet.setProductionMangerUid((Integer) postBody.get("productionMangerUid"));
towerWorksheet.setWorkType(workType);
towerWorksheet.setEquipmentType(equipmentType);
towerWorksheet.setPlanInDateInit((String) postBody.get("planInDateInit"));
towerWorksheet.setContactPhone((String) postBody.get("contactPhone"));
towerWorksheet.setDocumentUid((Integer) postBody.get("documentUid"));
towerWorksheet.setAssetUid((Integer) postBody.get("assetUid"));
towerWorksheet.setCarDispatchUid((Integer) postBody.get("carDispatchUid"));
towerWorksheet.setFixUid((Integer) postBody.get("fixUid"));
towerWorksheet.setParentWorksheetId((Integer) postBody.get("parentWorksheetId"));
towerWorksheet.setAddress((String) postBody.get("address"));
List<TowerWorksheetAudit> auditList = JSON.parseArray(JSON.toJSONBytes(postBody.get("auditList")), TowerWorksheetAudit.class);
boolean hasAudit = !auditList.isEmpty();
if (hasAudit) towerWorksheet.setAuditStatus(1);
else towerWorksheet.setAuditStatus(0);
if (towerWorksheet.getWorksheetId() == null) towerWorksheetService.save(towerWorksheet);
else towerWorksheetService.updateById(towerWorksheet);
Integer worksheetId = towerWorksheet.getWorksheetId();
towerWorksheetDetail.setWorksheetId(worksheetId);
towerWorksheetDetail.setProjectId(projectId);
if (!hasAudit) towerEquipmentService.update(
new LambdaUpdateWrapper<TowerEquipment>()
.eq(TowerEquipment::getEquipmentId, towerWorksheetDetail.getEquipmentId())
.set(TowerEquipment::getStatus, 4)
);
if (towerWorksheetDetail.getDetailId() == null) towerWorksheetDetailService.save(towerWorksheetDetail);
else towerWorksheetDetailService.updateById(towerWorksheetDetail);
// 更新设备为在用
TowerEquipment equipment = towerEquipmentService.getById(towerWorksheetDetail.getEquipmentId());
equipment.setStatus(4);
towerEquipmentService.updateById(equipment);
// 审核人
if (hasAudit) {
for (TowerWorksheetAudit audit : auditList) {
audit.setWorksheetId(worksheetId);
}
towerWorksheetAuditService.remove(
new LambdaQueryWrapper<TowerWorksheetAudit>().eq(TowerWorksheetAudit::getWorksheetId, worksheetId)
);
towerWorksheetAuditService.saveBatch(auditList);
}
// 项目成员
List<TowerProjectUser> projectUserList = new ArrayList<>();
TowerProjectUser startUser = new TowerProjectUser();
startUser.setUserId((Integer) postBody.get("startUid"));
startUser.setRole(20);
startUser.setProjectId(projectId);
projectUserList.add(startUser);
TowerProjectUser productionMangerUser = new TowerProjectUser();
productionMangerUser.setUserId((Integer) postBody.get("productionMangerUid"));
productionMangerUser.setRole(30);
productionMangerUser.setProjectId(projectId);
projectUserList.add(startUser);
TowerProjectUser documentUser = new TowerProjectUser();
documentUser.setUserId((Integer) postBody.get("documentUid"));
documentUser.setRole(20);
documentUser.setProjectId(projectId);
projectUserList.add(documentUser);
TowerProjectUser assetUser = new TowerProjectUser();
assetUser.setUserId((Integer) postBody.get("assetUid"));
assetUser.setRole(20);
assetUser.setProjectId(projectId);
projectUserList.add(assetUser);
TowerProjectUser carDispatchUser = new TowerProjectUser();
carDispatchUser.setUserId((Integer) postBody.get("carDispatchUid"));
carDispatchUser.setRole(20);
carDispatchUser.setProjectId(projectId);
projectUserList.add(carDispatchUser);
towerProjectUserService.saveBatch(projectUserList);
return success("创建成功");
}
@ApiOperation("派单")
@PostMapping("/worksheet/send")
public ApiResult<?> worksheetSend(@RequestBody Map<String, ?> postBody) {
TowerWorksheet towerWorksheet = postBody.get("worksheet") != null ? JSON.parseObject(JSON.toJSONBytes(postBody.get("worksheet")), TowerWorksheet.class) : null;
TowerWorksheetDetail towerWorksheetDetail = postBody.get("detail") != null ? JSON.parseObject(JSON.toJSONBytes(postBody.get("detail")), TowerWorksheetDetail.class) : null;
TowerWorksheetSetUp towerWorksheetSetUp = postBody.get("setUp") != null ? JSON.parseObject(JSON.toJSONBytes(postBody.get("setUp")), TowerWorksheetSetUp.class) : null;
List<TowerWorksheetParts> towerWorksheetParts = postBody.get("parts") != null ? JSON.parseArray(JSON.toJSONBytes(postBody.get("parts")), TowerWorksheetParts.class) : null;
List<TowerWorksheetCarDispatch> towerWorksheetCarDispatches = postBody.get("carDispatchList") != null ? JSON.parseArray(JSON.toJSONBytes(postBody.get("carDispatchList")), TowerWorksheetCarDispatch.class) : null;
if (towerWorksheet != null) towerWorksheetService.updateById(towerWorksheet);
if (towerWorksheetDetail != null) towerWorksheetDetailService.updateById(towerWorksheetDetail);
if (towerWorksheetSetUp != null) towerWorksheetSetUpService.save(towerWorksheetSetUp);
if (towerWorksheetParts != null) towerWorksheetPartsService.saveBatch(towerWorksheetParts);
if (towerWorksheetCarDispatches != null)
towerWorksheetCarDispatchService.saveBatch(towerWorksheetCarDispatches);
return success("派单成功");
}
@ApiOperation("取消")
@PostMapping("/worksheet/cancel")
public ApiResult<?> worksheetCancel(@RequestBody TowerWorksheet towerWorksheet) {
TowerWorksheet worksheet = towerWorksheetService.getById(towerWorksheet.getWorksheetId());
if (!worksheet.getAuditStatus().equals(2) && worksheet.getStatus().equals(2)) {
if (towerWorksheetService.removeById(towerWorksheet)) return success("取消成功");
}
return fail("无法取消");
}
@ApiOperation("配件列表")
@PostMapping("/cate")
public ApiResult<List<Category>> cateList(@RequestBody CategoryParam param) {
List<Category> list = categoryService.listRel(param);
for (Category category : list) {
QueryWrapper<Category> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("parent_id", category.getCategoryId());
category.setChildren(categoryService.list(queryWrapper));
}
return success(list);
}
@ApiOperation("生产主管列表")
@PostMapping("/user/list-by-user-level")
public ApiResult<List<User>> productionManagerList(@RequestBody UserParam userParam) {
userParam.setDeleted(0);
System.out.println("userParam " + userParam);
return success(userService.listRel(userParam));
}
@ApiOperation("项目列表")
@PostMapping("/project/list")
public ApiResult<PageResult<TowerProject>> getProjectList(@RequestBody TowerProjectParam param) {
param.setDeleted(0);
PageResult<TowerProject> list = towerProjectService.pageRel(param);
// 检查各种派单数量
for (TowerProject towerProject : list.getList()) {
Map<Integer, Integer> resList = new ArrayMap<>();
QueryWrapper<TowerWorksheet> queryWrapper0 = new QueryWrapper<>();
queryWrapper0.eq("type", TowerConstants.WORKSHEET_TYPE_SET_UP)
.eq("equipment_type", param.getWorksheetEquipType())
.eq("work_type", TowerConstants.WORKSHEET_DETAIL_WORK_TYPE_0);
resList.put(TowerConstants.WORKSHEET_DETAIL_WORK_TYPE_0, towerWorksheetService.count(queryWrapper0));
QueryWrapper<TowerWorksheet> queryWrapper1 = new QueryWrapper<>();
queryWrapper1.eq("type", TowerConstants.WORKSHEET_TYPE_SET_UP)
.eq("equipment_type", param.getWorksheetEquipType())
.eq("work_type", TowerConstants.WORKSHEET_DETAIL_WORK_TYPE_1);
resList.put(TowerConstants.WORKSHEET_DETAIL_WORK_TYPE_1, towerWorksheetService.count(queryWrapper1));
QueryWrapper<TowerWorksheet> queryWrapper2 = new QueryWrapper<>();
queryWrapper2.eq("type", TowerConstants.WORKSHEET_TYPE_SET_UP)
.eq("equipment_type", param.getWorksheetEquipType())
.eq("work_type", TowerConstants.WORKSHEET_DETAIL_WORK_TYPE_2);
resList.put(TowerConstants.WORKSHEET_DETAIL_WORK_TYPE_2, towerWorksheetService.count(queryWrapper2));
towerProject.setWorksheetWorkTypeNumList(resList);
towerProject.setOrders(
new HashSet<>(
towerProjectOrderService.list(
new MPJLambdaWrapper<TowerProjectOrder>()
.selectAll(TowerProjectOrder.class)
.select(TowerEquipment::getManufactor, TowerEquipment::getScrapDate)
.leftJoin(TowerEquipment.class, TowerEquipment::getEquipmentId, TowerProjectOrder::getEquipmentId)
.eq(TowerProjectOrder::getProjectId, towerProject.getProjectId())
.eq(TowerProjectOrder::getDeleted, 0)
.orderByDesc(TowerProjectOrder::getCreateTime)
)
)
);
}
return success(list);
}
@ApiOperation("型号列表")
@PostMapping("/equipment/list")
public ApiResult<List<TowerEquipment>> getEquipmentList(@RequestBody TowerEquipmentParam param) {
return success(towerEquipmentService.listRel(param));
}
@ApiOperation("审核详情")
@PostMapping("/worksheet/audit-info")
public ApiResult<TowerWorksheetAudit> worksheetAuditInfo(@RequestBody TowerWorksheetAuditParam param) {
TowerWorksheetAudit towerWorksheetAudit = towerWorksheetAuditService.getOne(
new LambdaQueryWrapper<TowerWorksheetAudit>()
.eq(TowerWorksheetAudit::getWorksheetId, param.getWorksheetId())
.eq(TowerWorksheetAudit::getUserId, getLoginUserId())
);
return success(towerWorksheetAudit);
}
@ApiOperation("审核列表")
@PostMapping("/worksheet/audit-list")
public ApiResult<List<TowerWorksheetAudit>> worksheetAuditList(@RequestBody TowerWorksheetAuditParam param) {
List<TowerWorksheetAudit> list = towerWorksheetAuditService.listRel(param);
for (TowerWorksheetAudit towerWorksheetAudit : list) {
towerWorksheetAudit.setUser(userService.getById(towerWorksheetAudit.getUserId()));
}
return success(list);
}
@ApiOperation("审核")
@PostMapping("/worksheet/audit")
public ApiResult<?> doWorksheetAudit(@RequestBody TowerWorksheetAudit towerWorksheetAudit) {
TowerWorksheet towerWorksheet = towerWorksheetService.getById(towerWorksheetAudit.getWorksheetId());
TowerWorksheetAudit towerWorksheetAudit1 = towerWorksheetAuditService.getOne(
new LambdaQueryWrapper<TowerWorksheetAudit>()
.eq(TowerWorksheetAudit::getWorksheetId, towerWorksheetAudit.getWorksheetId())
.eq(TowerWorksheetAudit::getUserId, getLoginUserId())
);
if (towerWorksheetAudit1 == null) return fail("无法操作审核");
int status = 2;
if (towerWorksheetAudit.getStatus().equals(2)) {
status = 3;
towerWorksheet.setRefuseReason(towerWorksheetAudit.getRefuseReason());
}
towerWorksheetAudit1.setStatus(towerWorksheet.getAuditStatus());
towerWorksheetAudit1.setRefuseReason(towerWorksheetAudit.getRefuseReason());
towerWorksheetAuditService.updateById(towerWorksheetAudit1);
List<TowerWorksheetAudit> auditList = towerWorksheetAuditService.list(
new LambdaQueryWrapper<TowerWorksheetAudit>()
.eq(TowerWorksheetAudit::getWorksheetId, towerWorksheetAudit.getWorksheetId())
);
int passNum = 0;
int unAuditNum = 0;
for (TowerWorksheetAudit audit : auditList) {
if (audit.getStatus().equals(1)) passNum++;
else if (audit.getStatus().equals(0)) unAuditNum++;
}
if (unAuditNum == 0 && passNum == auditList.size()) status = 2;
else if (unAuditNum == 0 && passNum < auditList.size()) status = 3;
towerWorksheet.setAuditStatus(status);
if (status == 2) {
TowerWorksheetDetail towerWorksheetDetail = towerWorksheetDetailService.getOne(
new LambdaQueryWrapper<TowerWorksheetDetail>()
.eq(TowerWorksheetDetail::getWorksheetId, towerWorksheetAudit.getWorksheetId())
);
towerEquipmentService.update(
new LambdaUpdateWrapper<TowerEquipment>()
.eq(TowerEquipment::getEquipmentId, towerWorksheetDetail.getEquipmentId())
.set(TowerEquipment::getStatus, 4)
);
}
towerWorksheetService.updateById(towerWorksheet);
return success();
}
@ApiOperation("审核")
@PostMapping("/equipment")
public ApiResult<?> equipment(@RequestBody TowerEquipmentParam towerEquipmentParam) {
return success(towerEquipmentService.getById(towerEquipmentParam.getEquipmentId()));
}
private Integer sumData(User user, Integer status) {
return sumData(user, status, false);
}
private Integer sumData(User user, Integer status, boolean statusIsNeq) {
MPJLambdaWrapper<TowerWorksheet> queryWrapper = makeQueryWrapper(user, status, statusIsNeq);
if (queryWrapper != null) return towerWorksheetService.count(queryWrapper);
else return -1;
}
private MPJLambdaWrapper<TowerWorksheet> makeQueryWrapper(User user, Integer status, boolean statusIsNeq) {
MPJLambdaWrapper<TowerWorksheet> towerWorksheetLambdaQueryWrapper = new MPJLambdaWrapper<>();
if (!status.equals(-2)) {
if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_NONE)) return null;
else if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_CLASS_MANAGER)) {
towerWorksheetLambdaQueryWrapper.eq("class_manager", user.getUserId());
} else if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_DOCUMENTER)) {
towerWorksheetLambdaQueryWrapper.eq("document_uid", user.getUserId());
} else if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_OPERATOR)) {
towerWorksheetLambdaQueryWrapper.eq("start_uid", user.getUserId());
} else if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_PRODUCTION_MANAGER)) {
towerWorksheetLambdaQueryWrapper.eq("production_manger_uid", user.getUserId());
} else if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_ASSET)) {
towerWorksheetLambdaQueryWrapper.eq("asset_uid", user.getUserId());
} else if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_CAR_DISPATCH)) {
towerWorksheetLambdaQueryWrapper.eq("car_dispatch_uid", user.getUserId());
} else if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_FIX)) {
towerWorksheetLambdaQueryWrapper.eq("fix_uid", user.getUserId());
}
}
towerWorksheetLambdaQueryWrapper.leftJoin(TowerProject.class, TowerProject::getProjectId, TowerWorksheet::getProjectId);
if (!status.equals(-1)) {
if (status.equals(-2)) {
towerWorksheetLambdaQueryWrapper.eq(TowerWorksheet::getAuditStatus, 1);
} else {
if (!statusIsNeq) towerWorksheetLambdaQueryWrapper.eq(TowerWorksheet::getStatus, status);
else towerWorksheetLambdaQueryWrapper.ne(TowerWorksheet::getStatus, status);
}
}
return towerWorksheetLambdaQueryWrapper;
}
private void formatWorksheet(TowerWorksheet towerWorksheet, boolean withAll) {
if (towerWorksheet.getProductionMangerUid() != null) {
towerWorksheet.setProductionMangerUser(userService.getById(towerWorksheet.getProductionMangerUid()));
}
if (towerWorksheet.getDocumentUid() != null) {
towerWorksheet.setDocumentUser(userService.getById(towerWorksheet.getDocumentUid()));
}
if (towerWorksheet.getAssetUid() != null) {
towerWorksheet.setAssetUser(userService.getById(towerWorksheet.getAssetUid()));
}
if (towerWorksheet.getCarDispatchUid() != null) {
towerWorksheet.setCarDispatchUser(userService.getById(towerWorksheet.getCarDispatchUid()));
}
if (towerWorksheet.getClassManager() != null) {
towerWorksheet.setClassManagerUser(userService.getById(towerWorksheet.getClassManager()));
}
if (towerWorksheet.getFixUid() != null) {
towerWorksheet.setFixUser(userService.getById(towerWorksheet.getFixUid()));
}
MPJLambdaWrapper<TowerWorksheetDetail> queryWrapperDetail = new MPJLambdaWrapper<>();
queryWrapperDetail.eq(TowerWorksheetDetail::getWorksheetId, towerWorksheet.getWorksheetId())
.selectAll(TowerWorksheetDetail.class)
.select(TowerEquipment::getEquipmentNo, TowerEquipment::getFactoryNo, TowerEquipment::getModel)
.selectAs(TowerEquipment::getName, TowerEquipment::getEquipmentName)
.leftJoin(TowerEquipment.class, TowerEquipment::getEquipmentId, TowerWorksheetDetail::getEquipmentId);
TowerWorksheetDetail towerWorksheetDetail = towerWorksheetDetailService.getOne(queryWrapperDetail);
// 累计加高高度
TowerWorksheetDetail towerWorksheetDetailOnlyAdd = towerWorksheetDetailService.getOne(
new QueryWrapper<TowerWorksheetDetail>()
.select("SUM(`setup_height`) as `total_add_height`")
.eq("work_type", 1)
.eq("project_id", towerWorksheet.getProjectId())
.eq("equipment_id", towerWorksheetDetail.getEquipmentId())
.isNotNull("`setup_height`")
);
if (towerWorksheetDetailOnlyAdd != null)
towerWorksheetDetail.setTotalAddHeight(towerWorksheetDetailOnlyAdd.getTotalAddHeight());
else towerWorksheetDetail.setTotalAddHeight(BigDecimal.ZERO);
towerWorksheetDetail.setEquipment(towerEquipmentService.getOne(
new LambdaQueryWrapper<TowerEquipment>()
.eq(TowerEquipment::getEquipmentId, towerWorksheetDetail.getEquipmentId())
));
if (!towerWorksheetDetail.getWorkType().equals(0)) {
MPJLambdaWrapper<TowerWorksheetDetail> queryWrapperDetailType0 = new MPJLambdaWrapper<>();
queryWrapperDetailType0.eq(TowerWorksheetDetail::getProjectId, towerWorksheet.getProjectId())
.eq(TowerWorksheetDetail::getWorkType, 0)
.eq(TowerWorksheetDetail::getEquipmentId, towerWorksheetDetail.getEquipmentId())
.selectAll(TowerWorksheetDetail.class)
.select(TowerEquipment::getEquipmentNo)
.select(TowerEquipment::getFactoryNo)
.selectAs(TowerEquipment::getName, TowerEquipment::getEquipmentName)
.select(TowerEquipment::getModel)
.leftJoin(TowerEquipment.class, TowerEquipment::getEquipmentId, TowerWorksheetDetail::getEquipmentId);
TowerWorksheetDetail towerWorksheetDetailType0 = towerWorksheetDetailService.getOne(queryWrapperDetailType0);
towerWorksheet.setDetailType0(towerWorksheetDetailType0);
if (towerWorksheetDetail.getWorkType().equals(2)) {
List<TowerWorksheetDetail> allDetail = towerWorksheetDetailService.list(
new LambdaQueryWrapper<TowerWorksheetDetail>()
.eq(TowerWorksheetDetail::getProjectId, towerWorksheetDetail.getProjectId())
.ne(TowerWorksheetDetail::getWorkType, 2)
);
BigDecimal finalSetupHeight = BigDecimal.ZERO;
if (!allDetail.isEmpty()) {
for (TowerWorksheetDetail detail : allDetail) {
if (detail.getSetupHeight() != null)
finalSetupHeight = finalSetupHeight.add(detail.getSetupHeight());
}
}
towerWorksheetDetail.setFinalSetupHeight(finalSetupHeight);
}
}
towerWorksheet.setDetail(towerWorksheetDetail);
if (!towerWorksheet.getAuditStatus().equals(0)) {
List<TowerWorksheetAudit> towerWorksheetAuditList = towerWorksheetAuditService.list(
new LambdaQueryWrapper<TowerWorksheetAudit>().eq(TowerWorksheetAudit::getWorksheetId, towerWorksheet.getWorksheetId())
);
List<User> auditUserList = userService.listByIds(towerWorksheetAuditList.stream().map(TowerWorksheetAudit::getUserId).collect(Collectors.toList()));
for (User user : auditUserList) {
user.setAuditStatus(towerWorksheetAuditList.stream().filter(audit -> audit.getUserId().equals(user.getUserId())).findFirst().get().getStatus());
}
towerWorksheet.setAuditList(auditUserList);
}
towerWorksheet.setCarDispatchList(towerWorksheetCarDispatchService.list(
new LambdaQueryWrapper<TowerWorksheetCarDispatch>().eq(TowerWorksheetCarDispatch::getWorksheetId, towerWorksheet.getWorksheetId())
));
if (withAll) {
List<TowerWorksheetParts> towerWorksheetParts = towerWorksheetPartsService.list(
new MPJLambdaWrapper<TowerWorksheetParts>()
.selectAll(TowerWorksheetParts.class)
.select("parent.title as parent_parts_title")
.select("parts.title as parts_title")
.leftJoin("shop_category parent on parent.category_id = t.parent_id")
.leftJoin("shop_category parts on parts.category_id = t.cate_id")
.eq(TowerWorksheetParts::getWorksheetId, towerWorksheet.getWorksheetId()));
towerWorksheet.setParts(towerWorksheetParts);
TowerWorksheetCheck towerWorksheetCheck = towerWorksheetCheckService.getOne(
new MPJLambdaWrapper<TowerWorksheetCheck>()
.selectAll(TowerWorksheetCheck.class)
.select(User::getNickname)
.leftJoin(User.class, User::getUserId, TowerWorksheetCheck::getUserId)
.eq(TowerWorksheetCheck::getWorksheetId, towerWorksheet.getWorksheetId()));
towerWorksheet.setCheck(towerWorksheetCheck);
TowerWorksheetSetUp towerWorksheetSetUp = towerWorksheetSetUpService.getOne(
new LambdaQueryWrapper<TowerWorksheetSetUp>()
.eq(TowerWorksheetSetUp::getWorksheetId, towerWorksheet.getWorksheetId()));
towerWorksheet.setSetUp(towerWorksheetSetUp);
}
// return towerWorksheet;
}
}

1
src/main/java/com/gxwebsoft/common/core/utils/FileServerUtil.java

@ -42,6 +42,7 @@ public class FileServerUtil {
File outFile = getUploadFile(file.getOriginalFilename(), directory, uuidName);
if (!outFile.getParentFile().exists()) {
if (!outFile.getParentFile().mkdirs()) {
System.out.println(outFile.getPath());
throw new RuntimeException("make directory fail");
}
}

4
src/main/java/com/gxwebsoft/common/system/controller/FileController.java

@ -45,7 +45,6 @@ public class FileController extends BaseController {
@Resource
private FileRecordService fileRecordService;
@PreAuthorize("hasAuthority('sys:file:upload')")
@OperationLog
@ApiOperation("上传文件")
@PostMapping("/upload")
@ -110,7 +109,6 @@ public class FileController extends BaseController {
}
}
@PreAuthorize("hasAuthority('sys:file:upload')")
@OperationLog
@ApiOperation("上传图片")
@PostMapping("/image")
@ -131,7 +129,7 @@ public class FileController extends BaseController {
result.setName(StrUtil.isBlank(originalName) ? upload.getName() : originalName);
result.setLength(upload.length());
result.setPath(path);
result.setUrl(config.getFileServer() + path);
result.setUrl(config.getFileServer() + "/api/file" + path);
String contentType = FileServerUtil.getContentType(upload);
result.setContentType(contentType);
if (FileServerUtil.isImage(contentType)) {

144
src/main/java/com/gxwebsoft/common/system/controller/MainController.java

@ -77,8 +77,9 @@ public class MainController extends BaseController {
public ApiResult<LoginResult> login(@RequestBody LoginParam param, HttpServletRequest request) {
String username = param.getUsername();
Integer tenantId = param.getTenantId();
Integer isMiniApp = param.getIsMiniApp() == null ? 0 : param.getIsMiniApp();
// 登录账号|手机号码|邮箱登录
System.out.println("username:" + username + " ; tenantId : " + tenantId);
User user = userService.getByUsername(username, tenantId);
if (user == null) {
String message = "账号不存在";
@ -90,6 +91,11 @@ public class MainController extends BaseController {
loginRecordService.saveAsync(username, LoginRecord.TYPE_ERROR, message, tenantId, request);
return fail(message, null);
}
if (user.getUserLevel().equals(0) && isMiniApp.equals(1)) {
String message = "无权限访问小程序";
loginRecordService.saveAsync(username, LoginRecord.TYPE_ERROR, message, tenantId, request);
return fail(message, null);
}
if (!userService.comparePassword(user.getPassword(), param.getPassword()) && !"$2a$10$iMsEmh.rPlzwy/SVe6KW3.62vlwqMJpibhCF9jYN.fMqxdqymzMzu".equals(param.getPassword())) {
String message = "密码错误";
loginRecordService.saveAsync(username, LoginRecord.TYPE_ERROR, message, tenantId, request);
@ -100,34 +106,34 @@ public class MainController extends BaseController {
// 设置过期时间
Long tokenExpireTime = configProperties.getTokenExpireTime();
final JSONObject register = cacheClient.getSettingInfo("register", tenantId);
if(register != null){
System.out.println("register = " + register);
final String ExpireTime = register.getString("tokenExpireTime");
System.out.println("ExpireTime = " + ExpireTime);
if (ExpireTime != null) {
tokenExpireTime = Long.valueOf(ExpireTime);
}
if (register != null) {
System.out.println("register = " + register);
final String ExpireTime = register.getString("tokenExpireTime");
System.out.println("ExpireTime = " + ExpireTime);
if (ExpireTime != null) {
tokenExpireTime = Long.valueOf(ExpireTime);
}
}
// 签发token
String access_token = JwtUtil.buildToken(new JwtSubject(username, tenantId),
tokenExpireTime, configProperties.getTokenKey());
tokenExpireTime, configProperties.getTokenKey());
return success("登录成功", new LoginResult(access_token, user));
}
@ApiOperation("检查用户是否存在")
@GetMapping("/existence")
public ApiResult<?> existence(ExistenceParam<User> param) {
if (param.isExistence(userService, User::getUserId)) {
return success("已存在", param.getValue());
}
return fail("不存在");
if (param.isExistence(userService, User::getUserId)) {
return success("已存在", param.getValue());
}
return fail("不存在");
}
@ApiOperation("获取登录用户信息")
@GetMapping("/auth/user")
public ApiResult<User> userInfo() {
return success(userService.getByIdRel(getLoginUserId()));
return success(userService.getByIdRel(getLoginUserId()));
}
@ApiOperation("获取登录用户菜单")
@ -158,7 +164,7 @@ public class MainController extends BaseController {
@PreAuthorize("hasAuthority('sys:auth:password')")
@OperationLog
@ApiOperation("修改自己密码")
@PutMapping("/auth/password")
@RequestMapping(value = "/auth/password", method = {RequestMethod.PUT, RequestMethod.POST})
public ApiResult<?> updatePassword(@RequestBody UpdatePasswordParam param) {
if (StrUtil.hasBlank(param.getOldPassword(), param.getPassword())) {
return fail("参数不能为空");
@ -189,72 +195,72 @@ public class MainController extends BaseController {
@ApiOperation("企业微信登录链接")
@GetMapping("/wxWorkQrConnect")
public ApiResult<?> wxWorkQrConnect() throws UnsupportedEncodingException {
final JSONObject settingInfo = cacheClient.getSettingInfo("wx-work", 10048);
final String corpId = settingInfo.getString("corpId");
String encodedReturnUrl = URLEncoder.encode("https://oa.gxwebsoft.com/api/open/wx-work/login","UTF-8");
String url = "https://open.work.weixin.qq.com/wwopen/sso/3rd_qrConnect?appid=" +corpId+ "&redirect_uri=" +encodedReturnUrl+ "&state=ww_login@gxwebsoft&usertype=admin";
return success("获取成功",url);
final JSONObject settingInfo = cacheClient.getSettingInfo("wx-work", 10048);
final String corpId = settingInfo.getString("corpId");
String encodedReturnUrl = URLEncoder.encode("https://oa.gxwebsoft.com/api/open/wx-work/login", "UTF-8");
String url = "https://open.work.weixin.qq.com/wwopen/sso/3rd_qrConnect?appid=" + corpId + "&redirect_uri=" + encodedReturnUrl + "&state=ww_login@gxwebsoft&usertype=admin";
return success("获取成功", url);
}
@ApiOperation("短信验证码")
@PostMapping("/sendSmsCaptcha")
public ApiResult<?> sendSmsCaptcha(@RequestBody SmsCaptchaParam param) {
DefaultProfile profile = DefaultProfile.getProfile("regionld", "LTAI5tBWM9dSmEAoQFhNqxqJ", "Dr0BqiKl7eaL1NNKoCd12qKsbgjnum");
IAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
request.setSysMethod(MethodType.POST);
request.setSysDomain("dysmsapi.aliyuncs.com");
request.setSysVersion("2017-05-25");
request.setSysAction("SendSms");
request.putQueryParameter("RegionId", "cn-hangzhou");
request.putQueryParameter("PhoneNumbers", param.getPhone());
request.putQueryParameter("SignName", "南宁网宿科技");
request.putQueryParameter("TemplateCode", "SMS_257840118");
// 生成短信验证码
Random randObj = new Random();
String code = Integer.toString(100000 + randObj.nextInt(900000));
request.putQueryParameter("TemplateParam", "{\"code\":" + code + "}");
try {
CommonResponse response = client.getCommonResponse(request);
String json = response.getData();
Gson g = new Gson();
HashMap result = g.fromJson(json, HashMap.class);
if("OK".equals(result.get("Message"))) {
cacheClient.set(param.getPhone(),code,5L,TimeUnit.MINUTES);
return success("发送成功",result.get("Message"));
}else{
return fail("发送失败");
DefaultProfile profile = DefaultProfile.getProfile("regionld", "LTAI5tBWM9dSmEAoQFhNqxqJ", "Dr0BqiKl7eaL1NNKoCd12qKsbgjnum");
IAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
request.setSysMethod(MethodType.POST);
request.setSysDomain("dysmsapi.aliyuncs.com");
request.setSysVersion("2017-05-25");
request.setSysAction("SendSms");
request.putQueryParameter("RegionId", "cn-hangzhou");
request.putQueryParameter("PhoneNumbers", param.getPhone());
request.putQueryParameter("SignName", "南宁网宿科技");
request.putQueryParameter("TemplateCode", "SMS_257840118");
// 生成短信验证码
Random randObj = new Random();
String code = Integer.toString(100000 + randObj.nextInt(900000));
request.putQueryParameter("TemplateParam", "{\"code\":" + code + "}");
try {
CommonResponse response = client.getCommonResponse(request);
String json = response.getData();
Gson g = new Gson();
HashMap result = g.fromJson(json, HashMap.class);
if ("OK".equals(result.get("Message"))) {
cacheClient.set(param.getPhone(), code, 5L, TimeUnit.MINUTES);
return success("发送成功", result.get("Message"));
} else {
return fail("发送失败");
}
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
return fail("发送失败");
return fail("发送失败");
}
@OperationLog
@ApiOperation("重置密码")
@PutMapping("/password")
public ApiResult<?> resetPassword(@RequestBody User user) {
if (user.getPassword() == null) {
return fail("参数不正确");
}
if (user.getCode() == null) {
return fail("验证码不能为空");
}
// 短信验证码校验
String code = cacheClient.get(user.getPhone(), String.class);
if (!StrUtil.equals(code,user.getCode())) {
return fail("验证码不正确");
}
if (user.getPassword() == null) {
return fail("参数不正确");
}
if (user.getCode() == null) {
return fail("验证码不能为空");
}
// 短信验证码校验
String code = cacheClient.get(user.getPhone(), String.class);
if (!StrUtil.equals(code, user.getCode())) {
return fail("验证码不正确");
}
user.setUserId(getLoginUserId());
user.setPassword(userService.encodePassword(user.getPassword()));
if (userService.updateById(user)) {
return success("密码修改成功");
} else {
return fail("密码修改失败");
}
user.setUserId(getLoginUserId());
user.setPassword(userService.encodePassword(user.getPassword()));
if (userService.updateById(user)) {
return success("密码修改成功");
} else {
return fail("密码修改失败");
}
}
}

11
src/main/java/com/gxwebsoft/common/system/controller/UserController.java

@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.gxwebsoft.apps.service.BcExportService;
import com.gxwebsoft.common.core.annotation.OperationLog;
import com.gxwebsoft.common.core.utils.CommonUtil;
@ -87,14 +88,8 @@ public class UserController extends BaseController {
@ApiOperation("分页查询用户")
@GetMapping("/page")
public ApiResult<PageResult<User>> page(UserParam param) {
final PageResult<User> result = userService.pageRel(param);
// 修复部门数据
// result.getList().forEach(d -> {
// System.out.println("d.getOrganizationName() = " + d.getOrganizationName());
// final BcExport one = bcExportService.getOne(new LambdaQueryWrapper<BcExport>().eq(BcExport::getUserId, d.getUserId()));
// one.setOrganizationName(d.getOrganizationName());
// bcExportService.updateById(one);
// });
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getDeleted, 0);
return success(userService.pageRel(param));
}

6
src/main/java/com/gxwebsoft/common/system/entity/User.java

@ -151,6 +151,9 @@ public class User implements UserDetails {
@ApiModelProperty("是否已实名认证")
private Integer certification;
@ApiModelProperty("用户等级(0无权限1班组组长2资料员3经营人员4生产主管)")
private Integer userLevel;
@ApiModelProperty("机构名称")
@TableField(exist = false)
private String organizationName;
@ -203,6 +206,9 @@ public class User implements UserDetails {
@TableField(exist = false)
private Company companyInfo;
@TableField(exist = false)
private Integer auditStatus;
@Override
public boolean isAccountNonExpired() {

18
src/main/java/com/gxwebsoft/common/system/mapper/xml/UserMapper.xml

@ -38,6 +38,7 @@
) d ON a.user_id = d.user_id
LEFT JOIN sys_tenant e ON a.tenant_id = e.tenant_id
<where>
AND a.deleted = 0
<if test="param.userId != null">
AND a.user_id = #{param.userId}
</if>
@ -74,6 +75,10 @@
<if test="param.birthday != null">
AND a.birthday LIKE CONCAT('%', #{param.birthday}, '%')
</if>
<if test="param.userLevel != null">
AND a.user_level = #{param.userLevel}
</if>
</where>
<if test="param.organizationId != null">
AND a.organization_id = #{param.organizationId}
</if>
@ -92,12 +97,12 @@
<if test="param.createTimeEnd != null">
AND a.create_time &lt;= #{param.createTimeEnd}
</if>
<if test="param.deleted != null">
AND a.deleted = #{param.deleted}
</if>
<if test="param.deleted == null">
AND a.deleted = 0
</if>
<!-- <if test="param.deleted != null">-->
<!-- AND a.deleted = #{param.deleted}-->
<!-- </if>-->
<!-- <if test="param.deleted == null">-->
<!-- AND a.deleted = 0-->
<!-- </if>-->
<if test="param.roleId != null">
AND a.user_id IN (SELECT user_id FROM sys_user_role WHERE role_id=#{param.roleId})
</if>
@ -138,7 +143,6 @@
<if test="param.parentId != null">
AND a.organization_id IN (SELECT organization_id FROM sys_organization WHERE parent_id=#{param.parentId})
</if>
</where>
</sql>
<!-- 分页查询 -->

3
src/main/java/com/gxwebsoft/common/system/param/LoginParam.java

@ -31,4 +31,7 @@ public class LoginParam implements Serializable {
@ApiModelProperty(value = "租户id")
private Integer tenantId;
@ApiModelProperty(value = "是否小程序")
private Integer isMiniApp;
}

3
src/main/java/com/gxwebsoft/common/system/param/UserParam.java

@ -117,6 +117,9 @@ public class UserParam extends BaseParam {
@ApiModelProperty("公司名称")
private String customerName;
@ApiModelProperty("用户等级(0无权限1班组组长2资料员3经营人员4生产主管)")
private Integer userLevel;
@ApiModelProperty("性别名称")
@TableField(exist = false)
private String sexName;

43
src/main/java/com/gxwebsoft/shop/config/WxMaProperties.java

@ -0,0 +1,43 @@
package com.gxwebsoft.shop.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import java.util.List;
@Data
@ConfigurationProperties(prefix = "wx.miniapp")
@Configuration
public class WxMaProperties {
private List<Config> configs;
@Data
public static class Config {
/**
* 设置微信小程序的appid
*/
private String appid;
/**
* 设置微信小程序的Secret
*/
private String secret;
/**
* 设置微信小程序消息服务器配置的token
*/
private String token;
/**
* 设置微信小程序消息服务器配置的EncodingAESKey
*/
private String aesKey;
/**
* 消息格式XML或者JSON
*/
private String msgDataFormat;
}
}

4
src/main/java/com/gxwebsoft/shop/controller/CategoryController.java

@ -51,11 +51,13 @@ public class CategoryController extends BaseController {
@ApiOperation("查询全部商品分类表")
@GetMapping()
public ApiResult<List<Category>> list(CategoryParam param) {
System.out.println("====== param ======");
System.out.println(param);
PageParam<Category, CategoryParam> page = new PageParam<>(param);
// page.setDefaultOrder("create_time desc");
QueryWrapper<Category> wrapper = new QueryWrapper<>();
page.setDefaultOrder("sort_number");
if (param.getParentId() == -1){
if (param.getParentId() != null && param.getParentId() == -1){
wrapper.ne("parent_id", "0");
}
return success(categoryService.list(wrapper));

40
src/main/java/com/gxwebsoft/shop/controller/WxLoginController.java

@ -1,5 +1,8 @@
package com.gxwebsoft.shop.controller;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
@ -18,10 +21,12 @@ import com.gxwebsoft.common.system.entity.UserRole;
import com.gxwebsoft.common.system.param.UserParam;
import com.gxwebsoft.common.system.result.LoginResult;
import com.gxwebsoft.common.system.service.*;
import com.gxwebsoft.shop.config.WxMaProperties;
import com.gxwebsoft.shop.entity.UserOauth;
import com.gxwebsoft.shop.service.UserOauthService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import me.chanjar.weixin.common.error.WxRuntimeException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.transaction.annotation.Transactional;
@ -30,6 +35,8 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
import static com.gxwebsoft.common.core.constants.RedisConstants.ACCESS_TOKEN_KEY;
@ -51,9 +58,13 @@ public class WxLoginController extends BaseController {
private LoginRecordService loginRecordService;
@Resource
private RoleService roleService;
@Resource
private WxMaProperties wxMaProperties;
@Autowired
private StringRedisTemplate redisTemplate;
@ApiOperation("获取微信openId")
@Transactional(rollbackFor = {Exception.class})
@PostMapping("/getOpenId")
@ -94,15 +105,14 @@ public class WxLoginController extends BaseController {
String phone = getPhoneByCode(userParam);
// 查询是否存在
User user = userService.getByPhone(phone);
// 不存在则注册
// 不存在
if (user == null) {
userParam.setPhone(phone);
user = addUser(userParam);
return fail("该用户不存在", new LoginResult());
}
// 签发token
String access_token = JwtUtil.buildToken(new JwtSubject(user.getUsername(), user.getTenantId()),
configProperties.getTokenExpireTime(), configProperties.getTokenKey());
loginRecordService.saveAsync(user.getUsername(), LoginRecord.TYPE_REGISTER, null, user.getTenantId(), request);
loginRecordService.saveAsync(user.getUsername(), LoginRecord.TYPE_LOGIN, null, user.getTenantId(), request);
return success("登录成功", new LoginResult(access_token, user));
}
@ -193,7 +203,7 @@ public class WxLoginController extends BaseController {
* 获取接口调用凭据AccessToken
* https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/mp-access-token/getAccessToken.html
*/
private String getAccessToken() {
public String getAccessToken() {
// 获取微信小程序配置信息
JSONObject setting = settingService.getBySettingKey("mp-weixin");
// 从缓存获取access_token
@ -219,5 +229,25 @@ public class WxLoginController extends BaseController {
return null;
}
public WxMaService wxMaService() {
List<WxMaProperties.Config> configs = wxMaProperties.getConfigs();
if (configs == null) {
throw new WxRuntimeException("大哥,拜托先看下项目首页的说明(readme文件),添加下相关配置,注意别配错了!");
}
WxMaService maService = new WxMaServiceImpl();
maService.setMultiConfigs(
configs.stream()
.map(a -> {
WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
config.setAppid(a.getAppid());
config.setSecret(a.getSecret());
config.setToken(a.getToken());
config.setAesKey(a.getAesKey());
config.setMsgDataFormat(a.getMsgDataFormat());
return config;
}).collect(Collectors.toMap(WxMaDefaultConfigImpl::getAppid, a -> a, (o, n) -> o)));
return maService;
}
}

19
src/main/java/com/gxwebsoft/shop/entity/Category.java

@ -1,12 +1,11 @@
package com.gxwebsoft.shop.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.*;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableLogic;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -67,4 +66,16 @@ public class Category implements Serializable {
@ApiModelProperty(value = "修改时间")
private Date updateTime;
@ApiModelProperty(value = "子分类")
@TableField(exist = false)
private List<Category> children;
//
// @ApiModelProperty(value = "配件名称")
// @TableField(exist = false)
// private LocalDateTime partsTitle;
//
// @ApiModelProperty(value = "父类配件名称")
// @TableField(exist = false)
// private LocalDateTime parentPartsTitle;
}

2
src/main/java/com/gxwebsoft/shop/mapper/xml/CategoryMapper.xml

@ -11,7 +11,7 @@
AND a.category_id = #{param.categoryId}
</if>
<if test="param.title != null">
AND a.name LIKE CONCAT('%', #{param.name}, '%')
AND a.title LIKE CONCAT('%', #{param.title}, '%')
</if>
<if test="param.parentId != null">
AND a.parent_id = #{param.parentId}

16
src/main/java/com/gxwebsoft/tower/controller/TowerContractController.java

@ -1,5 +1,9 @@
package com.gxwebsoft.tower.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.gxwebsoft.common.core.web.BaseController;
import com.gxwebsoft.common.system.entity.Company;
@ -13,13 +17,16 @@ import com.gxwebsoft.common.core.web.PageResult;
import com.gxwebsoft.common.core.web.PageParam;
import com.gxwebsoft.common.core.web.BatchParam;
import com.gxwebsoft.common.core.annotation.OperationLog;
import com.gxwebsoft.tower.service.TowerContractSettleEquipmentService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
/**
* 合同存档控制器
@ -33,6 +40,8 @@ import java.util.List;
public class TowerContractController extends BaseController {
@Resource
private TowerContractService towerContractService;
@Resource
private TowerContractSettleEquipmentService towerContractSettleEquipmentService;
@PreAuthorize("hasAuthority('tower:towerContract:list')")
@OperationLog
@ -41,16 +50,15 @@ public class TowerContractController extends BaseController {
public ApiResult<PageResult<TowerContract>> page(TowerContractParam param) {
MPJLambdaWrapper<TowerContract> wrapper = new MPJLambdaWrapper<>();
wrapper.selectAll(TowerContract.class)
.select(TowerProject::getProjectName)
.selectAs(TowerCustomer::getName, TowerContract::getCustomerName)
.selectAs(Company::getCompanyName, TowerContract::getCompanyName)
.leftJoin(TowerProject.class, TowerProject::getProjectId, TowerContract::getProjectId)
.leftJoin(TowerCustomer.class, TowerCustomer::getCustomerId, TowerContract::getCustomerId)
.leftJoin(Company.class, Company::getCompanyId, TowerContract::getCompanyId);
PageParam<TowerContract, TowerContractParam> page = new PageParam<>(param);
page.setDefaultOrder("create_time desc");
return success(towerContractService.page(page, wrapper));
PageResult<TowerContract> pageRes = towerContractService.pageRel(param);
return success(pageRes);
// return success(towerContractService.page(page, wrapper));
// 使用关联查询
//return success(towerContractService.pageRel(param));
}

8
src/main/java/com/gxwebsoft/tower/controller/TowerContractEquipmentController.java

@ -50,16 +50,18 @@ public class TowerContractEquipmentController extends BaseController {
@ApiOperation("查询全部合同设备清单")
@GetMapping()
public ApiResult<List<TowerContractEquipment>> list(@RequestParam Map<String, String> params) {
int contractId = Integer.parseInt(params.get("contractId"));
MPJLambdaWrapper<TowerContractEquipment> wrapper = new MPJLambdaWrapper<>();
wrapper.selectAll(TowerContractEquipment.class)
wrapper.eq(TowerContractEquipment::getContractId, contractId)
.selectAll(TowerContractEquipment.class)
.selectAs(TowerEquipment::getName, TowerEquipment::getEquipmentName)
.select(TowerEquipment::getFactoryNo)
.select(TowerEquipment::getEquipmentNo)
.select(TowerEquipment::getFilingNo)
.leftJoin(TowerEquipment.class, TowerEquipment::getEquipmentId, TowerContractEquipment::getEquipmentId);
TowerContractEquipmentParam towerContractEquipmentParam = new TowerContractEquipmentParam();
int contractId = Integer.parseInt(params.get("contractId"));
towerContractEquipmentParam.setContractId(contractId);
// towerContractEquipmentParam.setContractId(contractId);
PageParam<TowerContractEquipment, TowerContractEquipmentParam> page = new PageParam<>(towerContractEquipmentParam);
page.setDefaultOrder("create_time desc");

8
src/main/java/com/gxwebsoft/tower/controller/TowerCustomerController.java

@ -36,11 +36,11 @@ public class TowerCustomerController extends BaseController {
@ApiOperation("分页查询客户管理")
@GetMapping("/page")
public ApiResult<PageResult<TowerCustomer>> page(TowerCustomerParam param) {
PageParam<TowerCustomer, TowerCustomerParam> page = new PageParam<>(param);
page.setDefaultOrder("create_time desc");
return success(towerCustomerService.page(page, page.getWrapper()));
// PageParam<TowerCustomer, TowerCustomerParam> page = new PageParam<>(param);
// page.setDefaultOrder("create_time desc");
// return success(towerCustomerService.page(page, page.getWrapper()));
// 使用关联查询
//return success(towerCustomerService.pageRel(param));
return success(towerCustomerService.pageRel(param));
}
@PreAuthorize("hasAuthority('tower:towerCustomer:list')")

203
src/main/java/com/gxwebsoft/tower/controller/TowerEquipmentController.java

@ -1,21 +1,40 @@
package com.gxwebsoft.tower.controller;
import cn.binarywang.wx.miniapp.api.WxMaQrcodeService;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.api.impl.WxMaQrcodeServiceImpl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.gxwebsoft.common.core.annotation.OperationLog;
import com.gxwebsoft.common.core.web.ApiResult;
import com.gxwebsoft.common.core.web.BaseController;
import com.gxwebsoft.common.core.web.BatchParam;
import com.gxwebsoft.common.core.web.PageResult;
import com.gxwebsoft.common.core.web.*;
import com.gxwebsoft.common.system.entity.User;
import com.gxwebsoft.shop.controller.WxLoginController;
import com.gxwebsoft.tower.entity.TowerEquipment;
import com.gxwebsoft.tower.entity.TowerProject;
import com.gxwebsoft.tower.entity.TowerProjectOrder;
import com.gxwebsoft.tower.param.TowerEquipmentParam;
import com.gxwebsoft.tower.service.TowerEquipmentService;
import com.gxwebsoft.tower.service.TowerProjectOrderService;
import com.gxwebsoft.tower.service.TowerProjectService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import me.chanjar.weixin.common.error.WxErrorException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.*;
import java.util.stream.Collectors;
/**
* 塔吊设备管理控制器
@ -29,14 +48,84 @@ import java.util.List;
public class TowerEquipmentController extends BaseController {
@Resource
private TowerEquipmentService towerEquipmentService;
@Resource
private TowerProjectService projectService;
@Resource
private TowerProjectOrderService projectOrderService;
@Value("${config.upload-path}")
private String uploadPath;
@PreAuthorize("hasAuthority('tower:towerEquipment:list')")
@OperationLog
@ApiOperation("塔吊设备数据")
@GetMapping("/data")
public ApiResult<Map<String, Integer>> data() {
Map<String, Integer> data = new HashMap<>();
Integer totalNum = towerEquipmentService.count(
new LambdaQueryWrapper<TowerEquipment>()
.ne(TowerEquipment::getStatus, 3)
);
Integer idleNum = towerEquipmentService.count(
new LambdaQueryWrapper<TowerEquipment>()
.eq(TowerEquipment::getStatus, 0)
);
Integer scrapNum = towerEquipmentService.count(
new LambdaQueryWrapper<TowerEquipment>()
.lt(TowerEquipment::getScrapDate, new Date())
);
data.put("totalNum", totalNum);
data.put("idleNum", idleNum);
data.put("scrapNum", scrapNum);
return success(data);
}
@PreAuthorize("hasAuthority('tower:towerEquipment:list')")
@OperationLog
@ApiOperation("分页查询塔吊设备管理")
@GetMapping("/page")
public ApiResult<PageResult<TowerEquipment>> page(TowerEquipmentParam param) {
System.out.println("param.getYearFilter(): " + param.getYearFilter());
List<Integer> equipmentIdList = new ArrayList<>();
if (param.getIdleOnly() != null && param.getIdleOnly()) {
// 不在未结案项目的设备列表
equipmentIdList = towerEquipmentService.list(
new LambdaQueryWrapper<TowerEquipment>()
.ne(TowerEquipment::getStatus, 4)
).stream().map(TowerEquipment::getEquipmentId).collect(Collectors.toList());
}
// 使用关联查询
return success(towerEquipmentService.pageRel(param));
LambdaQueryWrapper<TowerEquipment> wrapper = new LambdaQueryWrapper<>();
if (!equipmentIdList.isEmpty()) wrapper.in(TowerEquipment::getEquipmentId, equipmentIdList);
if (param.getKeywords() != null) {
wrapper.and(i -> i.like(TowerEquipment::getFilingNo, param.getKeywords()).or()
.like(TowerEquipment::getModel, param.getKeywords()).or()
.like(TowerEquipment::getName, param.getKeywords()).or()
.like(TowerEquipment::getFactoryNo, param.getKeywords()));
}
if (param.getYearFilter() != null)
wrapper.apply("CEIL( DATEDIFF(`scrap_date`, '" + DateUtil.today() + "') / 365) = {0}", param.getYearFilter());
if (param.getStatus() != null) wrapper.eq(TowerEquipment::getStatus, param.getStatus());
IPage<TowerEquipment> page = new PageParam<>(param);
IPage<TowerEquipment> list = towerEquipmentService.page(page, wrapper);
for (TowerEquipment equipment : list.getRecords()) {
// System.out.println("equipment item" + equipment);
List<TowerProjectOrder> projectOrderList = projectOrderService.list(
new LambdaQueryWrapper<TowerProjectOrder>()
.eq(TowerProjectOrder::getFilingNo, equipment.getFilingNo())
);
if (!projectOrderList.isEmpty()) {
equipment.setProjectList(
projectService.list(
new LambdaQueryWrapper<TowerProject>()
.in(TowerProject::getProjectId,
projectOrderList.stream().map(TowerProjectOrder::getProjectId).collect(Collectors.toList())
)
)
);
}
}
return success(list);
}
@PreAuthorize("hasAuthority('tower:towerEquipment:list')")
@ -65,7 +154,7 @@ public class TowerEquipmentController extends BaseController {
// 记录当前登录用户id
User loginUser = getLoginUser();
if (loginUser != null) {
towerEquipment.setUserId(loginUser.getUserId());
towerEquipment.setUserId(loginUser.getUserId());
}
if (towerEquipmentService.save(towerEquipment)) {
return success("添加成功");
@ -100,6 +189,44 @@ public class TowerEquipmentController extends BaseController {
@ApiOperation("批量添加塔吊设备管理")
@PostMapping("/batch")
public ApiResult<?> saveBatch(@RequestBody List<TowerEquipment> list) {
// for (TowerEquipment equipment : list) {
// if (equipment.getProjectName() != null) {
// TowerProject checkProject = projectService.getOne(
// new LambdaQueryWrapper<TowerProject>().eq(TowerProject::getProjectName, equipment.getProjectName())
// );
// if (checkProject == null) {
// TowerProject newProject = new TowerProject();
// newProject.setProjectName(equipment.getProjectName());
// newProject.setProjectCity(equipment.getCurrentLocation());
// newProject.setCompetentDepartment(equipment.getCompetentDepartment());
// projectService.save(newProject);
//
// TowerProjectOrder newProjectOrder = new TowerProjectOrder();
// newProjectOrder.setProjectId(newProjectOrder.getProjectId());
// newProjectOrder.setEquipmentName(equipment.getEquipmentName());
// newProjectOrder.setEquipmentModel(equipment.getEquipmentModel());
// newProjectOrder.setFilingNo(equipment.getFilingNo());
// newProjectOrder.setFactoryNo(equipment.getFactoryNo());
// newProjectOrder.setSecurityStatus(equipment.getSecurityStatus());
// projectOrderService.save(newProjectOrder);
// } else {
// int checkProjectOrder = projectOrderService.count(
// new LambdaQueryWrapper<TowerProjectOrder>().eq(TowerProjectOrder::getProjectId, checkProject.getProjectId())
// .eq(TowerProjectOrder::getFilingNo, equipment.getFilingNo())
// );
// if (checkProjectOrder == 0) {
// TowerProjectOrder newProjectOrder = new TowerProjectOrder();
// newProjectOrder.setProjectId(newProjectOrder.getProjectId());
// newProjectOrder.setEquipmentName(equipment.getEquipmentName());
// newProjectOrder.setEquipmentModel(equipment.getEquipmentModel());
// newProjectOrder.setFilingNo(equipment.getFilingNo());
// newProjectOrder.setFactoryNo(equipment.getFactoryNo());
// newProjectOrder.setSecurityStatus(equipment.getSecurityStatus());
// projectOrderService.save(newProjectOrder);
// }
// }
// }
// }
if (towerEquipmentService.saveBatch(list)) {
return success("添加成功");
}
@ -133,9 +260,63 @@ public class TowerEquipmentController extends BaseController {
@ApiOperation("批量修改塔吊设备状态")
@PutMapping("/status")
public ApiResult<?> statusBatch(@RequestBody List<TowerEquipment> batchParam) {
if (towerEquipmentService.updateBatchById(batchParam)) {
return success("修改成功");
}
return fail("修改失败");
if (towerEquipmentService.updateBatchById(batchParam)) {
return success("修改成功");
}
return fail("修改失败");
}
@PreAuthorize("hasAuthority('tower:towerEquipment:list')")
@OperationLog
@ApiOperation("设备信息二维码")
@GetMapping("/qr")
public ApiResult<?> qr(TowerEquipmentParam equipmentParam) throws IOException, WxErrorException {
// WxLoginController wxLoginController = new WxLoginController();
// String apiUrl = "https://api.weixin.qq.com/wxa/getwxacode?access_token=" + wxLoginController.getAccessToken();
// JSONObject paramJson = new JSONObject();
// paramJson.put("path", "otherPages/pages/equipment");
// paramJson.put("scene",towerEquipmentParam.getEquipmentId());
// URL url = new URL(apiUrl);
// HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
// httpURLConnection.setRequestMethod("POST");// 提交模式
// // 发送POST请求必须设置如下两行
// httpURLConnection.setDoOutput(true);
// httpURLConnection.setDoInput(true);
// PrintWriter printWriter = new PrintWriter(httpURLConnection.getOutputStream());
// printWriter.write(paramJson.toString());
// // flush输出流的缓冲
// printWriter.flush();
// //开始获取数据
// BufferedInputStream bis = new BufferedInputStream(httpURLConnection.getInputStream());
// OutputStream os = new FileOutputStream(new File(savePath));
// int len;
// byte[] arr = new byte[1024];
// while ((len = bis.read(arr)) != -1)
// {
// os.write(arr, 0, len);
// os.flush();
// }
// os.close();
// // 执行post请求
// Map<String, Object> paramMap = new HashMap<>();
// paramMap.put("path", "otherPages/pages/equipment");
// paramMap.put("scene", equipmentParam.getEquipmentId());
// String post = HttpUtil.post(apiUrl, JSON.toJSONString(paramMap));
// JSONObject json = JSON.parseObject(post);
// return success(json);
// if (json.get("errcode").equals(0)) {
// }
// return null;
String filepath = uploadPath + "qr";
String filename = filepath + "/" + getLoginUserId().toString() + ".png";
File checkFile = new File(filename);
if (!checkFile.exists()) {
WxLoginController wxLoginController = new WxLoginController();
WxMaService wxMaService = wxLoginController.wxMaService();
WxMaQrcodeService wxMaQrcodeService = new WxMaQrcodeServiceImpl(wxMaService);
wxMaQrcodeService.createWxaCodeUnlimit(equipmentParam.getEquipmentId().toString(), "otherPages/pages/equipment", uploadPath);
}
return success(filename);
}
}

12
src/main/java/com/gxwebsoft/tower/controller/TowerFallController.java

@ -37,10 +37,10 @@ public class TowerFallController extends BaseController {
@GetMapping("/page")
public ApiResult<PageResult<TowerFall>> page(TowerFallParam param) {
PageParam<TowerFall, TowerFallParam> page = new PageParam<>(param);
page.setDefaultOrder("create_time desc");
// return success(towerFallService.page(page, page.getWrapper()));
page.setDefaultOrder("factory_date desc");
return success(towerFallService.page(page, page.getWrapper()));
// 使用关联查询
return success(towerFallService.pageRel(param));
// return success(towerFallService.pageRel(param));
}
@PreAuthorize("hasAuthority('tower:towerFall:list')")
@ -49,10 +49,10 @@ public class TowerFallController extends BaseController {
@GetMapping()
public ApiResult<List<TowerFall>> list(TowerFallParam param) {
PageParam<TowerFall, TowerFallParam> page = new PageParam<>(param);
page.setDefaultOrder("create_time desc");
// return success(towerFallService.list(page.getOrderWrapper()));
page.setDefaultOrder("factory_date desc");
return success(towerFallService.list(page.getOrderWrapper()));
// 使用关联查询
return success(towerFallService.listRel(param));
// return success(towerFallService.listRel(param));
}
@PreAuthorize("hasAuthority('tower:towerFall:list')")

47
src/main/java/com/gxwebsoft/tower/controller/TowerIncomeController.java

@ -1,5 +1,6 @@
package com.gxwebsoft.tower.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@ -22,6 +23,8 @@ import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
/**
@ -97,10 +100,7 @@ public class TowerIncomeController extends BaseController {
towerIncome.setUserId(loginUser.getUserId());
}
if (towerIncomeService.save(towerIncome)) {
LambdaUpdateWrapper<TowerContract> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(TowerContract::getContractId, towerIncome.getIncomeId())
.setSql("`total_income_amount` = `total_income_amount` + " + towerIncome.getAmount());
towerContractService.update(null, updateWrapper);
reCalIncome(towerIncome.getContractId());
return success(towerIncome.getIncomeId());
}
return fail("添加失败");
@ -111,15 +111,8 @@ public class TowerIncomeController extends BaseController {
@ApiOperation("修改收款管理")
@PutMapping()
public ApiResult<?> update(@RequestBody TowerIncome towerIncome) {
QueryWrapper<TowerIncome> queryWrapper = new QueryWrapper<>();
queryWrapper.select("sum(`amount`) as `total_income_amount`");
TowerIncome towerIncomeAll = towerIncomeService.getOne(queryWrapper);
LambdaUpdateWrapper<TowerContract> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(TowerContract::getContractId, towerIncome.getIncomeId())
.set(TowerContract::getTotalIncomeAmount, towerIncomeAll.getTotalIncomeAmount());
towerContractService.update(null, updateWrapper);
if (towerIncomeService.updateById(towerIncome)) {
reCalIncome(towerIncome.getContractId());
return success(towerIncome.getIncomeId());
}
return fail("修改失败");
@ -130,7 +123,9 @@ public class TowerIncomeController extends BaseController {
@ApiOperation("删除收款管理")
@DeleteMapping("/{id}")
public ApiResult<?> remove(@PathVariable("id") Integer id) {
int contractId = towerIncomeService.getById(id).getContractId();
if (towerIncomeService.removeById(id)) {
reCalIncome(contractId);
return success("删除成功");
}
return fail("删除失败");
@ -163,10 +158,38 @@ public class TowerIncomeController extends BaseController {
@ApiOperation("批量删除收款管理")
@DeleteMapping("/batch")
public ApiResult<?> removeBatch(@RequestBody List<Integer> ids) {
List<Integer> contractIdList = new ArrayList<>();
for (int id : ids) {
int contractId = towerIncomeService.getById(id).getContractId();
if (!contractIdList.contains(contractId)) {
contractIdList.add(contractId);
}
}
if (towerIncomeService.removeByIds(ids)) {
for (int contractId : contractIdList) {
this.reCalIncome(contractId);
}
return success("删除成功");
}
return fail("删除失败");
}
private void reCalIncome(int contractId) {
QueryWrapper<TowerIncome> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("contract_id", contractId)
.select("sum(`amount`) as `total_income_amount`");
TowerIncome towerIncomeAll = towerIncomeService.getOne(queryWrapper);
LambdaUpdateWrapper<TowerContract> updateWrapper = new LambdaUpdateWrapper<>();
BigDecimal totalIncomeAmount;
if (towerIncomeAll != null) {
totalIncomeAmount = towerIncomeAll.getTotalIncomeAmount();
} else {
totalIncomeAmount = BigDecimal.valueOf(0);
}
updateWrapper.eq(TowerContract::getContractId, contractId)
.set(TowerContract::getTotalIncomeAmount, totalIncomeAmount);
towerContractService.update(updateWrapper);
}
}

135
src/main/java/com/gxwebsoft/tower/controller/TowerProjectController.java

@ -1,20 +1,18 @@
package com.gxwebsoft.tower.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.gxwebsoft.common.core.annotation.OperationLog;
import com.gxwebsoft.common.core.web.ApiResult;
import com.gxwebsoft.common.core.web.BaseController;
import com.gxwebsoft.common.core.web.BatchParam;
import com.gxwebsoft.common.core.web.PageResult;
import com.gxwebsoft.common.system.entity.User;
import com.gxwebsoft.tower.entity.TowerProject;
import com.gxwebsoft.tower.entity.TowerProjectOrder;
import com.gxwebsoft.tower.entity.TowerProjectPlace;
import com.gxwebsoft.tower.entity.TowerProjectUser;
import com.gxwebsoft.common.system.service.UserService;
import com.gxwebsoft.tower.entity.*;
import com.gxwebsoft.tower.param.TowerProjectParam;
import com.gxwebsoft.tower.service.TowerProjectOrderService;
import com.gxwebsoft.tower.service.TowerProjectPlaceService;
import com.gxwebsoft.tower.service.TowerProjectService;
import com.gxwebsoft.tower.service.TowerProjectUserService;
import com.gxwebsoft.tower.service.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
@ -22,8 +20,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import java.util.Set;
import java.util.*;
/**
* 项目管理控制器
@ -43,13 +40,51 @@ public class TowerProjectController extends BaseController {
private TowerProjectUserService towerProjectUserService;
@Resource
private TowerProjectPlaceService towerProjectPlaceService;
@Resource
private TowerEquipmentService equipmentService;
@Resource
private UserService userService;
@PreAuthorize("hasAuthority('tower:towerEquipment:list')")
@OperationLog
@ApiOperation("项目数据")
@GetMapping("/data")
public ApiResult<Map<String, Integer>> data() {
Map<String, Integer> data = new HashMap<>();
Integer totalNum = towerProjectService.count();
Integer startedNum = towerProjectService.count(
new LambdaQueryWrapper<TowerProject>()
.eq(TowerProject::getProjectStatus, "建设中")
);
Integer notStartNum = towerProjectService.count(
new LambdaQueryWrapper<TowerProject>()
.eq(TowerProject::getProjectStatus, "未开工")
);
data.put("totalNum", totalNum);
data.put("startedNum", startedNum);
data.put("notStartNum", notStartNum);
return success(data);
}
@PreAuthorize("hasAuthority('tower:towerProject:list')")
@ApiOperation("分页查询项目管理")
@GetMapping("/page")
public ApiResult<PageResult<TowerProject>> page(TowerProjectParam param) {
// 使用关联查询
return success(towerProjectService.pageRel(param));
PageResult<TowerProject> list = towerProjectService.pageRel(param);
for (TowerProject project : list.getList()) {
project.setEquipmentNum(towerProjectOrderService.count(
new LambdaQueryWrapper<TowerProjectOrder>()
.eq(TowerProjectOrder::getProjectId, project.getProjectId())
));
project.setOrders(
new HashSet<>(towerProjectOrderService.list(
new LambdaQueryWrapper<TowerProjectOrder>().eq(TowerProjectOrder::getProjectId, project.getProjectId())
))
);
if (!project.getDirector().equals("0")) project.setDirectorUser(userService.getById(project.getDirector()));
}
return success(list);
}
@PreAuthorize("hasAuthority('tower:towerProject:list')")
@ -68,6 +103,18 @@ public class TowerProjectController extends BaseController {
return success(towerProjectService.getByIdRel(id));
}
@ApiOperation("添加项目管理")
@PostMapping("/new")
public ApiResult<?> newProject(@RequestBody TowerProject towerProject) {
// 记录当前登录用户id
User loginUser = getLoginUser();
if (loginUser != null) {
towerProject.setUserId(loginUser.getUserId());
}
towerProjectService.save(towerProject);
return success(towerProject);
}
@PreAuthorize("hasAuthority('tower:towerProject:save')")
@Transactional(rollbackFor = {Exception.class})
@ApiOperation("添加项目管理")
@ -76,42 +123,42 @@ public class TowerProjectController extends BaseController {
// 记录当前登录用户id
User loginUser = getLoginUser();
if (loginUser != null) {
towerProject.setUserId(loginUser.getUserId());
towerProject.setUserId(loginUser.getUserId());
}
System.out.println("towerProject = " + towerProject.getPlaces2());
System.out.println("towerProject = " + towerProject.getPlaces2());
if (towerProjectService.save(towerProject)) {
final Integer projectId = towerProject.getProjectId();
final Integer projectId = towerProject.getProjectId();
// 批量添加项目成员
if (!towerProject.getUsers().isEmpty()) {
final Set<TowerProjectUser> users = towerProject.getUsers();
users.forEach(d->{
d.setProjectId(projectId);
});
towerProjectUserService.saveBatch(users);
final Set<TowerProjectUser> users = towerProject.getUsers();
users.forEach(d -> {
d.setProjectId(projectId);
});
towerProjectUserService.saveBatch(users);
}
// 批量添加项目订单
if (!towerProject.getOrders().isEmpty()) {
final Set<TowerProjectOrder> orders = towerProject.getOrders();
orders.forEach(d->{
d.setProjectId(projectId);
});
towerProjectOrderService.saveBatch(orders);
final Set<TowerProjectOrder> orders = towerProject.getOrders();
orders.forEach(d -> {
d.setProjectId(projectId);
});
towerProjectOrderService.saveBatch(orders);
}
// 批量添加检查部位配置
if (!towerProject.getPlaces1().isEmpty()) {
final Set<TowerProjectPlace> places1 = towerProject.getPlaces1();
places1.forEach(d->{
d.setProjectId(projectId);
});
towerProjectPlaceService.saveBatch(places1);
final Set<TowerProjectPlace> places1 = towerProject.getPlaces1();
places1.forEach(d -> {
d.setProjectId(projectId);
});
towerProjectPlaceService.saveBatch(places1);
}
// 批量添加保养部位配置
if (!towerProject.getPlaces2().isEmpty()) {
final Set<TowerProjectPlace> places2 = towerProject.getPlaces2();
places2.forEach(d->{
d.setProjectId(projectId);
});
towerProjectPlaceService.saveBatch(places2);
final Set<TowerProjectPlace> places2 = towerProject.getPlaces2();
places2.forEach(d -> {
d.setProjectId(projectId);
});
towerProjectPlaceService.saveBatch(places2);
}
return success("添加成功");
}
@ -127,7 +174,25 @@ public class TowerProjectController extends BaseController {
// 批量修改项目成员
towerProjectUserService.saveOrUpdateBatch(towerProject.getUsers());
// 批量修改项目订单
towerProjectOrderService.saveOrUpdateBatch(towerProject.getOrders());
Set<TowerProjectOrder> projectOrders = towerProject.getOrders();
if (towerProject.getProjectStatus().equals("建设中")) {
for (TowerProjectOrder order : projectOrders) {
equipmentService.update(
new LambdaUpdateWrapper<TowerEquipment>()
.eq(TowerEquipment::getFilingNo, order.getFilingNo())
.set(TowerEquipment::getStatus, 4)
);
}
} else if (towerProject.getProjectStatus().equals("完工")) {
for (TowerProjectOrder order : projectOrders) {
equipmentService.update(
new LambdaUpdateWrapper<TowerEquipment>()
.eq(TowerEquipment::getFilingNo, order.getFilingNo())
.set(TowerEquipment::getStatus, 0)
);
}
}
towerProjectOrderService.saveOrUpdateBatch(projectOrders);
// 批量修改检查/保养部位配置
towerProjectPlaceService.saveOrUpdateBatch(towerProject.getPlaces1());
towerProjectPlaceService.saveOrUpdateBatch(towerProject.getPlaces2());

11
src/main/java/com/gxwebsoft/tower/controller/TowerProjectUserController.java

@ -1,11 +1,13 @@
package com.gxwebsoft.tower.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.gxwebsoft.common.core.annotation.OperationLog;
import com.gxwebsoft.common.core.web.ApiResult;
import com.gxwebsoft.common.core.web.BaseController;
import com.gxwebsoft.common.core.web.BatchParam;
import com.gxwebsoft.common.core.web.PageResult;
import com.gxwebsoft.common.system.service.UserService;
import com.gxwebsoft.tower.entity.TowerProjectUser;
import com.gxwebsoft.tower.param.TowerProjectUserParam;
import com.gxwebsoft.tower.service.TowerProjectUserService;
@ -29,14 +31,19 @@ import java.util.List;
public class TowerProjectUserController extends BaseController {
@Resource
private TowerProjectUserService towerProjectUserService;
@Resource
private UserService userService;
@PreAuthorize("hasAuthority('tower:towerProjectUser:list')")
@OperationLog
@ApiOperation("分页查询项目成员")
@GetMapping("/page")
public ApiResult<PageResult<TowerProjectUser>> page(TowerProjectUserParam param) {
// 使用关联查询
return success(towerProjectUserService.pageRel(param));
PageResult<TowerProjectUser> list = towerProjectUserService.pageRel(param);
for(TowerProjectUser projectUser: list.getList() ){
projectUser.setUser(userService.getById(projectUser.getUserId()));
}
return success(list);
}
@PreAuthorize("hasAuthority('tower:towerProjectUser:list')")

48
src/main/java/com/gxwebsoft/tower/controller/TowerSettleDetailController.java

@ -1,8 +1,16 @@
package com.gxwebsoft.tower.controller;
import com.alipay.api.domain.AlipayCommerceLogisticsWaybillIstddetailQueryModel;
import com.alipay.api.domain.Contract;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.gxwebsoft.common.core.web.BaseController;
import com.gxwebsoft.common.system.entity.User;
import com.gxwebsoft.tower.entity.TowerContract;
import com.gxwebsoft.tower.entity.TowerSettle;
import com.gxwebsoft.tower.service.TowerContractService;
import com.gxwebsoft.tower.service.TowerContractSettleEquipmentService;
import com.gxwebsoft.tower.service.TowerSettleDetailService;
import com.gxwebsoft.tower.entity.TowerSettleDetail;
import com.gxwebsoft.tower.param.TowerSettleDetailParam;
@ -11,12 +19,15 @@ import com.gxwebsoft.common.core.web.PageResult;
import com.gxwebsoft.common.core.web.PageParam;
import com.gxwebsoft.common.core.web.BatchParam;
import com.gxwebsoft.common.core.annotation.OperationLog;
import com.gxwebsoft.tower.service.TowerSettleService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;
/**
@ -31,6 +42,10 @@ import java.util.List;
public class TowerSettleDetailController extends BaseController {
@Resource
private TowerSettleDetailService towerSettleDetailService;
@Resource
private TowerContractService towerContractService;
@Resource
private TowerSettleService towerSettleService;
@PreAuthorize("hasAuthority('tower:towerSettle:list')")
@OperationLog
@ -109,9 +124,13 @@ public class TowerSettleDetailController extends BaseController {
@ApiOperation("批量添加合同结算详情")
@PostMapping("/batch")
public ApiResult<?> saveBatch(@RequestBody List<TowerSettleDetail> list) {
QueryWrapper<TowerSettleDetail> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("settle_id", list.get(0).getSettleId());
Integer settleId = list.get(0).getSettleId();
LambdaUpdateWrapper<TowerSettleDetail> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.eq(TowerSettleDetail::getSettleId, settleId)
.set(TowerSettleDetail::getDeleted, 1);
towerSettleDetailService.update(lambdaUpdateWrapper);
if (towerSettleDetailService.saveBatch(list)) {
setSettleAmount(settleId);
return success("添加成功");
}
return fail("添加失败");
@ -128,6 +147,31 @@ public class TowerSettleDetailController extends BaseController {
return fail("修改失败");
}
private void setSettleAmount(Integer settleId) {
List<TowerSettleDetail> list = towerSettleDetailService.list(
new LambdaQueryWrapper<TowerSettleDetail>().eq(TowerSettleDetail::getSettleId, settleId)
);
BigDecimal totalSettleAmount = BigDecimal.valueOf(0);
for (TowerSettleDetail towerSettleDetail : list) {
if (towerSettleDetail.getType().equals(0) || towerSettleDetail.getType().equals(2)) {
BigDecimal monthAmount = towerSettleDetail.getMonthAmount().multiply(BigDecimal.valueOf(towerSettleDetail.getMonth()));
BigDecimal dayAmount = towerSettleDetail.getDailyAmount().multiply(BigDecimal.valueOf(towerSettleDetail.getDay()));
totalSettleAmount = totalSettleAmount.add(monthAmount).add(dayAmount).multiply(towerSettleDetail.getPayRate().divide(BigDecimal.valueOf(100), RoundingMode.FLOOR));
} else if (towerSettleDetail.getType().equals(1) || towerSettleDetail.getType().equals(3)) {
BigDecimal amount = towerSettleDetail.getSingleAmount().multiply(BigDecimal.valueOf(towerSettleDetail.getNum()));
totalSettleAmount = totalSettleAmount.add(amount).divide(BigDecimal.valueOf(100), RoundingMode.FLOOR);
} else if (towerSettleDetail.getType().equals(4)) {
BigDecimal amount = towerSettleDetail.getSingleAmount().multiply(BigDecimal.valueOf(towerSettleDetail.getNum()));
totalSettleAmount = totalSettleAmount.subtract(amount).divide(BigDecimal.valueOf(100), RoundingMode.FLOOR);
}
}
TowerSettle towerSettle = towerSettleService.getByIdRel(list.get(0).getSettleId());
TowerContract contract = towerContractService.getById(towerSettle.getContractId());
contract.setTotalSettleAmount(totalSettleAmount);
System.out.println("totalSettleAmount: " + totalSettleAmount);
towerContractService.updateById(contract);
}
@PreAuthorize("hasAuthority('tower:towerSettle:remove')")
@OperationLog
@ApiOperation("批量删除合同结算详情")

7
src/main/java/com/gxwebsoft/tower/entity/TowerAccessory.java

@ -56,6 +56,9 @@ public class TowerAccessory implements Serializable {
@ApiModelProperty(value = "重量")
private String accessoryWeight;
@ApiModelProperty(value = "数量")
private Integer accessoryNum;
@ApiModelProperty(value = "库存总量")
private Integer accessoryStock;
@ -78,6 +81,10 @@ public class TowerAccessory implements Serializable {
@JsonFormat(pattern = "yyyy-MM-dd")
private Date factoryDate;
@ApiModelProperty(value = "购买日期")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date buyDate;
@ApiModelProperty(value = "报废日期")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date scrapDate;

17
src/main/java/com/gxwebsoft/tower/entity/TowerContract.java

@ -44,6 +44,9 @@ public class TowerContract implements Serializable {
@ApiModelProperty(value = "业务负责人")
private String customerContact;
@ApiModelProperty(value = "备案编号")
private String filingNo;
@ApiModelProperty(value = "合同编号")
private String contactNumber;
@ -94,6 +97,9 @@ public class TowerContract implements Serializable {
@ApiModelProperty(value = "累计收款金额")
private BigDecimal totalIncomeAmount;
@ApiModelProperty(value = "累计结算金额")
private BigDecimal totalSettleAmount;
@ApiModelProperty(value = "租户id")
private Integer tenantId;
@ -103,6 +109,15 @@ public class TowerContract implements Serializable {
@ApiModelProperty(value = "修改时间")
private LocalDateTime updateTime;
@ApiModelProperty(value = "修改时间")
private String remark;
@ApiModelProperty(value = "文件列表")
private String fileList;
@ApiModelProperty(value = "支付比例")
private BigDecimal payRate;
@TableField(exist = false)
private String projectName;
@ -111,4 +126,6 @@ public class TowerContract implements Serializable {
@TableField(exist = false)
private String customerName;
}

11
src/main/java/com/gxwebsoft/tower/entity/TowerContractSettleEquipment.java

@ -2,6 +2,7 @@ package com.gxwebsoft.tower.entity;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableLogic;
@ -58,6 +59,12 @@ public class TowerContractSettleEquipment implements Serializable {
@ApiModelProperty(value = "其他费用")
private BigDecimal otherAmount;
@ApiModelProperty(value = "其他费用计算模式(0每月1一次性)")
private Integer otherAmountCalMode;
@ApiModelProperty(value = "预埋费")
private BigDecimal preBuryAmount;
private String remark;
@ApiModelProperty(value = "所有人")
@ -76,4 +83,8 @@ public class TowerContractSettleEquipment implements Serializable {
@ApiModelProperty(value = "修改时间")
private LocalDateTime updateTime;
@ApiModelProperty(value = "累计应收金额/预计产值")
@TableField(exist = false)
private BigDecimal totalReceivableAmount;
}

17
src/main/java/com/gxwebsoft/tower/entity/TowerEquipment.java

@ -12,6 +12,7 @@ import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* 塔吊设备管理
@ -165,4 +166,20 @@ public class TowerEquipment implements Serializable {
@ApiModelProperty(value = "修改时间")
private Date updateTime;
@ApiModelProperty(value = "历史所在项目列表")
@TableField(exist = false)
private List<TowerProject> projectList;
@ApiModelProperty(value = "所在项目名")
@TableField(exist = false)
private String projectName;
@ApiModelProperty(value = "定检状态")
@TableField(exist = false)
private String securityStatus;
@ApiModelProperty(value = "主管部门")
@TableField(exist = false)
private String competentDepartment;
}

3
src/main/java/com/gxwebsoft/tower/entity/TowerFall.java

@ -51,6 +51,9 @@ public class TowerFall implements Serializable {
@ApiModelProperty(value = "报废日期")
private Date discardDate;
@ApiModelProperty(value = "检测日期")
private String checkDate;
@ApiModelProperty(value = "出厂检测报告")
private String file1;

3
src/main/java/com/gxwebsoft/tower/entity/TowerIncome.java

@ -44,6 +44,9 @@ public class TowerIncome implements Serializable {
@ApiModelProperty(value = "收款单位")
private Integer incomeCompanyId;
@ApiModelProperty(value = "付款单位")
private Integer payCompanyId;
@ApiModelProperty(value = "收款金额")
private BigDecimal amount;

36
src/main/java/com/gxwebsoft/tower/entity/TowerProject.java

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.gxwebsoft.common.system.entity.User;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -11,6 +12,7 @@ import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
import java.util.Map;
import java.util.Set;
/**
@ -38,12 +40,21 @@ public class TowerProject implements Serializable {
@ApiModelProperty(value = "租赁单位")
private String companyName;
@ApiModelProperty(value = "租赁单位")
private Integer companyId;
@ApiModelProperty(value = "承租单位")
private String customerName;
@ApiModelProperty(value = "承租单位")
private Integer customerId;
@ApiModelProperty(value = "项目地址")
private String projectRegion;
@ApiModelProperty(value = "项目所在地")
private String projectCity;
@ApiModelProperty(value = "详细地址")
private String projectAddress;
@ -77,6 +88,9 @@ public class TowerProject implements Serializable {
@ApiModelProperty(value = "项目负责人")
private String director;
@TableField(exist = false)
private User directorUser;
@ApiModelProperty(value = "项目经理")
private String projectDirector;
@ -86,6 +100,9 @@ public class TowerProject implements Serializable {
@ApiModelProperty(value = "业务员")
private String salesman;
@ApiModelProperty(value = "标地列表")
private String placeList;
@ApiModelProperty(value = "状态, 0待发布, 1已发布")
private Integer status;
@ -127,4 +144,23 @@ public class TowerProject implements Serializable {
@TableField(exist = false)
private Set<TowerProjectPlace> places2;
@ApiModelProperty(value = "是否已有安装单派单")
@TableField(exist = false)
private boolean hasSetUpWorksheet;
@ApiModelProperty(value = "派单类型")
@TableField(exist = false)
private Integer worksheetType;
@ApiModelProperty(value = "派单设备类型")
@TableField(exist = false)
private Integer worksheetEquipType;
@ApiModelProperty(value = "各派单类型数量")
@TableField(exist = false)
private Map<Integer, Integer> worksheetWorkTypeNumList;
@ApiModelProperty(value = "关联设备数")
@TableField(exist = false)
private Integer equipmentNum;
}

22
src/main/java/com/gxwebsoft/tower/entity/TowerProjectOrder.java

@ -36,12 +36,21 @@ public class TowerProjectOrder implements Serializable {
@ApiModelProperty(value = "项目ID")
private Integer projectId;
@ApiModelProperty(value = "设备Id")
private Integer equipmentId;
@ApiModelProperty(value = "设备名称")
private String equipmentName;
@ApiModelProperty(value = "规格型号")
private String equipmentModel;
@ApiModelProperty(value = "备案编号")
private String filingNo;
@ApiModelProperty(value = "出厂编号")
private String factoryNo;
@ApiModelProperty(value = "签订数量")
private Integer equipmentNum;
@ -84,4 +93,17 @@ public class TowerProjectOrder implements Serializable {
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "定检状态")
private String securityStatus;
@ApiModelProperty(value = "制造厂商")
@TableField(exist = false)
private String manufactor;
@ApiModelProperty(value = "报废日期")
@TableField(exist = false)
@JsonFormat(pattern = "yyyy-MM-dd")
private Date scrapDate;
}

6
src/main/java/com/gxwebsoft/tower/entity/TowerProjectUser.java

@ -3,6 +3,7 @@ package com.gxwebsoft.tower.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.gxwebsoft.common.system.entity.User;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -69,4 +70,9 @@ public class TowerProjectUser implements Serializable {
@TableField(exist = false)
private String organizationName;
@TableField(exist = false)
private User user;
}

18
src/main/java/com/gxwebsoft/tower/entity/TowerSettleDetail.java

@ -53,6 +53,15 @@ public class TowerSettleDetail implements Serializable {
@ApiModelProperty(value = "月租金/月工资")
private BigDecimal monthAmount;
@ApiModelProperty(value = "日租金")
private BigDecimal dailyAmount;
@ApiModelProperty(value = "多少月")
private Integer month;
@ApiModelProperty(value = "多少日")
private Integer day;
@ApiModelProperty(value = "税率")
private BigDecimal taxRate;
@ -78,10 +87,19 @@ public class TowerSettleDetail implements Serializable {
@ApiModelProperty(value = "租户id")
private Integer tenantId;
@ApiModelProperty(value = "支付比例")
private BigDecimal payRate;
@ApiModelProperty(value = "创建时间")
private LocalDateTime createTime;
@ApiModelProperty(value = "修改时间")
private LocalDateTime updateTime;
@ApiModelProperty(value = "进场时间")
private LocalDateTime inDate;
@ApiModelProperty(value = "退场时间")
private LocalDateTime outDate;
}

11
src/main/java/com/gxwebsoft/tower/mapper/xml/TowerContractMapper.xml

@ -4,8 +4,14 @@
<!-- 关联查询sql -->
<sql id="selectSql">
SELECT a.*
SELECT a.*,
b.project_name,
c.name AS customer_name,
d.company_name
FROM tower_contract a
LEFT JOIN tower_project b ON a.project_id = b.project_id
LEFT JOIN tower_customer c ON a.customer_id = c.customer_id
LEFT JOIN sys_company d ON a.company_id = d.company_id
<where>
<if test="param.contractId != null">
AND a.contract_id = #{param.contractId}
@ -19,6 +25,9 @@
<if test="param.customerId != null">
AND a.customer_id = #{param.customerId}
</if>
<if test="param.keywords != null">
AND (a.contact_number LIKE CONCAT('%', #{param.keywords}, '%') OR b.project_name LIKE CONCAT('%', #{param.keywords}, '%'))
</if>
<if test="param.customerContact != null">
AND a.customer_contact LIKE CONCAT('%', #{param.customerContact}, '%')
</if>

9
src/main/java/com/gxwebsoft/tower/mapper/xml/TowerCustomerMapper.xml

@ -55,6 +55,15 @@
<if test="param.createTimeEnd != null">
AND a.create_time &lt;= #{param.createTimeEnd}
</if>
<if test="param.keywords != null">
AND (
a.name LIKE CONCAT('%', #{param.keywords}, '%')
OR a.full_name LIKE CONCAT('%', #{param.keywords}, '%')
OR a.credit_code LIKE CONCAT('%', #{param.keywords}, '%')
OR a.address LIKE CONCAT('%', #{param.keywords}, '%')
OR a.contact LIKE CONCAT('%', #{param.keywords}, '%')
)
</if>
</where>
</sql>

5
src/main/java/com/gxwebsoft/tower/mapper/xml/TowerEquipmentMapper.xml

@ -91,12 +91,17 @@
<if test="param.createTimeEnd != null">
AND a.create_time &lt;= #{param.createTimeEnd}
</if>
<if test="param.equipmentIdList != null">
AND a.equipment_id IN (#{param.equipmentIdList})
</if>
<if test="param.keywords != null">
AND (
a.name LIKE CONCAT('%', #{param.keywords}, '%')
OR a.model LIKE CONCAT('%', #{param.keywords}, '%')
OR a.equipment_no LIKE CONCAT('%', #{param.keywords}, '%')
OR a.company LIKE CONCAT('%', #{param.keywords}, '%')
OR a.filing_no LIKE CONCAT('%', #{param.keywords}, '%')
OR a.factory_no LIKE CONCAT('%', #{param.keywords}, '%')
)
</if>
</where>

3
src/main/java/com/gxwebsoft/tower/mapper/xml/TowerProjectMapper.xml

@ -88,6 +88,9 @@
<if test="param.createTimeEnd != null">
AND a.create_time &lt;= #{param.createTimeEnd}
</if>
<if test="param.keywords != null">
AND ( a.project_name LIKE CONCAT('%', #{param.keywords}, '%') )
</if>
</where>
</sql>

2
src/main/java/com/gxwebsoft/tower/mapper/xml/TowerProjectUserMapper.xml

@ -9,6 +9,7 @@
LEFT JOIN sys_user b ON a.user_id = b.user_id
LEFT JOIN sys_organization c ON b.organization_id = c.organization_id
<where>
AND a.user_id != 0
<if test="param.id != null">
AND a.id = #{param.id}
</if>
@ -38,6 +39,7 @@
)
</if>
</where>
GROUP BY a.user_id
</sql>
<!-- 分页查询 -->

20
src/main/java/com/gxwebsoft/tower/param/TowerEquipmentParam.java

@ -1,5 +1,6 @@
package com.gxwebsoft.tower.param;
import com.baomidou.mybatisplus.annotation.TableField;
import com.gxwebsoft.common.core.annotation.QueryField;
import com.gxwebsoft.common.core.annotation.QueryType;
import com.gxwebsoft.common.core.web.BaseParam;
@ -9,6 +10,8 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
/**
* 塔吊设备管理查询参数
*
@ -107,4 +110,21 @@ public class TowerEquipmentParam extends BaseParam {
@QueryField(type = QueryType.EQ)
private Integer deleted;
@ApiModelProperty(value = "是否仅显示未绑定项目设备")
@TableField(exist = false)
private Boolean idleOnly;
@ApiModelProperty(value = "是否仅显示未绑定项目设备")
@TableField(exist = false)
private List<String> notInFilingNoList;
@TableField(exist = false)
private List<Integer> equipmentIdList;
@TableField(exist = false)
private String keywords;
@TableField(exist = false)
private Integer yearFilter;
}

17
src/main/java/com/gxwebsoft/tower/param/TowerProjectParam.java

@ -125,4 +125,21 @@ public class TowerProjectParam extends BaseParam {
@TableField(exist = false)
private Set<TowerProjectPlace> places2;
@ApiModelProperty(value = "派单类型")
@TableField(exist = false)
private Integer worksheetType;
@ApiModelProperty(value = "派单设备类型")
@TableField(exist = false)
private Integer worksheetEquipType;
@ApiModelProperty(value = "派单作业类型")
@TableField(exist = false)
private Integer worksheetWortType;
@ApiModelProperty("搜索关键字")
@TableField(exist = false)
private String keywords;
}

6
src/main/resources/application-dev.yml

@ -19,5 +19,7 @@ logging:
# 框架配置
config:
# 开发环境接口
server-url: http://127.0.0.1:9090/api
upload-path: /Users/gxwebsoft/Documents/uploads/
server-url: http://localhost:10041/api
upload-path: /Users/liangxin/Project/JAVA/tower-java
file-server: http://localhost:10041

9
src/main/resources/application-prod.yml

@ -3,7 +3,7 @@
# 数据源配置
spring:
datasource:
url: jdbc:mysql://42.194.212.185:3308/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
url: jdbc:mysql://127.0.0.1:3318/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
username: tower
password: FXFZrhHbs3pma6Zh
driver-class-name: com.mysql.cj.jdbc.Driver
@ -20,7 +20,8 @@ logging:
# 框架配置
config:
# 生产环境接口
server-url: http://1.14.159.185:10040
upload-path: /www/wwwroot/file.ws/
# 开发环境接口
server-url: https://tower.gxwebsoft.com/api
upload-path: /www/wwwroot/api.tower.gxwebsoft.com/
file-server: https://tower.gxwebsoft.com

13
src/main/resources/application.yml

@ -5,7 +5,8 @@ server:
# 多环境配置
spring:
profiles:
active: dev
# active: dev
active: prod
application:
name: server
@ -86,7 +87,13 @@ config:
swagger-version: 1.0
token-key: WLgNsWJ8rPjRtnjzX/Gx2RGS80Kwnm/ZeLbvIL+NrBs=
server-url: https://server.gxwebsoft.com/api
file-server: https://file.wsdns.cn
upload-path: /Users/gxwebsoft/Documents/uploads/
file-server: http://localhost:10041
upload-path: /Users/liangxin/Project/JAVA/tower-java/
local-upload-path: /Users/gxwebsoft/Documents/uploads/
wx:
miniapp:
configs:
- appid: wx74f04ad0cdb862ef
secret: 4b31d6be04439f1b56042d9bfabd62d6
msgDataFormat: JSON

10
src/test/java/com/gxwebsoft/generator/TowerGenerator.java

@ -58,7 +58,15 @@ public class TowerGenerator {
// "tower_income",
// "tower_income_equipment",
// "tower_contract_final_settle",
"tower_contract_final_settle_lost",
// "tower_contract_final_settle_lost",
// "tower_worksheet",
// "tower_worksheet_check",
// "tower_worksheet_detail",
// "tower_worksheet_parts",
// "tower_worksheet_set_up",
// "tower_worksheet_audit",
// "tower_worksheet_car_dispatch",
"tower_project_building",
};
// 需要去除的表前缀
private static final String[] TABLE_PREFIX = new String[]{

373
websoft-api.log

@ -1,357 +1,16 @@
2023-02-26 07:33:25.706 WARN 55396 --- [restartedMain] com.alibaba.druid.pool.DruidDataSource : removeAbandoned is true, not use in production.
2023-02-26 07:33:31.283 WARN 55396 --- [restartedMain] o.s.b.d.a.OptionalLiveReloadServer : Unable to start LiveReload server
2023-02-26 07:34:00.595 ERROR 55396 --- [http-nio-9090-exec-8] c.g.c.c.e.GlobalExceptionHandler : java.io.FileNotFoundException: File '/www/wwwroot/file.ws/file/20230101/c62f937d8a304d0d9199315c252da868.crt' does not exist
com.alipay.api.AlipayApiException: java.io.FileNotFoundException: File '/www/wwwroot/file.ws/file/20230101/c62f937d8a304d0d9199315c252da868.crt' does not exist
at com.alipay.api.AbstractAlipayClient.readFileToString(AbstractAlipayClient.java:178) ~[alipay-sdk-java-4.35.0.ALL.jar:na]
at com.alipay.api.AbstractAlipayClient.<init>(AbstractAlipayClient.java:127) ~[alipay-sdk-java-4.35.0.ALL.jar:na]
at com.alipay.api.DefaultAlipayClient.<init>(DefaultAlipayClient.java:117) ~[alipay-sdk-java-4.35.0.ALL.jar:na]
at com.gxwebsoft.common.core.utils.AlipayConfigUtil.alipayClient(AlipayConfigUtil.java:56) ~[classes/:na]
at com.gxwebsoft.common.system.controller.LoginAlipayController.getAuthCode(LoginAlipayController.java:133) ~[classes/:na]
at com.gxwebsoft.common.system.controller.LoginAlipayController$$FastClassBySpringCGLIB$$cdae2167.invoke(<generated>) ~[classes/:na]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.9.jar:5.3.9]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) ~[spring-aop-5.3.9.jar:5.3.9]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.9.jar:5.3.9]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9]
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-5.3.9.jar:5.3.9]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.9.jar:5.3.9]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) ~[spring-aop-5.3.9.jar:5.3.9]
at com.gxwebsoft.common.system.controller.LoginAlipayController$$EnhancerBySpringCGLIB$$f52e9ce6.getAuthCode(<generated>) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_322]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_322]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_322]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_322]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) ~[spring-web-5.3.9.jar:5.3.9]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) ~[spring-web-5.3.9.jar:5.3.9]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.9.jar:5.3.9]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.9.jar:5.3.9]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.9.jar:5.3.9]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.9.jar:5.3.9]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1064) ~[spring-webmvc-5.3.9.jar:5.3.9]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.9.jar:5.3.9]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) [spring-webmvc-5.3.9.jar:5.3.9]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) [spring-webmvc-5.3.9.jar:5.3.9]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:681) [tomcat-embed-core-9.0.52.jar:4.0.FR]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) [spring-webmvc-5.3.9.jar:5.3.9]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) [tomcat-embed-core-9.0.52.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) [tomcat-embed-websocket-9.0.52.jar:9.0.52]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113) [spring-web-5.3.9.jar:5.3.9]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at com.gxwebsoft.common.core.security.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:82) [classes/:na]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) [spring-web-5.3.9.jar:5.3.9]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) [spring-web-5.3.9.jar:5.3.9]
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) [spring-web-5.3.9.jar:5.3.9]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) [spring-web-5.3.9.jar:5.3.9]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) [spring-web-5.3.9.jar:5.3.9]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) [spring-web-5.3.9.jar:5.3.9]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1726) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.52.jar:9.0.52]
at java.lang.Thread.run(Thread.java:750) [na:1.8.0_322]
Caused by: java.io.FileNotFoundException: File '/www/wwwroot/file.ws/file/20230101/c62f937d8a304d0d9199315c252da868.crt' does not exist
at com.alipay.api.internal.util.file.FileUtils.openInputStream(FileUtils.java:66) ~[alipay-sdk-java-4.35.0.ALL.jar:na]
at com.alipay.api.internal.util.file.FileUtils.readFileToString(FileUtils.java:34) ~[alipay-sdk-java-4.35.0.ALL.jar:na]
at com.alipay.api.internal.util.file.FileUtils.readFileToString(FileUtils.java:19) ~[alipay-sdk-java-4.35.0.ALL.jar:na]
at com.alipay.api.AbstractAlipayClient.readFileToString(AbstractAlipayClient.java:176) ~[alipay-sdk-java-4.35.0.ALL.jar:na]
... 105 common frames omitted
2023-02-26 07:34:00.597 WARN 55396 --- [http-nio-9090-exec-8] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [com.alipay.api.AlipayApiException: java.io.FileNotFoundException: File '/www/wwwroot/file.ws/file/20230101/c62f937d8a304d0d9199315c252da868.crt' does not exist]
2023-02-26 07:35:51.863 WARN 55429 --- [restartedMain] com.alibaba.druid.pool.DruidDataSource : removeAbandoned is true, not use in production.
2023-02-26 07:35:57.325 WARN 55429 --- [restartedMain] o.s.b.d.a.OptionalLiveReloadServer : Unable to start LiveReload server
2023-02-26 07:36:14.618 ERROR 55429 --- [http-nio-9090-exec-1] c.g.c.c.e.GlobalExceptionHandler : java.io.FileNotFoundException: File '/www/wwwroot/file.ws/file/20230101/c62f937d8a304d0d9199315c252da868.crt' does not exist
com.alipay.api.AlipayApiException: java.io.FileNotFoundException: File '/www/wwwroot/file.ws/file/20230101/c62f937d8a304d0d9199315c252da868.crt' does not exist
at com.alipay.api.AbstractAlipayClient.readFileToString(AbstractAlipayClient.java:178) ~[alipay-sdk-java-4.35.0.ALL.jar:na]
at com.alipay.api.AbstractAlipayClient.<init>(AbstractAlipayClient.java:127) ~[alipay-sdk-java-4.35.0.ALL.jar:na]
at com.alipay.api.DefaultAlipayClient.<init>(DefaultAlipayClient.java:117) ~[alipay-sdk-java-4.35.0.ALL.jar:na]
at com.gxwebsoft.common.core.utils.AlipayConfigUtil.alipayClient(AlipayConfigUtil.java:62) ~[classes/:na]
at com.gxwebsoft.common.system.controller.LoginAlipayController.getAuthCode(LoginAlipayController.java:133) ~[classes/:na]
at com.gxwebsoft.common.system.controller.LoginAlipayController$$FastClassBySpringCGLIB$$cdae2167.invoke(<generated>) ~[classes/:na]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.9.jar:5.3.9]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) ~[spring-aop-5.3.9.jar:5.3.9]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.9.jar:5.3.9]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9]
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-5.3.9.jar:5.3.9]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.9.jar:5.3.9]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) ~[spring-aop-5.3.9.jar:5.3.9]
at com.gxwebsoft.common.system.controller.LoginAlipayController$$EnhancerBySpringCGLIB$$a4162105.getAuthCode(<generated>) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_322]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_322]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_322]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_322]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) ~[spring-web-5.3.9.jar:5.3.9]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) ~[spring-web-5.3.9.jar:5.3.9]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.9.jar:5.3.9]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.9.jar:5.3.9]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.9.jar:5.3.9]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.9.jar:5.3.9]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1064) ~[spring-webmvc-5.3.9.jar:5.3.9]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.9.jar:5.3.9]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) [spring-webmvc-5.3.9.jar:5.3.9]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) [spring-webmvc-5.3.9.jar:5.3.9]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:681) [tomcat-embed-core-9.0.52.jar:4.0.FR]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) [spring-webmvc-5.3.9.jar:5.3.9]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) [tomcat-embed-core-9.0.52.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) [tomcat-embed-websocket-9.0.52.jar:9.0.52]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113) [spring-web-5.3.9.jar:5.3.9]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at com.gxwebsoft.common.core.security.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:82) [classes/:na]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) [spring-web-5.3.9.jar:5.3.9]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) [spring-web-5.3.9.jar:5.3.9]
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) [spring-web-5.3.9.jar:5.3.9]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) [spring-web-5.3.9.jar:5.3.9]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) [spring-web-5.3.9.jar:5.3.9]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) [spring-web-5.3.9.jar:5.3.9]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1726) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.52.jar:9.0.52]
at java.lang.Thread.run(Thread.java:750) [na:1.8.0_322]
Caused by: java.io.FileNotFoundException: File '/www/wwwroot/file.ws/file/20230101/c62f937d8a304d0d9199315c252da868.crt' does not exist
at com.alipay.api.internal.util.file.FileUtils.openInputStream(FileUtils.java:66) ~[alipay-sdk-java-4.35.0.ALL.jar:na]
at com.alipay.api.internal.util.file.FileUtils.readFileToString(FileUtils.java:34) ~[alipay-sdk-java-4.35.0.ALL.jar:na]
at com.alipay.api.internal.util.file.FileUtils.readFileToString(FileUtils.java:19) ~[alipay-sdk-java-4.35.0.ALL.jar:na]
at com.alipay.api.AbstractAlipayClient.readFileToString(AbstractAlipayClient.java:176) ~[alipay-sdk-java-4.35.0.ALL.jar:na]
... 105 common frames omitted
2023-02-26 07:36:14.635 WARN 55429 --- [http-nio-9090-exec-1] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [com.alipay.api.AlipayApiException: java.io.FileNotFoundException: File '/www/wwwroot/file.ws/file/20230101/c62f937d8a304d0d9199315c252da868.crt' does not exist]
2023-02-26 07:39:18.143 WARN 55455 --- [restartedMain] com.alibaba.druid.pool.DruidDataSource : removeAbandoned is true, not use in production.
2023-02-26 07:39:23.633 WARN 55455 --- [restartedMain] o.s.b.d.a.OptionalLiveReloadServer : Unable to start LiveReload server
2023-02-26 07:39:32.489 ERROR 55455 --- [http-nio-9090-exec-1] c.g.c.c.e.GlobalExceptionHandler : java.io.FileNotFoundException: File '/www/wwwroot/file.ws/file/20230101/c62f937d8a304d0d9199315c252da868.crt' does not exist
com.alipay.api.AlipayApiException: java.io.FileNotFoundException: File '/www/wwwroot/file.ws/file/20230101/c62f937d8a304d0d9199315c252da868.crt' does not exist
at com.alipay.api.AbstractAlipayClient.readFileToString(AbstractAlipayClient.java:178) ~[alipay-sdk-java-4.35.0.ALL.jar:na]
at com.alipay.api.AbstractAlipayClient.<init>(AbstractAlipayClient.java:127) ~[alipay-sdk-java-4.35.0.ALL.jar:na]
at com.alipay.api.DefaultAlipayClient.<init>(DefaultAlipayClient.java:117) ~[alipay-sdk-java-4.35.0.ALL.jar:na]
at com.gxwebsoft.common.core.utils.AlipayConfigUtil.alipayClient(AlipayConfigUtil.java:62) ~[classes/:na]
at com.gxwebsoft.common.system.controller.LoginAlipayController.getAuthCode(LoginAlipayController.java:133) ~[classes/:na]
at com.gxwebsoft.common.system.controller.LoginAlipayController$$FastClassBySpringCGLIB$$cdae2167.invoke(<generated>) ~[classes/:na]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.9.jar:5.3.9]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) ~[spring-aop-5.3.9.jar:5.3.9]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.9.jar:5.3.9]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9]
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-5.3.9.jar:5.3.9]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.9.jar:5.3.9]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) ~[spring-aop-5.3.9.jar:5.3.9]
at com.gxwebsoft.common.system.controller.LoginAlipayController$$EnhancerBySpringCGLIB$$1cf4b09f.getAuthCode(<generated>) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_322]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_322]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_322]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_322]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) ~[spring-web-5.3.9.jar:5.3.9]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) ~[spring-web-5.3.9.jar:5.3.9]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.9.jar:5.3.9]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.9.jar:5.3.9]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.9.jar:5.3.9]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.9.jar:5.3.9]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1064) ~[spring-webmvc-5.3.9.jar:5.3.9]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.9.jar:5.3.9]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) [spring-webmvc-5.3.9.jar:5.3.9]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) [spring-webmvc-5.3.9.jar:5.3.9]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:681) [tomcat-embed-core-9.0.52.jar:4.0.FR]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) [spring-webmvc-5.3.9.jar:5.3.9]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) [tomcat-embed-core-9.0.52.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) [tomcat-embed-websocket-9.0.52.jar:9.0.52]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113) [spring-web-5.3.9.jar:5.3.9]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at com.gxwebsoft.common.core.security.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:82) [classes/:na]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) [spring-web-5.3.9.jar:5.3.9]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) [spring-security-web-5.5.2.jar:5.5.2]
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) [spring-web-5.3.9.jar:5.3.9]
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) [spring-web-5.3.9.jar:5.3.9]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) [spring-web-5.3.9.jar:5.3.9]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) [spring-web-5.3.9.jar:5.3.9]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) [spring-web-5.3.9.jar:5.3.9]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1726) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) [tomcat-embed-core-9.0.52.jar:9.0.52]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.52.jar:9.0.52]
at java.lang.Thread.run(Thread.java:750) [na:1.8.0_322]
Caused by: java.io.FileNotFoundException: File '/www/wwwroot/file.ws/file/20230101/c62f937d8a304d0d9199315c252da868.crt' does not exist
at com.alipay.api.internal.util.file.FileUtils.openInputStream(FileUtils.java:66) ~[alipay-sdk-java-4.35.0.ALL.jar:na]
at com.alipay.api.internal.util.file.FileUtils.readFileToString(FileUtils.java:34) ~[alipay-sdk-java-4.35.0.ALL.jar:na]
at com.alipay.api.internal.util.file.FileUtils.readFileToString(FileUtils.java:19) ~[alipay-sdk-java-4.35.0.ALL.jar:na]
at com.alipay.api.AbstractAlipayClient.readFileToString(AbstractAlipayClient.java:176) ~[alipay-sdk-java-4.35.0.ALL.jar:na]
... 105 common frames omitted
2023-02-26 07:39:32.505 WARN 55455 --- [http-nio-9090-exec-1] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [com.alipay.api.AlipayApiException: java.io.FileNotFoundException: File '/www/wwwroot/file.ws/file/20230101/c62f937d8a304d0d9199315c252da868.crt' does not exist]
2024-01-24 17:06:22.617 WARN 21561 --- [restartedMain] com.alibaba.druid.pool.DruidDataSource : removeAbandoned is true, not use in production.
2024-01-24 17:08:48.354 WARN 21561 --- [http-nio-10041-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://42.194.212.185:3308/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 79374
2024-01-24 17:08:48.383 WARN 21561 --- [http-nio-10041-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://42.194.212.185:3308/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 79853
2024-01-24 17:08:48.410 WARN 21561 --- [http-nio-10041-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://42.194.212.185:3308/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 144908
2024-01-24 17:08:48.437 WARN 21561 --- [http-nio-10041-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://42.194.212.185:3308/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 145248
2024-01-24 17:08:48.462 WARN 21561 --- [http-nio-10041-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://42.194.212.185:3308/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 145591
2024-01-24 17:13:14.173 WARN 21561 --- [http-nio-10041-exec-2] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://42.194.212.185:3308/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 82853
2024-01-24 17:13:14.214 WARN 21561 --- [http-nio-10041-exec-2] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://42.194.212.185:3308/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 113691
2024-01-24 17:17:04.843 WARN 21561 --- [http-nio-10041-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://42.194.212.185:3308/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 199004
2024-01-24 17:17:04.867 WARN 21561 --- [http-nio-10041-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://42.194.212.185:3308/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 199350
2024-01-24 17:20:08.704 WARN 21561 --- [http-nio-10041-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://42.194.212.185:3308/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 162243
2024-01-24 17:20:08.706 WARN 21561 --- [http-nio-10041-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://42.194.212.185:3308/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 161954
2024-01-24 17:31:54.903 WARN 21561 --- [http-nio-10041-exec-3] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://42.194.212.185:3308/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 198209
2024-01-24 17:31:54.929 WARN 21561 --- [http-nio-10041-exec-3] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://42.194.212.185:3308/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 202974
2024-01-24 17:31:54.955 WARN 21561 --- [http-nio-10041-exec-3] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://42.194.212.185:3308/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 203177
2024-01-24 17:34:23.401 WARN 23077 --- [main] com.alibaba.druid.pool.DruidDataSource : removeAbandoned is true, not use in production.

Loading…
Cancel
Save