申请开票

master
liuqingkun 1 year ago
parent 032ba98382
commit 2b31ce1b41
  1. 96
      src/main/java/org/springblade/modules/business/contraller/InvoiceApplyController.java
  2. 12
      src/main/java/org/springblade/modules/business/contraller/MaintenanceController.java
  3. 59
      src/main/java/org/springblade/modules/business/contraller/WorkBenchesController.java
  4. 1
      src/main/java/org/springblade/modules/business/contraller/WorkOrderController.java
  5. 43
      src/main/java/org/springblade/modules/business/enums/InvoiceEnum.java
  6. 16
      src/main/java/org/springblade/modules/business/mapper/InvoiceApplyDetailMapper.java
  7. 25
      src/main/java/org/springblade/modules/business/mapper/InvoiceApplyMapper.java
  8. 26
      src/main/java/org/springblade/modules/business/mapper/InvoiceApplyMapper.xml
  9. 20
      src/main/java/org/springblade/modules/business/pojo/dto/InvoiceApplyDto.java
  10. 85
      src/main/java/org/springblade/modules/business/pojo/entity/InvoiceApply.java
  11. 38
      src/main/java/org/springblade/modules/business/pojo/entity/InvoiceApplyDetail.java
  12. 14
      src/main/java/org/springblade/modules/business/service/IInvoiceApplyDetailService.java
  13. 40
      src/main/java/org/springblade/modules/business/service/IInvoiceApplyService.java
  14. 21
      src/main/java/org/springblade/modules/business/service/impl/InvoiceApplyDetailServiceImpl.java
  15. 105
      src/main/java/org/springblade/modules/business/service/impl/InvoiceApplyServiceImpl.java
  16. 2
      src/main/java/org/springblade/modules/business/service/impl/WorkOrderServiceImpl.java
  17. 17
      src/main/java/org/springblade/modules/system/controller/LogApiController.java
  18. 6
      src/main/java/org/springblade/modules/system/mapper/LogApiMapper.java
  19. 26
      src/main/java/org/springblade/modules/system/mapper/LogApiMapper.xml
  20. 23
      src/main/java/org/springblade/modules/system/pojo/dto/LogDTO.java
  21. 23
      src/main/java/org/springblade/modules/system/pojo/vo/LogRecord.java
  22. 31
      src/main/java/org/springblade/modules/system/pojo/vo/LogVO.java
  23. 6
      src/main/java/org/springblade/modules/system/service/ILogApiService.java
  24. 106
      src/main/java/org/springblade/modules/system/service/impl/LogApiServiceImpl.java

@ -0,0 +1,96 @@
package org.springblade.modules.business.contraller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AllArgsConstructor;
import org.springblade.common.constant.CommonConstant;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springblade.modules.business.enums.InvoiceEnum;
import org.springblade.modules.business.pojo.dto.InvoiceApplyDto;
import org.springblade.modules.business.pojo.entity.InvoiceApply;
import org.springblade.modules.business.pojo.entity.InvoiceApplyDetail;
import org.springblade.modules.business.service.IInvoiceApplyDetailService;
import org.springblade.modules.business.service.IInvoiceApplyService;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 发票申请控制器
*
* @author liuqingkun
*/
@RestController
@AllArgsConstructor
@RequestMapping(CommonConstant.APPLICATION_PROJECT + "/invoice-apply")
@Tag(name = "发票申请控制器", description = "发票申请控制器")
public class InvoiceApplyController extends BladeController {
private final IInvoiceApplyService applyService;
private final IInvoiceApplyDetailService applyDetailService;
@GetMapping("/finish-work-list")
@Operation(summary = "列表", description = "列表")
public R finishWorkList() {
return R.data(applyService.finishWorkList());
}
@GetMapping("/page")
@Operation(summary = "列表", description = "列表")
public R<IPage<InvoiceApply>> page(InvoiceApply apply, Query query) {
LambdaQueryWrapper<InvoiceApply> wrapper = Wrappers.lambdaQuery(apply).orderByDesc(InvoiceApply::getCreateTime);
IPage<InvoiceApply> pages = this.applyService.page(Condition.getPage(query), wrapper);
return R.data(pages);
}
@GetMapping("/detail")
@Operation(summary = "明细", description = "明细")
public R detail(Long id) {
InvoiceApply apply = applyService.getById(id);
List<InvoiceApplyDetail> applyDetails = applyDetailService.list();
InvoiceApplyDto dto = InvoiceApplyDto.builder().apply(apply).detailList(applyDetails).build();
return R.data(dto);
}
@PostMapping("/save-submit")
@Operation(summary = "保存并提交", description = "保存并提交")
public R saveAndSubmit(@RequestBody InvoiceApplyDto dto) {
applyService.saveAndSubmit(dto);
return R.success();
}
@PostMapping("/delete")
@Operation(summary = "删除", description = "删除")
public R delete(@RequestParam String ids) {
return R.status(applyService.deleteLogic(Func.toLongList(ids)));
}
@PostMapping("/apply")
@Operation(summary = "申请", description = "申请")
public R apply(@RequestParam Long id) {
InvoiceApply applyOld = applyService.getById(id);
applyOld.setUpdateUser(AuthUtil.getUserId());
applyOld.setStatus(InvoiceEnum.INVOICE_STATUS_APPLY.getValue());
applyService.updateById(applyOld);
return R.success();
}
@PostMapping("/confirm")
@Operation(summary = "确认开票", description = "确认开票")
public R confirm(@RequestParam Long id) {
applyService.confirm(id);
return R.success();
}
}

@ -159,6 +159,7 @@ public class MaintenanceController extends BladeController {
// 若异常数量大于0, 更新巡检的维修状态 // 若异常数量大于0, 更新巡检的维修状态
MaintenanceTask taskOld = taskService.getById(taskDetailList.get(0).getTaskId()); MaintenanceTask taskOld = taskService.getById(taskDetailList.get(0).getTaskId());
taskOld.setRepairStatus(MaintenanceStatusEnum.REPAIR_SERVICEMAN_CREATE.getValue()); taskOld.setRepairStatus(MaintenanceStatusEnum.REPAIR_SERVICEMAN_CREATE.getValue());
taskService.updateById(taskOld);
} }
// 只更新设备状态 // 只更新设备状态
@ -197,6 +198,7 @@ public class MaintenanceController extends BladeController {
taskOld.setApproveResult(task.getApproveResult()); taskOld.setApproveResult(task.getApproveResult());
taskOld.setApproveRemark(task.getApproveRemark()); taskOld.setApproveRemark(task.getApproveRemark());
taskOld.setApproveTime(DateUtil.now()); taskOld.setApproveTime(DateUtil.now());
taskOld.setFinishTime(DateUtil.now());
taskOld.setTaskStatus(MaintenanceStatusEnum.TASK_SERVICEMAN_CONFIRM.getValue()); taskOld.setTaskStatus(MaintenanceStatusEnum.TASK_SERVICEMAN_CONFIRM.getValue());
taskService.updateById(taskOld); taskService.updateById(taskOld);
@ -287,7 +289,15 @@ public class MaintenanceController extends BladeController {
public R repairCustomerConfirmDetail(@RequestBody MaintenanceTaskDto taskDto) { public R repairCustomerConfirmDetail(@RequestBody MaintenanceTaskDto taskDto) {
MaintenanceTask task = taskDto.getTask(); MaintenanceTask task = taskDto.getTask();
MaintenanceTask taskOld = taskService.getById(task.getId()); MaintenanceTask taskOld = taskService.getById(task.getId());
taskOld.setRepairStatus(MaintenanceStatusEnum.REPAIR_CUSTOMER_CONFIRM.getValue());
// 获取详细中的异常项目数量
long count = taskDto.getDetailList().stream().filter(e -> CommonConstant.FALSE_INT.equals(e.getIsRepair())).count();
if (count == 0) {
// 确认维修数量 = 0, 更新巡检的维修状态为无需维修
taskOld.setRepairStatus(MaintenanceStatusEnum.REPAIR_NO.getValue());
} else {
taskOld.setRepairStatus(MaintenanceStatusEnum.REPAIR_CUSTOMER_CONFIRM.getValue());
}
taskService.updateById(taskOld); taskService.updateById(taskOld);
List<MaintenanceTaskDetail> detailList = taskDto.getDetailList(); List<MaintenanceTaskDetail> detailList = taskDto.getDetailList();

@ -1,13 +1,13 @@
package org.springblade.modules.business.contraller; package org.springblade.modules.business.contraller;
import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.springblade.common.cache.UserCache;
import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R; import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.CollectionUtil; import org.springblade.core.tool.utils.CollectionUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.modules.business.pojo.entity.Device; import org.springblade.modules.business.pojo.entity.Device;
import org.springblade.modules.business.pojo.entity.maintenance.MaintenancePlan; import org.springblade.modules.business.pojo.entity.maintenance.MaintenancePlan;
import org.springblade.modules.business.pojo.entity.maintenance.MaintenanceTask; import org.springblade.modules.business.pojo.entity.maintenance.MaintenanceTask;
@ -110,28 +110,39 @@ public class WorkBenchesController extends BladeController {
*/ */
@GetMapping("/upkeepStat") @GetMapping("/upkeepStat")
public R<Map<String, Object>> upkeepStat(@RequestParam String startTime, @RequestParam String endTime) throws ParseException { public R<Map<String, Object>> upkeepStat(@RequestParam String startTime, @RequestParam String endTime) throws ParseException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
List<String> xData = new ArrayList<>(); List<String> xData = new ArrayList<>();
xData.add("报送维修"); xData.add("报送维修");
xData.add("巡检维修"); xData.add("巡检维修");
map.put("xData", xData); map.put("xData", xData);
List<WorkOrder> workOrders = workOrderService.list(Wrappers.lambdaQuery(WorkOrder.class).between(StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime), WorkOrder::getCreateTime, format.parse(startTime), format.parse(endTime)));
List<MaintenanceTask> tasks = maintenanceTaskService.list(Wrappers.lambdaQuery(MaintenanceTask.class).between(StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime), MaintenanceTask::getCreateTime, format.parse(startTime), format.parse(endTime))); LambdaQueryWrapper<WorkOrder> orderWrappers = Wrappers.lambdaQuery(WorkOrder.class);
List<Integer> total = new ArrayList<>(); if (Func.isNotEmpty(startTime) && Func.isNotEmpty(endTime)) {
total.add(workOrders.size()); orderWrappers.between(WorkOrder::getCreateTime, format.parse(startTime), format.parse(endTime));
total.add(tasks.size()); }
map.put("total", total);
List<Long> completed = new ArrayList<>(); LambdaQueryWrapper<MaintenanceTask> taskWrappers = Wrappers.lambdaQuery(MaintenanceTask.class);
completed.add(workOrders.stream().filter(plan -> plan.getStatus() == 8).count()); if (Func.isNotEmpty(startTime) && Func.isNotEmpty(endTime)) {
completed.add(tasks.stream().filter(plan -> plan.getTaskStatus() == 4).count()); taskWrappers.between(MaintenanceTask::getCreateTime, format.parse(startTime), format.parse(endTime));
map.put("completed", completed); }
List<Long> unCompleted = new ArrayList<>();
unCompleted.add(workOrders.stream().filter(plan -> plan.getStatus() != 8).count()); List<WorkOrder> workOrders = workOrderService.list(orderWrappers);
unCompleted.add(tasks.stream().filter(plan -> plan.getTaskStatus() != 4).count()); List<MaintenanceTask> tasks = maintenanceTaskService.list(taskWrappers);
map.put("unCompleted", unCompleted); List<Integer> total = new ArrayList<>();
return R.data(map); total.add(workOrders.size());
} total.add(tasks.size());
map.put("total", total);
List<Long> completed = new ArrayList<>();
completed.add(workOrders.stream().filter(plan -> plan.getStatus() == 8).count());
completed.add(tasks.stream().filter(plan -> plan.getTaskStatus() == 4).count());
map.put("completed", completed);
List<Long> unCompleted = new ArrayList<>();
unCompleted.add(workOrders.stream().filter(plan -> plan.getStatus() != 8).count());
unCompleted.add(tasks.stream().filter(plan -> plan.getTaskStatus() != 4).count());
map.put("unCompleted", unCompleted);
return R.data(map);
}
/** /**
* 饼图数据 * 饼图数据

@ -331,6 +331,7 @@ public class WorkOrderController extends BladeController {
workOrderOld.setApproveResult(CommonConstant.TRUE_INT); workOrderOld.setApproveResult(CommonConstant.TRUE_INT);
workOrderOld.setApproveTime(DateUtil.now()); workOrderOld.setApproveTime(DateUtil.now());
workOrderOld.setApproveRemark(StringPool.EMPTY); workOrderOld.setApproveRemark(StringPool.EMPTY);
workOrderOld.setFinishTime(DateUtil.now());
workOrderOld.setSignaturePerson(workOrder.getSignaturePerson()); workOrderOld.setSignaturePerson(workOrder.getSignaturePerson());
workOrderOld.setSignatureUrl(workOrder.getSignatureUrl()); workOrderOld.setSignatureUrl(workOrder.getSignatureUrl());

@ -0,0 +1,43 @@
package org.springblade.modules.business.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 发票字典枚举类
*
* @author Chill
*/
@Getter
@AllArgsConstructor
public enum InvoiceEnum {
/**
* 申请开票
*/
INVOICE_STATUS_CREATE(0),
/**
* 申请开票
*/
INVOICE_STATUS_APPLY(1),
/**
* 已开发票
*/
INVOICE_STATUS_CONFIRM(2),
/**
* 业务类型-需求工单
*/
BUSINESS_TYPE_ORDER(1),
/**
* 业务类型-巡检维修
*/
BUSINESS_TYPE_MAINTENANCE(2),
;
final int value;
}

@ -0,0 +1,16 @@
package org.springblade.modules.business.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springblade.modules.business.pojo.entity.InvoiceApplyDetail;
/**
* 发票申请明细表 Mapper 接口
*
* @author BladeX
* @since 2024-10-14
*/
public interface InvoiceApplyDetailMapper extends BaseMapper<InvoiceApplyDetail> {
}

@ -0,0 +1,25 @@
package org.springblade.modules.business.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springblade.modules.business.pojo.entity.InvoiceApply;
import java.util.List;
import java.util.Map;
/**
* 发票申请表 Mapper 接口
*
* @author BladeX
* @since 2024-10-14
*/
public interface InvoiceApplyMapper extends BaseMapper<InvoiceApply> {
/**
* 查询已完成工作列表
*
* @return
*/
List<Map<String, Object>> finishWorkList();
}

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.springblade.modules.business.mapper.InvoiceApplyMapper">
<select id="finishWorkList" resultType="map">
SELECT t.*
from (
SELECT 1 as business_type, wo.id as business_id, wo.requirement_code as business_code, u.`name` as serviceman, IFNULL(wo.discount_price,0) as price
from lab_work_order wo
left join blade_user u on wo.repair_person = u.id
WHERE wo.is_deleted= 0 AND wo.`status` = 8
UNION ALL
SELECT 2 as business_type, mt.id as buseness_id, mt.task_code as buseness_code, u.`name` as serviceman, COUNT(mtd.price) as price
from lab_maintenance_task mt
left join blade_user u on mt.serviceman_id = u.id
left join lab_maintenance_task_detail mtd on mt.id = mtd.task_id
WHERE mt.is_deleted= 0 and mt.repair_status = 7
group by mt.id, mt.task_code
) t
left join lab_invoice_apply_detail d on t.buseness_id = d.business_id
where d.id is NULL
</select>
</mapper>

@ -0,0 +1,20 @@
package org.springblade.modules.business.pojo.dto;
import lombok.Builder;
import lombok.Data;
import org.springblade.modules.business.pojo.entity.InvoiceApply;
import org.springblade.modules.business.pojo.entity.InvoiceApplyDetail;
import java.util.List;
/**
* @author 84018
* @date 2024-11-25 16:16
*/
@Data
@Builder
public class InvoiceApplyDto {
InvoiceApply apply;
List<InvoiceApplyDetail> detailList;
}

@ -0,0 +1,85 @@
package org.springblade.modules.business.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.mp.base.BaseEntity;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Date;
/**
* 发票申请表 实体类
*
* @author BladeX
* @since 2024-10-14
*/
@Data
@TableName("lab_invoice_apply")
@EqualsAndHashCode(callSuper = true)
public class InvoiceApply extends BaseEntity {
/**
* 发票ID
*/
private Long invoiceId;
/**
* 公司名称
*/
private String companyName;
/**
* 税号
*/
private String taxCode;
/**
* 申请人
*/
private Long applyUser;
/**
* 申请人名称
*/
private String applyUserName;
/**
* 申请时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date applyTime;
/**
* 开票人
*/
private Long confirmUser;
/**
* 开票人
*/
private String confirmUserName;
/**
* 开票时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date confirmTime;
/**
* 开票金额
*/
private BigDecimal price;
/**
* 备注
*/
private String remark;
}

@ -0,0 +1,38 @@
package org.springblade.modules.business.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.mp.base.BaseEntity;
/**
* 发票申请明细表 实体类
*
* @author BladeX
* @since 2024-10-14
*/
@Data
@TableName("lab_invoice_apply_detail")
@EqualsAndHashCode(callSuper = true)
public class InvoiceApplyDetail extends BaseEntity {
/**
* 申请ID
*/
private Long applyId;
/**
* 业务类型
*/
private String businessType;
/**
* 业务ID
*/
private Long businessId;
/**
* 备注
*/
private String detailRemark;
}

@ -0,0 +1,14 @@
package org.springblade.modules.business.service;
import org.springblade.core.mp.base.BaseService;
import org.springblade.modules.business.pojo.entity.InvoiceApplyDetail;
/**
* 发票申请明细表 服务类
*
* @author BladeX
* @since 2024-10-14
*/
public interface IInvoiceApplyDetailService extends BaseService<InvoiceApplyDetail> {
}

@ -0,0 +1,40 @@
package org.springblade.modules.business.service;
import org.springblade.core.mp.base.BaseService;
import org.springblade.modules.business.pojo.dto.InvoiceApplyDto;
import org.springblade.modules.business.pojo.entity.InvoiceApply;
import java.util.List;
import java.util.Map;
/**
* 发票申请表 服务类
*
* @author BladeX
* @since 2024-10-14
*/
public interface IInvoiceApplyService extends BaseService<InvoiceApply> {
/**
* 查询已完成工作列表
*
* @return
*/
List<Map<String, Object>> finishWorkList();
/**
* 保存并提交
*
* @param dto
*/
void saveAndSubmit(InvoiceApplyDto dto);
/**
* 确认开票
*
* @param id
*/
void confirm(Long id);
}

@ -0,0 +1,21 @@
package org.springblade.modules.business.service.impl;
import lombok.AllArgsConstructor;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.modules.business.mapper.InvoiceApplyDetailMapper;
import org.springblade.modules.business.pojo.entity.InvoiceApplyDetail;
import org.springblade.modules.business.service.IInvoiceApplyDetailService;
import org.springframework.stereotype.Service;
/**
* 发票申请明细表 服务实现类
*
* @author BladeX
* @since 2024-10-14
*/
@Service
@AllArgsConstructor
public class InvoiceApplyDetailServiceImpl extends BaseServiceImpl<InvoiceApplyDetailMapper, InvoiceApplyDetail> implements IInvoiceApplyDetailService {
}

@ -0,0 +1,105 @@
package org.springblade.modules.business.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.AllArgsConstructor;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.modules.business.enums.InvoiceEnum;
import org.springblade.modules.business.enums.MaintenanceStatusEnum;
import org.springblade.modules.business.enums.WorkOrderStatusEnum;
import org.springblade.modules.business.mapper.InvoiceApplyMapper;
import org.springblade.modules.business.pojo.dto.InvoiceApplyDto;
import org.springblade.modules.business.pojo.entity.InvoiceApply;
import org.springblade.modules.business.pojo.entity.InvoiceApplyDetail;
import org.springblade.modules.business.pojo.entity.maintenance.MaintenanceTask;
import org.springblade.modules.business.pojo.entity.workorder.WorkOrder;
import org.springblade.modules.business.service.IInvoiceApplyService;
import org.springblade.modules.business.service.IMaintenanceTaskService;
import org.springblade.modules.business.service.IWorkOrderService;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* 发票申请表 服务实现类
*
* @author BladeX
* @since 2024-10-14
*/
@Service
@AllArgsConstructor
public class InvoiceApplyServiceImpl extends BaseServiceImpl<InvoiceApplyMapper, InvoiceApply> implements IInvoiceApplyService {
private InvoiceApplyDetailServiceImpl detailService;
private final IWorkOrderService workOrderService;
private final IMaintenanceTaskService taskService;
@Override
public List<Map<String, Object>> finishWorkList() {
return baseMapper.finishWorkList();
}
@Override
public void saveAndSubmit(InvoiceApplyDto dto) {
// 先保存申请
InvoiceApply apply = dto.getApply();
InvoiceApply applyOld = getById(apply.getId());
if (Func.isEmpty(applyOld)) {
applyOld = apply;
applyOld.setCreateUser(AuthUtil.getUserId());
}
applyOld.setApplyUser(AuthUtil.getUserId());
applyOld.setApplyUserName(AuthUtil.getUserName());
applyOld.setApplyTime(DateUtil.now());
applyOld.setUpdateUser(AuthUtil.getUserId());
applyOld.setStatus(InvoiceEnum.INVOICE_STATUS_APPLY.getValue());
saveOrUpdate(applyOld);
List<InvoiceApplyDetail> applyDetails = dto.getDetailList();
for (InvoiceApplyDetail applyDetail : applyDetails) {
applyDetail.setApplyId(applyOld.getId());
}
detailService.saveOrUpdateBatch(applyDetails);
}
@Override
public void confirm(Long id) {
InvoiceApply applyOld = getById(id);
applyOld.setUpdateUser(AuthUtil.getUserId());
applyOld.setConfirmUser(AuthUtil.getUserId());
applyOld.setConfirmUserName(AuthUtil.getUserName());
applyOld.setConfirmTime(DateUtil.now());
applyOld.setStatus(InvoiceEnum.INVOICE_STATUS_CONFIRM.getValue());
updateById(applyOld);
// 获取明细, 更新明细的开票状态
List<InvoiceApplyDetail> applyDetails = detailService.list(Wrappers.lambdaQuery(InvoiceApplyDetail.class).eq(InvoiceApplyDetail::getApplyId, id));
List<MaintenanceTask> taskOldList = new ArrayList<>();
List<WorkOrder> orderOldList = new ArrayList<>();
for (InvoiceApplyDetail applyDetail : applyDetails) {
if (String.valueOf(InvoiceEnum.BUSINESS_TYPE_ORDER.getValue()) == applyDetail.getBusinessType()) {
MaintenanceTask taskOld = taskService.getById(applyDetail.getBusinessId());
taskOld.setRepairStatus(MaintenanceStatusEnum.REPAIR_INVOICE.getValue());
taskOldList.add(taskOld);
}
if (String.valueOf(InvoiceEnum.BUSINESS_TYPE_MAINTENANCE.getValue()) == applyDetail.getBusinessType()) {
WorkOrder workOrderOld = workOrderService.getById(applyDetail.getBusinessId());
workOrderOld.setStatus(WorkOrderStatusEnum.TICKET.getValue());
orderOldList.add(workOrderOld);
}
}
taskService.updateBatchById(taskOldList);
workOrderService.updateBatchById(orderOldList);
}
}

@ -135,6 +135,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
if (user != null) { if (user != null) {
workOrder.setInformant(user.getId()); workOrder.setInformant(user.getId());
workOrder.setInformantPhone(user.getPhone()); workOrder.setInformantPhone(user.getPhone());
workOrder.setReportUnit(user.getDeptId());
workOrder.setCreateDept(Long.parseLong(user.getDeptId()));
} }
save = this.saveOrUpdate(workOrder); save = this.saveOrUpdate(workOrder);
count++; count++;

@ -38,13 +38,17 @@ import org.springblade.core.secure.annotation.PreAuth;
import org.springblade.core.tenant.annotation.NonDS; import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.core.tool.api.R; import org.springblade.core.tool.api.R;
import org.springblade.core.tool.constant.RoleConstant; import org.springblade.core.tool.constant.RoleConstant;
import org.springblade.modules.system.pojo.dto.LogDTO;
import org.springblade.modules.system.pojo.vo.LogRecord;
import org.springblade.modules.system.service.ILogApiService; import org.springblade.modules.system.service.ILogApiService;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
/** /**
* 控制器 * 控制器
@ -79,4 +83,17 @@ public class LogApiController {
return R.data(pages); return R.data(pages);
} }
/**
* 日志列表登录修改操作
* 查询多条(分页)
*/
@GetMapping("/logOnList")
public R<List<LogRecord>> logOnList(LogDTO log, Query query) {
if (!Objects.equals(log.getLogType(), "1") && !Objects.equals(log.getLogType(), "2")) {
return R.fail("日志类型入参有误(logType)");
}
List<LogRecord> logList = logService.logOnList(log);
return R.data(logList);
}
} }

@ -27,6 +27,10 @@ package org.springblade.modules.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springblade.core.log.model.LogApi; import org.springblade.core.log.model.LogApi;
import org.springblade.modules.system.pojo.dto.LogDTO;
import org.springblade.modules.system.pojo.vo.LogVO;
import java.util.List;
/** /**
* Mapper 接口 * Mapper 接口
@ -34,5 +38,5 @@ import org.springblade.core.log.model.LogApi;
* @author Chill * @author Chill
*/ */
public interface LogApiMapper extends BaseMapper<LogApi> { public interface LogApiMapper extends BaseMapper<LogApi> {
List<LogVO> logOnList(LogDTO log);
} }

@ -23,4 +23,30 @@
<result column="create_by" property="createBy"/> <result column="create_by" property="createBy"/>
</resultMap> </resultMap>
<select id="logOnList" resultType="org.springblade.modules.system.pojo.vo.LogVO">
SELECT
tenant_id AS tenantId,
create_by AS createBy,
create_time AS createTime,
title AS title,
method_name as methodName
FROM
`blade_log_api`
WHERE
create_by != ''
<if test="logType == 1">
and method_name = 'token'
</if>
<if test="logType == 2">
and method_name != 'token'
</if>
<if test="startTime != null and endTime != null">
AND create_time BETWEEN #{startTime} AND #{endTime}
</if>
<if test="userId != '' and userId != null">
and create_by = #{userId}
</if>
ORDER BY
create_time DESC
</select>
</mapper> </mapper>

@ -0,0 +1,23 @@
package org.springblade.modules.system.pojo.dto;
import lombok.Data;
/**
* 数据传输对象实体类
*
* @author Chill
*/
@Data
public class LogDTO {
private static final long serialVersionUID = 1L;
private String startTime;
private String endTime;
// 日志类型:1登录日志 2修改日志
private String logType;
// 用户id
private String userId;
}

@ -0,0 +1,23 @@
package org.springblade.modules.system.pojo.vo;
import lombok.Data;
import java.util.List;
/**
* 数据传输对象实体类
*
* @author Chill
*/
@Data
public class LogRecord {
private static final long serialVersionUID = 1L;
// 时间
private String time;
// 日志实体
private List<LogVO> logs;
}

@ -0,0 +1,31 @@
package org.springblade.modules.system.pojo.vo;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import java.util.Date;
/**
* 数据传输对象实体类
*
* @author Chill
*/
@Data
public class LogVO {
private static final long serialVersionUID = 1L;
private String tenantId;
private String createBy;
@JsonIgnore
private Date createTime;
private String time;
private String title;
// 真实姓名
private String realName;
}

@ -27,6 +27,10 @@ package org.springblade.modules.system.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import org.springblade.core.log.model.LogApi; import org.springblade.core.log.model.LogApi;
import org.springblade.modules.system.pojo.dto.LogDTO;
import org.springblade.modules.system.pojo.vo.LogRecord;
import java.util.List;
/** /**
* 服务类 * 服务类
@ -34,5 +38,5 @@ import org.springblade.core.log.model.LogApi;
* @author Chill * @author Chill
*/ */
public interface ILogApiService extends IService<LogApi> { public interface ILogApiService extends IService<LogApi> {
List<LogRecord> logOnList(LogDTO log);
} }

@ -26,11 +26,24 @@
package org.springblade.modules.system.service.impl; package org.springblade.modules.system.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springblade.common.cache.UserCache;
import org.springblade.core.log.model.LogApi; import org.springblade.core.log.model.LogApi;
import org.springblade.modules.system.mapper.LogApiMapper; import org.springblade.modules.system.mapper.LogApiMapper;
import org.springblade.modules.system.pojo.dto.LogDTO;
import org.springblade.modules.system.pojo.entity.User;
import org.springblade.modules.system.pojo.vo.LogRecord;
import org.springblade.modules.system.pojo.vo.LogVO;
import org.springblade.modules.system.service.ILogApiService; import org.springblade.modules.system.service.ILogApiService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
/** /**
* 服务实现类 * 服务实现类
* *
@ -38,6 +51,99 @@ import org.springframework.stereotype.Service;
*/ */
@Service @Service
public class LogApiServiceImpl extends ServiceImpl<LogApiMapper, LogApi> implements ILogApiService { public class LogApiServiceImpl extends ServiceImpl<LogApiMapper, LogApi> implements ILogApiService {
@Override
public List<LogRecord> logOnList(LogDTO log) {
List<LogRecord> logRecords = new LinkedList<>();
LogRecord logRecord = new LogRecord();
SimpleDateFormat formatter1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// yyyy-MM年月日志标识
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM");
// 按照月份查询日志所有数据
List<LogVO> logs = baseMapper.logOnList(log);
// 记录年月
AtomicReference<String> yearMonth = new AtomicReference<>(null);
// logs遍历计数器
AtomicInteger count = new AtomicInteger(1);
// logs总长度
int totalLogs = logs.size();
// 遍历日志数据
for (LogVO logInfo : logs) {
count.incrementAndGet();
// 当前年月
String currentYearMonth = formatter.format(logInfo.getCreateTime());
// 记录年月是否为空,空则插入
if (yearMonth.get() == null) {
// 当前年月赋值给记录年月
yearMonth.set(currentYearMonth);
// logRecord的当前年月是否为空,空则插入当前年月
if (logRecord.getTime() == null) {
logRecord.setTime(currentYearMonth);
}
// 将该条数据插入logs
if (logRecord.getLogs() == null) {
logRecord.setLogs(new ArrayList<>());
}
logRecord.getLogs().add(logInfo);
} else {
// 当前年月等于记录年月
if (yearMonth.get().equals(currentYearMonth)) {
// 将该条数据插入logs
logRecord.getLogs().add(logInfo);
} else { // 当前年月不等于记录年月
// 将当前年月赋值给记录年月
yearMonth.set(currentYearMonth);
// 将上一组数据存入
for (LogVO logVO : logRecord.getLogs()) {
User user = UserCache.getUser(logVO.getTenantId(), logVO.getCreateBy());
if (user != null) {
logVO.setRealName(user.getRealName());
logVO.setTitle(user.getRealName() + logVO.getTitle());
}
String substring = formatter1.format(logVO.getCreateTime()).substring(8);
logVO.setTime(substring.substring(0, 2) + "日" + substring.substring(2));
}
logRecords.add(logRecord);
// 一组年月的日志已插入,logRecord对象创建一个新的
logRecord = new LogRecord();
// logRecord的当前年月是否为空,空则插入当前年月
logRecord.setTime(currentYearMonth);
// 将该条数据插入logs
logRecord.setLogs(new LinkedList<>(Collections.singletonList(logInfo)));
}
}
if (count.get() == totalLogs) {
for (LogVO logVO : logRecord.getLogs()) {
User user = UserCache.getUser(logVO.getTenantId(), logVO.getCreateBy());
if (user != null) {
logVO.setRealName(user.getRealName());
logVO.setTitle(user.getRealName() + logVO.getTitle());
}
String substring = formatter1.format(logVO.getCreateTime()).substring(8);
logVO.setTime(substring.substring(0, 2) + "日" + substring.substring(2));
}
// 最后一次执行的逻辑,将logRecord保存
logRecords.add(logRecord);
}
// 计数器增加
count.incrementAndGet();
}
return logRecords;
}
} }

Loading…
Cancel
Save