近期更新
This commit is contained in:
parent
1253b2a424
commit
74fbc6edda
@ -172,5 +172,7 @@ public interface ErrorCodeConstants {
|
||||
ErrorCode THIS_SHIPMENT_CANNOT_BE_INVALIDATED = new ErrorCode(1_013_008 , "该出库不允许作废,请刷新界面");
|
||||
|
||||
ErrorCode THERE_EXISTS_WEIGHT_CALCULATION_FORMULA = new ErrorCode(1_013_009 , "该物料类型存在重量计算公式,请确认");
|
||||
|
||||
ErrorCode FOUND_NOT_EXISTS = new ErrorCode(1_013_010, "数据已过期,请重新修改");
|
||||
ErrorCode YEAR_NUM_NOT_EXISTS = new ErrorCode(1_013_011, "数据已过期,请重新修改");
|
||||
ErrorCode PROCESS_DETAIL_NOT_EXISTS = new ErrorCode(1_013_012, "数据已过期,请重新修改");
|
||||
}
|
||||
|
||||
@ -159,8 +159,8 @@ public class bdgzsomthingController {
|
||||
//@Scheduled(cron = "0 2 0 * * ?") //每天十天执行一次
|
||||
@PostConstruct
|
||||
public void init() {
|
||||
selectHasPrice();
|
||||
selectSafeStorageAndDeliverOneYear();
|
||||
// selectHasPrice();
|
||||
// selectSafeStorageAndDeliverOneYear();
|
||||
// bdgzsomthingService.selectds();
|
||||
}
|
||||
@Scheduled(cron = "0 0 2 * * ?")
|
||||
|
||||
@ -0,0 +1,95 @@
|
||||
package com.chanko.yunxi.mes.module.heli.controller.admin.found;
|
||||
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
|
||||
import javax.validation.constraints.*;
|
||||
import javax.validation.*;
|
||||
import javax.servlet.http.*;
|
||||
import java.util.*;
|
||||
import java.io.IOException;
|
||||
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
|
||||
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
|
||||
import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success;
|
||||
|
||||
import com.chanko.yunxi.mes.framework.excel.core.util.ExcelUtils;
|
||||
|
||||
import com.chanko.yunxi.mes.framework.operatelog.core.annotations.OperateLog;
|
||||
import static com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum.*;
|
||||
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.found.vo.*;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.found.FoundDO;
|
||||
import com.chanko.yunxi.mes.module.heli.service.found.FoundService;
|
||||
|
||||
@Tag(name = "管理后台 - 大屏-可修改单项数据")
|
||||
@RestController
|
||||
@RequestMapping("/heli/found")
|
||||
@Validated
|
||||
public class FoundController {
|
||||
|
||||
@Resource
|
||||
private FoundService foundService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建大屏-可修改单项数据")
|
||||
@PreAuthorize("@ss.hasPermission('heli:found:create')")
|
||||
public CommonResult<Long> createFound(@Valid @RequestBody FoundSaveReqVO createReqVO) {
|
||||
return success(foundService.createFound(createReqVO));
|
||||
}
|
||||
|
||||
@PutMapping("/update")
|
||||
@Operation(summary = "更新大屏-可修改单项数据")
|
||||
@PreAuthorize("@ss.hasPermission('heli:found:update')")
|
||||
public CommonResult<Boolean> updateFound(@Valid @RequestBody FoundSaveReqVO updateReqVO) {
|
||||
foundService.updateFound(updateReqVO);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
@Operation(summary = "删除大屏-可修改单项数据")
|
||||
@Parameter(name = "id", description = "编号", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('heli:found:delete')")
|
||||
public CommonResult<Boolean> deleteFound(@RequestParam("id") Long id) {
|
||||
foundService.deleteFound(id);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得大屏-可修改单项数据")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('heli:found:query')")
|
||||
public CommonResult<FoundRespVO> getFound(@RequestParam("id") Long id) {
|
||||
FoundDO found = foundService.getFound(id);
|
||||
return success(BeanUtils.toBean(found, FoundRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得大屏-可修改单项数据分页")
|
||||
@PreAuthorize("@ss.hasPermission('heli:found:query')")
|
||||
public CommonResult<PageResult<FoundRespVO>> getFoundPage(@Valid FoundPageReqVO pageReqVO) {
|
||||
PageResult<FoundDO> pageResult = foundService.getFoundPage(pageReqVO);
|
||||
return success(BeanUtils.toBean(pageResult, FoundRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/export-excel")
|
||||
@Operation(summary = "导出大屏-可修改单项数据 Excel")
|
||||
@PreAuthorize("@ss.hasPermission('heli:found:export')")
|
||||
@OperateLog(type = EXPORT)
|
||||
public void exportFoundExcel(@Valid FoundPageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<FoundDO> list = foundService.getFoundPage(pageReqVO).getList();
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "大屏-可修改单项数据.xls", "数据", FoundRespVO.class,
|
||||
BeanUtils.toBean(list, FoundRespVO.class));
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,53 @@
|
||||
package com.chanko.yunxi.mes.module.heli.controller.admin.found.vo;
|
||||
|
||||
import lombok.*;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.*;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
|
||||
import java.math.BigDecimal;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static com.chanko.yunxi.mes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
|
||||
@Schema(description = "管理后台 - 大屏-可修改单项数据分页 Request VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class FoundPageReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "日期 格式 YYYYMMDD")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDate[] date;
|
||||
|
||||
@Schema(description = "是否开启mock模式 0 否 1是(针对订单交付准时率)")
|
||||
private Boolean openMock;
|
||||
|
||||
@Schema(description = "备注", example = "随便")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "状态,1表示正常,2表示禁用", example = "2")
|
||||
private Boolean status;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] createTime;
|
||||
|
||||
@Schema(description = "今日到岗人数")
|
||||
private Integer numPresent;
|
||||
|
||||
@Schema(description = "今日出差人数")
|
||||
private Integer numBusinessTrip;
|
||||
|
||||
@Schema(description = "当前设计项目数量")
|
||||
private Integer numDesign;
|
||||
|
||||
@Schema(description = "当前在制项目数量")
|
||||
private Integer numInProcess;
|
||||
|
||||
@Schema(description = "订单交付准时率")
|
||||
private BigDecimal deliRate;
|
||||
|
||||
}
|
||||
@ -0,0 +1,63 @@
|
||||
package com.chanko.yunxi.mes.module.heli.controller.admin.found.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.*;
|
||||
import java.util.*;
|
||||
import java.math.BigDecimal;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import com.alibaba.excel.annotation.*;
|
||||
|
||||
@Schema(description = "管理后台 - 大屏-可修改单项数据 Response VO")
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class FoundRespVO {
|
||||
|
||||
@Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "23355")
|
||||
@ExcelProperty("自增字段,唯一")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "日期 格式 YYYYMMDD")
|
||||
@ExcelProperty("日期 格式 YYYYMMDD")
|
||||
private LocalDate date;
|
||||
|
||||
@Schema(description = "是否开启mock模式 0 否 1是(针对订单交付准时率)", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("是否开启mock模式 0 否 1是(针对订单交付准时率)")
|
||||
private Boolean openMock;
|
||||
|
||||
@Schema(description = "备注", example = "随便")
|
||||
@ExcelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "状态,1表示正常,2表示禁用", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
|
||||
@ExcelProperty("状态,1表示正常,2表示禁用")
|
||||
private Boolean status;
|
||||
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@Schema(description = "今日到岗人数")
|
||||
@ExcelProperty("今日到岗人数")
|
||||
private Integer numPresent;
|
||||
|
||||
@Schema(description = "今日出差人数")
|
||||
@ExcelProperty("今日出差人数")
|
||||
private Integer numBusinessTrip;
|
||||
|
||||
@Schema(description = "当前设计项目数量")
|
||||
@ExcelProperty("当前设计项目数量")
|
||||
private Integer numDesign;
|
||||
|
||||
@Schema(description = "当前在制项目数量")
|
||||
@ExcelProperty("当前在制项目数量")
|
||||
private Integer numInProcess;
|
||||
|
||||
@Schema(description = "订单交付准时率")
|
||||
@ExcelProperty("订单交付准时率")
|
||||
private BigDecimal deliRate;
|
||||
|
||||
}
|
||||
@ -0,0 +1,48 @@
|
||||
package com.chanko.yunxi.mes.module.heli.controller.admin.found.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.*;
|
||||
import javax.validation.constraints.*;
|
||||
import java.util.*;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Schema(description = "管理后台 - 大屏-可修改单项数据新增/修改 Request VO")
|
||||
@Data
|
||||
public class FoundSaveReqVO {
|
||||
|
||||
@Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "23355")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "日期 格式 YYYYMMDD")
|
||||
private LocalDate date;
|
||||
|
||||
@Schema(description = "是否开启mock模式 0 否 1是(针对订单交付准时率)", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "是否开启mock模式 0 否 1是(针对订单交付准时率)不能为空")
|
||||
private Integer openMock;
|
||||
|
||||
@Schema(description = "备注", example = "随便")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "状态,1表示正常,2表示禁用", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
|
||||
@NotNull(message = "状态,1表示正常,2表示禁用不能为空")
|
||||
private Boolean status;
|
||||
|
||||
@Schema(description = "今日到岗人数")
|
||||
private Integer numPresent;
|
||||
|
||||
@Schema(description = "今日出差人数")
|
||||
private Integer numBusinessTrip;
|
||||
|
||||
@Schema(description = "当前设计项目数量")
|
||||
private Integer numDesign;
|
||||
|
||||
@Schema(description = "当前在制项目数量")
|
||||
private Integer numInProcess;
|
||||
|
||||
@Schema(description = "订单交付准时率")
|
||||
private BigDecimal deliRate;
|
||||
|
||||
}
|
||||
@ -115,7 +115,7 @@ public class MasterController {
|
||||
@OperateLog(type = EXPORT)
|
||||
public void exportMasterLine(@Valid MasterPageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
// pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<MasterLineDO> list = masterService.getMasterLinePage(pageReqVO).getList();
|
||||
list.forEach(item -> {
|
||||
if ("1".equals(item.getJyTypes())) {
|
||||
|
||||
@ -180,7 +180,7 @@ public class MaterialPlanController {
|
||||
@OperateLog(type = EXPORT)
|
||||
public void exportStandardParts(@Valid MaterialPlanPageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
// pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<MaterialPlanBoomDO> list = materialPlanService.getStandardPartsPages(pageReqVO).getList();
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "标准件库存.xlsx", "数据", MaterialPlanBoomExcelVo.class,
|
||||
|
||||
@ -104,10 +104,10 @@ public class MaterialPlanBoomController {
|
||||
@OperateLog(type = EXPORT)
|
||||
public void exportMaterialPlanBoomExcel(@Valid MaterialPlanBoomPageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
// pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<MaterialPlanBoomDO> list = materialPlanBoomService.getMaterialPlanBoomPage(pageReqVO).getList();
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "物料需求计划加工件明细.xls", "数据", MaterialPlanBoomRespVO.class,
|
||||
ExcelUtils.write(response, "物料需求计划加工件明细.xlsx", "数据", MaterialPlanBoomRespVO.class,
|
||||
BeanUtils.toBean(list, MaterialPlanBoomRespVO.class));
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,95 @@
|
||||
package com.chanko.yunxi.mes.module.heli.controller.admin.monordnum;
|
||||
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
|
||||
import javax.validation.constraints.*;
|
||||
import javax.validation.*;
|
||||
import javax.servlet.http.*;
|
||||
import java.util.*;
|
||||
import java.io.IOException;
|
||||
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
|
||||
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
|
||||
import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success;
|
||||
|
||||
import com.chanko.yunxi.mes.framework.excel.core.util.ExcelUtils;
|
||||
|
||||
import com.chanko.yunxi.mes.framework.operatelog.core.annotations.OperateLog;
|
||||
import static com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum.*;
|
||||
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.monordnum.vo.*;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.monordnum.MonOrdNumDO;
|
||||
import com.chanko.yunxi.mes.module.heli.service.monordnum.MonOrdNumService;
|
||||
|
||||
@Tag(name = "管理后台 - 大屏-月订单数量")
|
||||
@RestController
|
||||
@RequestMapping("/heli/mon-ord-num")
|
||||
@Validated
|
||||
public class MonOrdNumController {
|
||||
|
||||
@Resource
|
||||
private MonOrdNumService monOrdNumService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建大屏-月订单数量")
|
||||
@PreAuthorize("@ss.hasPermission('heli:mon-ord-num:create')")
|
||||
public CommonResult<Long> createMonOrdNum(@Valid @RequestBody MonOrdNumSaveReqVO createReqVO) {
|
||||
return success(monOrdNumService.createMonOrdNum(createReqVO));
|
||||
}
|
||||
|
||||
@PutMapping("/update")
|
||||
@Operation(summary = "更新大屏-月订单数量")
|
||||
@PreAuthorize("@ss.hasPermission('heli:mon-ord-num:update')")
|
||||
public CommonResult<Boolean> updateMonOrdNum(@Valid @RequestBody MonOrdNumSaveReqVO updateReqVO) {
|
||||
monOrdNumService.updateMonOrdNum(updateReqVO);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
@Operation(summary = "删除大屏-月订单数量")
|
||||
@Parameter(name = "id", description = "编号", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('heli:mon-ord-num:delete')")
|
||||
public CommonResult<Boolean> deleteMonOrdNum(@RequestParam("id") Long id) {
|
||||
monOrdNumService.deleteMonOrdNum(id);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得大屏-月订单数量")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('heli:mon-ord-num:query')")
|
||||
public CommonResult<MonOrdNumRespVO> getMonOrdNum(@RequestParam("id") Long id) {
|
||||
MonOrdNumDO monOrdNum = monOrdNumService.getMonOrdNum(id);
|
||||
return success(BeanUtils.toBean(monOrdNum, MonOrdNumRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得大屏-月订单数量分页")
|
||||
@PreAuthorize("@ss.hasPermission('heli:mon-ord-num:query')")
|
||||
public CommonResult<PageResult<MonOrdNumRespVO>> getMonOrdNumPage(@Valid MonOrdNumPageReqVO pageReqVO) {
|
||||
PageResult<MonOrdNumDO> pageResult = monOrdNumService.getMonOrdNumPage(pageReqVO);
|
||||
return success(BeanUtils.toBean(pageResult, MonOrdNumRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/export-excel")
|
||||
@Operation(summary = "导出大屏-月订单数量 Excel")
|
||||
@PreAuthorize("@ss.hasPermission('heli:mon-ord-num:export')")
|
||||
@OperateLog(type = EXPORT)
|
||||
public void exportMonOrdNumExcel(@Valid MonOrdNumPageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<MonOrdNumDO> list = monOrdNumService.getMonOrdNumPage(pageReqVO).getList();
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "大屏-月订单数量.xls", "数据", MonOrdNumRespVO.class,
|
||||
BeanUtils.toBean(list, MonOrdNumRespVO.class));
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,44 @@
|
||||
package com.chanko.yunxi.mes.module.heli.controller.admin.monordnum.vo;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static com.chanko.yunxi.mes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
|
||||
@Schema(description = "管理后台 - 大屏-月订单数量分页 Request VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class MonOrdNumPageReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "年份 格式 YYYY")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private String[] date;
|
||||
|
||||
@Schema(description = "是否开启mock模式 0 否 1是")
|
||||
private Boolean openMock;
|
||||
|
||||
@Schema(description = "月份")
|
||||
private String month;
|
||||
|
||||
@Schema(description = "黑色模具数量")
|
||||
private String blackMold;
|
||||
|
||||
@Schema(description = "有色模具数量")
|
||||
private String coloredMold;
|
||||
|
||||
@Schema(description = "备注", example = "你说的对")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "状态,1表示正常,2表示禁用", example = "2")
|
||||
private Boolean status;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] createTime;
|
||||
|
||||
}
|
||||
@ -0,0 +1,52 @@
|
||||
package com.chanko.yunxi.mes.module.heli.controller.admin.monordnum.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import java.util.*;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import com.alibaba.excel.annotation.*;
|
||||
|
||||
@Schema(description = "管理后台 - 大屏-月订单数量 Response VO")
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class MonOrdNumRespVO {
|
||||
|
||||
@Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "30335")
|
||||
@ExcelProperty("自增字段,唯一")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "年份 格式 YYYY", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("年份 格式 YYYY")
|
||||
private String date;
|
||||
|
||||
@Schema(description = "是否开启mock模式 0 否 1是", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("是否开启mock模式 0 否 1是")
|
||||
private Boolean openMock;
|
||||
|
||||
@Schema(description = "月份", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("月份")
|
||||
private String year;
|
||||
|
||||
@Schema(description = "黑色模具数量", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("黑色模具数量")
|
||||
private String blackMold;
|
||||
|
||||
@Schema(description = "有色模具数量", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("有色模具数量")
|
||||
private String coloredMold;
|
||||
|
||||
@Schema(description = "备注", example = "你说的对")
|
||||
@ExcelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "状态,1表示正常,2表示禁用", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
|
||||
@ExcelProperty("状态,1表示正常,2表示禁用")
|
||||
private Boolean status;
|
||||
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
}
|
||||
@ -0,0 +1,43 @@
|
||||
package com.chanko.yunxi.mes.module.heli.controller.admin.monordnum.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import javax.validation.constraints.*;
|
||||
import java.util.*;
|
||||
|
||||
@Schema(description = "管理后台 - 大屏-月订单数量新增/修改 Request VO")
|
||||
@Data
|
||||
public class MonOrdNumSaveReqVO {
|
||||
|
||||
@Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "30335")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "年份 格式 YYYY", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotEmpty(message = "年份 格式 YYYY不能为空")
|
||||
private String date;
|
||||
|
||||
@Schema(description = "是否开启mock模式 0 否 1是", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "是否开启mock模式 0 否 1是不能为空")
|
||||
private Boolean openMock;
|
||||
|
||||
@Schema(description = "月份", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotEmpty(message = "月份不能为空")
|
||||
private String year;
|
||||
|
||||
@Schema(description = "黑色模具数量", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotEmpty(message = "黑色模具数量不能为空")
|
||||
private String blackMold;
|
||||
|
||||
@Schema(description = "有色模具数量", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotEmpty(message = "有色模具数量不能为空")
|
||||
private String coloredMold;
|
||||
|
||||
@Schema(description = "备注", example = "你说的对")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "状态,1表示正常,2表示禁用", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
|
||||
@NotNull(message = "状态,1表示正常,2表示禁用不能为空")
|
||||
private Boolean status;
|
||||
|
||||
}
|
||||
@ -1,5 +1,6 @@
|
||||
package com.chanko.yunxi.mes.module.heli.controller.admin.orderyf;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
@ -86,15 +87,42 @@ public class OrderYfController {
|
||||
@OperateLog(type = EXPORT)
|
||||
public void exportOrderYfExcel(@Valid OrderYfPageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
// pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<OrderYfDO> list = orderYfService.getOrderYfPage(pageReqVO).getList();
|
||||
for (OrderYfDO order : list) {
|
||||
BigDecimal cgYifu = order.getCgYifu();
|
||||
BigDecimal cgYf = order.getCgYf();
|
||||
BigDecimal amount = order.getAmount();
|
||||
|
||||
if (ObjectUtil.isEmpty(cgYifu)){
|
||||
order.setCgSY(cgYf);
|
||||
}else {
|
||||
BigDecimal subtract = cgYf.subtract(cgYifu);
|
||||
if (subtract.compareTo(BigDecimal.ZERO) < 0){
|
||||
order.setSYAmount(BigDecimal.ZERO);
|
||||
}else {
|
||||
order.setSYAmount(subtract);
|
||||
}
|
||||
}
|
||||
if (ObjectUtil.isEmpty(amount)){
|
||||
order.setSYAmount(cgYf);
|
||||
}else {
|
||||
BigDecimal subtract = cgYf.subtract(amount);
|
||||
if (subtract.compareTo(BigDecimal.ZERO) < 0){
|
||||
order.setSYAmount(BigDecimal.ZERO);
|
||||
}else {
|
||||
order.setSYAmount(subtract);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
// 快速失败检查:任一为null或分母为0
|
||||
if (cgYifu == null || cgYf == null || cgYf.signum() == 0) {
|
||||
order.setYfRatio("0%");
|
||||
if (amount == null || cgYf == null || cgYf.signum() == 0) {
|
||||
order.setYkRatio("0%");
|
||||
continue;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -106,7 +134,6 @@ public class OrderYfController {
|
||||
int percent = (int) Math.round((numerator / denominator) * 100);
|
||||
order.setYfRatio(percent + "%");
|
||||
|
||||
BigDecimal amount = order.getAmount();
|
||||
|
||||
// 快速失败检查:任一为null或分母为0
|
||||
if (amount == null || cgYf == null || cgYf.signum() == 0) {
|
||||
|
||||
@ -41,12 +41,18 @@ public class OrderYfRespVO {
|
||||
@Schema(description = "已付金额")
|
||||
@ExcelProperty("已付金额(元)")
|
||||
private BigDecimal cgYifu;
|
||||
@Schema(description = "剩余金额(元)")
|
||||
@ExcelProperty("剩余金额(元)")
|
||||
private BigDecimal cgSY;
|
||||
@Schema(description = "已付款比例")
|
||||
@ExcelProperty("已付款比例")
|
||||
private String yfRatio;
|
||||
@Schema(description = "已开票金额")
|
||||
@ExcelProperty("已开票金额(元)")
|
||||
private BigDecimal amount;
|
||||
@Schema(description = "剩余开票金额(元)")
|
||||
@ExcelProperty("剩余开票金额(元)")
|
||||
private BigDecimal SYAmount;
|
||||
@Schema(description = "已开票比例")
|
||||
@ExcelProperty("已开票比例")
|
||||
private String ykRatio;
|
||||
|
||||
@ -90,15 +90,21 @@ public class OrderYsController {
|
||||
@OperateLog(type = EXPORT)
|
||||
public void exportOrderYsExcel(@Valid OrderYsPageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
// pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<OrderYsDO> list = orderYsService.getOrderYsPage(pageReqVO).getList();
|
||||
for (OrderYsDO order : list) {
|
||||
BigDecimal yishou = order.getCgYishou();
|
||||
BigDecimal cgYs = order.getCgYs();
|
||||
BigDecimal amount = order.getAmount();
|
||||
|
||||
// 快速失败检查:任一为null或分母为0
|
||||
if (yishou == null || cgYs == null || cgYs.signum() == 0) {
|
||||
order.setYsRatio("0%");
|
||||
if (amount == null || cgYs == null || cgYs.signum() == 0) {
|
||||
order.setYkRatio("0%");
|
||||
continue;
|
||||
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -110,12 +116,12 @@ public class OrderYsController {
|
||||
int percent = (int) Math.round((numerator / denominator) * 100);
|
||||
order.setYsRatio(percent + "%");
|
||||
|
||||
BigDecimal amount = order.getAmount();
|
||||
|
||||
// 快速失败检查:任一为null或分母为0
|
||||
if (amount == null || cgYs == null || cgYs.signum() == 0) {
|
||||
order.setYkRatio("0%");
|
||||
continue;
|
||||
|
||||
}
|
||||
|
||||
// 使用double直接计算避免BigDecimal开销
|
||||
@ -144,7 +150,7 @@ public class OrderYsController {
|
||||
@OperateLog(type = EXPORT)
|
||||
public void exportDetails(@Valid OrderYsPageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
// pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<OrderYsDOVo> list = orderYsService.getDetails(pageReqVO).getList();
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "回款明细查询.xlsx", "数据", OrderYsDOVo.class,
|
||||
|
||||
@ -0,0 +1,95 @@
|
||||
package com.chanko.yunxi.mes.module.heli.controller.admin.process;
|
||||
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
|
||||
import javax.validation.constraints.*;
|
||||
import javax.validation.*;
|
||||
import javax.servlet.http.*;
|
||||
import java.util.*;
|
||||
import java.io.IOException;
|
||||
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
|
||||
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
|
||||
import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success;
|
||||
|
||||
import com.chanko.yunxi.mes.framework.excel.core.util.ExcelUtils;
|
||||
|
||||
import com.chanko.yunxi.mes.framework.operatelog.core.annotations.OperateLog;
|
||||
import static com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum.*;
|
||||
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.process.vo.*;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.process.ProcessDO;
|
||||
import com.chanko.yunxi.mes.module.heli.service.process.ProcessService;
|
||||
|
||||
@Tag(name = "管理后台 - 大屏-设计、装配、加工进度")
|
||||
@RestController
|
||||
@RequestMapping("/heli/process")
|
||||
@Validated
|
||||
public class ProcessController {
|
||||
|
||||
@Resource
|
||||
private ProcessService processService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建大屏-设计、装配、加工进度")
|
||||
@PreAuthorize("@ss.hasPermission('heli:process:create')")
|
||||
public CommonResult<Long> createProcess(@Valid @RequestBody ProcessSaveReqVO createReqVO) {
|
||||
return success(processService.createProcess(createReqVO));
|
||||
}
|
||||
|
||||
@PutMapping("/update")
|
||||
@Operation(summary = "更新大屏-设计、装配、加工进度")
|
||||
@PreAuthorize("@ss.hasPermission('heli:process:update')")
|
||||
public CommonResult<Boolean> updateProcess(@Valid @RequestBody ProcessSaveReqVO updateReqVO) {
|
||||
processService.updateProcess(updateReqVO);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
@Operation(summary = "删除大屏-设计、装配、加工进度")
|
||||
@Parameter(name = "id", description = "编号", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('heli:process:delete')")
|
||||
public CommonResult<Boolean> deleteProcess(@RequestParam("id") Long id) {
|
||||
processService.deleteProcess(id);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得大屏-设计、装配、加工进度")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('heli:process:query')")
|
||||
public CommonResult<ProcessRespVO> getProcess(@RequestParam("id") Long id) {
|
||||
ProcessDO process = processService.getProcess(id);
|
||||
return success(BeanUtils.toBean(process, ProcessRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得大屏-设计、装配、加工进度分页")
|
||||
@PreAuthorize("@ss.hasPermission('heli:process:query')")
|
||||
public CommonResult<PageResult<ProcessRespVO>> getProcessPage(@Valid ProcessPageReqVO pageReqVO) {
|
||||
PageResult<ProcessDO> pageResult = processService.getProcessPage(pageReqVO);
|
||||
return success(BeanUtils.toBean(pageResult, ProcessRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/export-excel")
|
||||
@Operation(summary = "导出大屏-设计、装配、加工进度 Excel")
|
||||
@PreAuthorize("@ss.hasPermission('heli:process:export')")
|
||||
@OperateLog(type = EXPORT)
|
||||
public void exportProcessExcel(@Valid ProcessPageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<ProcessDO> list = processService.getProcessPage(pageReqVO).getList();
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "大屏-设计、装配、加工进度.xls", "数据", ProcessRespVO.class,
|
||||
BeanUtils.toBean(list, ProcessRespVO.class));
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,38 @@
|
||||
package com.chanko.yunxi.mes.module.heli.controller.admin.process.vo;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static com.chanko.yunxi.mes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
|
||||
@Schema(description = "管理后台 - 大屏-设计、装配、加工进度分页 Request VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class ProcessPageReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "年份 格式 YYYY")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private String[] date;
|
||||
|
||||
@Schema(description = "是否开启mock模式 0 否 1是")
|
||||
private Boolean openMock;
|
||||
|
||||
@Schema(description = "备注", example = "你说的对")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "状态,1表示正常,2表示禁用", example = "2")
|
||||
private Boolean status;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] createTime;
|
||||
|
||||
@Schema(description = "进度类型(1、设计 2、生产 3、装配 4、采购)", example = "1")
|
||||
private Boolean processType;
|
||||
|
||||
}
|
||||
@ -0,0 +1,44 @@
|
||||
package com.chanko.yunxi.mes.module.heli.controller.admin.process.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import java.util.*;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import com.alibaba.excel.annotation.*;
|
||||
|
||||
@Schema(description = "管理后台 - 大屏-设计、装配、加工进度 Response VO")
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class ProcessRespVO {
|
||||
|
||||
@Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "26575")
|
||||
@ExcelProperty("自增字段,唯一")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "年份 格式 YYYY")
|
||||
@ExcelProperty("年份 格式 YYYY")
|
||||
private String date;
|
||||
|
||||
@Schema(description = "是否开启mock模式 0 否 1是", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("是否开启mock模式 0 否 1是")
|
||||
private Boolean openMock;
|
||||
|
||||
@Schema(description = "备注", example = "你说的对")
|
||||
@ExcelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "状态,1表示正常,2表示禁用", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
|
||||
@ExcelProperty("状态,1表示正常,2表示禁用")
|
||||
private Boolean status;
|
||||
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@Schema(description = "进度类型(1、设计 2、生产 3、装配 4、采购)", example = "1")
|
||||
@ExcelProperty("进度类型(1、设计 2、生产 3、装配 4、采购)")
|
||||
private Boolean processType;
|
||||
|
||||
}
|
||||
@ -0,0 +1,33 @@
|
||||
package com.chanko.yunxi.mes.module.heli.controller.admin.process.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import javax.validation.constraints.*;
|
||||
import java.util.*;
|
||||
|
||||
@Schema(description = "管理后台 - 大屏-设计、装配、加工进度新增/修改 Request VO")
|
||||
@Data
|
||||
public class ProcessSaveReqVO {
|
||||
|
||||
@Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "26575")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "年份 格式 YYYY")
|
||||
private String date;
|
||||
|
||||
@Schema(description = "是否开启mock模式 0 否 1是", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "是否开启mock模式 0 否 1是不能为空")
|
||||
private Boolean openMock;
|
||||
|
||||
@Schema(description = "备注", example = "你说的对")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "状态,1表示正常,2表示禁用", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
|
||||
@NotNull(message = "状态,1表示正常,2表示禁用不能为空")
|
||||
private Boolean status;
|
||||
|
||||
@Schema(description = "进度类型(1、设计 2、生产 3、装配 4、采购)", example = "1")
|
||||
private Boolean processType;
|
||||
|
||||
}
|
||||
@ -1,6 +1,7 @@
|
||||
package com.chanko.yunxi.mes.module.heli.controller.admin.processbom;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.chanko.yunxi.mes.framework.common.enums.BomEditStatusEnum;
|
||||
import com.chanko.yunxi.mes.framework.common.enums.StatusEnum;
|
||||
@ -172,8 +173,13 @@ public class ProcessBomController {
|
||||
@PreAuthorize("@ss.hasPermission('system:user:import')")
|
||||
@OperateLog(type = EXPORT)
|
||||
public void exportProcessBomExcel(@Valid ProcessBomPageReqVO pageReqVO, HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<ProcessBomDetailDO> list = processBomService.getProcessBomPageNew(pageReqVO).getList();
|
||||
// pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
PageResult<ProcessBomDO> pageResult = processBomService.getProcessBomPage(pageReqVO);
|
||||
List<Long> collect = new ArrayList<>();
|
||||
if (ObjectUtil.isNotEmpty(pageResult.getList())){
|
||||
collect = pageResult.getList().stream().map(ProcessBomDO::getId).collect(Collectors.toList());
|
||||
}
|
||||
List<ProcessBomDetailDO> list = processBomService.getProcessBomExcel(collect);
|
||||
HashMap<String, String> unitDictData = processBomService.getUnitDictData();
|
||||
List<ProcessBomImportExcelVO> excelVOList = list.stream()
|
||||
.map(processBomDO -> {
|
||||
@ -203,7 +209,7 @@ public class ProcessBomController {
|
||||
.collect(Collectors.toList());
|
||||
// 导出 Excel
|
||||
try {
|
||||
ExcelUtils.write(response, "工艺bom.xls", "数据", ProcessBomImportExcelVO.class, BeanUtils.toBean(excelVOList, ProcessBomImportExcelVO.class));
|
||||
ExcelUtils.write(response, "工艺bom.xlsx", "数据", ProcessBomImportExcelVO.class, BeanUtils.toBean(excelVOList, ProcessBomImportExcelVO.class));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
@ -124,7 +124,7 @@ public class ProcessDesignController {
|
||||
@OperateLog(type = EXPORT)
|
||||
public void exportProcessDesignExcels(@Valid ProcessDesignPageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
// pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
|
||||
List<ProcessDesignDO> list = processDesignService.getExportExcel(pageReqVO).getList();
|
||||
// 导出 Excel
|
||||
|
||||
@ -0,0 +1,111 @@
|
||||
package com.chanko.yunxi.mes.module.heli.controller.admin.processdetail;
|
||||
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
|
||||
import javax.validation.constraints.*;
|
||||
import javax.validation.*;
|
||||
import javax.servlet.http.*;
|
||||
import java.util.*;
|
||||
import java.io.IOException;
|
||||
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
|
||||
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
|
||||
import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success;
|
||||
|
||||
import com.chanko.yunxi.mes.framework.excel.core.util.ExcelUtils;
|
||||
|
||||
import com.chanko.yunxi.mes.framework.operatelog.core.annotations.OperateLog;
|
||||
import static com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum.*;
|
||||
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.processdetail.vo.*;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processdetail.ProcessDetailDO;
|
||||
import com.chanko.yunxi.mes.module.heli.service.processdetail.ProcessDetailService;
|
||||
|
||||
@Tag(name = "管理后台 - 大屏-设计、装配、加工进度子")
|
||||
@RestController
|
||||
@RequestMapping("/heli/process-detail")
|
||||
@Validated
|
||||
public class ProcessDetailController {
|
||||
|
||||
@Resource
|
||||
private ProcessDetailService processDetailService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建大屏-设计、装配、加工进度子")
|
||||
@PreAuthorize("@ss.hasPermission('heli:process-detail:create')")
|
||||
public CommonResult<Long> createProcessDetail(@Valid @RequestBody ProcessDetailSaveReqVO createReqVO) {
|
||||
return success(processDetailService.createProcessDetail(createReqVO));
|
||||
}
|
||||
|
||||
@PutMapping("/update")
|
||||
@Operation(summary = "更新大屏-设计、装配、加工进度子")
|
||||
@PreAuthorize("@ss.hasPermission('heli:process-detail:update')")
|
||||
public CommonResult<Boolean> updateProcessDetail(@Valid @RequestBody ProcessDetailSaveReqVO updateReqVO) {
|
||||
processDetailService.updateProcessDetail(updateReqVO);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
@Operation(summary = "删除大屏-设计、装配、加工进度子")
|
||||
@Parameter(name = "id", description = "编号", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('heli:process-detail:delete')")
|
||||
public CommonResult<Boolean> deleteProcessDetail(@RequestParam("id") Long id) {
|
||||
processDetailService.deleteProcessDetail(id);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得大屏-设计、装配、加工进度子")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('heli:process-detail:query')")
|
||||
public CommonResult<ProcessDetailRespVO> getProcessDetail(@RequestParam("id") Long id) {
|
||||
ProcessDetailDO processDetail = processDetailService.getProcessDetail(id);
|
||||
return success(BeanUtils.toBean(processDetail, ProcessDetailRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得大屏-设计、装配、加工进度子分页")
|
||||
@PreAuthorize("@ss.hasPermission('heli:process-detail:query')")
|
||||
public CommonResult<PageResult<ProcessDetailRespVO>> getProcessDetailPage(@Valid ProcessDetailPageReqVO pageReqVO) {
|
||||
PageResult<ProcessDetailDO> pageResult = processDetailService.getProcessDetailPage(pageReqVO);
|
||||
return success(BeanUtils.toBean(pageResult, ProcessDetailRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/export-excel")
|
||||
@Operation(summary = "导出大屏-设计、装配、加工进度子 Excel")
|
||||
@PreAuthorize("@ss.hasPermission('heli:process-detail:export')")
|
||||
@OperateLog(type = EXPORT)
|
||||
public void exportProcessDetailExcel(@Valid ProcessDetailPageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<ProcessDetailDO> list = processDetailService.getProcessDetailPage(pageReqVO).getList();
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "大屏-设计、装配、加工进度子.xls", "数据", ProcessDetailRespVO.class,
|
||||
BeanUtils.toBean(list, ProcessDetailRespVO.class));
|
||||
}
|
||||
@GetMapping("/searchProgress")
|
||||
@Operation(summary = "获得进度")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('heli:process-detail:query')")
|
||||
public CommonResult<List<ProcessDetailDO>> searchProgress(@RequestParam("type") Integer type) {
|
||||
List<ProcessDetailDO> list= processDetailService.searchProgress(type);
|
||||
return success(list);
|
||||
}
|
||||
|
||||
@PutMapping("/updateProcessDetail")
|
||||
@Operation(summary = "更新大屏-设计、装配、加工进度子")
|
||||
@PreAuthorize("@ss.hasPermission('heli:process-detail:update')")
|
||||
public CommonResult<Boolean> update(@RequestBody List<ProcessDetailDO> list) {
|
||||
processDetailService.update(list);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,65 @@
|
||||
package com.chanko.yunxi.mes.module.heli.controller.admin.processdetail.vo;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static com.chanko.yunxi.mes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
|
||||
@Schema(description = "管理后台 - 大屏-设计、装配、加工进度子分页 Request VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class ProcessDetailPageReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "年份 格式 YYYY")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private String[] date;
|
||||
|
||||
@Schema(description = "备注", example = "你猜")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "状态,1表示正常,2表示禁用", example = "2")
|
||||
private Boolean status;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] createTime;
|
||||
|
||||
@Schema(description = "项目名称", example = "王五")
|
||||
private String projectName;
|
||||
|
||||
@Schema(description = "项目名称简码")
|
||||
private String projectNameSim;
|
||||
|
||||
@Schema(description = "项目开始时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] projectStartTime;
|
||||
|
||||
@Schema(description = "项目结束时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] projectEndTime;
|
||||
|
||||
@Schema(description = "项目进度")
|
||||
private Integer projectProcess;
|
||||
|
||||
@Schema(description = "发货状态 未发货/部分发货/全部发货", example = "1")
|
||||
private Boolean deliveryStatus;
|
||||
|
||||
@Schema(description = "是否延期 1-是 0-否")
|
||||
private String isExten;
|
||||
|
||||
@Schema(description = "是否选择 1-是 0-否")
|
||||
private String isSelect;
|
||||
|
||||
@Schema(description = "订单日期")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] ordDate;
|
||||
|
||||
@Schema(description = "项目id", example = "5162")
|
||||
private Long projectId;
|
||||
|
||||
}
|
||||
@ -0,0 +1,76 @@
|
||||
package com.chanko.yunxi.mes.module.heli.controller.admin.processdetail.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import java.util.*;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import com.alibaba.excel.annotation.*;
|
||||
|
||||
@Schema(description = "管理后台 - 大屏-设计、装配、加工进度子 Response VO")
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class ProcessDetailRespVO {
|
||||
|
||||
@Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "18035")
|
||||
@ExcelProperty("自增字段,唯一")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "年份 格式 YYYY")
|
||||
@ExcelProperty("年份 格式 YYYY")
|
||||
private String date;
|
||||
|
||||
@Schema(description = "备注", example = "你猜")
|
||||
@ExcelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "状态,1表示正常,2表示禁用", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
|
||||
@ExcelProperty("状态,1表示正常,2表示禁用")
|
||||
private Boolean status;
|
||||
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@Schema(description = "项目名称", example = "王五")
|
||||
@ExcelProperty("项目名称")
|
||||
private String projectName;
|
||||
|
||||
@Schema(description = "项目名称简码")
|
||||
@ExcelProperty("项目名称简码")
|
||||
private String projectNameSim;
|
||||
|
||||
@Schema(description = "项目开始时间")
|
||||
@ExcelProperty("项目开始时间")
|
||||
private LocalDateTime projectStartTime;
|
||||
|
||||
@Schema(description = "项目结束时间")
|
||||
@ExcelProperty("项目结束时间")
|
||||
private LocalDateTime projectEndTime;
|
||||
|
||||
@Schema(description = "项目进度")
|
||||
@ExcelProperty("项目进度")
|
||||
private Integer projectProcess;
|
||||
|
||||
@Schema(description = "发货状态 未发货/部分发货/全部发货", example = "1")
|
||||
@ExcelProperty("发货状态 未发货/部分发货/全部发货")
|
||||
private Boolean deliveryStatus;
|
||||
|
||||
@Schema(description = "是否延期 1-是 0-否")
|
||||
@ExcelProperty("是否延期 1-是 0-否")
|
||||
private String isExten;
|
||||
|
||||
@Schema(description = "是否选择 1-是 0-否")
|
||||
@ExcelProperty("是否选择 1-是 0-否")
|
||||
private String isSelect;
|
||||
|
||||
@Schema(description = "订单日期")
|
||||
@ExcelProperty("订单日期")
|
||||
private LocalDateTime ordDate;
|
||||
|
||||
@Schema(description = "项目id", example = "5162")
|
||||
@ExcelProperty("项目id")
|
||||
private Long projectId;
|
||||
|
||||
}
|
||||
@ -0,0 +1,58 @@
|
||||
package com.chanko.yunxi.mes.module.heli.controller.admin.processdetail.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import javax.validation.constraints.*;
|
||||
import java.util.*;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Schema(description = "管理后台 - 大屏-设计、装配、加工进度子新增/修改 Request VO")
|
||||
@Data
|
||||
public class ProcessDetailSaveReqVO {
|
||||
|
||||
@Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "18035")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "年份 格式 YYYY")
|
||||
private String date;
|
||||
|
||||
@Schema(description = "备注", example = "你猜")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "状态,1表示正常,2表示禁用", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
|
||||
@NotNull(message = "状态,1表示正常,2表示禁用不能为空")
|
||||
private Boolean status;
|
||||
|
||||
@Schema(description = "项目名称", example = "王五")
|
||||
private String projectName;
|
||||
|
||||
@Schema(description = "项目名称简码")
|
||||
private String projectNameSim;
|
||||
|
||||
@Schema(description = "项目开始时间")
|
||||
private LocalDateTime projectStartTime;
|
||||
|
||||
@Schema(description = "项目结束时间")
|
||||
private LocalDateTime projectEndTime;
|
||||
|
||||
@Schema(description = "项目进度")
|
||||
private Integer projectProcess;
|
||||
|
||||
@Schema(description = "发货状态 未发货/部分发货/全部发货", example = "1")
|
||||
private Boolean deliveryStatus;
|
||||
|
||||
@Schema(description = "是否延期 1-是 0-否")
|
||||
private String isExten;
|
||||
|
||||
@Schema(description = "是否选择 1-是 0-否")
|
||||
private String isSelect;
|
||||
|
||||
@Schema(description = "订单日期")
|
||||
private LocalDateTime ordDate;
|
||||
|
||||
@Schema(description = "项目id", example = "5162")
|
||||
private Long projectId;
|
||||
|
||||
}
|
||||
@ -34,6 +34,7 @@ import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.security.core.parameters.P;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
@ -44,6 +45,7 @@ import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.Valid;
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
@ -259,8 +261,21 @@ public class ProjectOrderController {
|
||||
HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<ProjectOrderDO> list = projectOrderService.getProjectOrderPage(pageReqVO).getList();
|
||||
for (ProjectOrderDO projectOrderDO : list) {
|
||||
if (projectOrderDO.getHasPrice()==1){
|
||||
if (ObjectUtil.isNotEmpty(projectOrderDO.getPrice())) {
|
||||
projectOrderDO.setHasPrices(projectOrderDO.getPrice().toString());
|
||||
}
|
||||
}else{
|
||||
projectOrderDO.setHasPrices("否");
|
||||
}
|
||||
DeliverOrderDO deliverOrder = deliverOrderService.getDeliverOrderId(projectOrderDO.getId());
|
||||
if (ObjectUtil.isNotEmpty(deliverOrder)){
|
||||
projectOrderDO.setMaxDeliverDate(deliverOrder.getDeliverDate());
|
||||
}
|
||||
}
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "项目订单.xls", "数据", ProjectOrderExportVO.class,
|
||||
ExcelUtils.write(response, "项目订单.xlsx", "数据", ProjectOrderExportVO.class,
|
||||
BeanUtils.toBean(list, ProjectOrderExportVO.class));
|
||||
}
|
||||
|
||||
|
||||
@ -36,10 +36,12 @@ public class ProjectOrderExportVO {
|
||||
private String projectName;
|
||||
|
||||
@Schema(description = "是否有价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "28491")
|
||||
@ExcelProperty(value = "是否有价格", converter = DictConvert.class)
|
||||
// @ExcelProperty(value = "是否有价格", converter = DictConvert.class)
|
||||
@DictFormat("heli_common_is_or_not") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
|
||||
private Integer hasPrice;
|
||||
|
||||
@Schema(description = "是否有价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "28491")
|
||||
@ExcelProperty(value = "是否有价格")
|
||||
private String hasPrices;
|
||||
@Schema(description = "是否紧急", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty(value = "是否紧急", converter = DictConvert.class)
|
||||
@DictFormat("heli_common_is_or_not") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
|
||||
@ -62,7 +64,12 @@ public class ProjectOrderExportVO {
|
||||
@ExcelProperty(value = "单据状态", converter = DictConvert.class)
|
||||
@DictFormat("heli_project_order_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
|
||||
private Integer orderStatus;
|
||||
|
||||
@Schema(description = "业务员", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
|
||||
@ExcelProperty("业务员")
|
||||
private String businessManName;
|
||||
@Schema(description = "发货日期")
|
||||
@ExcelProperty(value = "发货日期", converter = TimestampToDateConvert.class)
|
||||
private LocalDateTime maxDeliverDate;
|
||||
@Schema(description = "发货状态 未发货/部分发货/全部发货", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
@ExcelProperty(value = "发货状态", converter = DictConvert.class)
|
||||
@DictFormat("heli_delivery_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
|
||||
|
||||
@ -12,15 +12,21 @@ import com.chanko.yunxi.mes.framework.tenant.core.aop.TenantIgnore;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.screen.vo.ScreenPageReqVO;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.screen.vo.ScreenRespVO;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.screen.vo.ScreenSaveReqVO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.found.FoundDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.monordnum.MonOrdNumDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processdetail.ProcessDetailDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.screen.ScreenDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.yearnum.YearNumDO;
|
||||
import com.chanko.yunxi.mes.module.heli.service.screen.ScreenService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.annotation.Resource;
|
||||
import javax.annotation.security.PermitAll;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
@ -113,25 +119,42 @@ public class ScreenController {
|
||||
BeanUtils.toBean(list, ScreenRespVO.class));
|
||||
}
|
||||
@GetMapping("/searchUnfinished")
|
||||
@Operation(summary = "获得未完成设计以及为发货的子项目数量")
|
||||
@Operation(summary = "查询未完成设计以及为发货的子项目数量")
|
||||
@PermitAll
|
||||
@OperateLog(enable = false)
|
||||
public CommonResult<Map<String,Long>> searchUnfinished() {
|
||||
public CommonResult<FoundDO> searchUnfinished() {
|
||||
return success(screenService.searchUnfinished());
|
||||
}
|
||||
|
||||
@GetMapping("/searchOrderInformation")
|
||||
@Operation(summary = "获得按月份的订单数量")
|
||||
@Operation(summary = "查询按月份的订单数量")
|
||||
@PermitAll
|
||||
@OperateLog(enable = false)
|
||||
public CommonResult<Map<String,Map<String, Integer>>> searchOrderInformation() {
|
||||
public CommonResult<List<MonOrdNumDO>> searchOrderInformation() {
|
||||
return success(screenService.searchOrderInformation());
|
||||
}
|
||||
@GetMapping("/searchOrderByYear")
|
||||
@Operation(summary = "获得按年的订单数量")
|
||||
@Operation(summary = "查询按年的订单数量")
|
||||
@PermitAll
|
||||
@OperateLog(enable = false)
|
||||
public CommonResult<Map<String,Integer>> searchOrderByYear() {
|
||||
public CommonResult<List<YearNumDO>> searchOrderByYear() {
|
||||
return success(screenService.searchOrderByYear());
|
||||
}
|
||||
@GetMapping("/searchProgress")
|
||||
@Operation(summary = "查询进度")
|
||||
@PermitAll
|
||||
@OperateLog(enable = false)
|
||||
public CommonResult<List<ProcessDetailDO>> searchOrderByYear(@RequestParam("type") Integer type) {
|
||||
return success(screenService.searchProgress(type));
|
||||
}
|
||||
/**
|
||||
* 定时任务更新大屏数据
|
||||
*/
|
||||
// @Scheduled(cron = "0 0 * * * ?")
|
||||
// @PostConstruct
|
||||
@Scheduled(cron = "0 0 1 * * ?")
|
||||
@Operation(summary = "定时任务更新大屏数据")
|
||||
public void updateLargeScreenData(){
|
||||
screenService.updateLargeScreenData();
|
||||
}
|
||||
}
|
||||
|
||||
@ -96,10 +96,10 @@ public class ShenheController {
|
||||
@OperateLog(type = EXPORT)
|
||||
public void exportShenheExcel(@Valid ShenhePageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
// pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<ShenheDO> list = shenheService.getShenhePage(pageReqVO).getList();
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "审核.xls", "数据", ShenheRespVO.class,
|
||||
ExcelUtils.write(response, "审核.xlsx", "数据", ShenheRespVO.class,
|
||||
BeanUtils.toBean(list, ShenheRespVO.class));
|
||||
}
|
||||
|
||||
|
||||
@ -94,10 +94,17 @@ public class TaskReportController {
|
||||
@OperateLog(type = EXPORT)
|
||||
public void exportTaskReportExcel(@Valid TaskReportPageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
// pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<TaskReportDO> list = taskReportService.getTaskReportPage(pageReqVO).getList();
|
||||
for (TaskReportDO taskReportDO : list) {
|
||||
if ("2".equals(taskReportDO.getProcedureStatus())){
|
||||
taskReportDO.setReportProcess("报工完成");
|
||||
}else {
|
||||
taskReportDO.setReportProcess("已报工");
|
||||
}
|
||||
}
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "每日报工记录.xls", "数据", TaskReportRespVO.class,
|
||||
ExcelUtils.write(response, "每日报工记录.xlsx", "数据", TaskReportRespVO.class,
|
||||
BeanUtils.toBean(list, TaskReportRespVO.class));
|
||||
}
|
||||
|
||||
|
||||
@ -56,6 +56,9 @@ public class TaskReportRespVO {
|
||||
@Schema(description = "报工人")
|
||||
@ExcelProperty("报工人")
|
||||
private String ownerName;
|
||||
@Schema(description = "报工进度")
|
||||
@ExcelProperty("报工进度")
|
||||
private String reportProcess;
|
||||
@Schema(description = "原因说明")
|
||||
@ExcelProperty("原因说明")
|
||||
private String remark;
|
||||
@ -106,8 +109,6 @@ public class TaskReportRespVO {
|
||||
@Schema(description = "单位")
|
||||
private String unit;
|
||||
|
||||
@Schema(description = "报工状态")
|
||||
private String reportProcess;
|
||||
|
||||
private String procedureStatus;
|
||||
|
||||
|
||||
@ -287,10 +287,10 @@ public class UnqualifiedNotificationController {
|
||||
@OperateLog(type = EXPORT)
|
||||
public void exportStatisticPage(@Valid UnqualifiedNotificationPageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
// pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<QualityStatistics> list = unqualifiedNotificationService.getUnqualifiedNotificationStatisticPage(pageReqVO).getList();
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "质量异常统计.xls", "数据", QualityStatistics.class,
|
||||
ExcelUtils.write(response, "质量异常统计.xlsx", "数据", QualityStatistics.class,
|
||||
BeanUtils.toBean(list, QualityStatistics.class));
|
||||
}
|
||||
@PostMapping("/review")
|
||||
|
||||
@ -0,0 +1,101 @@
|
||||
package com.chanko.yunxi.mes.module.heli.controller.admin.yearnum;
|
||||
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
|
||||
import javax.validation.constraints.*;
|
||||
import javax.validation.*;
|
||||
import javax.servlet.http.*;
|
||||
import java.util.*;
|
||||
import java.io.IOException;
|
||||
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
|
||||
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
|
||||
import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success;
|
||||
|
||||
import com.chanko.yunxi.mes.framework.excel.core.util.ExcelUtils;
|
||||
|
||||
import com.chanko.yunxi.mes.framework.operatelog.core.annotations.OperateLog;
|
||||
import static com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum.*;
|
||||
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.yearnum.vo.*;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.yearnum.YearNumDO;
|
||||
import com.chanko.yunxi.mes.module.heli.service.yearnum.YearNumService;
|
||||
|
||||
@Tag(name = "管理后台 - 大屏-近五年订单数量")
|
||||
@RestController
|
||||
@RequestMapping("/heli/year-num")
|
||||
@Validated
|
||||
public class YearNumController {
|
||||
|
||||
@Resource
|
||||
private YearNumService yearNumService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建大屏-近五年订单数量")
|
||||
@PreAuthorize("@ss.hasPermission('heli:year-num:create')")
|
||||
public CommonResult<Long> createYearNum(@Valid @RequestBody YearNumSaveReqVO createReqVO) {
|
||||
return success(yearNumService.createYearNum(createReqVO));
|
||||
}
|
||||
|
||||
@PutMapping("/update")
|
||||
@Operation(summary = "更新大屏-近五年订单数量")
|
||||
@PreAuthorize("@ss.hasPermission('heli:year-num:update')")
|
||||
public CommonResult<Boolean> updateYearNum(@Valid @RequestBody YearNumSaveReqVO updateReqVO) {
|
||||
yearNumService.updateYearNum(updateReqVO);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
@Operation(summary = "删除大屏-近五年订单数量")
|
||||
@Parameter(name = "id", description = "编号", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('heli:year-num:delete')")
|
||||
public CommonResult<Boolean> deleteYearNum(@RequestParam("id") Long id) {
|
||||
yearNumService.deleteYearNum(id);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得大屏-近五年订单数量")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('heli:year-num:query')")
|
||||
public CommonResult<YearNumRespVO> getYearNum(@RequestParam("id") Long id) {
|
||||
YearNumDO yearNum = yearNumService.getYearNum(id);
|
||||
return success(BeanUtils.toBean(yearNum, YearNumRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得大屏-近五年订单数量分页")
|
||||
@PreAuthorize("@ss.hasPermission('heli:year-num:query')")
|
||||
public CommonResult<PageResult<YearNumRespVO>> getYearNumPage(@Valid YearNumPageReqVO pageReqVO) {
|
||||
PageResult<YearNumDO> pageResult = yearNumService.getYearNumPage(pageReqVO);
|
||||
return success(BeanUtils.toBean(pageResult, YearNumRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/export-excel")
|
||||
@Operation(summary = "导出大屏-近五年订单数量 Excel")
|
||||
@PreAuthorize("@ss.hasPermission('heli:year-num:export')")
|
||||
@OperateLog(type = EXPORT)
|
||||
public void exportYearNumExcel(@Valid YearNumPageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<YearNumDO> list = yearNumService.getYearNumPage(pageReqVO).getList();
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "大屏-近五年订单数量.xls", "数据", YearNumRespVO.class,
|
||||
BeanUtils.toBean(list, YearNumRespVO.class));
|
||||
}
|
||||
@PutMapping("/updateYearNum")
|
||||
@Operation(summary = "更新大屏-近五年订单数量")
|
||||
@PreAuthorize("@ss.hasPermission('heli:year-num:update')")
|
||||
public CommonResult<Boolean> updateYearNum(@RequestBody List<YearNumDO> list) {
|
||||
yearNumService.update(list);
|
||||
return success(true);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,38 @@
|
||||
package com.chanko.yunxi.mes.module.heli.controller.admin.yearnum.vo;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static com.chanko.yunxi.mes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
|
||||
@Schema(description = "管理后台 - 大屏-近五年订单数量分页 Request VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class YearNumPageReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "年份 格式 YYYY")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private String[] date;
|
||||
|
||||
@Schema(description = "是否开启mock模式 0 否 1是")
|
||||
private Boolean openMock;
|
||||
|
||||
@Schema(description = "备注", example = "随便")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "状态,1表示正常,2表示禁用", example = "2")
|
||||
private Boolean status;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] createTime;
|
||||
|
||||
@Schema(description = "订单数量")
|
||||
private Integer numOrder;
|
||||
|
||||
}
|
||||
@ -0,0 +1,44 @@
|
||||
package com.chanko.yunxi.mes.module.heli.controller.admin.yearnum.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import java.util.*;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import com.alibaba.excel.annotation.*;
|
||||
|
||||
@Schema(description = "管理后台 - 大屏-近五年订单数量 Response VO")
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class YearNumRespVO {
|
||||
|
||||
@Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "31611")
|
||||
@ExcelProperty("自增字段,唯一")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "年份 格式 YYYY")
|
||||
@ExcelProperty("年份 格式 YYYY")
|
||||
private String date;
|
||||
|
||||
@Schema(description = "是否开启mock模式 0 否 1是", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("是否开启mock模式 0 否 1是")
|
||||
private Boolean openMock;
|
||||
|
||||
@Schema(description = "备注", example = "随便")
|
||||
@ExcelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "状态,1表示正常,2表示禁用", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
|
||||
@ExcelProperty("状态,1表示正常,2表示禁用")
|
||||
private Boolean status;
|
||||
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@Schema(description = "订单数量")
|
||||
@ExcelProperty("订单数量")
|
||||
private Integer numOrder;
|
||||
|
||||
}
|
||||
@ -0,0 +1,33 @@
|
||||
package com.chanko.yunxi.mes.module.heli.controller.admin.yearnum.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import javax.validation.constraints.*;
|
||||
import java.util.*;
|
||||
|
||||
@Schema(description = "管理后台 - 大屏-近五年订单数量新增/修改 Request VO")
|
||||
@Data
|
||||
public class YearNumSaveReqVO {
|
||||
|
||||
@Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "31611")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "年份 格式 YYYY")
|
||||
private String date;
|
||||
|
||||
@Schema(description = "是否开启mock模式 0 否 1是", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "是否开启mock模式 0 否 1是不能为空")
|
||||
private Boolean openMock;
|
||||
|
||||
@Schema(description = "备注", example = "随便")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "状态,1表示正常,2表示禁用", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
|
||||
@NotNull(message = "状态,1表示正常,2表示禁用不能为空")
|
||||
private Boolean status;
|
||||
|
||||
@Schema(description = "订单数量")
|
||||
private Integer numOrder;
|
||||
|
||||
}
|
||||
@ -0,0 +1,70 @@
|
||||
package com.chanko.yunxi.mes.module.heli.dal.dataobject.found;
|
||||
|
||||
import lombok.*;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.*;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
import java.math.BigDecimal;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO;
|
||||
|
||||
/**
|
||||
* 大屏-可修改单项数据 DO
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
@TableName("screen_found")
|
||||
@KeySequence("screen_found_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class FoundDO extends BaseDO {
|
||||
|
||||
/**
|
||||
* 自增字段,唯一
|
||||
*/
|
||||
@TableId
|
||||
private Long id;
|
||||
/**
|
||||
* 日期 格式 YYYYMMDD
|
||||
*/
|
||||
private LocalDate date;
|
||||
/**
|
||||
* 是否开启mock模式 0 否 1是(针对订单交付准时率)
|
||||
*/
|
||||
private Integer openMock;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 状态,1表示正常,2表示禁用
|
||||
*/
|
||||
private Boolean status;
|
||||
/**
|
||||
* 今日到岗人数
|
||||
*/
|
||||
private Integer numPresent;
|
||||
/**
|
||||
* 今日出差人数
|
||||
*/
|
||||
private Integer numBusinessTrip;
|
||||
/**
|
||||
* 当前设计项目数量
|
||||
*/
|
||||
private Integer numDesign;
|
||||
/**
|
||||
* 当前在制项目数量
|
||||
*/
|
||||
private Integer numInProcess;
|
||||
/**
|
||||
* 订单交付准时率
|
||||
*/
|
||||
private BigDecimal deliRate;
|
||||
|
||||
}
|
||||
@ -0,0 +1,59 @@
|
||||
package com.chanko.yunxi.mes.module.heli.dal.dataobject.monordnum;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO;
|
||||
|
||||
/**
|
||||
* 大屏-月订单数量 DO
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
@TableName("screen_mon_ord_num")
|
||||
@KeySequence("screen_mon_ord_num_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class MonOrdNumDO extends BaseDO {
|
||||
|
||||
/**
|
||||
* 自增字段,唯一
|
||||
*/
|
||||
@TableId
|
||||
private Long id;
|
||||
/**
|
||||
* 年份 格式 YYYY
|
||||
*/
|
||||
private String date;
|
||||
/**
|
||||
* 是否开启mock模式 0 否 1是
|
||||
*/
|
||||
private Integer openMock;
|
||||
/**
|
||||
* 月份
|
||||
*/
|
||||
private String Month;
|
||||
/**
|
||||
* 黑色模具数量
|
||||
*/
|
||||
private Integer blackMold;
|
||||
/**
|
||||
* 有色模具数量
|
||||
*/
|
||||
private Integer coloredMold;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 状态,1表示正常,2表示禁用
|
||||
*/
|
||||
private Boolean status;
|
||||
|
||||
}
|
||||
@ -70,6 +70,9 @@ public class OrderYfDO extends BaseDO {
|
||||
private String yfRatio;
|
||||
@TableField(exist = false)
|
||||
private String ykRatio;
|
||||
|
||||
@TableField(exist = false)
|
||||
private BigDecimal cgSY;
|
||||
@TableField(exist = false)
|
||||
private BigDecimal SYAmount;
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,51 @@
|
||||
package com.chanko.yunxi.mes.module.heli.dal.dataobject.process;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO;
|
||||
|
||||
/**
|
||||
* 大屏-设计、装配、加工进度 DO
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
@TableName("screen_process")
|
||||
@KeySequence("screen_process_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class ProcessDO extends BaseDO {
|
||||
|
||||
/**
|
||||
* 自增字段,唯一
|
||||
*/
|
||||
@TableId
|
||||
private Long id;
|
||||
/**
|
||||
* 年份 格式 YYYY
|
||||
*/
|
||||
private String date;
|
||||
/**
|
||||
* 是否开启mock模式 0 否 1是
|
||||
*/
|
||||
private Integer openMock;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 状态,1表示正常,2表示禁用
|
||||
*/
|
||||
private Boolean status;
|
||||
/**
|
||||
* 进度类型(1、设计 2、生产 3、装配 4、采购)
|
||||
*/
|
||||
private Integer processType;
|
||||
|
||||
}
|
||||
@ -205,5 +205,7 @@ public class ProcessBomDetailDO extends BaseDO {
|
||||
private BigDecimal boomAmounts;
|
||||
@TableField(exist = false)
|
||||
private List<TaskDispatchDetailDO> taskDispatchDetailDOList;
|
||||
@TableField(exist = false)
|
||||
private Integer totalAmount;
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,90 @@
|
||||
package com.chanko.yunxi.mes.module.heli.dal.dataobject.processdetail;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO;
|
||||
|
||||
/**
|
||||
* 大屏-设计、装配、加工进度子 DO
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
@TableName("screen_process_detail")
|
||||
@KeySequence("screen_process_detail_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class ProcessDetailDO extends BaseDO {
|
||||
|
||||
/**
|
||||
* 自增字段,唯一
|
||||
*/
|
||||
@TableId
|
||||
private Long id;
|
||||
/**
|
||||
* 大屏-设计、装配、加工进度id
|
||||
*/
|
||||
private Long processId;
|
||||
/**
|
||||
* 年份 格式 YYYY
|
||||
*/
|
||||
private String date;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 状态,1表示正常,2表示禁用
|
||||
*/
|
||||
private Boolean status;
|
||||
/**
|
||||
* 项目名称
|
||||
*/
|
||||
private String projectName;
|
||||
/**
|
||||
* 项目名称简码
|
||||
*/
|
||||
private String projectNameSim;
|
||||
/**
|
||||
* 项目开始时间
|
||||
*/
|
||||
private LocalDateTime projectStartTime;
|
||||
/**
|
||||
* 项目结束时间
|
||||
*/
|
||||
private LocalDateTime projectEndTime;
|
||||
/**
|
||||
* 项目进度
|
||||
*/
|
||||
private Integer projectProcess;
|
||||
/**
|
||||
* 发货状态 未发货/部分发货/全部发货
|
||||
*/
|
||||
private Integer deliveryStatus;
|
||||
/**
|
||||
* 是否延期 1-是 0-否
|
||||
*/
|
||||
private String isExten;
|
||||
/**
|
||||
* 是否选择 1-是 0-否
|
||||
*/
|
||||
private String isSelect;
|
||||
/**
|
||||
* 订单日期
|
||||
*/
|
||||
private LocalDateTime ordDate;
|
||||
/**
|
||||
* 项目id
|
||||
*/
|
||||
private Long projectId;
|
||||
|
||||
}
|
||||
@ -306,6 +306,10 @@ public class ProjectOrderDO extends BaseDO {
|
||||
private Integer blackMold;
|
||||
@TableField(exist = false)
|
||||
private Integer coloredMolds;
|
||||
@TableField(exist = false)
|
||||
private String hasPrices;
|
||||
@TableField(exist = false)
|
||||
private LocalDateTime maxDeliverDate;
|
||||
/**
|
||||
* 变更的字段列表
|
||||
* */
|
||||
|
||||
@ -237,4 +237,6 @@ public class PurchaseOrderNoDetailDO extends BaseDO {
|
||||
private String time;
|
||||
@TableField(exist = false)
|
||||
private String requir;
|
||||
@TableField(exist = false)
|
||||
private Integer totalAmount;
|
||||
}
|
||||
|
||||
@ -316,4 +316,7 @@ public class TaskDispatchDetailDO extends BaseDO {
|
||||
private BigDecimal price;
|
||||
@TableField(exist = false)
|
||||
private Long compositionId;
|
||||
@TableField(exist = false)
|
||||
private Long projectOrderId;
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,51 @@
|
||||
package com.chanko.yunxi.mes.module.heli.dal.dataobject.yearnum;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO;
|
||||
|
||||
/**
|
||||
* 大屏-近五年订单数量 DO
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
@TableName("screen_year_num")
|
||||
@KeySequence("screen_year_num_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class YearNumDO extends BaseDO {
|
||||
|
||||
/**
|
||||
* 自增字段,唯一
|
||||
*/
|
||||
@TableId
|
||||
private Long id;
|
||||
/**
|
||||
* 年份 格式 YYYY
|
||||
*/
|
||||
private String date;
|
||||
/**
|
||||
* 是否开启mock模式 0 否 1是
|
||||
*/
|
||||
private Integer openMock;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 状态,1表示正常,2表示禁用
|
||||
*/
|
||||
private Boolean status;
|
||||
/**
|
||||
* 订单数量
|
||||
*/
|
||||
private Integer numOrder;
|
||||
|
||||
}
|
||||
@ -0,0 +1,47 @@
|
||||
package com.chanko.yunxi.mes.module.heli.dal.mysql.found;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||
import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.found.FoundDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.yearnum.YearNumDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.found.vo.*;
|
||||
|
||||
/**
|
||||
* 大屏-可修改单项数据 Mapper
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
@Mapper
|
||||
public interface FoundMapper extends BaseMapperX<FoundDO> {
|
||||
|
||||
default PageResult<FoundDO> selectPage(FoundPageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<FoundDO>()
|
||||
// .betweenIfPresent(FoundDO::getDate, reqVO.getDate())
|
||||
.eqIfPresent(FoundDO::getOpenMock, reqVO.getOpenMock())
|
||||
.eqIfPresent(FoundDO::getRemark, reqVO.getRemark())
|
||||
.eqIfPresent(FoundDO::getStatus, reqVO.getStatus())
|
||||
.betweenIfPresent(FoundDO::getCreateTime, reqVO.getCreateTime())
|
||||
.eqIfPresent(FoundDO::getNumPresent, reqVO.getNumPresent())
|
||||
.eqIfPresent(FoundDO::getNumBusinessTrip, reqVO.getNumBusinessTrip())
|
||||
.eqIfPresent(FoundDO::getNumDesign, reqVO.getNumDesign())
|
||||
.eqIfPresent(FoundDO::getNumInProcess, reqVO.getNumInProcess())
|
||||
.eqIfPresent(FoundDO::getDeliRate, reqVO.getDeliRate())
|
||||
.orderByDesc(FoundDO::getId));
|
||||
}
|
||||
|
||||
default FoundDO searchUnfinished(){
|
||||
// return selectList(new LambdaQueryWrapperX<FoundDO>().eq(FoundDO::getDate, DateUtil.formatDate(new Date())));
|
||||
return selectOne(new LambdaQueryWrapperX<FoundDO>().last("limit 1"));
|
||||
|
||||
}
|
||||
|
||||
|
||||
default FoundDO selectAll(){
|
||||
return selectOne(new LambdaQueryWrapperX<FoundDO>().last("limit 1"));
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,40 @@
|
||||
package com.chanko.yunxi.mes.module.heli.dal.mysql.monordnum;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||
import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.monordnum.MonOrdNumDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.yearnum.YearNumDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.monordnum.vo.*;
|
||||
|
||||
/**
|
||||
* 大屏-月订单数量 Mapper
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
@Mapper
|
||||
public interface MonOrdNumMapper extends BaseMapperX<MonOrdNumDO> {
|
||||
|
||||
default PageResult<MonOrdNumDO> selectPage(MonOrdNumPageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<MonOrdNumDO>()
|
||||
.betweenIfPresent(MonOrdNumDO::getDate, reqVO.getDate())
|
||||
.eqIfPresent(MonOrdNumDO::getOpenMock, reqVO.getOpenMock())
|
||||
.eqIfPresent(MonOrdNumDO::getMonth, reqVO.getMonth())
|
||||
.eqIfPresent(MonOrdNumDO::getBlackMold, reqVO.getBlackMold())
|
||||
.eqIfPresent(MonOrdNumDO::getColoredMold, reqVO.getColoredMold())
|
||||
.eqIfPresent(MonOrdNumDO::getRemark, reqVO.getRemark())
|
||||
.eqIfPresent(MonOrdNumDO::getStatus, reqVO.getStatus())
|
||||
.betweenIfPresent(MonOrdNumDO::getCreateTime, reqVO.getCreateTime())
|
||||
.orderByDesc(MonOrdNumDO::getId));
|
||||
}
|
||||
|
||||
default List<MonOrdNumDO> searchOrderInformation(String currentYear){
|
||||
return selectList(new LambdaQueryWrapperX<MonOrdNumDO>()
|
||||
.eq(MonOrdNumDO::getDate, currentYear)
|
||||
.orderByAsc(MonOrdNumDO::getMonth));
|
||||
}
|
||||
}
|
||||
@ -38,8 +38,8 @@ public interface OrderYsMapper extends BaseMapperX<OrderYsDO> {
|
||||
.select("p.delivery_status as deliveryStatus")
|
||||
.select("p.id as projectId","p.code as projectCode")
|
||||
.select("p.project_start_time as projectStartTime","p.contract_no as contractNo")
|
||||
.select("t.cg_ys-t.cg_yishou as remainingYishou")
|
||||
.select("t.cg_ys-sum(i.amount) as remainingAmount")
|
||||
.select("GREATEST(t.cg_ys - COALESCE(t.cg_yishou, 0), 0) as remainingYishou")
|
||||
.select("GREATEST(t.cg_ys - COALESCE(SUM(i.amount), 0), 0) as remainingAmount")
|
||||
.leftJoin(
|
||||
"finance_invoice i ON i.order_code = t.code AND i.deleted=0 and i.tenant_id=2 and i.business_type = 'FINANCE_MAKE_INVOICE' AND i.status !='3'")
|
||||
.leftJoin(ProjectOrderDO.class,"p", ProjectOrderDO::getCode, OrderYsDO::getCode)
|
||||
|
||||
@ -336,4 +336,15 @@ public interface PlanSubMapper extends BaseMapperX<PlanSubDO> {
|
||||
query.orderByAsc(ProjectOrderDO::getCode);
|
||||
return selectPage(pageReqVO, query);
|
||||
}
|
||||
|
||||
default PlanSubDO selectPlanSub(Long planId, Long projectSubId){
|
||||
MPJLambdaWrapper<PlanSubDO> query = new MPJLambdaWrapper<>();
|
||||
query.selectAll(PlanSubDO.class);
|
||||
query.eq(PlanSubDO::getProjectPlanId,planId);
|
||||
query.eq(PlanSubDO::getProjectSubId,projectSubId);
|
||||
query.last("limit 1");
|
||||
return selectOne(query);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,36 @@
|
||||
package com.chanko.yunxi.mes.module.heli.dal.mysql.process;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||
import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.process.ProcessDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.process.vo.*;
|
||||
|
||||
/**
|
||||
* 大屏-设计、装配、加工进度 Mapper
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
@Mapper
|
||||
public interface ProcessMapper extends BaseMapperX<ProcessDO> {
|
||||
|
||||
default PageResult<ProcessDO> selectPage(ProcessPageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<ProcessDO>()
|
||||
.betweenIfPresent(ProcessDO::getDate, reqVO.getDate())
|
||||
.eqIfPresent(ProcessDO::getOpenMock, reqVO.getOpenMock())
|
||||
.eqIfPresent(ProcessDO::getRemark, reqVO.getRemark())
|
||||
.eqIfPresent(ProcessDO::getStatus, reqVO.getStatus())
|
||||
.betweenIfPresent(ProcessDO::getCreateTime, reqVO.getCreateTime())
|
||||
.eqIfPresent(ProcessDO::getProcessType, reqVO.getProcessType())
|
||||
.orderByDesc(ProcessDO::getId));
|
||||
}
|
||||
|
||||
default ProcessDO selectType(Integer type){
|
||||
return selectOne(new LambdaQueryWrapperX<ProcessDO>()
|
||||
.eqIfPresent(ProcessDO::getProcessType, type)
|
||||
.last("limit 1"));
|
||||
}
|
||||
}
|
||||
@ -2,6 +2,8 @@ package com.chanko.yunxi.mes.module.heli.dal.mysql.processbom;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.smallbun.screw.core.util.CollectionUtils;
|
||||
import com.alibaba.druid.sql.visitor.functions.Left;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
@ -27,6 +29,8 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDeta
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO;
|
||||
import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO;
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import org.apache.ibatis.annotations.Delete;
|
||||
@ -38,6 +42,7 @@ import org.springframework.util.ObjectUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@ -318,4 +323,45 @@ public interface ProcessBomDetailMapper extends BaseMapperX<ProcessBomDetailDO>
|
||||
"</foreach>" +
|
||||
"</script>")
|
||||
void deleteOrderId(@Param("idList") List<Long> idList);
|
||||
|
||||
default List<ProcessBomDetailDO> selectByProjectOrderIds(List<Long> projectOrderIds){
|
||||
MPJLambdaWrapper<ProcessBomDetailDO> query = new MPJLambdaWrapper<>();
|
||||
query.selectAll(ProcessBomDetailDO.class)
|
||||
.select("g.project_id as projectId","SUM(COALESCE(taskDetail.amount, 0) + \n" +
|
||||
" CASE WHEN taskDetail.id IS NULL THEN t.amount * sub.amount ELSE 0 END\n" +
|
||||
") as totalAmount")
|
||||
.leftJoin(ProcessBomDO.class,"g",ProcessBomDO::getId,ProcessBomDetailDO::getBomId)
|
||||
.leftJoin(TaskDispatchDO.class,"task",TaskDispatchDO::getBomDetailId,ProcessBomDetailDO::getId)
|
||||
.leftJoin(ProjectOrderSubDO.class,"sub",ProjectOrderSubDO::getId,ProcessBomDO::getProjectSubId)
|
||||
.leftJoin(TaskDispatchDetailDO.class,"taskDetail",TaskDispatchDetailDO::getDispatchId,TaskDispatchDO::getId)
|
||||
.groupBy(ProcessBomDO::getProjectId);
|
||||
query.in(ProcessBomDO::getProjectId,projectOrderIds);
|
||||
query.eq(ProcessBomDetailDO::getType,"2");
|
||||
|
||||
return selectList(query);
|
||||
|
||||
}
|
||||
|
||||
default List<ProcessBomDetailDO> getProcessBomExcel(List<Long> collect){
|
||||
MPJLambdaWrapper<ProcessBomDetailDO> query = new MPJLambdaWrapper<>();
|
||||
query.selectAll(ProcessBomDetailDO.class)
|
||||
.select("e.project_sub_code as bomCode", "e.project_sub_code as projectSubCode")
|
||||
.select("a.plan_no as planCode", "b.code as projectCode", "c.name as customerName", "b.project_name as projectName")
|
||||
.select("d.name as projectSubName,f.name as compositionName")
|
||||
|
||||
.leftJoin(ProcessBomDO.class,"g",ProcessBomDO::getId,ProcessBomDetailDO::getBomId)
|
||||
.leftJoin(PlanDO.class, "a", PlanDO::getId, ProcessBomDO::getPlanId)
|
||||
.leftJoin(PlanSubDO.class, "e", PlanSubDO::getProjectSubId, ProcessBomDO::getProjectSubId)
|
||||
.leftJoin(ProjectOrderDO.class, "b", ProjectOrderDO::getId, ProcessBomDO::getProjectId)
|
||||
.leftJoin(CustomerDO.class, "c", CustomerDO::getId, ProjectOrderDO::getCustomerId)
|
||||
.leftJoin(ProjectOrderSubDO.class, "d", ProjectOrderSubDO::getId, ProcessBomDO::getProjectSubId)
|
||||
.leftJoin(CompositionDO.class,"f",CompositionDO::getId,ProcessBomDetailDO::getCompositionId)
|
||||
.orderByDesc(ProcessBomDO::getId)
|
||||
.disableSubLogicDel()
|
||||
;
|
||||
query.in(ProcessBomDO::getId,collect);
|
||||
|
||||
|
||||
return selectList( query);
|
||||
}
|
||||
}
|
||||
|
||||
@ -425,4 +425,19 @@ public interface ProcessDesignMapper extends BaseMapperX<ProcessDesignDO> {
|
||||
"WHERE pd.project_sub_id = #{projectSubId} \n" +
|
||||
" AND pd.process_design_type IN ('BLUEPRINT_3D', 'BLUEPRINT_2D', 'BLUEPRINT_WORKBLANK')")
|
||||
List<ProcessDesignDO> selectWithDetailExists(@Param("projectSubId") Long projectSubId);
|
||||
@Select("<script>" +
|
||||
"SELECT DISTINCT pd.* " +
|
||||
"FROM pro_process_design pd " +
|
||||
"INNER JOIN project_plan_sub_detail psd ON psd.project_sub_id = pd.project_sub_id " +
|
||||
" AND psd.sub_type = pd.process_design_type " +
|
||||
"WHERE 1=1 " +
|
||||
"<if test='projectOrderIds != null and projectOrderIds.size() > 0'>" +
|
||||
" AND pd.project_id IN " +
|
||||
" <foreach item='item' index='index' collection='projectOrderIds' open='(' separator=',' close=')'>" +
|
||||
" #{item}" +
|
||||
" </foreach>" +
|
||||
"</if>" +
|
||||
" AND pd.process_design_type IN ('BLUEPRINT_3D', 'BLUEPRINT_2D', 'BLUEPRINT_WORKBLANK')" +
|
||||
"</script>")
|
||||
List<ProcessDesignDO> selectWithDetail(@Param("projectOrderIds")List<Long> projectOrderIds);
|
||||
}
|
||||
|
||||
@ -0,0 +1,87 @@
|
||||
package com.chanko.yunxi.mes.module.heli.dal.mysql.processdetail;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||
import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansub.PlanSubDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.process.ProcessDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processdetail.ProcessDetailDO;
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import org.apache.ibatis.annotations.Delete;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.processdetail.vo.*;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Update;
|
||||
|
||||
/**
|
||||
* 大屏-设计、装配、加工进度子 Mapper
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
@Mapper
|
||||
public interface ProcessDetailMapper extends BaseMapperX<ProcessDetailDO> {
|
||||
|
||||
default PageResult<ProcessDetailDO> selectPage(ProcessDetailPageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<ProcessDetailDO>()
|
||||
.betweenIfPresent(ProcessDetailDO::getDate, reqVO.getDate())
|
||||
.eqIfPresent(ProcessDetailDO::getRemark, reqVO.getRemark())
|
||||
.eqIfPresent(ProcessDetailDO::getStatus, reqVO.getStatus())
|
||||
.betweenIfPresent(ProcessDetailDO::getCreateTime, reqVO.getCreateTime())
|
||||
.likeIfPresent(ProcessDetailDO::getProjectName, reqVO.getProjectName())
|
||||
.eqIfPresent(ProcessDetailDO::getProjectNameSim, reqVO.getProjectNameSim())
|
||||
.betweenIfPresent(ProcessDetailDO::getProjectStartTime, reqVO.getProjectStartTime())
|
||||
.betweenIfPresent(ProcessDetailDO::getProjectEndTime, reqVO.getProjectEndTime())
|
||||
.eqIfPresent(ProcessDetailDO::getProjectProcess, reqVO.getProjectProcess())
|
||||
.eqIfPresent(ProcessDetailDO::getDeliveryStatus, reqVO.getDeliveryStatus())
|
||||
.eqIfPresent(ProcessDetailDO::getIsExten, reqVO.getIsExten())
|
||||
.eqIfPresent(ProcessDetailDO::getIsSelect, reqVO.getIsSelect())
|
||||
.betweenIfPresent(ProcessDetailDO::getOrdDate, reqVO.getOrdDate())
|
||||
.eqIfPresent(ProcessDetailDO::getProjectId, reqVO.getProjectId())
|
||||
.orderByDesc(ProcessDetailDO::getId));
|
||||
}
|
||||
|
||||
default List<ProcessDetailDO> selectProcessIdAndIsSelect(Long id){
|
||||
return selectList(new LambdaQueryWrapperX<ProcessDetailDO>()
|
||||
.eqIfPresent(ProcessDetailDO::getProcessId, id)
|
||||
.eqIfPresent(ProcessDetailDO::getIsSelect, 1)
|
||||
.orderByDesc(ProcessDetailDO::getOrdDate)
|
||||
.last("limit 6"));
|
||||
}
|
||||
|
||||
default List<ProcessDetailDO> selectProcessId(Long id){
|
||||
return selectList(new LambdaQueryWrapperX<ProcessDetailDO>()
|
||||
.eqIfPresent(ProcessDetailDO::getProcessId, id)
|
||||
.orderByDesc(ProcessDetailDO::getOrdDate)
|
||||
.last("limit 6")
|
||||
);
|
||||
}
|
||||
@Delete("delete from screen_process_detail where process_id = #{id}")
|
||||
void deleteByProcessId(@Param("id") Long id);
|
||||
|
||||
default List<ProcessDetailDO> searchProgress(Integer type){
|
||||
MPJLambdaWrapper<ProcessDetailDO> query = new MPJLambdaWrapper<>();
|
||||
query.selectAll(ProcessDetailDO.class)
|
||||
.leftJoin(ProcessDO.class, "a", ProcessDO::getId, ProcessDetailDO::getProcessId)
|
||||
.eq(ProcessDO::getProcessType,type)
|
||||
.orderByDesc(ProcessDetailDO::getOrdDate);
|
||||
return selectList(query);
|
||||
|
||||
}
|
||||
@Update({
|
||||
"<script>",
|
||||
"UPDATE screen_process_detail",
|
||||
"SET is_select = CASE id",
|
||||
"<foreach collection='list' item='item'>",
|
||||
"WHEN #{item.id} THEN #{item.isSelect}",
|
||||
"</foreach>",
|
||||
"END",
|
||||
"WHERE id IN",
|
||||
"<foreach collection='list' item='item' open='(' separator=',' close=')'>",
|
||||
"#{item.id}",
|
||||
"</foreach>",
|
||||
"</script>"
|
||||
})
|
||||
void updateProcessDetailDOBatch(@Param("list") List<ProcessDetailDO> list);
|
||||
}
|
||||
@ -1,11 +1,14 @@
|
||||
package com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.projectorder.vo.ProjectOrderCostPageReqVO;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.projectorder.vo.ProjectOrderPageReqVO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.customer.CustomerDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderSubDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.equip.EquipDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plan.PlanDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
|
||||
@ -16,8 +19,15 @@ import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import org.apache.ibatis.annotations.Delete;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 项目订单 Mapper
|
||||
*
|
||||
@ -76,6 +86,7 @@ public interface ProjectOrderMapper extends BaseMapperX<ProjectOrderDO> {
|
||||
MPJLambdaWrapper<ProjectOrderDO> query = new MPJLambdaWrapper<>();
|
||||
query.selectAll(ProjectOrderDO.class)
|
||||
.select("u.nickname as businessManName", "d.name as businessDeptName", "e.name as customerName")
|
||||
|
||||
.leftJoin(AdminUserDO.class, "u", AdminUserDO::getId, ProjectOrderDO::getBusinessMan)
|
||||
.leftJoin(DeptDO.class, "d", DeptDO::getId, ProjectOrderDO::getBusinessDeptId)
|
||||
.leftJoin(CustomerDO.class, "e", CustomerDO::getId, ProjectOrderDO::getCustomerId)
|
||||
@ -141,4 +152,38 @@ public interface ProjectOrderMapper extends BaseMapperX<ProjectOrderDO> {
|
||||
}
|
||||
@Delete("delete from project_sale_order where id = #{id}")
|
||||
void deleteOrderId(@Param("id") Long id);
|
||||
|
||||
/**
|
||||
* 查询当前年销售订单按时完成百分比
|
||||
*/
|
||||
@Select("SELECT\n" +
|
||||
" COALESCE(\n" +
|
||||
" ROUND(\n" +
|
||||
" SUM(\n" +
|
||||
" CASE\n" +
|
||||
" \n" +
|
||||
" WHEN (pso.delivery_status = 3 AND (pdos_max.max_create_time IS NULL OR pdos_max.max_create_time <= pso.project_end_time)) \n" +
|
||||
" OR (pso.delivery_status != 3 AND CURDATE() <= pso.project_end_time) THEN\n" +
|
||||
" 1 ELSE 0 \n" +
|
||||
" END) * 100.0 / NULLIF(COUNT(*), 0),\n" +
|
||||
" 1),\n" +
|
||||
" 0) AS completionRate \n" +
|
||||
" FROM\n" +
|
||||
" project_sale_order pso\n" +
|
||||
" LEFT JOIN (SELECT sale_order_id, MAX(create_time) AS max_create_time FROM project_deliver_order_sub WHERE deleted = 0 AND tenant_id = 2 GROUP BY sale_order_id) pdos_max ON pso.id = pdos_max.sale_order_id \n" +
|
||||
" WHERE\n" +
|
||||
" YEAR(pso.project_start_time) = YEAR(CURDATE()) \n" +
|
||||
" AND pso.deleted = 0 \n" +
|
||||
" AND pso.tenant_id =2")
|
||||
Map<String, BigDecimal> getOnTimeCompletionRate();
|
||||
|
||||
default List<ProjectOrderDO> selectOrder(){
|
||||
LocalDateTime startTime = LocalDate.of(2025, 6, 1).atStartOfDay(); // 2025-06-01 00:00:00
|
||||
return selectList(new LambdaQueryWrapper<ProjectOrderDO>()
|
||||
.ne(ProjectOrderDO::getDeliveryStatus,3)
|
||||
.eq(ProjectOrderDO::getIsSnapshot,0)
|
||||
.ge(ProjectOrderDO::getCreateTime,startTime)
|
||||
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -163,12 +163,12 @@ public interface ProjectOrderSubMapper extends BaseMapperX<ProjectOrderSubDO> {
|
||||
" COUNT(*) = 3 \n" +
|
||||
" AND SUM(CASE WHEN is_over_process = 1 THEN 1 ELSE 0 END) = 3 \n" +
|
||||
") and sub.create_time >='2025-06-01' and sub.tenant_id='2' and sub.deleted=0")
|
||||
Long searchUnfinished();
|
||||
Integer searchUnfinished();
|
||||
@Select("SELECT COUNT(*)\n" +
|
||||
"FROM project_sale_order_sub sub\n" +
|
||||
"LEFT JOIN project_deliver_order_sub deliver ON sub.id = deliver.sale_order_sub_id and deliver.tenant_id='2' and deliver.deleted=0 \n" +
|
||||
"WHERE deliver.sale_order_sub_id IS NULL and sub.tenant_id='2' and sub.deleted=0 ")
|
||||
Long searchNotDispatched();
|
||||
Integer searchNotDispatched();
|
||||
@Select("SELECT \n" +
|
||||
" MONTH(create_time) AS month,\n" +
|
||||
" SUM(CASE WHEN business_line = 2 THEN 1 ELSE 0 END) AS blackMold,\n" +
|
||||
@ -186,5 +186,5 @@ public interface ProjectOrderSubMapper extends BaseMapperX<ProjectOrderSubDO> {
|
||||
"WHERE YEAR(create_time) >= YEAR(CURDATE()) - 4 and tenant_id=2 and deleted=0\n" +
|
||||
"GROUP BY YEAR(create_time)\n" +
|
||||
"ORDER BY year;")
|
||||
List<Map<String, Integer>> searchOrderByYear();
|
||||
List<Map<String, Long>> searchOrderByYear();
|
||||
}
|
||||
|
||||
@ -334,4 +334,16 @@ public interface PurchaseOrderNoDetailMapper extends BaseMapperX<PurchaseOrderNo
|
||||
query.in(ids != null && ids.size() > 0, PurchaseOrderNoDetailDO::getId, ids);
|
||||
return selectList(query);
|
||||
}
|
||||
|
||||
default List<PurchaseOrderNoDetailDO> selectByProjectOrderIds(List<Long> projectOrderIds){
|
||||
MPJLambdaWrapper<PurchaseOrderNoDetailDO> query = new MPJLambdaWrapper<>();
|
||||
query
|
||||
.select("t.project_id as projectId","COALESCE(SUM(t.purchase_amount), 0) as totalAmount");
|
||||
query.in(PurchaseOrderNoDetailDO::getProjectId, projectOrderIds);
|
||||
query.eq(PurchaseOrderNoDetailDO::getReceivingStatus, 3);
|
||||
query.isNotNull(PurchaseOrderNoDetailDO::getBoomDetailId);
|
||||
query.groupBy(PurchaseOrderNoDetailDO::getProjectId);
|
||||
return selectList(query);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1048,4 +1048,37 @@ public interface TaskDispatchDetailMapper extends BaseMapperX<TaskDispatchDetail
|
||||
}
|
||||
|
||||
List<BubbleFeeResult> cuttingMaterialsBatch(@Param("bomDetailIds")List<Long> bomDetailIds);
|
||||
|
||||
default List<TaskDispatchDetailDO> selectByProjectOrderIds(List<Long> projectOrderIds,String type){
|
||||
MPJLambdaWrapper<TaskDispatchDetailDO> query = new MPJLambdaWrapper<>();
|
||||
query.select("a.project_id as projectOrderId","COALESCE(SUM(e.amount), 0) as totalAmount")
|
||||
.leftJoin(TaskDispatchDO.class,"a",TaskDispatchDO::getId,TaskDispatchDetailDO::getDispatchId)
|
||||
.leftJoin(TaskReportDO.class,"e",TaskReportDO::getDispatchDetailId,TaskDispatchDetailDO::getId)
|
||||
.groupBy(TaskDispatchDO::getProjectId);
|
||||
query.in(TaskDispatchDO::getProjectId,projectOrderIds);
|
||||
query.eq(TaskDispatchDO::getDispatchType,type);
|
||||
query.eq(TaskReportDO::getHasReport,1);
|
||||
return selectList(query);
|
||||
}
|
||||
default List<TaskDispatchDetailDO> selectByProjectOrderIdsAssembly(List<Long> projectOrderIds,String type){
|
||||
MPJLambdaWrapper<TaskDispatchDetailDO> query = new MPJLambdaWrapper<>();
|
||||
query.select("a.project_id as projectOrderId","COALESCE(SUM(e.work_time), 0) as totalWorkTime")
|
||||
.leftJoin(TaskDispatchDO.class,"a",TaskDispatchDO::getId,TaskDispatchDetailDO::getDispatchId)
|
||||
.leftJoin(TaskReportDO.class,"e",TaskReportDO::getDispatchDetailId,TaskDispatchDetailDO::getId)
|
||||
.groupBy(TaskDispatchDO::getProjectId);
|
||||
query.in(TaskDispatchDO::getProjectId,projectOrderIds);
|
||||
query.eq(TaskDispatchDO::getDispatchType,type);
|
||||
query.eq(TaskReportDO::getHasReport,1);
|
||||
return selectList(query);
|
||||
}
|
||||
default List<TaskDispatchDetailDO> selectByProjectOrderIdsAmount(List<Long> projectOrderIds, String type){
|
||||
MPJLambdaWrapper<TaskDispatchDetailDO> query = new MPJLambdaWrapper<>();
|
||||
query.select("a.project_id as projectOrderId","COALESCE(SUM(t.work_time), 0) as totalWorkTime")
|
||||
.leftJoin(TaskDispatchDO.class,"a",TaskDispatchDO::getId,TaskDispatchDetailDO::getDispatchId)
|
||||
.groupBy(TaskDispatchDO::getProjectId);
|
||||
query.in(TaskDispatchDO::getProjectId,projectOrderIds);
|
||||
query.eq(TaskDispatchDO::getDispatchType,type);
|
||||
return selectList(query);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,43 @@
|
||||
package com.chanko.yunxi.mes.module.heli.dal.mysql.yearnum;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||
import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.yearnum.YearNumDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.yearnum.vo.*;
|
||||
|
||||
/**
|
||||
* 大屏-近五年订单数量 Mapper
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
@Mapper
|
||||
public interface YearNumMapper extends BaseMapperX<YearNumDO> {
|
||||
|
||||
default PageResult<YearNumDO> selectPage(YearNumPageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<YearNumDO>()
|
||||
.betweenIfPresent(YearNumDO::getDate, reqVO.getDate())
|
||||
.eqIfPresent(YearNumDO::getOpenMock, reqVO.getOpenMock())
|
||||
.eqIfPresent(YearNumDO::getRemark, reqVO.getRemark())
|
||||
.eqIfPresent(YearNumDO::getStatus, reqVO.getStatus())
|
||||
.betweenIfPresent(YearNumDO::getCreateTime, reqVO.getCreateTime())
|
||||
.eqIfPresent(YearNumDO::getNumOrder, reqVO.getNumOrder())
|
||||
.orderByDesc(YearNumDO::getId));
|
||||
}
|
||||
|
||||
|
||||
|
||||
default List<YearNumDO> searchOrderByYear(String currentYear,String startYear){
|
||||
|
||||
|
||||
return selectList(new LambdaQueryWrapperX<YearNumDO>()
|
||||
.between(YearNumDO::getDate, currentYear, startYear)
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -76,4 +76,6 @@ public interface DeliverOrderService {
|
||||
BigDecimal getListYf(Long id, Long projectSubId);
|
||||
|
||||
List<DeliverOrderSubDO> getListYfDetails(Long id, Long projectSubId);
|
||||
|
||||
DeliverOrderDO getDeliverOrderId(Long id);
|
||||
}
|
||||
|
||||
@ -435,6 +435,15 @@ public class DeliverOrderServiceImpl implements DeliverOrderService {
|
||||
return deliverOrderSubDOS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DeliverOrderDO getDeliverOrderId(Long id) {
|
||||
LambdaQueryWrapper<DeliverOrderDO> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.like(DeliverOrderDO::getSaleOrderIds, id);
|
||||
queryWrapper.orderByDesc(DeliverOrderDO::getDeliverDate);
|
||||
queryWrapper.last("limit 1");
|
||||
return deliverOrderMapper.selectOne(queryWrapper);
|
||||
}
|
||||
|
||||
|
||||
private void createDeliverOrderSubList(Long deliveryOrderId, List<DeliverOrderSubDO> list) {
|
||||
list.forEach(o -> o.setDeliveryOrderId(deliveryOrderId));
|
||||
|
||||
@ -0,0 +1,55 @@
|
||||
package com.chanko.yunxi.mes.module.heli.service.found;
|
||||
|
||||
import java.util.*;
|
||||
import javax.validation.*;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.found.vo.*;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.found.FoundDO;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
|
||||
|
||||
/**
|
||||
* 大屏-可修改单项数据 Service 接口
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
public interface FoundService {
|
||||
|
||||
/**
|
||||
* 创建大屏-可修改单项数据
|
||||
*
|
||||
* @param createReqVO 创建信息
|
||||
* @return 编号
|
||||
*/
|
||||
Long createFound(@Valid FoundSaveReqVO createReqVO);
|
||||
|
||||
/**
|
||||
* 更新大屏-可修改单项数据
|
||||
*
|
||||
* @param updateReqVO 更新信息
|
||||
*/
|
||||
void updateFound(@Valid FoundSaveReqVO updateReqVO);
|
||||
|
||||
/**
|
||||
* 删除大屏-可修改单项数据
|
||||
*
|
||||
* @param id 编号
|
||||
*/
|
||||
void deleteFound(Long id);
|
||||
|
||||
/**
|
||||
* 获得大屏-可修改单项数据
|
||||
*
|
||||
* @param id 编号
|
||||
* @return 大屏-可修改单项数据
|
||||
*/
|
||||
FoundDO getFound(Long id);
|
||||
|
||||
/**
|
||||
* 获得大屏-可修改单项数据分页
|
||||
*
|
||||
* @param pageReqVO 分页查询
|
||||
* @return 大屏-可修改单项数据分页
|
||||
*/
|
||||
PageResult<FoundDO> getFoundPage(FoundPageReqVO pageReqVO);
|
||||
|
||||
}
|
||||
@ -0,0 +1,85 @@
|
||||
package com.chanko.yunxi.mes.module.heli.service.found;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.found.vo.*;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.found.FoundDO;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
|
||||
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
|
||||
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.found.FoundMapper;
|
||||
|
||||
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
|
||||
|
||||
/**
|
||||
* 大屏-可修改单项数据 Service 实现类
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
@Service
|
||||
@Validated
|
||||
public class FoundServiceImpl implements FoundService {
|
||||
|
||||
@Resource
|
||||
private FoundMapper foundMapper;
|
||||
|
||||
@Override
|
||||
public Long createFound(FoundSaveReqVO createReqVO) {
|
||||
// 插入
|
||||
FoundDO found = BeanUtils.toBean(createReqVO, FoundDO.class);
|
||||
foundMapper.insert(found);
|
||||
// 返回
|
||||
return found.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateFound(FoundSaveReqVO updateReqVO) {
|
||||
// 校验存在
|
||||
validateFoundExists(updateReqVO.getId());
|
||||
// 更新
|
||||
FoundDO updateObj = BeanUtils.toBean(updateReqVO, FoundDO.class);
|
||||
if (ObjectUtil.isEmpty(updateObj.getNumBusinessTrip())){
|
||||
updateObj.setNumBusinessTrip(0);
|
||||
}
|
||||
if (ObjectUtil.isEmpty(updateObj.getNumPresent())){
|
||||
updateObj.setNumPresent(0);
|
||||
}
|
||||
if (ObjectUtil.isEmpty(updateObj.getDeliRate())){
|
||||
updateObj.setDeliRate(BigDecimal.ZERO);
|
||||
}
|
||||
foundMapper.updateById(updateObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteFound(Long id) {
|
||||
// 校验存在
|
||||
validateFoundExists(id);
|
||||
// 删除
|
||||
foundMapper.deleteById(id);
|
||||
}
|
||||
|
||||
private void validateFoundExists(Long id) {
|
||||
if (foundMapper.selectById(id) == null) {
|
||||
throw exception(FOUND_NOT_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public FoundDO getFound(Long id) {
|
||||
return foundMapper.selectById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<FoundDO> getFoundPage(FoundPageReqVO pageReqVO) {
|
||||
return foundMapper.selectPage(pageReqVO);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,55 @@
|
||||
package com.chanko.yunxi.mes.module.heli.service.monordnum;
|
||||
|
||||
import java.util.*;
|
||||
import javax.validation.*;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.monordnum.vo.*;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.monordnum.MonOrdNumDO;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
|
||||
|
||||
/**
|
||||
* 大屏-月订单数量 Service 接口
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
public interface MonOrdNumService {
|
||||
|
||||
/**
|
||||
* 创建大屏-月订单数量
|
||||
*
|
||||
* @param createReqVO 创建信息
|
||||
* @return 编号
|
||||
*/
|
||||
Long createMonOrdNum(@Valid MonOrdNumSaveReqVO createReqVO);
|
||||
|
||||
/**
|
||||
* 更新大屏-月订单数量
|
||||
*
|
||||
* @param updateReqVO 更新信息
|
||||
*/
|
||||
void updateMonOrdNum(@Valid MonOrdNumSaveReqVO updateReqVO);
|
||||
|
||||
/**
|
||||
* 删除大屏-月订单数量
|
||||
*
|
||||
* @param id 编号
|
||||
*/
|
||||
void deleteMonOrdNum(Long id);
|
||||
|
||||
/**
|
||||
* 获得大屏-月订单数量
|
||||
*
|
||||
* @param id 编号
|
||||
* @return 大屏-月订单数量
|
||||
*/
|
||||
MonOrdNumDO getMonOrdNum(Long id);
|
||||
|
||||
/**
|
||||
* 获得大屏-月订单数量分页
|
||||
*
|
||||
* @param pageReqVO 分页查询
|
||||
* @return 大屏-月订单数量分页
|
||||
*/
|
||||
PageResult<MonOrdNumDO> getMonOrdNumPage(MonOrdNumPageReqVO pageReqVO);
|
||||
|
||||
}
|
||||
@ -0,0 +1,74 @@
|
||||
package com.chanko.yunxi.mes.module.heli.service.monordnum;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.*;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.monordnum.vo.*;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.monordnum.MonOrdNumDO;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
|
||||
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
|
||||
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.monordnum.MonOrdNumMapper;
|
||||
|
||||
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
|
||||
|
||||
/**
|
||||
* 大屏-月订单数量 Service 实现类
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
@Service
|
||||
@Validated
|
||||
public class MonOrdNumServiceImpl implements MonOrdNumService {
|
||||
|
||||
@Resource
|
||||
private MonOrdNumMapper monOrdNumMapper;
|
||||
|
||||
@Override
|
||||
public Long createMonOrdNum(MonOrdNumSaveReqVO createReqVO) {
|
||||
// 插入
|
||||
MonOrdNumDO monOrdNum = BeanUtils.toBean(createReqVO, MonOrdNumDO.class);
|
||||
monOrdNumMapper.insert(monOrdNum);
|
||||
// 返回
|
||||
return monOrdNum.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateMonOrdNum(MonOrdNumSaveReqVO updateReqVO) {
|
||||
// 校验存在
|
||||
validateMonOrdNumExists(updateReqVO.getId());
|
||||
// 更新
|
||||
MonOrdNumDO updateObj = BeanUtils.toBean(updateReqVO, MonOrdNumDO.class);
|
||||
monOrdNumMapper.updateById(updateObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteMonOrdNum(Long id) {
|
||||
// 校验存在
|
||||
validateMonOrdNumExists(id);
|
||||
// 删除
|
||||
monOrdNumMapper.deleteById(id);
|
||||
}
|
||||
|
||||
private void validateMonOrdNumExists(Long id) {
|
||||
if (monOrdNumMapper.selectById(id) == null) {
|
||||
// throw exception(MON_ORD_NUM_NOT_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public MonOrdNumDO getMonOrdNum(Long id) {
|
||||
return monOrdNumMapper.selectById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<MonOrdNumDO> getMonOrdNumPage(MonOrdNumPageReqVO pageReqVO) {
|
||||
return monOrdNumMapper.selectPage(pageReqVO);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,55 @@
|
||||
package com.chanko.yunxi.mes.module.heli.service.process;
|
||||
|
||||
import java.util.*;
|
||||
import javax.validation.*;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.process.vo.*;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.process.ProcessDO;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
|
||||
|
||||
/**
|
||||
* 大屏-设计、装配、加工进度 Service 接口
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
public interface ProcessService {
|
||||
|
||||
/**
|
||||
* 创建大屏-设计、装配、加工进度
|
||||
*
|
||||
* @param createReqVO 创建信息
|
||||
* @return 编号
|
||||
*/
|
||||
Long createProcess(@Valid ProcessSaveReqVO createReqVO);
|
||||
|
||||
/**
|
||||
* 更新大屏-设计、装配、加工进度
|
||||
*
|
||||
* @param updateReqVO 更新信息
|
||||
*/
|
||||
void updateProcess(@Valid ProcessSaveReqVO updateReqVO);
|
||||
|
||||
/**
|
||||
* 删除大屏-设计、装配、加工进度
|
||||
*
|
||||
* @param id 编号
|
||||
*/
|
||||
void deleteProcess(Long id);
|
||||
|
||||
/**
|
||||
* 获得大屏-设计、装配、加工进度
|
||||
*
|
||||
* @param id 编号
|
||||
* @return 大屏-设计、装配、加工进度
|
||||
*/
|
||||
ProcessDO getProcess(Long id);
|
||||
|
||||
/**
|
||||
* 获得大屏-设计、装配、加工进度分页
|
||||
*
|
||||
* @param pageReqVO 分页查询
|
||||
* @return 大屏-设计、装配、加工进度分页
|
||||
*/
|
||||
PageResult<ProcessDO> getProcessPage(ProcessPageReqVO pageReqVO);
|
||||
|
||||
}
|
||||
@ -0,0 +1,74 @@
|
||||
package com.chanko.yunxi.mes.module.heli.service.process;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.*;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.process.vo.*;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.process.ProcessDO;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
|
||||
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
|
||||
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.process.ProcessMapper;
|
||||
|
||||
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
|
||||
|
||||
/**
|
||||
* 大屏-设计、装配、加工进度 Service 实现类
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
@Service
|
||||
@Validated
|
||||
public class ProcessServiceImpl implements ProcessService {
|
||||
|
||||
@Resource
|
||||
private ProcessMapper processMapper;
|
||||
|
||||
@Override
|
||||
public Long createProcess(ProcessSaveReqVO createReqVO) {
|
||||
// 插入
|
||||
ProcessDO process = BeanUtils.toBean(createReqVO, ProcessDO.class);
|
||||
processMapper.insert(process);
|
||||
// 返回
|
||||
return process.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateProcess(ProcessSaveReqVO updateReqVO) {
|
||||
// 校验存在
|
||||
validateProcessExists(updateReqVO.getId());
|
||||
// 更新
|
||||
ProcessDO updateObj = BeanUtils.toBean(updateReqVO, ProcessDO.class);
|
||||
processMapper.updateById(updateObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteProcess(Long id) {
|
||||
// 校验存在
|
||||
validateProcessExists(id);
|
||||
// 删除
|
||||
processMapper.deleteById(id);
|
||||
}
|
||||
|
||||
private void validateProcessExists(Long id) {
|
||||
if (processMapper.selectById(id) == null) {
|
||||
// throw exception(PROCESS_NOT_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProcessDO getProcess(Long id) {
|
||||
return processMapper.selectById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<ProcessDO> getProcessPage(ProcessPageReqVO pageReqVO) {
|
||||
return processMapper.selectPage(pageReqVO);
|
||||
}
|
||||
|
||||
}
|
||||
@ -120,4 +120,6 @@ public interface ProcessBomService {
|
||||
CommonResult<Boolean> updateById(String code);
|
||||
|
||||
CommonResult<Boolean> selectPlanTaskStatus(String id);
|
||||
|
||||
List<ProcessBomDetailDO> getProcessBomExcel(List<Long> collect);
|
||||
}
|
||||
|
||||
@ -1699,6 +1699,11 @@ public class ProcessBomServiceImpl implements ProcessBomService {
|
||||
return success(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ProcessBomDetailDO> getProcessBomExcel(List<Long> collect) {
|
||||
return processBomDetailMapper.getProcessBomExcel( collect);
|
||||
}
|
||||
|
||||
|
||||
private void createProcessBomDetailList(String bomCode,Long bomId, List<ProcessBomDetailDO> list,Integer num) {
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
|
||||
@ -0,0 +1,58 @@
|
||||
package com.chanko.yunxi.mes.module.heli.service.processdetail;
|
||||
|
||||
import java.util.*;
|
||||
import javax.validation.*;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.processdetail.vo.*;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processdetail.ProcessDetailDO;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
|
||||
|
||||
/**
|
||||
* 大屏-设计、装配、加工进度子 Service 接口
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
public interface ProcessDetailService {
|
||||
|
||||
/**
|
||||
* 创建大屏-设计、装配、加工进度子
|
||||
*
|
||||
* @param createReqVO 创建信息
|
||||
* @return 编号
|
||||
*/
|
||||
Long createProcessDetail(@Valid ProcessDetailSaveReqVO createReqVO);
|
||||
|
||||
/**
|
||||
* 更新大屏-设计、装配、加工进度子
|
||||
*
|
||||
* @param updateReqVO 更新信息
|
||||
*/
|
||||
void updateProcessDetail(@Valid ProcessDetailSaveReqVO updateReqVO);
|
||||
|
||||
/**
|
||||
* 删除大屏-设计、装配、加工进度子
|
||||
*
|
||||
* @param id 编号
|
||||
*/
|
||||
void deleteProcessDetail(Long id);
|
||||
|
||||
/**
|
||||
* 获得大屏-设计、装配、加工进度子
|
||||
*
|
||||
* @param id 编号
|
||||
* @return 大屏-设计、装配、加工进度子
|
||||
*/
|
||||
ProcessDetailDO getProcessDetail(Long id);
|
||||
|
||||
/**
|
||||
* 获得大屏-设计、装配、加工进度子分页
|
||||
*
|
||||
* @param pageReqVO 分页查询
|
||||
* @return 大屏-设计、装配、加工进度子分页
|
||||
*/
|
||||
PageResult<ProcessDetailDO> getProcessDetailPage(ProcessDetailPageReqVO pageReqVO);
|
||||
|
||||
List<ProcessDetailDO> searchProgress(Integer type);
|
||||
|
||||
void update(List<ProcessDetailDO> list);
|
||||
}
|
||||
@ -0,0 +1,96 @@
|
||||
package com.chanko.yunxi.mes.module.heli.service.processdetail;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.processdetail.vo.*;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processdetail.ProcessDetailDO;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
|
||||
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
|
||||
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.processdetail.ProcessDetailMapper;
|
||||
|
||||
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
|
||||
|
||||
/**
|
||||
* 大屏-设计、装配、加工进度子 Service 实现类
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
@Service
|
||||
@Validated
|
||||
public class ProcessDetailServiceImpl implements ProcessDetailService {
|
||||
|
||||
@Resource
|
||||
private ProcessDetailMapper processDetailMapper;
|
||||
|
||||
@Override
|
||||
public Long createProcessDetail(ProcessDetailSaveReqVO createReqVO) {
|
||||
// 插入
|
||||
ProcessDetailDO processDetail = BeanUtils.toBean(createReqVO, ProcessDetailDO.class);
|
||||
processDetailMapper.insert(processDetail);
|
||||
// 返回
|
||||
return processDetail.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateProcessDetail(ProcessDetailSaveReqVO updateReqVO) {
|
||||
// 校验存在
|
||||
validateProcessDetailExists(updateReqVO.getId());
|
||||
// 更新
|
||||
ProcessDetailDO updateObj = BeanUtils.toBean(updateReqVO, ProcessDetailDO.class);
|
||||
processDetailMapper.updateById(updateObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteProcessDetail(Long id) {
|
||||
// 校验存在
|
||||
validateProcessDetailExists(id);
|
||||
// 删除
|
||||
processDetailMapper.deleteById(id);
|
||||
}
|
||||
|
||||
private void validateProcessDetailExists(Long id) {
|
||||
if (processDetailMapper.selectById(id) == null) {
|
||||
throw exception(PROCESS_DETAIL_NOT_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProcessDetailDO getProcessDetail(Long id) {
|
||||
return processDetailMapper.selectById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<ProcessDetailDO> getProcessDetailPage(ProcessDetailPageReqVO pageReqVO) {
|
||||
return processDetailMapper.selectPage(pageReqVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ProcessDetailDO> searchProgress(Integer type) {
|
||||
return processDetailMapper.searchProgress(type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(List<ProcessDetailDO> list) {
|
||||
if (ObjectUtil.isNotEmpty(list)){
|
||||
Set<Long> idSet = list.stream()
|
||||
.map(ProcessDetailDO::getId)
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
List<ProcessDetailDO> existingDOs = processDetailMapper.selectBatchIds(new ArrayList<>(idSet));
|
||||
if (idSet.size() != existingDOs.size()){
|
||||
throw exception(PROCESS_DETAIL_NOT_EXISTS);
|
||||
}
|
||||
processDetailMapper.updateProcessDetailDOBatch(list);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -3,7 +3,11 @@ package com.chanko.yunxi.mes.module.heli.service.screen;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.screen.vo.ScreenPageReqVO;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.screen.vo.ScreenSaveReqVO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.found.FoundDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.monordnum.MonOrdNumDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processdetail.ProcessDetailDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.screen.ScreenDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.yearnum.YearNumDO;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
@ -58,9 +62,13 @@ public interface ScreenService {
|
||||
|
||||
void updateScreenAll(List<ScreenSaveReqVO> updateReqVOList);
|
||||
|
||||
Map<String, Long> searchUnfinished();
|
||||
FoundDO searchUnfinished();
|
||||
|
||||
Map<String, Map<String, Integer>> searchOrderInformation();
|
||||
List<MonOrdNumDO> searchOrderInformation();
|
||||
|
||||
Map<String, Integer> searchOrderByYear();
|
||||
List<YearNumDO> searchOrderByYear();
|
||||
|
||||
List<ProcessDetailDO> searchProgress(Integer type);
|
||||
|
||||
void updateLargeScreenData();
|
||||
}
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package com.chanko.yunxi.mes.module.heli.service.screen;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.TypeReference;
|
||||
@ -10,39 +11,56 @@ import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.screen.vo.ScreenPageReqVO;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.screen.vo.ScreenSaveReqVO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.equipmanufacture.EquipManufactureDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.found.FoundDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.monordnum.MonOrdNumDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plan.PlanDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansub.PlanSubDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.process.ProcessDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processdesign.ProcessDesignDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processdesignprogress.ProcessDesignProgressDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processdetail.ProcessDetailDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordernodetail.PurchaseOrderNoDetailDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.screen.ScreenDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskreport.TaskReportDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.yearnum.YearNumDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.equipmanufacture.EquipManufactureMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.found.FoundMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.monordnum.MonOrdNumMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.plansub.PlanSubMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.process.ProcessMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomDetailMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.processdesign.ProcessDesignMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.processdesign.ProcessDesignProgressMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.processdetail.ProcessDetailMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderSubMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordernodetail.PurchaseOrderNoDetailMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.screen.ScreenMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchDetailMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.yearnum.YearNumMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.enums.*;
|
||||
import com.chanko.yunxi.mes.module.heli.service.found.FoundService;
|
||||
import com.chanko.yunxi.mes.module.heli.service.taskdispatch.TaskDispatchService;
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.yaml.snakeyaml.events.Event;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.Year;
|
||||
import java.time.ZoneOffset;
|
||||
import java.time.*;
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
@ -80,6 +98,22 @@ public class ScreenServiceImpl implements ScreenService {
|
||||
private ProcessDesignMapper processDesignMapper;
|
||||
@Resource
|
||||
private PlanSubMapper planSubMapper;
|
||||
@Resource
|
||||
private FoundMapper foundMapper;
|
||||
@Resource
|
||||
private YearNumMapper yearNumMapper;
|
||||
@Resource
|
||||
private MonOrdNumMapper monOrdNumMapper;
|
||||
@Resource
|
||||
private ProcessMapper processMapper;
|
||||
@Resource
|
||||
private ProcessDetailMapper processDetailMapper;
|
||||
@Resource
|
||||
private PurchaseOrderNoDetailMapper purchaseOrderNoDetailMapper;
|
||||
@Resource
|
||||
private ProcessBomDetailMapper processBomDetailMapper;
|
||||
@Resource
|
||||
private ProcessDesignProgressMapper processDesignProgressMapper;
|
||||
|
||||
@Override
|
||||
public Long createScreen(ScreenSaveReqVO createReqVO) {
|
||||
@ -98,15 +132,15 @@ public class ScreenServiceImpl implements ScreenService {
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
|
||||
String today = sdf.format(calendar.getTime());
|
||||
boolean insert = false;
|
||||
if(!updateReqVO.getDate().equals(today)){
|
||||
if (!updateReqVO.getDate().equals(today)) {
|
||||
updateReqVO.setId(null);
|
||||
updateReqVO.setDate(today);
|
||||
insert = true;
|
||||
insert = true;
|
||||
}
|
||||
ScreenDO updateObj = BeanUtils.toBean(updateReqVO, ScreenDO.class);
|
||||
if(insert){
|
||||
if (insert) {
|
||||
screenMapper.insert(updateObj);
|
||||
}else{
|
||||
} else {
|
||||
// 更新
|
||||
|
||||
screenMapper.updateById(updateObj);
|
||||
@ -125,18 +159,18 @@ public class ScreenServiceImpl implements ScreenService {
|
||||
String today = sdf.format(calendar.getTime());
|
||||
boolean insert = false;
|
||||
for (ScreenSaveReqVO screenSaveReqVO : updateReqVOList) {
|
||||
if(!screenSaveReqVO.getDate().equals(today)){
|
||||
if (!screenSaveReqVO.getDate().equals(today)) {
|
||||
screenSaveReqVO.setId(null);
|
||||
screenSaveReqVO.setDate(today);
|
||||
if(!insert){
|
||||
if (!insert) {
|
||||
insert = true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
if(insert){
|
||||
if (insert) {
|
||||
screenMapper.insertBatch(BeanUtils.toBean(updateReqVOList, ScreenDO.class));
|
||||
}else{
|
||||
} else {
|
||||
// 更新
|
||||
screenMapper.updateBatch(BeanUtils.toBean(updateReqVOList, ScreenDO.class));
|
||||
}
|
||||
@ -144,75 +178,623 @@ public class ScreenServiceImpl implements ScreenService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Long> searchUnfinished() {
|
||||
Map<String, Long> map = new HashMap<>();
|
||||
Long unfinished= projectOrderSubMapper.searchUnfinished();
|
||||
Long notDispatched =projectOrderSubMapper.searchNotDispatched();
|
||||
map.put("unfinished",unfinished);
|
||||
map.put("notDispatched",notDispatched);
|
||||
return map;
|
||||
public FoundDO searchUnfinished() {
|
||||
// Map<String, Long> map = new HashMap<>();
|
||||
// Long unfinished= projectOrderSubMapper.searchUnfinished();
|
||||
// Long notDispatched =projectOrderSubMapper.searchNotDispatched();
|
||||
// map.put("unfinished",unfinished);
|
||||
// map.put("notDispatched",notDispatched);
|
||||
return foundMapper.searchUnfinished();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Map<String, Integer>> searchOrderInformation() {
|
||||
Map<String, Map<String, Integer>> resultMap = new LinkedHashMap<>();
|
||||
for (int i = 1; i <= 12; i++) {
|
||||
String monthKey = String.valueOf(i);
|
||||
// 创建内层Map并设置默认值
|
||||
Map<String, Integer> innerMap = new HashMap<>();
|
||||
innerMap.put("blackMold", 0);
|
||||
innerMap.put("coloredMolds", 0);
|
||||
resultMap.put(monthKey, innerMap);
|
||||
public List<MonOrdNumDO> searchOrderInformation() {
|
||||
// Map<String, Map<String, Integer>> resultMap = new LinkedHashMap<>();
|
||||
// for (int i = 1; i <= 12; i++) {
|
||||
// String monthKey = String.valueOf(i);
|
||||
// // 创建内层Map并设置默认值
|
||||
// Map<String, Integer> innerMap = new HashMap<>();
|
||||
// innerMap.put("blackMold", 0);
|
||||
// innerMap.put("coloredMolds", 0);
|
||||
// resultMap.put(monthKey, innerMap);
|
||||
// }
|
||||
// List<ProjectOrderDO> projectOrderDOS = projectOrderSubMapper.searchOrderInformation();
|
||||
// for (ProjectOrderDO order : projectOrderDOS) {
|
||||
// String month = order.getMonth();
|
||||
// Map<String, Integer> innerMap = resultMap.get(month);
|
||||
// if (ObjectUtil.isNotEmpty(innerMap)){
|
||||
// innerMap.put("blackMold", order.getBlackMold());
|
||||
// innerMap.put("coloredMolds",order.getColoredMolds());
|
||||
// }
|
||||
// }
|
||||
// 获取当前年份
|
||||
String currentYear = DateUtil.format(new Date(), "yyyy");
|
||||
return monOrdNumMapper.searchOrderInformation(currentYear);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<YearNumDO> searchOrderByYear() {
|
||||
// int currentYear = Year.now().getValue();
|
||||
//
|
||||
// // 初始化近5年的年份 map,value 为 null
|
||||
// Map<String, Integer> map = IntStream.range(currentYear - 4, currentYear + 1)
|
||||
// .boxed()
|
||||
// .collect(
|
||||
// TreeMap::new,
|
||||
// (m, year) -> m.put(String.valueOf(year), null),
|
||||
// Map::putAll
|
||||
// );
|
||||
//
|
||||
// // 假设这个 list 是从数据库查询出来的,key 是年份,value 是订单数量
|
||||
// List<Map<String, Integer>> list = projectOrderSubMapper.searchOrderByYear();
|
||||
// Map<String, Integer> dataMap=new HashMap<>();
|
||||
// list.forEach(item->{
|
||||
// dataMap.put(String.valueOf(item.get("year")),item.get("amount"));
|
||||
// });
|
||||
// // 第一步:用 list 中的数据赋值
|
||||
// for (Map.Entry<String, Integer> entry : dataMap.entrySet()) {
|
||||
// String year = entry.getKey();
|
||||
// Integer amount = Integer.parseInt(String.valueOf(entry.getValue()));
|
||||
// if (map.containsKey(year)) {
|
||||
// map.put(year, amount);
|
||||
// }
|
||||
// }
|
||||
// // 第二步:处理 map 中 value 为 null 的年份,且不是当前年份的
|
||||
// for (Map.Entry<String, Integer> entry : map.entrySet()) {
|
||||
// String year = entry.getKey();
|
||||
// if (ObjectUtil.isEmpty(entry.getValue()) && Integer.parseInt(year) != currentYear) {
|
||||
//// String defaultUserName = userMapper.selectFirstUserName();
|
||||
//// map.put(year, defaultUserName);
|
||||
// }
|
||||
// }
|
||||
// 获取当前年份
|
||||
int currentYear = DateUtil.year(new Date());
|
||||
// 计算起始年份(近5年)
|
||||
int startYear = currentYear - 4;
|
||||
return yearNumMapper.searchOrderByYear(String.valueOf(startYear), String.valueOf(currentYear));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ProcessDetailDO> searchProgress(Integer type) {
|
||||
ProcessDO processDO = processMapper.selectType(type);
|
||||
if (ObjectUtil.isNotEmpty(processDO)) {
|
||||
List<ProcessDetailDO> processDetailDOS = processDetailMapper.selectProcessIdAndIsSelect(processDO.getId());
|
||||
if (ObjectUtil.isNotEmpty(processDetailDOS)) {
|
||||
return processDetailDOS;
|
||||
}
|
||||
return processDetailMapper.selectProcessId(processDO.getId());
|
||||
}
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
public void syncYearData() {
|
||||
|
||||
// 获取当前年份
|
||||
int currentYear = DateUtil.year(new Date());
|
||||
// 计算起始年份(近5年)
|
||||
int startYear = currentYear - 4;
|
||||
int[] recentYears = new int[5];
|
||||
for (int i = 0; i < 5; i++) {
|
||||
recentYears[i] = currentYear - (4 - i);
|
||||
}
|
||||
List<YearNumDO> allData = yearNumMapper.searchOrderByYear(String.valueOf(startYear), String.valueOf(currentYear));
|
||||
// 创建年份到对象的映射
|
||||
Map<String, YearNumDO> yearDataMap = allData.stream()
|
||||
.collect(Collectors.toMap(
|
||||
YearNumDO::getDate, // 假设有getYear方法
|
||||
Function.identity(),
|
||||
(oldValue, newValue) -> oldValue // 如果有重复,取第一个
|
||||
));
|
||||
|
||||
// 检查并补全
|
||||
List<YearNumDO> missingData = new ArrayList<>();
|
||||
|
||||
for (int year : recentYears) {
|
||||
if (!yearDataMap.containsKey(year)) {
|
||||
YearNumDO newData = buildDefaultYearData(year);
|
||||
missingData.add(newData);
|
||||
}
|
||||
}
|
||||
|
||||
// 批量插入缺失数据
|
||||
if (!missingData.isEmpty()) {
|
||||
// 批量插入
|
||||
yearNumMapper.insertBatch(missingData);
|
||||
}
|
||||
}
|
||||
|
||||
private YearNumDO buildDefaultYearData(int year) {
|
||||
YearNumDO data = new YearNumDO();
|
||||
data.setDate(String.valueOf(year));
|
||||
data.setNumOrder(0);
|
||||
return data;
|
||||
}
|
||||
private ProcessDO getProcess( Integer type) {
|
||||
ProcessDO processDO = processMapper.selectType(type);
|
||||
if (ObjectUtil.isEmpty(processDO)) {
|
||||
processDO = new ProcessDO();
|
||||
processDO.setProcessType(type);
|
||||
processMapper.insert(processDO);
|
||||
processDO = processMapper.selectType(type);
|
||||
}
|
||||
return processDO;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void updateLargeScreenData() {
|
||||
//可修改单项数据
|
||||
updateFound();
|
||||
//当前年按月份的订单数量
|
||||
updateOrderInformation();
|
||||
//近5年的订单数量
|
||||
updateOrderByYear();
|
||||
//生产进度
|
||||
updateProgressTrackingOfProduction();
|
||||
//装配进度
|
||||
updateProgressTrackingOfAssembly();
|
||||
//设计进度
|
||||
updateProgressTrackingOfDesign();
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void updateProgressTrackingOfDesign() {
|
||||
ProcessDO process = getProcess(1);
|
||||
List<ProjectOrderDO> projectOrderDOS =projectOrderMapper.selectOrder();
|
||||
List<ProcessDetailDO> processDetailDOS = processDetailMapper.selectProcessIdAndIsSelect(process.getId());
|
||||
//删除现有数据
|
||||
deleteProcessDetail(process.getId());
|
||||
List<ProcessDetailDO> addList = new ArrayList<>();
|
||||
if (ObjectUtil.isNotEmpty(projectOrderDOS)){
|
||||
List<Long> projectOrderIds = projectOrderDOS.stream().map(ProjectOrderDO::getId).collect(Collectors.toList());
|
||||
Map<Long,Boolean> completedProcessMap;
|
||||
// 1. 查询已完成的工艺设计
|
||||
List<ProcessDesignDO> completedProcessDesigns = getCompletedProcessDesigns(projectOrderIds);
|
||||
completedProcessMap = completedProcessDesigns.stream()
|
||||
.collect(Collectors.groupingBy(
|
||||
ProcessDesignDO::getProjectId,
|
||||
Collectors.collectingAndThen(
|
||||
Collectors.toList(),
|
||||
list -> list.stream().allMatch(pd -> ObjectUtil.isNotEmpty(pd.getIsOverProcess()) && pd.getIsOverProcess() == 1)
|
||||
)
|
||||
));
|
||||
Map<Long, List<ProcessDesignDO>> groupedMap = completedProcessDesigns.stream()
|
||||
.collect(Collectors.groupingBy(ProcessDesignDO::getProjectId));
|
||||
for (ProjectOrderDO projectOrderDO : projectOrderDOS) {
|
||||
List<ProcessDetailDO> matchingDetails = processDetailDOS.stream()
|
||||
.filter(detail -> ObjectUtil.isNotEmpty(detail.getProjectId())
|
||||
&& Objects.equals(detail.getProjectId(), projectOrderDO.getId()))
|
||||
.collect(Collectors.toList());
|
||||
if (ObjectUtil.isNotEmpty(matchingDetails)){
|
||||
ProcessDetailDO processDetailDO = matchingDetails.get(0);
|
||||
processDetailDO = createProcessDetailDesign(projectOrderDO, process, processDetailDO, completedProcessMap, groupedMap);
|
||||
}else {
|
||||
ProcessDetailDO processDetailDO = new ProcessDetailDO();
|
||||
processDetailDO = createProcessDetailDesign(projectOrderDO, process, processDetailDO, completedProcessMap, groupedMap);
|
||||
addList.add(processDetailDO);
|
||||
}
|
||||
}
|
||||
addList.addAll(processDetailDOS);
|
||||
}else{
|
||||
if (ObjectUtil.isNotEmpty(processDetailDOS)) {
|
||||
addList=processDetailDOS;
|
||||
}
|
||||
}
|
||||
processDetailMapper.insertBatch(addList);
|
||||
}
|
||||
|
||||
private ProcessDetailDO createProcessDetailDesign(ProjectOrderDO projectOrderDO, ProcessDO process, ProcessDetailDO processDetailDO, Map<Long, Boolean> completedProcessMap, Map<Long, List<ProcessDesignDO>> groupedMap) {
|
||||
processDetailDO.setDate(String.valueOf(projectOrderDO.getOrderTime().getYear()));
|
||||
processDetailDO.setProjectName(projectOrderDO.getProjectName());
|
||||
processDetailDO.setProjectNameSim(projectOrderDO.getProjectNameSim());
|
||||
processDetailDO.setProjectId(projectOrderDO.getId());
|
||||
processDetailDO.setOrdDate(projectOrderDO.getOrderTime());
|
||||
processDetailDO.setProjectStartTime(projectOrderDO.getProjectStartTime());
|
||||
processDetailDO.setProjectEndTime(projectOrderDO.getProjectEndTime());
|
||||
processDetailDO.setDeliveryStatus(projectOrderDO.getDeliveryStatus());
|
||||
processDetailDO.setProcessId(process.getId());
|
||||
if (LocalDateTime.now().toLocalDate().isAfter(projectOrderDO.getOrderTime().toLocalDate())) {
|
||||
processDetailDO.setIsExten("1");
|
||||
}
|
||||
Long id = projectOrderDO.getId();
|
||||
Boolean isCompleted = completedProcessMap.get(id);
|
||||
if (ObjectUtil.isNotEmpty(isCompleted)&&isCompleted){
|
||||
processDetailDO.setProjectProcess(100);
|
||||
return processDetailDO;
|
||||
}
|
||||
List<ProcessDesignDO> processDesigns = groupedMap.get(id);
|
||||
if (ObjectUtil.isEmpty(processDesigns)) {
|
||||
processDetailDO.setProjectProcess(0);
|
||||
return processDetailDO;
|
||||
}
|
||||
List<ProcessDesignDO> collect = processDesigns.stream()
|
||||
.filter(processDesignDO -> processDesignDO.getIsOverProcess() != 1).collect(Collectors.toList());
|
||||
List<ProcessDesignDO> collect1 = processDesigns.stream()
|
||||
.filter(processDesignDO -> processDesignDO.getIsOverProcess() == 1).collect(Collectors.toList());
|
||||
List<Long> processDesignIds = processDesigns.stream()
|
||||
.filter(processDesignDO -> processDesignDO.getIsOverProcess() !=1)
|
||||
.map(ProcessDesignDO::getId)
|
||||
.collect(Collectors.toList());
|
||||
List<Long> ids = processDesigns.stream()
|
||||
.map(ProcessDesignDO::getId)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 获取工艺设计进度列表
|
||||
List<ProcessDesignProgressDO> progressList = getProcessDesignProgressList(processDesignIds);
|
||||
List<ProcessDesignProgressDO> processDesignProgressDOS = getProcessDesignProgressList(ids);
|
||||
|
||||
if (ObjectUtil.isEmpty(processDesignProgressDOS)) {
|
||||
processDetailDO.setProjectProcess(0);
|
||||
return processDetailDO;
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(processDesignProgressDOS)) {
|
||||
// 计算总工时和当前工时
|
||||
BigDecimal totalWorkTime = calculateTotalWorkTime(progressList);
|
||||
BigDecimal currentTime = calculateCurrentTime(collect);
|
||||
for (ProcessDesignDO processDesignDO : collect1) {
|
||||
PlanSubDO subDO = planSubMapper.selectPlanSub(processDesignDO.getPlanId(), processDesignDO.getProjectSubId());
|
||||
if ("BLUEPRINT_3D".equals(processDesignDO.getProcessDesignType())) {
|
||||
if (ObjectUtil.isNotEmpty(subDO.getThreeDimNum())) {
|
||||
currentTime = currentTime.add(new BigDecimal(subDO.getThreeDimNum().toString()));
|
||||
totalWorkTime = totalWorkTime.add(new BigDecimal(subDO.getThreeDimNum().toString()).multiply(new BigDecimal("8")));
|
||||
}
|
||||
}
|
||||
if ("BLUEPRINT_WORKBLANK".equals(processDesignDO.getProcessDesignType())) {
|
||||
if (ObjectUtil.isNotEmpty(subDO.getBlankNum())) {
|
||||
currentTime = currentTime.add(new BigDecimal(subDO.getBlankNum().toString()));
|
||||
totalWorkTime = totalWorkTime.add(new BigDecimal(subDO.getBlankNum().toString()).multiply(new BigDecimal("8")));
|
||||
}
|
||||
}
|
||||
if ("BLUEPRINT_2D".equals(processDesignDO.getProcessDesignType())) {
|
||||
if (ObjectUtil.isNotEmpty(subDO.getTwoDimNum())) {
|
||||
currentTime = currentTime.add(new BigDecimal(subDO.getTwoDimNum().toString()));
|
||||
totalWorkTime = totalWorkTime.add(new BigDecimal(subDO.getTwoDimNum().toString()).multiply(new BigDecimal("8")));
|
||||
}
|
||||
}
|
||||
}
|
||||
currentTime = currentTime.multiply(new BigDecimal("8"));
|
||||
// 计算完成百分比
|
||||
Integer percentage = calculatePercentage(totalWorkTime, currentTime);
|
||||
|
||||
processDetailDO.setProjectProcess(percentage);
|
||||
return processDetailDO;
|
||||
}
|
||||
processDetailDO.setProjectProcess(0);
|
||||
return processDetailDO;
|
||||
}
|
||||
/**
|
||||
* 计算百分比
|
||||
*/
|
||||
private Integer calculatePercentage(BigDecimal currentTime, BigDecimal totalWorkTime) {
|
||||
if (totalWorkTime == null || totalWorkTime.compareTo(BigDecimal.ZERO) == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return currentTime.multiply(new BigDecimal("100"))
|
||||
.divide(totalWorkTime, 0, RoundingMode.HALF_UP)
|
||||
.intValue();
|
||||
}
|
||||
private List<ProcessDesignDO> getCompletedProcessDesigns(List<Long> projectOrderIds) {
|
||||
return processDesignMapper.selectWithDetail(projectOrderIds);
|
||||
}
|
||||
/**
|
||||
* 计算当前工时(将三个数值相加)
|
||||
*/
|
||||
private BigDecimal calculateCurrentTime(List<ProcessDesignDO> collect) {
|
||||
BigDecimal currentTime = BigDecimal.ZERO;
|
||||
for (ProcessDesignDO processDesignDO : collect) {
|
||||
PlanSubDO subDO = planSubMapper.selectPlanSub(processDesignDO.getPlanId(), processDesignDO.getProjectSubId());
|
||||
if ("BLUEPRINT_3D".equals(processDesignDO.getProcessDesignType())){
|
||||
if (ObjectUtil.isNotEmpty(subDO.getThreeDimNum())) {
|
||||
currentTime = currentTime.add(new BigDecimal(subDO.getThreeDimNum().toString()));
|
||||
}
|
||||
}
|
||||
if ("BLUEPRINT_WORKBLANK".equals(processDesignDO.getProcessDesignType())){
|
||||
if (ObjectUtil.isNotEmpty(subDO.getBlankNum())) {
|
||||
currentTime = currentTime.add(new BigDecimal(subDO.getBlankNum().toString()));
|
||||
}
|
||||
}
|
||||
if ("BLUEPRINT_2D".equals(processDesignDO.getProcessDesignType())){
|
||||
if (ObjectUtil.isNotEmpty(subDO.getTwoDimNum())) {
|
||||
currentTime = currentTime.add(new BigDecimal(subDO.getTwoDimNum().toString()));
|
||||
}
|
||||
}
|
||||
}
|
||||
return currentTime;
|
||||
}
|
||||
/**
|
||||
* 计算总工时
|
||||
*/
|
||||
private BigDecimal calculateTotalWorkTime(List<ProcessDesignProgressDO> progressList) {
|
||||
return progressList.stream()
|
||||
.map(ProcessDesignProgressDO::getWorkTime)
|
||||
.filter(Objects::nonNull)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
}
|
||||
/**
|
||||
* 获取工艺设计进度列表
|
||||
*/
|
||||
private List<ProcessDesignProgressDO> getProcessDesignProgressList(List<Long> processDesignIds) {
|
||||
if (ObjectUtil.isEmpty(processDesignIds)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
LambdaQueryWrapper<ProcessDesignProgressDO> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.in(ProcessDesignProgressDO::getProcessDesignId, processDesignIds);
|
||||
return processDesignProgressMapper.selectList(queryWrapper);
|
||||
}
|
||||
private void updateProgressTrackingOfAssembly() {
|
||||
ProcessDO process = getProcess(3);
|
||||
List<ProjectOrderDO> projectOrderDOS =projectOrderMapper.selectOrder();
|
||||
List<ProcessDetailDO> processDetailDOS = processDetailMapper.selectProcessIdAndIsSelect(process.getId());
|
||||
//删除现有数据
|
||||
deleteProcessDetail(process.getId());
|
||||
List<ProcessDetailDO> addList = new ArrayList<>();
|
||||
if (ObjectUtil.isNotEmpty(projectOrderDOS)){
|
||||
List<Long> projectOrderIds = projectOrderDOS.stream().map(ProjectOrderDO::getId).collect(Collectors.toList());
|
||||
Map<Long, BigDecimal> dispatchDetailMap=new HashMap<>();
|
||||
Map<Long, BigDecimal> taskReportMap=new HashMap<>();
|
||||
//查询所有订单已报工完成数量
|
||||
List<TaskDispatchDetailDO> taskReportDOList = taskDispatchDetailMapper.selectByProjectOrderIdsAssembly(projectOrderIds,"ASSEMBLE");
|
||||
if (ObjectUtil.isNotEmpty(taskReportDOList)){
|
||||
taskReportMap = taskReportDOList.stream().collect(Collectors.toMap(TaskDispatchDetailDO::getProjectOrderId, TaskDispatchDetailDO::getTotalWorkTime, (oldValue, newValue) -> oldValue));
|
||||
}
|
||||
//查询所有订单的派工数量
|
||||
List<TaskDispatchDetailDO> taskDispatchDetailDOList = taskDispatchDetailMapper.selectByProjectOrderIdsAmount(projectOrderIds,"ASSEMBLE");
|
||||
if (ObjectUtil.isNotEmpty(taskDispatchDetailDOList)){
|
||||
dispatchDetailMap = taskDispatchDetailDOList.stream().collect(Collectors.toMap(TaskDispatchDetailDO::getProjectOrderId, TaskDispatchDetailDO::getTotalWorkTime, (oldValue, newValue) -> oldValue));
|
||||
}
|
||||
for (ProjectOrderDO projectOrderDO : projectOrderDOS) {
|
||||
List<ProcessDetailDO> matchingDetails = processDetailDOS.stream()
|
||||
.filter(detail -> ObjectUtil.isNotEmpty(detail.getProjectId())
|
||||
&& Objects.equals(detail.getProjectId(), projectOrderDO.getId()))
|
||||
.collect(Collectors.toList());
|
||||
if (ObjectUtil.isNotEmpty(matchingDetails)){
|
||||
ProcessDetailDO processDetailDO = matchingDetails.get(0);
|
||||
processDetailDO = createProcessDetailAssembly(projectOrderDO, process, processDetailDO, dispatchDetailMap, taskReportMap);
|
||||
|
||||
}else {
|
||||
ProcessDetailDO processDetailDO = new ProcessDetailDO();
|
||||
processDetailDO = createProcessDetailAssembly(projectOrderDO, process, processDetailDO, dispatchDetailMap, taskReportMap);
|
||||
addList.add(processDetailDO);
|
||||
}
|
||||
}
|
||||
addList.addAll(processDetailDOS);
|
||||
}else{
|
||||
if (ObjectUtil.isNotEmpty(processDetailDOS)) {
|
||||
addList=processDetailDOS;
|
||||
}
|
||||
}
|
||||
processDetailMapper.insertBatch(addList);
|
||||
}
|
||||
|
||||
private ProcessDetailDO createProcessDetailAssembly(ProjectOrderDO projectOrderDO, ProcessDO process, ProcessDetailDO processDetailDO, Map<Long, BigDecimal> dispatchDetailMap, Map<Long, BigDecimal> taskReportMap) {
|
||||
// 设置年份(假设 orderTime 不为 null,否则会抛 NPE)
|
||||
processDetailDO.setDate(String.valueOf(projectOrderDO.getOrderTime().getYear()));
|
||||
processDetailDO.setProjectName(projectOrderDO.getProjectName());
|
||||
processDetailDO.setProjectNameSim(projectOrderDO.getProjectNameSim());
|
||||
processDetailDO.setProjectId(projectOrderDO.getId());
|
||||
processDetailDO.setOrdDate(projectOrderDO.getOrderTime());
|
||||
processDetailDO.setProjectStartTime(projectOrderDO.getProjectStartTime());
|
||||
processDetailDO.setProjectEndTime(projectOrderDO.getProjectEndTime());
|
||||
processDetailDO.setDeliveryStatus(projectOrderDO.getDeliveryStatus());
|
||||
processDetailDO.setProcessId(process.getId());
|
||||
if (LocalDateTime.now().toLocalDate().isAfter(projectOrderDO.getOrderTime().toLocalDate())) {
|
||||
processDetailDO.setIsExten("1");
|
||||
}
|
||||
Long id = projectOrderDO.getId();
|
||||
|
||||
// 从 Map 中获取值,如果为 null 则用 0 代替(分母需要特殊处理)
|
||||
BigDecimal dispatchCount = taskReportMap.getOrDefault(id, BigDecimal.ZERO);
|
||||
BigDecimal baseCount = dispatchDetailMap.get(id); // 基数(分母)
|
||||
|
||||
// 处理分母为空或为零的情况
|
||||
if (ObjectUtil.isEmpty(baseCount)||baseCount.compareTo(BigDecimal.ZERO) == 0) {
|
||||
processDetailDO.setProjectProcess(0);
|
||||
return processDetailDO;
|
||||
}
|
||||
|
||||
// 计算分子和分母,使用 double 避免整数除法
|
||||
BigDecimal percentage = dispatchCount
|
||||
.multiply(new BigDecimal(100))
|
||||
.divide(baseCount, 10, RoundingMode.HALF_UP);
|
||||
|
||||
// 四舍五入取整(保留 0 位小数)
|
||||
int result = percentage.setScale(0, RoundingMode.HALF_UP).intValue();
|
||||
processDetailDO.setProjectProcess(result);
|
||||
return processDetailDO;
|
||||
}
|
||||
|
||||
private void updateProgressTrackingOfProduction() {
|
||||
ProcessDO process = getProcess(2);
|
||||
List<ProjectOrderDO> projectOrderDOS =projectOrderMapper.selectOrder();
|
||||
List<ProcessDetailDO> processDetailDOS = processDetailMapper.selectProcessIdAndIsSelect(process.getId());
|
||||
//删除现有数据
|
||||
deleteProcessDetail(process.getId());
|
||||
List<ProcessDetailDO> addList = new ArrayList<>();
|
||||
if (ObjectUtil.isNotEmpty(projectOrderDOS)){
|
||||
List<Long> projectOrderIds = projectOrderDOS.stream().map(ProjectOrderDO::getId).collect(Collectors.toList());
|
||||
Map<Long, Integer> dispatchDetailMap=new HashMap<>();
|
||||
Map<Long, Integer> orderNoDetailMap=new HashMap<>();;
|
||||
Map<Long, Integer> processBomDetailMap=new HashMap<>();
|
||||
//查询所有订单的已报工完成数量
|
||||
List<TaskDispatchDetailDO> dispatchDetailDOList = taskDispatchDetailMapper.selectByProjectOrderIds(projectOrderIds,"PRODUCTION");
|
||||
|
||||
if (ObjectUtil.isNotEmpty(dispatchDetailDOList)){
|
||||
dispatchDetailMap = dispatchDetailDOList.stream().collect(Collectors.toMap(TaskDispatchDetailDO::getProjectOrderId, TaskDispatchDetailDO::getTotalAmount, (oldValue, newValue) -> oldValue));
|
||||
}
|
||||
|
||||
//查询所有订单已收货的数量
|
||||
List<PurchaseOrderNoDetailDO> orderNoDetailDOS = purchaseOrderNoDetailMapper.selectByProjectOrderIds(projectOrderIds);
|
||||
if (ObjectUtil.isNotEmpty(orderNoDetailDOS)){
|
||||
orderNoDetailMap = orderNoDetailDOS.stream().collect(Collectors.toMap(PurchaseOrderNoDetailDO::getProjectId, PurchaseOrderNoDetailDO::getTotalAmount, (oldValue, newValue) -> oldValue));
|
||||
}
|
||||
//查询零件总数量
|
||||
List<ProcessBomDetailDO> processBomDetailDOS = processBomDetailMapper.selectByProjectOrderIds(projectOrderIds);
|
||||
if (ObjectUtil.isNotEmpty(processBomDetailDOS)){
|
||||
processBomDetailMap = processBomDetailDOS.stream().collect(Collectors.toMap(ProcessBomDetailDO::getProjectId, ProcessBomDetailDO::getTotalAmount, (oldValue, newValue) -> oldValue));
|
||||
}
|
||||
for (ProjectOrderDO projectOrderDO : projectOrderDOS) {
|
||||
List<ProcessDetailDO> matchingDetails = processDetailDOS.stream()
|
||||
.filter(detail -> ObjectUtil.isNotEmpty(detail.getProjectId())
|
||||
&& Objects.equals(detail.getProjectId(), projectOrderDO.getId()))
|
||||
.collect(Collectors.toList());
|
||||
if (ObjectUtil.isNotEmpty(matchingDetails)){
|
||||
ProcessDetailDO processDetailDO = matchingDetails.get(0);
|
||||
processDetailDO = createProcessDetail(projectOrderDO, process, processDetailDO, dispatchDetailMap, orderNoDetailMap, processBomDetailMap);
|
||||
|
||||
}else {
|
||||
ProcessDetailDO processDetailDO = new ProcessDetailDO();
|
||||
processDetailDO = createProcessDetail(projectOrderDO, process, processDetailDO, dispatchDetailMap, orderNoDetailMap, processBomDetailMap);
|
||||
addList.add(processDetailDO);
|
||||
}
|
||||
}
|
||||
addList.addAll(processDetailDOS);
|
||||
}else {
|
||||
if (ObjectUtil.isNotEmpty(processDetailDOS)) {
|
||||
addList=processDetailDOS;
|
||||
}
|
||||
}
|
||||
processDetailMapper.insertBatch(addList);
|
||||
}
|
||||
private ProcessDetailDO createProcessDetail(ProjectOrderDO projectOrderDO, ProcessDO process,ProcessDetailDO processDetailDO,Map<Long, Integer> dispatchDetailMap, Map<Long, Integer> orderNoDetailMap,Map<Long, Integer> processBomDetailMap) {
|
||||
|
||||
|
||||
// 设置年份(假设 orderTime 不为 null,否则会抛 NPE)
|
||||
processDetailDO.setDate(String.valueOf(projectOrderDO.getOrderTime().getYear()));
|
||||
processDetailDO.setProjectName(projectOrderDO.getProjectName());
|
||||
processDetailDO.setProjectNameSim(projectOrderDO.getProjectNameSim());
|
||||
processDetailDO.setProjectId(projectOrderDO.getId());
|
||||
processDetailDO.setOrdDate(projectOrderDO.getOrderTime());
|
||||
processDetailDO.setProjectStartTime(projectOrderDO.getProjectStartTime());
|
||||
processDetailDO.setProjectEndTime(projectOrderDO.getProjectEndTime());
|
||||
processDetailDO.setDeliveryStatus(projectOrderDO.getDeliveryStatus());
|
||||
processDetailDO.setProcessId(process.getId());
|
||||
if (LocalDateTime.now().toLocalDate().isAfter(projectOrderDO.getOrderTime().toLocalDate())) {
|
||||
processDetailDO.setIsExten("1");
|
||||
}
|
||||
Long id = projectOrderDO.getId();
|
||||
|
||||
// 从 Map 中获取值,如果为 null 则用 0 代替(分母需要特殊处理)
|
||||
Integer dispatchCount = dispatchDetailMap.getOrDefault(id, 0);
|
||||
Integer orderDetailCount = orderNoDetailMap.getOrDefault(id, 0);
|
||||
Integer baseCount = processBomDetailMap.get(id); // 基数(分母)
|
||||
|
||||
// 处理分母为空或为零的情况
|
||||
if (ObjectUtil.isEmpty(baseCount)) {
|
||||
processDetailDO.setProjectProcess(0);
|
||||
return processDetailDO;
|
||||
}
|
||||
|
||||
// 计算分子和分母,使用 double 避免整数除法
|
||||
double numerator = (double) (dispatchCount +orderDetailCount);
|
||||
double denominator = (double) baseCount;
|
||||
double percentage = (numerator / denominator) * 100;
|
||||
|
||||
// 四舍五入取整
|
||||
Integer result = (int) Math.round(percentage);
|
||||
processDetailDO.setProjectProcess(result);
|
||||
return processDetailDO;
|
||||
}
|
||||
private void deleteProcessDetail(Long id) {
|
||||
processDetailMapper.deleteByProcessId(id);
|
||||
}
|
||||
|
||||
private void updateOrderByYear() {
|
||||
// 获取当前年份
|
||||
int currentYear = DateUtil.year(new Date());
|
||||
// 计算起始年份(近5年)
|
||||
int startYear = currentYear - 4;
|
||||
List<YearNumDO> yearNumDOS = yearNumMapper.searchOrderByYear(String.valueOf(startYear), String.valueOf(currentYear));
|
||||
if (ObjectUtil.isEmpty(yearNumDOS) || yearNumDOS.size() < 5) {
|
||||
syncYearData();
|
||||
yearNumDOS = yearNumMapper.searchOrderByYear(String.valueOf(startYear), String.valueOf(currentYear));
|
||||
}
|
||||
List<Map<String, Long>> list = projectOrderSubMapper.searchOrderByYear();
|
||||
|
||||
// 将 list 转换为 Map,以年份为键,数量为值
|
||||
Map<String, Integer> orderAmountMap = list.stream()
|
||||
.collect(Collectors.toMap(
|
||||
item -> String.valueOf(item.get("year")), // 确保类型一致
|
||||
item -> item.get("amount").intValue(),
|
||||
(existing, replacement) -> replacement // 如果有重复键,使用新值
|
||||
));
|
||||
|
||||
// 直接遍历 yearNumDOS,从 Map 中获取值
|
||||
for (YearNumDO yearNumDO : yearNumDOS) {
|
||||
if (ObjectUtil.isNotEmpty(yearNumDO)&&0==yearNumDO.getOpenMock()) {
|
||||
Integer amount = orderAmountMap.get(yearNumDO.getDate());
|
||||
if (ObjectUtil.isNotEmpty(amount)) {
|
||||
yearNumDO.setNumOrder(amount);
|
||||
} else {
|
||||
yearNumDO.setNumOrder(0); // 如果没有对应数据,设置为0
|
||||
}
|
||||
yearNumMapper.updateById(yearNumDO);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void updateOrderInformation() {
|
||||
String currentYear = DateUtil.format(new Date(), "yyyy");
|
||||
List<MonOrdNumDO> monOrdNumDOS = monOrdNumMapper.searchOrderInformation(currentYear);
|
||||
if (ObjectUtil.isEmpty(monOrdNumDOS)){
|
||||
monOrdNumDOS=new ArrayList<>();
|
||||
for (int i = 1; i <= 12; i++) {
|
||||
MonOrdNumDO monOrdNumDO = new MonOrdNumDO();
|
||||
monOrdNumDO.setDate(currentYear);
|
||||
monOrdNumDO.setMonth(String.valueOf(i));
|
||||
monOrdNumDO.setBlackMold(0);
|
||||
monOrdNumDO.setColoredMold(0);
|
||||
monOrdNumDOS.add(monOrdNumDO);
|
||||
}
|
||||
monOrdNumMapper.insertBatch(monOrdNumDOS);
|
||||
monOrdNumDOS = monOrdNumMapper.searchOrderInformation(currentYear);
|
||||
}
|
||||
List<ProjectOrderDO> projectOrderDOS = projectOrderSubMapper.searchOrderInformation();
|
||||
for (ProjectOrderDO order : projectOrderDOS) {
|
||||
String month = order.getMonth();
|
||||
Map<String, Integer> innerMap = resultMap.get(month);
|
||||
if (ObjectUtil.isNotEmpty(innerMap)){
|
||||
innerMap.put("blackMold", order.getBlackMold());
|
||||
innerMap.put("coloredMolds",order.getColoredMolds());
|
||||
MonOrdNumDO monOrdNumDO = monOrdNumDOS.stream().filter(item -> item.getMonth().equals(order.getMonth())).findFirst().orElse(null);
|
||||
if (ObjectUtil.isNotEmpty(monOrdNumDO)&&0==monOrdNumDO.getOpenMock()){
|
||||
monOrdNumDO.setBlackMold(order.getBlackMold());
|
||||
monOrdNumDO.setColoredMold(order.getColoredMolds());
|
||||
monOrdNumMapper.updateById(monOrdNumDO);
|
||||
}
|
||||
}
|
||||
return resultMap;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Integer> searchOrderByYear() {
|
||||
int currentYear = Year.now().getValue();
|
||||
|
||||
// 初始化近5年的年份 map,value 为 null
|
||||
Map<String, Integer> map = IntStream.range(currentYear - 4, currentYear + 1)
|
||||
.boxed()
|
||||
.collect(
|
||||
TreeMap::new,
|
||||
(m, year) -> m.put(String.valueOf(year), null),
|
||||
Map::putAll
|
||||
);
|
||||
|
||||
// 假设这个 list 是从数据库查询出来的,key 是年份,value 是订单数量
|
||||
List<Map<String, Integer>> list = projectOrderSubMapper.searchOrderByYear();
|
||||
Map<String, Integer> dataMap=new HashMap<>();
|
||||
list.forEach(item->{
|
||||
dataMap.put(String.valueOf(item.get("year")),item.get("amount"));
|
||||
});
|
||||
// 第一步:用 list 中的数据赋值
|
||||
for (Map.Entry<String, Integer> entry : dataMap.entrySet()) {
|
||||
String year = entry.getKey();
|
||||
Integer amount = Integer.parseInt(String.valueOf(entry.getValue()));
|
||||
if (map.containsKey(year)) {
|
||||
map.put(year, amount);
|
||||
}
|
||||
private void updateFound() {
|
||||
//标识位判断是更新还是插入
|
||||
boolean flag=false;
|
||||
//获得当前修改数据
|
||||
FoundDO foundDO = foundMapper.selectAll();
|
||||
if (ObjectUtil.isEmpty(foundDO)){
|
||||
foundDO=new FoundDO();
|
||||
foundDO.setNumPresent(0);
|
||||
foundDO.setNumBusinessTrip(0);
|
||||
foundDO.setOpenMock(0);
|
||||
flag=true;
|
||||
}
|
||||
// 第二步:处理 map 中 value 为 null 的年份,且不是当前年份的
|
||||
for (Map.Entry<String, Integer> entry : map.entrySet()) {
|
||||
String year = entry.getKey();
|
||||
if (ObjectUtil.isEmpty(entry.getValue()) && Integer.parseInt(year) != currentYear) {
|
||||
// String defaultUserName = userMapper.selectFirstUserName();
|
||||
// map.put(year, defaultUserName);
|
||||
}
|
||||
foundDO.setDate(LocalDate.now());
|
||||
//未完成设计的子项目数量
|
||||
Integer unfinished= projectOrderSubMapper.searchUnfinished();
|
||||
//未发货的子项目数量
|
||||
Integer notDispatched =projectOrderSubMapper.searchNotDispatched();
|
||||
foundDO.setNumDesign(unfinished);
|
||||
foundDO.setNumInProcess(notDispatched);
|
||||
if (0==foundDO.getOpenMock()){
|
||||
//订单交付准时率
|
||||
Map<String, BigDecimal> onTimeCompletionRate = projectOrderMapper.getOnTimeCompletionRate();
|
||||
foundDO.setDeliRate(onTimeCompletionRate.get("completionRate"));
|
||||
}
|
||||
if ( flag){
|
||||
foundMapper.insert(foundDO);
|
||||
}else{
|
||||
foundMapper.updateById(foundDO);
|
||||
}
|
||||
|
||||
return map;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -0,0 +1,56 @@
|
||||
package com.chanko.yunxi.mes.module.heli.service.yearnum;
|
||||
|
||||
import java.util.*;
|
||||
import javax.validation.*;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.yearnum.vo.*;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.yearnum.YearNumDO;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
|
||||
|
||||
/**
|
||||
* 大屏-近五年订单数量 Service 接口
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
public interface YearNumService {
|
||||
|
||||
/**
|
||||
* 创建大屏-近五年订单数量
|
||||
*
|
||||
* @param createReqVO 创建信息
|
||||
* @return 编号
|
||||
*/
|
||||
Long createYearNum(@Valid YearNumSaveReqVO createReqVO);
|
||||
|
||||
/**
|
||||
* 更新大屏-近五年订单数量
|
||||
*
|
||||
* @param updateReqVO 更新信息
|
||||
*/
|
||||
void updateYearNum(@Valid YearNumSaveReqVO updateReqVO);
|
||||
|
||||
/**
|
||||
* 删除大屏-近五年订单数量
|
||||
*
|
||||
* @param id 编号
|
||||
*/
|
||||
void deleteYearNum(Long id);
|
||||
|
||||
/**
|
||||
* 获得大屏-近五年订单数量
|
||||
*
|
||||
* @param id 编号
|
||||
* @return 大屏-近五年订单数量
|
||||
*/
|
||||
YearNumDO getYearNum(Long id);
|
||||
|
||||
/**
|
||||
* 获得大屏-近五年订单数量分页
|
||||
*
|
||||
* @param pageReqVO 分页查询
|
||||
* @return 大屏-近五年订单数量分页
|
||||
*/
|
||||
PageResult<YearNumDO> getYearNumPage(YearNumPageReqVO pageReqVO);
|
||||
|
||||
void update(List<YearNumDO> list);
|
||||
}
|
||||
@ -0,0 +1,85 @@
|
||||
package com.chanko.yunxi.mes.module.heli.service.yearnum;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.*;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.yearnum.vo.*;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.yearnum.YearNumDO;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
|
||||
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
|
||||
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.yearnum.YearNumMapper;
|
||||
|
||||
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
|
||||
|
||||
/**
|
||||
* 大屏-近五年订单数量 Service 实现类
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
@Service
|
||||
@Validated
|
||||
public class YearNumServiceImpl implements YearNumService {
|
||||
|
||||
@Resource
|
||||
private YearNumMapper yearNumMapper;
|
||||
|
||||
@Override
|
||||
public Long createYearNum(YearNumSaveReqVO createReqVO) {
|
||||
// 插入
|
||||
YearNumDO yearNum = BeanUtils.toBean(createReqVO, YearNumDO.class);
|
||||
yearNumMapper.insert(yearNum);
|
||||
// 返回
|
||||
return yearNum.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateYearNum(YearNumSaveReqVO updateReqVO) {
|
||||
// 校验存在
|
||||
validateYearNumExists(updateReqVO.getId());
|
||||
// 更新
|
||||
YearNumDO updateObj = BeanUtils.toBean(updateReqVO, YearNumDO.class);
|
||||
yearNumMapper.updateById(updateObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteYearNum(Long id) {
|
||||
// 校验存在
|
||||
validateYearNumExists(id);
|
||||
// 删除
|
||||
yearNumMapper.deleteById(id);
|
||||
}
|
||||
|
||||
private void validateYearNumExists(Long id) {
|
||||
if (yearNumMapper.selectById(id) == null) {
|
||||
throw exception(YEAR_NUM_NOT_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public YearNumDO getYearNum(Long id) {
|
||||
return yearNumMapper.selectById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<YearNumDO> getYearNumPage(YearNumPageReqVO pageReqVO) {
|
||||
return yearNumMapper.selectPage(pageReqVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(List<YearNumDO> list) {
|
||||
for (YearNumDO yearNumDO : list) {
|
||||
validateYearNumExists(yearNumDO.getId());
|
||||
if (ObjectUtil.isEmpty(yearNumDO.getNumOrder())){
|
||||
yearNumDO.setNumOrder(0);
|
||||
}
|
||||
}
|
||||
yearNumMapper.updateBatch(list);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,12 @@
|
||||
<?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="com.chanko.yunxi.mes.module.heli.dal.mysql.found.FoundMapper">
|
||||
|
||||
<!--
|
||||
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
|
||||
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
|
||||
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
|
||||
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
|
||||
-->
|
||||
|
||||
</mapper>
|
||||
@ -0,0 +1,12 @@
|
||||
<?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="com.chanko.yunxi.mes.module.heli.dal.mysql.monordnum.MonOrdNumMapper">
|
||||
|
||||
<!--
|
||||
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
|
||||
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
|
||||
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
|
||||
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
|
||||
-->
|
||||
|
||||
</mapper>
|
||||
@ -0,0 +1,12 @@
|
||||
<?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="com.chanko.yunxi.mes.module.heli.dal.mysql.process.ProcessMapper">
|
||||
|
||||
<!--
|
||||
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
|
||||
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
|
||||
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
|
||||
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
|
||||
-->
|
||||
|
||||
</mapper>
|
||||
@ -0,0 +1,12 @@
|
||||
<?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="com.chanko.yunxi.mes.module.heli.dal.mysql.processdetail.ProcessDetailMapper">
|
||||
|
||||
<!--
|
||||
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
|
||||
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
|
||||
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
|
||||
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
|
||||
-->
|
||||
|
||||
</mapper>
|
||||
@ -0,0 +1,12 @@
|
||||
<?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="com.chanko.yunxi.mes.module.heli.dal.mysql.yearnum.YearNumMapper">
|
||||
|
||||
<!--
|
||||
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
|
||||
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
|
||||
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
|
||||
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
|
||||
-->
|
||||
|
||||
</mapper>
|
||||
44
mes-ui/mes-ui-admin-vue3/src/api/heli/found/index.ts
Normal file
44
mes-ui/mes-ui-admin-vue3/src/api/heli/found/index.ts
Normal file
@ -0,0 +1,44 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
export interface FoundVO {
|
||||
id: number
|
||||
date: localdate
|
||||
openMock: boolean
|
||||
remark: string
|
||||
status: boolean
|
||||
numPresent: number
|
||||
numBusinessTrip: number
|
||||
numDesign: number
|
||||
numInProcess: number
|
||||
deliRate: number
|
||||
}
|
||||
|
||||
// 查询大屏-可修改单项数据分页
|
||||
export const getFoundPage = async (params) => {
|
||||
return await request.get({ url: `/heli/found/page`, params })
|
||||
}
|
||||
|
||||
// 查询大屏-可修改单项数据详情
|
||||
export const getFound = async (id: number) => {
|
||||
return await request.get({ url: `/heli/found/get?id=` + id })
|
||||
}
|
||||
|
||||
// 新增大屏-可修改单项数据
|
||||
export const createFound = async (data: FoundVO) => {
|
||||
return await request.post({ url: `/heli/found/create`, data })
|
||||
}
|
||||
|
||||
// 修改大屏-可修改单项数据
|
||||
export const updateFound = async (data: FoundVO) => {
|
||||
return await request.put({ url: `/heli/found/update`, data })
|
||||
}
|
||||
|
||||
// 删除大屏-可修改单项数据
|
||||
export const deleteFound = async (id: number) => {
|
||||
return await request.delete({ url: `/heli/found/delete?id=` + id })
|
||||
}
|
||||
|
||||
// 导出大屏-可修改单项数据 Excel
|
||||
export const exportFound = async (params) => {
|
||||
return await request.download({ url: `/heli/found/export-excel`, params })
|
||||
}
|
||||
42
mes-ui/mes-ui-admin-vue3/src/api/heli/monordnum/index.ts
Normal file
42
mes-ui/mes-ui-admin-vue3/src/api/heli/monordnum/index.ts
Normal file
@ -0,0 +1,42 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
export interface MonOrdNumVO {
|
||||
id: number
|
||||
date: string
|
||||
openMock: boolean
|
||||
year: string
|
||||
blackMold: string
|
||||
coloredMold: string
|
||||
remark: string
|
||||
status: boolean
|
||||
}
|
||||
|
||||
// 查询大屏-月订单数量分页
|
||||
export const getMonOrdNumPage = async (params) => {
|
||||
return await request.get({ url: `/heli/mon-ord-num/page`, params })
|
||||
}
|
||||
|
||||
// 查询大屏-月订单数量详情
|
||||
export const getMonOrdNum = async (id: number) => {
|
||||
return await request.get({ url: `/heli/mon-ord-num/get?id=` + id })
|
||||
}
|
||||
|
||||
// 新增大屏-月订单数量
|
||||
export const createMonOrdNum = async (data: MonOrdNumVO) => {
|
||||
return await request.post({ url: `/heli/mon-ord-num/create`, data })
|
||||
}
|
||||
|
||||
// 修改大屏-月订单数量
|
||||
export const updateMonOrdNum = async (data: MonOrdNumVO) => {
|
||||
return await request.put({ url: `/heli/mon-ord-num/update`, data })
|
||||
}
|
||||
|
||||
// 删除大屏-月订单数量
|
||||
export const deleteMonOrdNum = async (id: number) => {
|
||||
return await request.delete({ url: `/heli/mon-ord-num/delete?id=` + id })
|
||||
}
|
||||
|
||||
// 导出大屏-月订单数量 Excel
|
||||
export const exportMonOrdNum = async (params) => {
|
||||
return await request.download({ url: `/heli/mon-ord-num/export-excel`, params })
|
||||
}
|
||||
40
mes-ui/mes-ui-admin-vue3/src/api/heli/process/index.ts
Normal file
40
mes-ui/mes-ui-admin-vue3/src/api/heli/process/index.ts
Normal file
@ -0,0 +1,40 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
export interface ProcessVO {
|
||||
id: number
|
||||
date: string
|
||||
openMock: boolean
|
||||
remark: string
|
||||
status: boolean
|
||||
processType: boolean
|
||||
}
|
||||
|
||||
// 查询大屏-设计、装配、加工进度分页
|
||||
export const getProcessPage = async (params) => {
|
||||
return await request.get({ url: `/heli/process/page`, params })
|
||||
}
|
||||
|
||||
// 查询大屏-设计、装配、加工进度详情
|
||||
export const getProcess = async (id: number) => {
|
||||
return await request.get({ url: `/heli/process/get?id=` + id })
|
||||
}
|
||||
|
||||
// 新增大屏-设计、装配、加工进度
|
||||
export const createProcess = async (data: ProcessVO) => {
|
||||
return await request.post({ url: `/heli/process/create`, data })
|
||||
}
|
||||
|
||||
// 修改大屏-设计、装配、加工进度
|
||||
export const updateProcess = async (data: ProcessVO) => {
|
||||
return await request.put({ url: `/heli/process/update`, data })
|
||||
}
|
||||
|
||||
// 删除大屏-设计、装配、加工进度
|
||||
export const deleteProcess = async (id: number) => {
|
||||
return await request.delete({ url: `/heli/process/delete?id=` + id })
|
||||
}
|
||||
|
||||
// 导出大屏-设计、装配、加工进度 Excel
|
||||
export const exportProcess = async (params) => {
|
||||
return await request.download({ url: `/heli/process/export-excel`, params })
|
||||
}
|
||||
56
mes-ui/mes-ui-admin-vue3/src/api/heli/processdetail/index.ts
Normal file
56
mes-ui/mes-ui-admin-vue3/src/api/heli/processdetail/index.ts
Normal file
@ -0,0 +1,56 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
export interface ProcessDetailVO {
|
||||
id: number
|
||||
date: string
|
||||
remark: string
|
||||
status: boolean
|
||||
projectName: string
|
||||
projectNameSim: string
|
||||
projectStartTime: Date
|
||||
projectEndTime: Date
|
||||
projectProcess: number
|
||||
deliveryStatus: boolean
|
||||
isExten: string
|
||||
isSelect: string
|
||||
ordDate: Date
|
||||
projectId: number
|
||||
}
|
||||
|
||||
// 查询大屏-设计、装配、加工进度子分页
|
||||
export const getProcessDetailPage = async (params) => {
|
||||
return await request.get({ url: `/heli/process-detail/page`, params })
|
||||
}
|
||||
|
||||
// 查询大屏-设计、装配、加工进度子详情
|
||||
export const getProcessDetail = async (id: number) => {
|
||||
return await request.get({ url: `/heli/process-detail/get?id=` + id })
|
||||
}
|
||||
|
||||
// 新增大屏-设计、装配、加工进度子
|
||||
export const createProcessDetail = async (data: ProcessDetailVO) => {
|
||||
return await request.post({ url: `/heli/process-detail/create`, data })
|
||||
}
|
||||
|
||||
// 修改大屏-设计、装配、加工进度子
|
||||
export const updateProcessDetail = async (data: ProcessDetailVO) => {
|
||||
return await request.put({ url: `/heli/process-detail/update`, data })
|
||||
}
|
||||
|
||||
// 删除大屏-设计、装配、加工进度子
|
||||
export const deleteProcessDetail = async (id: number) => {
|
||||
return await request.delete({ url: `/heli/process-detail/delete?id=` + id })
|
||||
}
|
||||
|
||||
// 导出大屏-设计、装配、加工进度子 Excel
|
||||
export const exportProcessDetail = async (params) => {
|
||||
return await request.download({ url: `/heli/process-detail/export-excel`, params })
|
||||
}
|
||||
// 查询大屏-设计、装配、加工进度子详情
|
||||
export const searchProgress = async (type: number) => {
|
||||
return await request.get({ url: `/heli/process-detail/searchProgress?type=` + type })
|
||||
}
|
||||
// 修改大屏-设计、装配、加工进度子
|
||||
export const update = async (data: ProcessDetailVO) => {
|
||||
return await request.put({ url: `/heli/process-detail/updateProcessDetail`, data })
|
||||
}
|
||||
@ -50,3 +50,9 @@ export const updateScreenAll = async (data) => {
|
||||
return await request.put({ url: `/heli/screen/updateAll`, data})
|
||||
}
|
||||
|
||||
export const searchUnfinished = async () => {
|
||||
return await request.get({ url: `/heli/screen/searchUnfinished`})
|
||||
}
|
||||
export const searchOrderByYear = async () => {
|
||||
return await request.get({ url: `/heli/screen/searchOrderByYear`})
|
||||
}
|
||||
|
||||
44
mes-ui/mes-ui-admin-vue3/src/api/heli/yearnum/index.ts
Normal file
44
mes-ui/mes-ui-admin-vue3/src/api/heli/yearnum/index.ts
Normal file
@ -0,0 +1,44 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
export interface YearNumVO {
|
||||
id: number
|
||||
date: string
|
||||
openMock: boolean
|
||||
remark: string
|
||||
status: boolean
|
||||
numOrder: number
|
||||
}
|
||||
|
||||
// 查询大屏-近五年订单数量分页
|
||||
export const getYearNumPage = async (params) => {
|
||||
return await request.get({ url: `/heli/year-num/page`, params })
|
||||
}
|
||||
|
||||
// 查询大屏-近五年订单数量详情
|
||||
export const getYearNum = async (id: number) => {
|
||||
return await request.get({ url: `/heli/year-num/get?id=` + id })
|
||||
}
|
||||
|
||||
// 新增大屏-近五年订单数量
|
||||
export const createYearNum = async (data: YearNumVO) => {
|
||||
return await request.post({ url: `/heli/year-num/create`, data })
|
||||
}
|
||||
|
||||
// 修改大屏-近五年订单数量
|
||||
export const updateYearNum = async (data: YearNumVO) => {
|
||||
return await request.put({ url: `/heli/year-num/update`, data })
|
||||
}
|
||||
|
||||
// 删除大屏-近五年订单数量
|
||||
export const deleteYearNum = async (id: number) => {
|
||||
return await request.delete({ url: `/heli/year-num/delete?id=` + id })
|
||||
}
|
||||
|
||||
// 导出大屏-近五年订单数量 Excel
|
||||
export const exportYearNum = async (params) => {
|
||||
return await request.download({ url: `/heli/year-num/export-excel`, params })
|
||||
}
|
||||
// 修改大屏-近五年订单数量
|
||||
export const update = async (data) => {
|
||||
return await request.put({ url: `/heli/year-num/updateYearNum`, data })
|
||||
}
|
||||
@ -4,7 +4,7 @@
|
||||
* 组件规范:
|
||||
* 1. 每个子目录就是一个独立的组件,每个目录包括以下三个文件:
|
||||
* 2. config.ts:组件配置,必选,用于定义组件、组件默认的属性、定义属性的类型
|
||||
* 3. index.vue:组件展示,用于展示组件的渲染效果。可以不提供,如 Page(页面设置),只需要属性配置表单即可
|
||||
* 3. index1.vue:组件展示,用于展示组件的渲染效果。可以不提供,如 Page(页面设置),只需要属性配置表单即可
|
||||
* 4. property.vue:组件属性表单,用于配置组件,必选,
|
||||
*
|
||||
* 注:
|
||||
|
||||
@ -227,7 +227,7 @@ const remainingRouter: AppRouteRecordRaw[] = [
|
||||
},
|
||||
// {
|
||||
// path: '/manager/model/edit',
|
||||
// component: () => import('@/views/bpm/model/editor/index.vue'),
|
||||
// component: () => import('@/views/bpm/model/editor/index1.vue'),
|
||||
// name: 'BpmModelEditor',
|
||||
// meta: {
|
||||
// noCache: true,
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<el-card class="hl-card">
|
||||
<template #header>
|
||||
<span></span>
|
||||
<span>零件需求计划</span>
|
||||
</template>
|
||||
<ContentWrap class="borderxx">
|
||||
<!-- 搜索工作栏 -->
|
||||
|
||||
@ -37,14 +37,14 @@
|
||||
<Icon icon="ep:refresh" class="mr-5px" /> 重置
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExportDetail"
|
||||
:loading="exportLoading"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
<!-- <el-button-->
|
||||
<!-- type="success"-->
|
||||
<!-- plain-->
|
||||
<!-- @click="handleExportDetail"-->
|
||||
<!-- :loading="exportLoading"-->
|
||||
<!-- >-->
|
||||
<!-- <Icon icon="ep:download" class="mr-5px" /> 导出-->
|
||||
<!-- </el-button>-->
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
@ -51,14 +51,14 @@
|
||||
<Icon icon="ep:refresh" class="mr-5px" /> 重置
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExportDetail"
|
||||
:loading="exportLoading"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
<!-- <el-button-->
|
||||
<!-- type="success"-->
|
||||
<!-- plain-->
|
||||
<!-- @click="handleExportDetail"-->
|
||||
<!-- :loading="exportLoading"-->
|
||||
<!-- >-->
|
||||
<!-- <Icon icon="ep:download" class="mr-5px" /> 导出-->
|
||||
<!-- </el-button>-->
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
@ -127,7 +127,16 @@
|
||||
/>
|
||||
<el-table-column label="应收金额(元)" align="center" prop="cgYs" width="160px"/>
|
||||
<el-table-column label="已收金额(元)" align="center" prop="cgYishou" width="160px"/>
|
||||
<el-table-column label="剩余金额" align="center" prop="remainingYishou" width="160px"/>
|
||||
<!-- <el-table-column label="剩余金额" align="center" prop="remainingYishou" width="160px"/>-->
|
||||
<el-table-column label="剩余金额(元)" align="center" width="160px">
|
||||
<template #default="scope">
|
||||
{{
|
||||
scope.row.cgYs !== null && scope.row.cgYishou !== null
|
||||
? Math.max(0, (Number(scope.row.cgYs) - (Number(scope.row.cgYishou) || 0))).toFixed(2)
|
||||
: Number(scope.row.cgYs) >= 0 ? Number(scope.row.cgYs).toFixed(2) : '0.00'
|
||||
}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="已收款比例" align="center" width="180px">
|
||||
<template #default="scope">
|
||||
{{
|
||||
@ -138,7 +147,18 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="已开票金额(元)" align="center" prop="amount" width="160px"/>
|
||||
<el-table-column label="剩余开票金额" align="center" prop="remainingAmount" width="160px"/>
|
||||
<!-- <el-table-column label="剩余开票金额" align="center" prop="remainingAmount" width="160px"/>-->
|
||||
<el-table-column label="剩余开票金额(元)" align="center" width="170px">
|
||||
<template #default="scope">
|
||||
{{
|
||||
scope.row.cgYs && scope.row.amount
|
||||
? Math.max(0, (Number(scope.row.cgYs) - Number(scope.row.amount))).toFixed(2)
|
||||
: scope.row.cgYs
|
||||
? Math.max(0, Number(scope.row.cgYs)).toFixed(2)
|
||||
: '0.00'
|
||||
}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="已开票比例" align="center" width="160px">
|
||||
<template #default="scope">
|
||||
{{
|
||||
@ -207,7 +227,7 @@ import OrderYsForm from './OrderYsForm.vue'
|
||||
import {DICT_TYPE, getIntDictOptions} from "@/utils/dict";
|
||||
import Invoivce from "@/views/heli/orderys/invoivce.vue";
|
||||
import {ref} from "vue";
|
||||
import {ElTable} from "element-plus";
|
||||
import {ElTable, SummaryMethodProps} from "element-plus";
|
||||
|
||||
defineOptions({ name: 'orderys' })
|
||||
|
||||
@ -289,6 +309,19 @@ const getSummaries = (param: SummaryMethodProps) => {
|
||||
sums[index] = '合计';
|
||||
return;
|
||||
}
|
||||
// 计算剩余金额(应收金额 - 已付金额)
|
||||
if (column.label.includes('剩余金额(元)')) {
|
||||
const remainingAmounts = data.map(item => Math.max(0, (Number(item.cgYs) || 0) - (Number(item.cgYishou) || 0)));
|
||||
sums[index] = remainingAmounts.reduce((sum, amount) => sum + amount, 0).toFixed(2);
|
||||
return; }
|
||||
|
||||
// 计算剩余开票金额(应付金额 - 已开票金额)
|
||||
if (column.label.includes('剩余开票金额(元)')) {
|
||||
const yfSum = data.reduce((sum, item) => sum + (Number(item.cgYs) || 0), 0);
|
||||
const amountSum = data.reduce((sum, item) => sum + (Number(item.amount) || 0), 0);
|
||||
sums[index] = Number(yfSum - amountSum).toFixed(2);
|
||||
return;
|
||||
}
|
||||
if (!summaryField.includes(column.property)) {
|
||||
sums[index] = '';
|
||||
return;
|
||||
|
||||
@ -55,14 +55,14 @@
|
||||
<Icon icon="ep:refresh" class="mr-5px" /> 重置
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExportDetail"
|
||||
:loading="exportLoading"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
<!-- <el-button-->
|
||||
<!-- type="success"-->
|
||||
<!-- plain-->
|
||||
<!-- @click="handleExportDetail"-->
|
||||
<!-- :loading="exportLoading"-->
|
||||
<!-- >-->
|
||||
<!-- <Icon icon="ep:download" class="mr-5px" /> 导出-->
|
||||
<!-- </el-button>-->
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
@ -53,14 +53,14 @@
|
||||
<Icon icon="ep:refresh" class="mr-5px" /> 重置
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExportDetail"
|
||||
:loading="exportLoading"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
<!-- <el-button-->
|
||||
<!-- type="success"-->
|
||||
<!-- plain-->
|
||||
<!-- @click="handleExportDetail"-->
|
||||
<!-- :loading="exportLoading"-->
|
||||
<!-- >-->
|
||||
<!-- <Icon icon="ep:download" class="mr-5px" /> 导出-->
|
||||
<!-- </el-button>-->
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
@ -162,7 +162,7 @@ const handleExportDetail = async () => {
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await ProcessBomApi.exportProcessBom(queryParams)
|
||||
download.excel(data, 'bom明细表.xls')
|
||||
download.excel(data, 'bom明细表.xlsx')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
|
||||
@ -67,8 +67,8 @@
|
||||
<el-table
|
||||
ref="multipleTableRef"
|
||||
@selection-change="handleSelectionChange"
|
||||
v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" class="hl-table">
|
||||
<el-table-column type="selection" width="55" />
|
||||
v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" class="hl-table" show-summary :summary-method="getSummaries">
|
||||
<el-table-column type="selection" width="70" />
|
||||
<el-table-column type="index" width="100" fixed label="序号" align="center" />
|
||||
<el-table-column fixed label="项目编号" align="center" prop="code" width="240">
|
||||
<template #default="scope">
|
||||
@ -89,7 +89,8 @@ ref="multipleTableRef"
|
||||
</el-table-column> -->
|
||||
<el-table-column label="是否有价格" align="center" prop="hasPrice" width="150">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HELI_COMMON_IS_OR_NOT" :value="scope.row.hasPrice" />
|
||||
<dict-tag :type="DICT_TYPE.HELI_COMMON_IS_OR_NOT" :value="scope.row.hasPrice" v-if="scope.row.hasPrice==0"/>
|
||||
<span v-else>{{ scope.row.price }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column label="价格(元)" align="center" prop="price" width="150" /> -->
|
||||
@ -133,7 +134,7 @@ ref="multipleTableRef"
|
||||
<dict-tag :type="DICT_TYPE.HELI_DELIVERY_STATUS" :value="scope.row.deliveryStatus" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="right" fixed="right" min-width="200">
|
||||
<el-table-column align="right" fixed="right" min-width="200" label="操作">
|
||||
<template #header> <span style="margin-right: 30%">操作</span> </template>
|
||||
<template #default="scope">
|
||||
<el-row>
|
||||
@ -205,7 +206,7 @@ import * as ProjectOrderApi from '@/api/heli/projectorder'
|
||||
import Print from './startprint.vue' // 引入打印弹框
|
||||
import { ref } from 'vue'
|
||||
import {useCommonStore} from "@/store/modules/common";
|
||||
import {ElMessageBox, ElTable} from "element-plus";
|
||||
import {ElMessageBox, ElTable, SummaryMethodProps} from "element-plus";
|
||||
import {ProjectOrderVO} from "@/api/heli/projectorder";
|
||||
import routeParamsCache from '@/utils/routeParamsCache'
|
||||
defineOptions({ name: 'ProjectOrder' })
|
||||
@ -274,7 +275,79 @@ const handleSelectionChange = (val: ProjectOrderVO[]) => {
|
||||
const openReport = () => {
|
||||
reportRef.value.open()
|
||||
}
|
||||
const getSummaries = (param: SummaryMethodProps) => {
|
||||
const summaryField = [];
|
||||
const { columns, data } = param;
|
||||
const sums = [];
|
||||
columns.forEach((column, index) => {
|
||||
if (index === 0) {
|
||||
sums[index] = '合计';
|
||||
return;
|
||||
}
|
||||
if (column.label.includes('是否有价格')) {
|
||||
const remainingAmounts = data.reduce((sum, item) =>
|
||||
Number(item.hasPrice) === 1 ? sum + (Number(item.price) || 0) : sum, 0);
|
||||
sums[index] = remainingAmounts
|
||||
return;
|
||||
}
|
||||
|
||||
if (!summaryField.includes(column.property)) {
|
||||
sums[index] = '';
|
||||
return;
|
||||
}
|
||||
const values = data.map(item => Number(item[column.property]));
|
||||
if (!values.every(value => isNaN(value))) {
|
||||
sums[index] = values.reduce((prev, curr) => {
|
||||
const value = Number(curr);
|
||||
if (!isNaN(value)) {
|
||||
return floatAdd(prev, curr);
|
||||
} else {
|
||||
return prev;
|
||||
}
|
||||
}, 0);
|
||||
const thousandsField = [];
|
||||
if (thousandsField.includes(column.property)) {
|
||||
sums[index] = thousandsFormat(sums[index]);
|
||||
}
|
||||
} else {
|
||||
sums[index] = '';
|
||||
}
|
||||
});
|
||||
// const sumValue = computed(() => {
|
||||
// return list.value.reduce((sum, item) => sum + item.quantityLent, 0);
|
||||
// });
|
||||
// const sums = ['合计','','','','','','','',sumValue];
|
||||
return sums;
|
||||
}
|
||||
const floatAdd = (a, b) => {
|
||||
var c, d, e;
|
||||
if (undefined === a || null === a || "" === a || isNaN(a)) { a = 0; }
|
||||
if (undefined === b || null === b || "" === b || isNaN(b)) { b = 0; }
|
||||
try {
|
||||
c = a.toString().split(".")[1].length;
|
||||
} catch (f) {
|
||||
c = 0;
|
||||
}
|
||||
try {
|
||||
d = b.toString().split(".")[1].length;
|
||||
} catch (f) {
|
||||
d = 0;
|
||||
}
|
||||
e = Math.pow(10, Math.max(c, d));
|
||||
return (floatMul(a, e) + floatMul(b, e)) / e;
|
||||
};
|
||||
const floatMul = (a, b) => {
|
||||
var c = 0,
|
||||
d = a.toString(),
|
||||
e = b.toString();
|
||||
try {
|
||||
c += d.split(".")[1].length;
|
||||
} catch (f) {}
|
||||
try {
|
||||
c += e.split(".")[1].length;
|
||||
} catch (f) {}
|
||||
return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c);
|
||||
}
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
@ -375,7 +448,7 @@ const handleExport = async () => {
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await ProjectOrderApi.exportProjectOrder({"idList": idList})
|
||||
download.excel(data, '项目订单.xls')
|
||||
download.excel(data, '项目订单.xlsx')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
1046
mes-ui/mes-ui-admin-vue3/src/views/heli/screen/index1.vue
Normal file
1046
mes-ui/mes-ui-admin-vue3/src/views/heli/screen/index1.vue
Normal file
File diff suppressed because it is too large
Load Diff
@ -46,15 +46,15 @@
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExport"
|
||||
:loading="exportLoading"
|
||||
v-hasPermi="['heli:shenhe:export']"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
<!-- <el-button-->
|
||||
<!-- type="success"-->
|
||||
<!-- plain-->
|
||||
<!-- @click="handleExport"-->
|
||||
<!-- :loading="exportLoading"-->
|
||||
<!-- v-hasPermi="['heli:shenhe:export']"-->
|
||||
<!-- >-->
|
||||
<!-- <Icon icon="ep:download" class="mr-5px" /> 导出-->
|
||||
<!-- </el-button>-->
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
@ -190,7 +190,7 @@ const handleExport = async () => {
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await ShenheApi.exportShenhe(queryParams)
|
||||
download.excel(data, '审核.xls')
|
||||
download.excel(data, '审核.xlsx')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user