近期更新

This commit is contained in:
z 2026-03-05 09:00:48 +08:00
parent 1253b2a424
commit 74fbc6edda
102 changed files with 5401 additions and 1168 deletions

View File

@ -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, "数据已过期,请重新修改");
}

View File

@ -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 * * ?")

View File

@ -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));
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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())) {

View File

@ -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,

View File

@ -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));
}

View File

@ -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));
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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) {

View File

@ -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;

View File

@ -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,

View File

@ -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));
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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();
}

View File

@ -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

View File

@ -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);
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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));
}

View File

@ -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 枚举类中

View File

@ -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();
}
}

View File

@ -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));
}

View File

@ -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));
}

View File

@ -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;

View File

@ -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")

View File

@ -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);
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 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;
}

View File

@ -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") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 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;
}

View File

@ -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;
}

View File

@ -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") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 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;
}

View File

@ -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;
}

View File

@ -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") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 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;
}

View File

@ -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;
/**
* 变更的字段列表
* */

View File

@ -237,4 +237,6 @@ public class PurchaseOrderNoDetailDO extends BaseDO {
private String time;
@TableField(exist = false)
private String requir;
@TableField(exist = false)
private Integer totalAmount;
}

View File

@ -316,4 +316,7 @@ public class TaskDispatchDetailDO extends BaseDO {
private BigDecimal price;
@TableField(exist = false)
private Long compositionId;
@TableField(exist = false)
private Long projectOrderId;
}

View File

@ -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") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 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;
}

View File

@ -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"));
}
}

View File

@ -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));
}
}

View File

@ -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)

View File

@ -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);
}
}

View File

@ -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"));
}
}

View File

@ -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);
}
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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)
);
}
}

View File

@ -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();
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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)
);
}
}

View File

@ -76,4 +76,6 @@ public interface DeliverOrderService {
BigDecimal getListYf(Long id, Long projectSubId);
List<DeliverOrderSubDO> getListYfDetails(Long id, Long projectSubId);
DeliverOrderDO getDeliverOrderId(Long id);
}

View File

@ -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));

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -120,4 +120,6 @@ public interface ProcessBomService {
CommonResult<Boolean> updateById(String code);
CommonResult<Boolean> selectPlanTaskStatus(String id);
List<ProcessBomDetailDO> getProcessBomExcel(List<Long> collect);
}

View File

@ -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();

View File

@ -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);
}

View File

@ -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);
}
}
}

View File

@ -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();
}

View File

@ -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年的年份 mapvalue 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年的年份 mapvalue 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

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View 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 })
}

View 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 })
}

View 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 })
}

View 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 })
}

View File

@ -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`})
}

View 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 })
}

View File

@ -4,7 +4,7 @@
*
* 1.
* 2. config.ts
* 3. index.vue Page
* 3. index1.vue Page
* 4. property.vue
*
*

View File

@ -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,

View File

@ -1,7 +1,7 @@
<template>
<el-card class="hl-card">
<template #header>
<span></span>
<span>零件需求计划</span>
</template>
<ContentWrap class="borderxx">
<!-- 搜索工作栏 -->

View File

@ -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>

View File

@ -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>

View File

@ -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;

View File

@ -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>

View File

@ -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>

View File

@ -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

View File

@ -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

File diff suppressed because it is too large Load Diff

View File

@ -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