From 2b31ce1b41572a1a5d6f6d60de48c1dcd8d999f4 Mon Sep 17 00:00:00 2001 From: liuqingkun Date: Thu, 28 Nov 2024 21:02:43 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=B3=E8=AF=B7=E5=BC=80=E7=A5=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../contraller/InvoiceApplyController.java | 96 ++++++++++++++++ .../contraller/MaintenanceController.java | 12 +- .../contraller/WorkBenchesController.java | 59 ++++++---- .../contraller/WorkOrderController.java | 1 + .../modules/business/enums/InvoiceEnum.java | 43 +++++++ .../mapper/InvoiceApplyDetailMapper.java | 16 +++ .../business/mapper/InvoiceApplyMapper.java | 25 +++++ .../business/mapper/InvoiceApplyMapper.xml | 26 +++++ .../business/pojo/dto/InvoiceApplyDto.java | 20 ++++ .../business/pojo/entity/InvoiceApply.java | 85 ++++++++++++++ .../pojo/entity/InvoiceApplyDetail.java | 38 +++++++ .../service/IInvoiceApplyDetailService.java | 14 +++ .../service/IInvoiceApplyService.java | 40 +++++++ .../impl/InvoiceApplyDetailServiceImpl.java | 21 ++++ .../service/impl/InvoiceApplyServiceImpl.java | 105 +++++++++++++++++ .../service/impl/WorkOrderServiceImpl.java | 2 + .../system/controller/LogApiController.java | 17 +++ .../modules/system/mapper/LogApiMapper.java | 6 +- .../modules/system/mapper/LogApiMapper.xml | 26 +++++ .../modules/system/pojo/dto/LogDTO.java | 23 ++++ .../modules/system/pojo/vo/LogRecord.java | 23 ++++ .../modules/system/pojo/vo/LogVO.java | 31 +++++ .../system/service/ILogApiService.java | 6 +- .../service/impl/LogApiServiceImpl.java | 106 ++++++++++++++++++ 24 files changed, 814 insertions(+), 27 deletions(-) create mode 100644 src/main/java/org/springblade/modules/business/contraller/InvoiceApplyController.java create mode 100644 src/main/java/org/springblade/modules/business/enums/InvoiceEnum.java create mode 100644 src/main/java/org/springblade/modules/business/mapper/InvoiceApplyDetailMapper.java create mode 100644 src/main/java/org/springblade/modules/business/mapper/InvoiceApplyMapper.java create mode 100644 src/main/java/org/springblade/modules/business/mapper/InvoiceApplyMapper.xml create mode 100644 src/main/java/org/springblade/modules/business/pojo/dto/InvoiceApplyDto.java create mode 100644 src/main/java/org/springblade/modules/business/pojo/entity/InvoiceApply.java create mode 100644 src/main/java/org/springblade/modules/business/pojo/entity/InvoiceApplyDetail.java create mode 100644 src/main/java/org/springblade/modules/business/service/IInvoiceApplyDetailService.java create mode 100644 src/main/java/org/springblade/modules/business/service/IInvoiceApplyService.java create mode 100644 src/main/java/org/springblade/modules/business/service/impl/InvoiceApplyDetailServiceImpl.java create mode 100644 src/main/java/org/springblade/modules/business/service/impl/InvoiceApplyServiceImpl.java create mode 100644 src/main/java/org/springblade/modules/system/pojo/dto/LogDTO.java create mode 100644 src/main/java/org/springblade/modules/system/pojo/vo/LogRecord.java create mode 100644 src/main/java/org/springblade/modules/system/pojo/vo/LogVO.java diff --git a/src/main/java/org/springblade/modules/business/contraller/InvoiceApplyController.java b/src/main/java/org/springblade/modules/business/contraller/InvoiceApplyController.java new file mode 100644 index 0000000..a2f7cc7 --- /dev/null +++ b/src/main/java/org/springblade/modules/business/contraller/InvoiceApplyController.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> page(InvoiceApply apply, Query query) { + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(apply).orderByDesc(InvoiceApply::getCreateTime); + IPage 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 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(); + } + + +} diff --git a/src/main/java/org/springblade/modules/business/contraller/MaintenanceController.java b/src/main/java/org/springblade/modules/business/contraller/MaintenanceController.java index fe3db43..1ba5db7 100644 --- a/src/main/java/org/springblade/modules/business/contraller/MaintenanceController.java +++ b/src/main/java/org/springblade/modules/business/contraller/MaintenanceController.java @@ -159,6 +159,7 @@ public class MaintenanceController extends BladeController { // 若异常数量大于0, 更新巡检的维修状态 MaintenanceTask taskOld = taskService.getById(taskDetailList.get(0).getTaskId()); taskOld.setRepairStatus(MaintenanceStatusEnum.REPAIR_SERVICEMAN_CREATE.getValue()); + taskService.updateById(taskOld); } // 只更新设备状态 @@ -197,6 +198,7 @@ public class MaintenanceController extends BladeController { taskOld.setApproveResult(task.getApproveResult()); taskOld.setApproveRemark(task.getApproveRemark()); taskOld.setApproveTime(DateUtil.now()); + taskOld.setFinishTime(DateUtil.now()); taskOld.setTaskStatus(MaintenanceStatusEnum.TASK_SERVICEMAN_CONFIRM.getValue()); taskService.updateById(taskOld); @@ -287,7 +289,15 @@ public class MaintenanceController extends BladeController { public R repairCustomerConfirmDetail(@RequestBody MaintenanceTaskDto taskDto) { MaintenanceTask task = taskDto.getTask(); 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); List detailList = taskDto.getDetailList(); diff --git a/src/main/java/org/springblade/modules/business/contraller/WorkBenchesController.java b/src/main/java/org/springblade/modules/business/contraller/WorkBenchesController.java index c7674e9..5b9829f 100644 --- a/src/main/java/org/springblade/modules/business/contraller/WorkBenchesController.java +++ b/src/main/java/org/springblade/modules/business/contraller/WorkBenchesController.java @@ -1,13 +1,13 @@ 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 lombok.AllArgsConstructor; -import org.springblade.common.cache.UserCache; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; 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.maintenance.MaintenancePlan; import org.springblade.modules.business.pojo.entity.maintenance.MaintenanceTask; @@ -110,28 +110,39 @@ public class WorkBenchesController extends BladeController { */ @GetMapping("/upkeepStat") public R> upkeepStat(@RequestParam String startTime, @RequestParam String endTime) throws ParseException { - SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); - Map map = new HashMap<>(); - List xData = new ArrayList<>(); - xData.add("报送维修"); - xData.add("巡检维修"); - map.put("xData", xData); - List workOrders = workOrderService.list(Wrappers.lambdaQuery(WorkOrder.class).between(StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime), WorkOrder::getCreateTime, format.parse(startTime), format.parse(endTime))); - List tasks = maintenanceTaskService.list(Wrappers.lambdaQuery(MaintenanceTask.class).between(StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime), MaintenanceTask::getCreateTime, format.parse(startTime), format.parse(endTime))); - List total = new ArrayList<>(); - total.add(workOrders.size()); - total.add(tasks.size()); - map.put("total", total); - List 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 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); - } + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + Map map = new HashMap<>(); + List xData = new ArrayList<>(); + xData.add("报送维修"); + xData.add("巡检维修"); + map.put("xData", xData); + + LambdaQueryWrapper orderWrappers = Wrappers.lambdaQuery(WorkOrder.class); + if (Func.isNotEmpty(startTime) && Func.isNotEmpty(endTime)) { + orderWrappers.between(WorkOrder::getCreateTime, format.parse(startTime), format.parse(endTime)); + } + + LambdaQueryWrapper taskWrappers = Wrappers.lambdaQuery(MaintenanceTask.class); + if (Func.isNotEmpty(startTime) && Func.isNotEmpty(endTime)) { + taskWrappers.between(MaintenanceTask::getCreateTime, format.parse(startTime), format.parse(endTime)); + } + + List workOrders = workOrderService.list(orderWrappers); + List tasks = maintenanceTaskService.list(taskWrappers); + List total = new ArrayList<>(); + total.add(workOrders.size()); + total.add(tasks.size()); + map.put("total", total); + List 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 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); + } /** * 饼图数据 diff --git a/src/main/java/org/springblade/modules/business/contraller/WorkOrderController.java b/src/main/java/org/springblade/modules/business/contraller/WorkOrderController.java index 909871b..a0d3060 100644 --- a/src/main/java/org/springblade/modules/business/contraller/WorkOrderController.java +++ b/src/main/java/org/springblade/modules/business/contraller/WorkOrderController.java @@ -331,6 +331,7 @@ public class WorkOrderController extends BladeController { workOrderOld.setApproveResult(CommonConstant.TRUE_INT); workOrderOld.setApproveTime(DateUtil.now()); workOrderOld.setApproveRemark(StringPool.EMPTY); + workOrderOld.setFinishTime(DateUtil.now()); workOrderOld.setSignaturePerson(workOrder.getSignaturePerson()); workOrderOld.setSignatureUrl(workOrder.getSignatureUrl()); diff --git a/src/main/java/org/springblade/modules/business/enums/InvoiceEnum.java b/src/main/java/org/springblade/modules/business/enums/InvoiceEnum.java new file mode 100644 index 0000000..dac847d --- /dev/null +++ b/src/main/java/org/springblade/modules/business/enums/InvoiceEnum.java @@ -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; + +} diff --git a/src/main/java/org/springblade/modules/business/mapper/InvoiceApplyDetailMapper.java b/src/main/java/org/springblade/modules/business/mapper/InvoiceApplyDetailMapper.java new file mode 100644 index 0000000..c62ddea --- /dev/null +++ b/src/main/java/org/springblade/modules/business/mapper/InvoiceApplyDetailMapper.java @@ -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 { + +} diff --git a/src/main/java/org/springblade/modules/business/mapper/InvoiceApplyMapper.java b/src/main/java/org/springblade/modules/business/mapper/InvoiceApplyMapper.java new file mode 100644 index 0000000..47e7bdd --- /dev/null +++ b/src/main/java/org/springblade/modules/business/mapper/InvoiceApplyMapper.java @@ -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 { + + /** + * 查询已完成工作列表 + * + * @return + */ + List> finishWorkList(); +} diff --git a/src/main/java/org/springblade/modules/business/mapper/InvoiceApplyMapper.xml b/src/main/java/org/springblade/modules/business/mapper/InvoiceApplyMapper.xml new file mode 100644 index 0000000..84da116 --- /dev/null +++ b/src/main/java/org/springblade/modules/business/mapper/InvoiceApplyMapper.xml @@ -0,0 +1,26 @@ + + + + + + + + + diff --git a/src/main/java/org/springblade/modules/business/pojo/dto/InvoiceApplyDto.java b/src/main/java/org/springblade/modules/business/pojo/dto/InvoiceApplyDto.java new file mode 100644 index 0000000..e671e4e --- /dev/null +++ b/src/main/java/org/springblade/modules/business/pojo/dto/InvoiceApplyDto.java @@ -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 detailList; +} diff --git a/src/main/java/org/springblade/modules/business/pojo/entity/InvoiceApply.java b/src/main/java/org/springblade/modules/business/pojo/entity/InvoiceApply.java new file mode 100644 index 0000000..409ca6e --- /dev/null +++ b/src/main/java/org/springblade/modules/business/pojo/entity/InvoiceApply.java @@ -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; + + +} diff --git a/src/main/java/org/springblade/modules/business/pojo/entity/InvoiceApplyDetail.java b/src/main/java/org/springblade/modules/business/pojo/entity/InvoiceApplyDetail.java new file mode 100644 index 0000000..3c084ed --- /dev/null +++ b/src/main/java/org/springblade/modules/business/pojo/entity/InvoiceApplyDetail.java @@ -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; +} diff --git a/src/main/java/org/springblade/modules/business/service/IInvoiceApplyDetailService.java b/src/main/java/org/springblade/modules/business/service/IInvoiceApplyDetailService.java new file mode 100644 index 0000000..a056887 --- /dev/null +++ b/src/main/java/org/springblade/modules/business/service/IInvoiceApplyDetailService.java @@ -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 { + +} diff --git a/src/main/java/org/springblade/modules/business/service/IInvoiceApplyService.java b/src/main/java/org/springblade/modules/business/service/IInvoiceApplyService.java new file mode 100644 index 0000000..ba3b31e --- /dev/null +++ b/src/main/java/org/springblade/modules/business/service/IInvoiceApplyService.java @@ -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 { + + /** + * 查询已完成工作列表 + * + * @return + */ + List> finishWorkList(); + + /** + * 保存并提交 + * + * @param dto + */ + void saveAndSubmit(InvoiceApplyDto dto); + + /** + * 确认开票 + * + * @param id + */ + void confirm(Long id); + + +} diff --git a/src/main/java/org/springblade/modules/business/service/impl/InvoiceApplyDetailServiceImpl.java b/src/main/java/org/springblade/modules/business/service/impl/InvoiceApplyDetailServiceImpl.java new file mode 100644 index 0000000..03d89fc --- /dev/null +++ b/src/main/java/org/springblade/modules/business/service/impl/InvoiceApplyDetailServiceImpl.java @@ -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 implements IInvoiceApplyDetailService { + +} diff --git a/src/main/java/org/springblade/modules/business/service/impl/InvoiceApplyServiceImpl.java b/src/main/java/org/springblade/modules/business/service/impl/InvoiceApplyServiceImpl.java new file mode 100644 index 0000000..80365b5 --- /dev/null +++ b/src/main/java/org/springblade/modules/business/service/impl/InvoiceApplyServiceImpl.java @@ -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 implements IInvoiceApplyService { + + private InvoiceApplyDetailServiceImpl detailService; + private final IWorkOrderService workOrderService; + private final IMaintenanceTaskService taskService; + + + @Override + public List> 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 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 applyDetails = detailService.list(Wrappers.lambdaQuery(InvoiceApplyDetail.class).eq(InvoiceApplyDetail::getApplyId, id)); + + List taskOldList = new ArrayList<>(); + List 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); + } +} diff --git a/src/main/java/org/springblade/modules/business/service/impl/WorkOrderServiceImpl.java b/src/main/java/org/springblade/modules/business/service/impl/WorkOrderServiceImpl.java index 0334793..b47b235 100644 --- a/src/main/java/org/springblade/modules/business/service/impl/WorkOrderServiceImpl.java +++ b/src/main/java/org/springblade/modules/business/service/impl/WorkOrderServiceImpl.java @@ -135,6 +135,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl> logOnList(LogDTO log, Query query) { + if (!Objects.equals(log.getLogType(), "1") && !Objects.equals(log.getLogType(), "2")) { + return R.fail("日志类型入参有误(logType)"); + } + List logList = logService.logOnList(log); + return R.data(logList); + } + } diff --git a/src/main/java/org/springblade/modules/system/mapper/LogApiMapper.java b/src/main/java/org/springblade/modules/system/mapper/LogApiMapper.java index 9ee45d8..c1b2a26 100644 --- a/src/main/java/org/springblade/modules/system/mapper/LogApiMapper.java +++ b/src/main/java/org/springblade/modules/system/mapper/LogApiMapper.java @@ -27,6 +27,10 @@ package org.springblade.modules.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; 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 接口 @@ -34,5 +38,5 @@ import org.springblade.core.log.model.LogApi; * @author Chill */ public interface LogApiMapper extends BaseMapper { - + List logOnList(LogDTO log); } diff --git a/src/main/java/org/springblade/modules/system/mapper/LogApiMapper.xml b/src/main/java/org/springblade/modules/system/mapper/LogApiMapper.xml index 39b6194..e642251 100644 --- a/src/main/java/org/springblade/modules/system/mapper/LogApiMapper.xml +++ b/src/main/java/org/springblade/modules/system/mapper/LogApiMapper.xml @@ -23,4 +23,30 @@ + diff --git a/src/main/java/org/springblade/modules/system/pojo/dto/LogDTO.java b/src/main/java/org/springblade/modules/system/pojo/dto/LogDTO.java new file mode 100644 index 0000000..e7968ca --- /dev/null +++ b/src/main/java/org/springblade/modules/system/pojo/dto/LogDTO.java @@ -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; +} diff --git a/src/main/java/org/springblade/modules/system/pojo/vo/LogRecord.java b/src/main/java/org/springblade/modules/system/pojo/vo/LogRecord.java new file mode 100644 index 0000000..3a6e6d4 --- /dev/null +++ b/src/main/java/org/springblade/modules/system/pojo/vo/LogRecord.java @@ -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 logs; + +} diff --git a/src/main/java/org/springblade/modules/system/pojo/vo/LogVO.java b/src/main/java/org/springblade/modules/system/pojo/vo/LogVO.java new file mode 100644 index 0000000..0558a83 --- /dev/null +++ b/src/main/java/org/springblade/modules/system/pojo/vo/LogVO.java @@ -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; +} diff --git a/src/main/java/org/springblade/modules/system/service/ILogApiService.java b/src/main/java/org/springblade/modules/system/service/ILogApiService.java index b18d2e8..950e1b4 100644 --- a/src/main/java/org/springblade/modules/system/service/ILogApiService.java +++ b/src/main/java/org/springblade/modules/system/service/ILogApiService.java @@ -27,6 +27,10 @@ package org.springblade.modules.system.service; import com.baomidou.mybatisplus.extension.service.IService; 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 */ public interface ILogApiService extends IService { - + List logOnList(LogDTO log); } diff --git a/src/main/java/org/springblade/modules/system/service/impl/LogApiServiceImpl.java b/src/main/java/org/springblade/modules/system/service/impl/LogApiServiceImpl.java index af07515..9566edb 100644 --- a/src/main/java/org/springblade/modules/system/service/impl/LogApiServiceImpl.java +++ b/src/main/java/org/springblade/modules/system/service/impl/LogApiServiceImpl.java @@ -26,11 +26,24 @@ package org.springblade.modules.system.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springblade.common.cache.UserCache; import org.springblade.core.log.model.LogApi; 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.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 public class LogApiServiceImpl extends ServiceImpl implements ILogApiService { + @Override + public List logOnList(LogDTO log) { + + List 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 logs = baseMapper.logOnList(log); + + // 记录年月 + AtomicReference 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; + } }