diff --git a/src/main/java/org/springblade/modules/capital/controller/GoodsController.java b/src/main/java/org/springblade/modules/capital/controller/GoodsController.java index 708022e..cd7be88 100644 --- a/src/main/java/org/springblade/modules/capital/controller/GoodsController.java +++ b/src/main/java/org/springblade/modules/capital/controller/GoodsController.java @@ -5,6 +5,7 @@ import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import lombok.AllArgsConstructor; + import javax.validation.Valid; import org.springblade.common.cache.DictBizCache; @@ -62,8 +63,10 @@ public class GoodsController extends BladeController { Goods detail = goodsService.getById(goods.getId()); detail.setBigClassName(DictBizCache.getValue(GOODS_TYPE, detail.getBigClassId())); detail.setTypeName(DictBizCache.getValue(MAJOR_TYPE, detail.getType())); + detail.setInventoryPrice(detail.getPurchasePrice() != null ? 0.00 : detail.getNum() * detail.getPurchasePrice()); return R.data(detail); } + /** * 物品表 分页 */ @@ -76,6 +79,7 @@ public class GoodsController extends BladeController { for (Goods record : records) { record.setBigClassName(DictBizCache.getValue(GOODS_TYPE, record.getBigClassId())); record.setTypeName(DictBizCache.getValue(MAJOR_TYPE, record.getType())); + record.setInventoryPrice(record.getPurchasePrice() == null ? 0.00 : record.getNum() * record.getPurchasePrice()); } return R.data(pages); } @@ -99,6 +103,7 @@ public class GoodsController extends BladeController { @ApiOperation(value = "新增", notes = "传入goods") public R save(@Valid @RequestBody Goods goods) { goods.setCode("编码格式待定"); + goods.setAllEnterNum(0); return R.status(goodsService.save(goods)); } @@ -162,6 +167,7 @@ public class GoodsController extends BladeController { for (Goods entity : goodsList) { if (goodsEntity.getId().equals(entity.getId())) { goodsEntity.setNum(entity.getNum() + goodsEntity.getNum()); + goodsEntity.setAllEnterNum(entity.getAllEnterNum() + goodsEntity.getNum()); break; } } diff --git a/src/main/java/org/springblade/modules/capital/entity/Goods.java b/src/main/java/org/springblade/modules/capital/entity/Goods.java index ebba54b..ff9a014 100644 --- a/src/main/java/org/springblade/modules/capital/entity/Goods.java +++ b/src/main/java/org/springblade/modules/capital/entity/Goods.java @@ -5,7 +5,9 @@ import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; + import java.util.Date; + import lombok.EqualsAndHashCode; import org.springblade.core.mp.base.BaseEntity; @@ -140,4 +142,35 @@ public class Goods extends BaseEntity { @ApiModelProperty(value = "") private String remark; + /** + * 库存id + */ + private String inventoryId; + + /** + * 采购价格 + */ + private Double purchasePrice; + + /** + * 统一报价 + */ + private Double unifiedQuotation; + + /** + * 续订时间(天) + */ + private Integer renewNum; + + /** + * 累计入库数量 + */ + private Integer allEnterNum; + + /** + * 库存价值 + */ + @TableField(exist = false) + private Double inventoryPrice; + } diff --git a/src/main/java/org/springblade/modules/system/entity/User.java b/src/main/java/org/springblade/modules/system/entity/User.java index 460f61c..8613629 100644 --- a/src/main/java/org/springblade/modules/system/entity/User.java +++ b/src/main/java/org/springblade/modules/system/entity/User.java @@ -84,4 +84,8 @@ public class User extends TenantEntity { * 坐标 */ private String coordinate; + /** + * 背景图片 + */ + private String backGroundPic; } diff --git a/src/main/java/org/springblade/modules/workOrder/controller/WorkBenchesController.java b/src/main/java/org/springblade/modules/workOrder/controller/WorkBenchesController.java new file mode 100644 index 0000000..5e6e672 --- /dev/null +++ b/src/main/java/org/springblade/modules/workOrder/controller/WorkBenchesController.java @@ -0,0 +1,282 @@ +package org.springblade.modules.workOrder.controller; + +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.tool.api.R; +import org.springblade.modules.workOrder.entity.DeviceAttach; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 工作台 控制器 + * + * @author BladeX + * @since 2024-10-14 + */ +@RestController +@AllArgsConstructor +@RequestMapping("/workBenches") +@Api(value = "工作台", tags = "工作台接口") +public class WorkBenchesController extends BladeController { + + /** + * 工作台 + */ + @GetMapping("/overview") + public R>> overview() { + List> list = new ArrayList<>(); + Map map1 = new HashMap<>(); + map1.put("name", "实验室巡检"); + map1.put("num", 10); + list.add(map1); + Map map2 = new HashMap<>(); + map2.put("name", "报送记录"); + map2.put("num", 8); + list.add(map2); + Map map3 = new HashMap<>(); + map3.put("name", "设备报警"); + map3.put("num", 16); + list.add(map3); + return R.data(list); + } + + /** + * 实验室巡检列表 + */ + @GetMapping("/workList") + public R>> workList() { + List> list = new ArrayList<>(); + Map map1 = new HashMap<>(); + map1.put("inspectionName", "水系统检查"); + map1.put("inspectionTime", "2024-11-11"); + map1.put("inspectionPerson", "张三"); + map1.put("isStart", "0"); + map1.put("appointTime", "2024-11-15"); + map1.put("taskType", "1"); + list.add(map1); + Map map2 = new HashMap<>(); + map2.put("inspectionName", "设备检查"); + map2.put("inspectionTime", "2024-11-11"); + map2.put("inspectionPerson", "李四"); + map2.put("isStart", "1"); + map2.put("appointTime", "2024-11-15"); + map2.put("taskType", "2"); + list.add(map2); + return R.data(list); + } + + /** + * 设备报警列表 + */ + @GetMapping("/deviceList") + public R>> deviceList() { + List> list = new ArrayList<>(); + Map map1 = new HashMap<>(); + map1.put("alarmLevel", "1"); + map1.put("deviceName", "2024-11-11"); + map1.put("brand", "品牌A"); + map1.put("model", "GDXH-12582"); + map1.put("alarmTime", "2024-11-15"); + list.add(map1); + Map map2 = new HashMap<>(); + map2.put("alarmLevel", "2"); + map2.put("deviceName", "2024-11-11"); + map2.put("brand", "品牌B"); + map2.put("model", "GDXH-88542"); + map2.put("alarmTime", "2024-11-08"); + list.add(map2); + return R.data(list); + } + + /** + * 维修统计 + */ + @GetMapping("/upkeepStat") + public R> upkeepStat(String startTime, String endTime) { + Map map = new HashMap<>(); + List xData = new ArrayList<>(); + xData.add("报送维修"); + xData.add("巡检维修"); + map.put("xData", xData); + List total = new ArrayList<>(); + total.add(10); + total.add(20); + map.put("total", total); + List completed = new ArrayList<>(); + completed.add(3); + completed.add(12); + map.put("completed", completed); + List unCompleted = new ArrayList<>(); + unCompleted.add(7); + unCompleted.add(8); + map.put("unCompleted", unCompleted); + return R.data(map); + } + + /** + * 饼图数据 + */ + @GetMapping("/pieStat") + public R> pieStat(String startTime, String endTime) { + Map map = new HashMap<>(); + List> fault = new ArrayList<>(); + Map fault1 = new HashMap<>(); + fault1.put("name", "电气"); + fault1.put("value", 300); + fault.add(fault1); + Map fault2 = new HashMap<>(); + fault2.put("name", "空调"); + fault2.put("value", 248); + fault.add(fault2); + Map fault3 = new HashMap<>(); + fault3.put("name", "装修类"); + fault3.put("value", 135); + fault.add(fault3); + Map fault4 = new HashMap<>(); + fault4.put("name", "智能设备"); + fault4.put("value", 180); + fault.add(fault4); + Map fault5 = new HashMap<>(); + fault5.put("name", "暖通、自控"); + fault5.put("value", 654); + fault.add(fault5); + map.put("fault", fault); + + List> device = new ArrayList<>(); + Map device1 = new HashMap<>(); + device1.put("name", "设备1"); + device1.put("value", 580); + device.add(device1); + Map device2 = new HashMap<>(); + device2.put("name", "空调"); + device2.put("value", 1048); + device.add(device2); + Map device3 = new HashMap<>(); + device3.put("name", "通风柜"); + device3.put("value", 735); + device.add(device3); + map.put("device", device); + return R.data(map); + } + + /** + * 地图相关数据 + */ + @GetMapping("/mapAddress") + public R> mapAddress(String perType) { + Map map = new HashMap<>(); + List fault = new ArrayList<>(); + fault.add("120.49149829538277"); + fault.add("36.15297000628537"); + map.put("软件创新园", fault); + return R.data(map); + } + + /** + * 实验室巡检列表 + */ + @GetMapping("/limsInspecList") + public R>> limsInspecList(String perType) { + List> list = new ArrayList<>(); + Map map1 = new HashMap<>(); + map1.put("name", "水系统检查"); + map1.put("planTime", "2024-11-11"); + list.add(map1); + Map map2 = new HashMap<>(); + map2.put("name", "设备检查"); + map2.put("planTime", "2024-11-11"); + list.add(map2); + return R.data(list); + } + + /** + * 工作台 + */ + @GetMapping("/overview1") + public R>> overview1(String perType) { + List> list = new ArrayList<>(); + Map map1 = new HashMap<>(); + Map map2 = new HashMap<>(); + Map map3 = new HashMap<>(); + map1.put("title", "我的任务"); + map1.put("mainName", "今日待办"); + map1.put("subName", "今日已办"); + map1.put("num", 5); + map1.put("num1", 10); + + map2.put("title", "维修已办结"); + map2.put("mainName", "本月"); + map2.put("subName", "本年"); + map2.put("num", 16); + map2.put("num1", 129); + + if ("0".equals(perType)) { + map3.put("title", "巡检计划"); + map3.put("mainName", "巡检签约"); + map3.put("subName", "巡检"); + map3.put("num", 22); + map3.put("num1", 159); + } else if ("1".equals(perType)) { + map3.put("title", "维修人员"); + map3.put("mainName", "在岗"); + map3.put("subName", "总计"); + map3.put("num", 22); + map3.put("num1", 159); + } + list.add(map1); + list.add(map2); + list.add(map3); + return R.data(list); + } + + /** + * 实验室巡检图表 + */ + @GetMapping("/limsInspecChart") + public R> limsInspecChart(String startTime, String endTime, String perType) { + Map map = new HashMap<>(); + List xData = new ArrayList<>(); + if ("0".equals(perType)) { + xData.add("安池"); + xData.add("畜牧局"); + } else if ("1".equals(perType)) { + xData.add("班组1"); + xData.add("班组2"); + } + map.put("xData", xData); + List total = new ArrayList<>(); + total.add(172); + total.add(160); + map.put("yData", total); + return R.data(map); + } + + /** + * 故障类占比统计 + */ + @GetMapping("/faultRatio") + public R> faultRatio(String startTime, String endTime, String perType) { + Map map = new HashMap<>(); + List> fault = new ArrayList<>(); + Map fault1 = new HashMap<>(); + fault1.put("name", "空调"); + fault1.put("value", 115); + fault.add(fault1); + map.put("fault", fault); + + List> rate = new ArrayList<>(); + Map device1 = new HashMap<>(); + device1.put("name", "正常数量"); + device1.put("value", 115); + rate.add(device1); + map.put("rate", rate); + return R.data(map); + } +} diff --git a/src/main/java/org/springblade/modules/workOrder/controller/WorkOrderController.java b/src/main/java/org/springblade/modules/workOrder/controller/WorkOrderController.java index 678bc3a..a266466 100644 --- a/src/main/java/org/springblade/modules/workOrder/controller/WorkOrderController.java +++ b/src/main/java/org/springblade/modules/workOrder/controller/WorkOrderController.java @@ -104,7 +104,12 @@ public class WorkOrderController extends BladeController { } // 设置查询条件:故障地点、故障类型、创建时间范围,并按创建时间降序排序 - eq.eq(StringUtils.isNotBlank(workOrderDTO.getFaultLocation()), WorkOrder::getFaultLocation, workOrderDTO.getFaultLocation()).eq(StringUtils.isNotBlank(workOrderDTO.getFaultType()), WorkOrder::getFaultType, workOrderDTO.getFaultType()).between(workOrderDTO.getStartTime() != null && workOrderDTO.getEndTime() != null, WorkOrder::getCreateTime, workOrderDTO.getStartTime(), workOrderDTO.getEndTime()).orderByDesc(WorkOrder::getCreateTime); + eq.eq(StringUtils.isNotBlank(workOrderDTO.getFaultLocation()), WorkOrder::getFaultLocation, workOrderDTO.getFaultLocation()) + .eq(StringUtils.isNotBlank(workOrderDTO.getFaultType()), WorkOrder::getFaultType, workOrderDTO.getFaultType()) + .in(workOrderDTO.getType() != null, WorkOrder::getStatus, Func.toIntList(workOrderDTO.getType())) + .like(StringUtils.isNotBlank(workOrderDTO.getRequirementCode()), WorkOrder::getRequirementCode, workOrderDTO.getRequirementCode()) + .between(workOrderDTO.getStartTime() != null && workOrderDTO.getEndTime() != null, WorkOrder::getCreateTime, workOrderDTO.getStartTime(), workOrderDTO.getEndTime()) + .orderByDesc(WorkOrder::getCreateTime); // 执行分页查询 IPage pages = workOrderService.page(Condition.getPage(query), eq); diff --git a/src/main/java/org/springblade/modules/workOrder/dto/WorkOrderDTO.java b/src/main/java/org/springblade/modules/workOrder/dto/WorkOrderDTO.java index 08f8df4..c2a2eab 100644 --- a/src/main/java/org/springblade/modules/workOrder/dto/WorkOrderDTO.java +++ b/src/main/java/org/springblade/modules/workOrder/dto/WorkOrderDTO.java @@ -47,4 +47,9 @@ public class WorkOrderDTO extends WorkOrder{ * 数据权限标识(1客户 2客服 3维修负责人 4维修人员) */ private String dataType; + + /** + * 工单状态 + */ + private String type; } diff --git a/src/main/java/org/springblade/modules/workOrder/entity/WorkOrder.java b/src/main/java/org/springblade/modules/workOrder/entity/WorkOrder.java index 239e8d2..635979e 100644 --- a/src/main/java/org/springblade/modules/workOrder/entity/WorkOrder.java +++ b/src/main/java/org/springblade/modules/workOrder/entity/WorkOrder.java @@ -1,6 +1,5 @@ package org.springblade.modules.workOrder.entity; -import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import io.swagger.annotations.ApiModel; @@ -21,7 +20,7 @@ import java.util.Date; @EqualsAndHashCode(callSuper = true) public class WorkOrder extends BaseEntity { - // 工单状态(-1草稿 0待客服接单 1待班组派单 2待维修人员确认 3待维修 4待领导审批 5待评价 6已完成 7已驳回(维修人员) 8已驳回(维修负责人) 9已关闭(客服)) + // 工单状态: -1草稿 0待客服接单 1待班组派单 2待维修人员确认 3待维修 4待领导审批 5待评价 6已完成 7已驳回(维修人员) 8已驳回(维修负责人) 9已关闭(客服) /** * 故障位置 @@ -192,4 +191,20 @@ public class WorkOrder extends BaseEntity { * 关闭原因 */ private String cloneReason; + + /** + * 总价 + */ + private Double totalPrice; + + /** + * 折扣 + */ + private Double discount; + + /** + * 折扣后总价 + */ + private Double discountPrice; + } diff --git a/src/main/java/org/springblade/modules/workOrder/service/impl/WorkOrderServiceImpl.java b/src/main/java/org/springblade/modules/workOrder/service/impl/WorkOrderServiceImpl.java index 36b9a58..fa93408 100644 --- a/src/main/java/org/springblade/modules/workOrder/service/impl/WorkOrderServiceImpl.java +++ b/src/main/java/org/springblade/modules/workOrder/service/impl/WorkOrderServiceImpl.java @@ -159,11 +159,19 @@ public class WorkOrderServiceImpl extends BaseServiceImpl materials = workOrder.getMaterials(); - workOrderRepairMaterialService.remove(Wrappers.lambdaQuery(WorkOrderRepairMaterial.class).eq(WorkOrderRepairMaterial::getOrderId, workOrder.getId())); // 维修材料 if (CollectionUtil.isNotEmpty(materials)) { - materials.forEach(material -> material.setOrderId(workOrder.getId())); - workOrderRepairMaterialService.saveBatch(materials); + // 需要新增的附件 + List newSave = materials.stream().filter(material -> material.getId() == null).collect(Collectors.toList()); + // 不删除的附件ids + List ids = materials.stream().filter(material -> material.getId() != null).map(WorkOrderRepairMaterial::getId).collect(Collectors.toList()); + // 删除 + workOrderRepairMaterialService.remove(Wrappers.lambdaQuery(WorkOrderRepairMaterial.class) + .eq(WorkOrderRepairMaterial::getOrderId, workOrder.getId()) + .notIn(CollectionUtils.isNotEmpty(ids), WorkOrderRepairMaterial::getId, ids)); + + newSave.forEach(material -> material.setOrderId(workOrder.getId())); + workOrderRepairMaterialService.saveBatch(newSave); } return this.updateById(workOrder); }