src/main/java/com/ruoyi/production/pojo/ProductOrder.java
@@ -30,6 +30,11 @@ /** * 销售台账产品id(sales_ledger_product) */ private Long saleLedgerProductId; /** * 销售台账产品id(sales_ledger_product) */ @ApiModelProperty(value = "销售台账产品id") private Long productModelId; src/main/java/com/ruoyi/production/pojo/SalesLedgerProductionAccounting.java
@@ -101,4 +101,6 @@ @TableField(fill = FieldFill.INSERT) private Long tenantId; private Long ProductMainId; } src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -227,7 +227,7 @@ .salesLedgerWorkId(productionProductMain.getId()) .salesLedgerSchedulingId(0L) .salesLedgerId(productOrder.getSalesLedgerId()) .salesLedgerProductId(productOrder.getProductModelId()) .salesLedgerProductId(productOrder.getSaleLedgerProductId()) .schedulingUserId(user.getUserId()) .schedulingUserName(user.getNickName()) .finishedNum(productQty) src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -270,7 +270,8 @@ public void addProductionData(SalesLedgerProduct salesLedgerProduct) { ProductOrder productOrder = new ProductOrder(); productOrder.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId()); productOrder.setProductModelId(salesLedgerProduct.getId()); productOrder.setProductModelId(salesLedgerProduct.getProductModelId()); productOrder.setSaleLedgerProductId(salesLedgerProduct.getId()); productOrder.setNpsNo("SC" + String.format("%08d", salesLedgerProduct.getId())); productOrder.setQuantity(salesLedgerProduct.getQuantity());//需求数量 productOrder.setCompleteQuantity(BigDecimal.ZERO);//完成数量 @@ -346,7 +347,7 @@ //批量查询productOrder List<ProductOrder> productOrders = productOrderMapper.selectList( new LambdaQueryWrapper<ProductOrder>() .in(ProductOrder::getProductModelId, productIds) .in(ProductOrder::getSaleLedgerProductId, productIds) ); if (!org.springframework.util.CollectionUtils.isEmpty(productOrders)) { List<Long> orderIds = productOrders.stream() @@ -426,7 +427,7 @@ // 批量删除productOrder productOrderMapper.delete(new LambdaQueryWrapper<ProductOrder>() .in(ProductOrder::getProductModelId, productIds)); .in(ProductOrder::getSaleLedgerProductId, productIds)); } } src/main/java/com/ruoyi/staff/service/impl/AnalyticsServiceImpl.java
@@ -94,19 +94,22 @@ Integer leaveCount = staffLeaveMapper.countLeaveByMonth(monthStart, monthEnd); vo.setLeaveCount(leaveCount != null ? leaveCount : 0); // 计算流失率:流失率 = 月度离职员工数 / 月初员工数 * 100% // 计算当期平均在职人数 = (月初员工数 + 月末员工数) / 2 Double averageStaffCount = (vo.getBeginMonthStaffCount() + vo.getEndMonthStaffCount()) / 2.0; // 计算流失率:流失率 = 月度离职员工数 / 当期平均在职人数 * 100% Double turnoverRate = 0.0; if (vo.getBeginMonthStaffCount() > 0) { turnoverRate = (double) vo.getLeaveCount() / vo.getBeginMonthStaffCount() * 100; if (averageStaffCount > 0) { turnoverRate = (double) vo.getLeaveCount() / averageStaffCount * 100; // 保留两位小数 turnoverRate = Math.round(turnoverRate * 100.0) / 100.0; } vo.setTurnoverRate(turnoverRate); // 计算流动率:流动率 = (月度入职员工数 + 月度离职员工数) / 月初员工数 * 100% // 计算流动率:流动率 = (月度入职员工数 + 月度离职员工数) / 当期平均在职人数 * 100% Double flowRate = 0.0; if (vo.getBeginMonthStaffCount() > 0) { flowRate = (double) (vo.getNewHireCount() + vo.getLeaveCount()) / vo.getBeginMonthStaffCount() * 100; if (averageStaffCount > 0) { flowRate = (double) (vo.getNewHireCount() + vo.getLeaveCount()) / averageStaffCount * 100; // 保留两位小数 flowRate = Math.round(flowRate * 100.0) / 100.0; } @@ -133,26 +136,36 @@ // 获取月初员工数(即上月末员工数) Integer beginMonthStaffCount = staffOnJobMapper.countOnJobStaffByDate(monthStartDate.minusDays(1)); beginMonthStaffCount = beginMonthStaffCount != null ? beginMonthStaffCount : 0; // 获取月末员工数 Integer endMonthStaffCount = staffOnJobMapper.countOnJobStaffByDate(monthEndDate); endMonthStaffCount = endMonthStaffCount != null ? endMonthStaffCount : 0; // 获取本月新入职员工数 Integer newHireCount = staffOnJobMapper.countNewHireByMonth(monthStartDate, monthEndDate); newHireCount = newHireCount != null ? newHireCount : 0; // 获取本月离职员工数 Integer leaveCount = staffLeaveMapper.countLeaveByMonth(monthStartDate, monthEndDate); leaveCount = leaveCount != null ? leaveCount : 0; // 计算总流动率 = (入职人数 + 离职人数) / 月初员工数 * 100% // 计算当期平均在职人数 = (月初员工数 + 月末员工数) / 2 Double averageStaffCount = (beginMonthStaffCount + endMonthStaffCount) / 2.0; // 计算总流动率 = (入职人数 + 离职人数) / 当期平均在职人数 * 100% Double totalFlowRate = 0.0; if (beginMonthStaffCount > 0) { totalFlowRate = (double) (newHireCount + leaveCount) / beginMonthStaffCount * 100; if (averageStaffCount > 0) { totalFlowRate = (double) (newHireCount + leaveCount) / averageStaffCount * 100; // 保留两位小数 totalFlowRate = Math.round(totalFlowRate * 100.0) / 100.0; } result.setTotalFlowRate(totalFlowRate); // 计算总流失率 = 离职人数 / 月初员工数 * 100% // 计算总流失率 = 离职人数 / 当期平均在职人数 * 100% Double totalTurnoverRate = 0.0; if (beginMonthStaffCount > 0) { totalTurnoverRate = (double) leaveCount / beginMonthStaffCount * 100; if (averageStaffCount > 0) { totalTurnoverRate = (double) leaveCount / averageStaffCount * 100; // 保留两位小数 totalTurnoverRate = Math.round(totalTurnoverRate * 100.0) / 100.0; } src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
@@ -69,6 +69,7 @@ } // 创建入职数据 staffOnJobPrams.setContractExpireTime(staffOnJobPrams.getContractEndTime()); staffOnJobPrams.setStaffState(1); staffOnJobMapper.insert(staffOnJobPrams); // 创建合同记录 src/main/resources/mapper/production/ProductOrderMapper.xml
@@ -25,7 +25,7 @@ DATEDIFF(sl.delivery_date, CURDATE()) AS delivery_days_diff from product_order po left join sales_ledger sl on po.sales_ledger_id = sl.id left join sales_ledger_product slp on po.product_model_id = slp.id left join sales_ledger_product slp on po.sale_ledger_product_id = slp.id left join product_process_route ppr on po.id = ppr.product_order_id left join product_bom pb on pb.id = ppr.bom_id <where> src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
@@ -31,7 +31,7 @@ left join production_product_main ppm on qi.product_main_id = ppm.id left join product_work_order pwo on ppm.work_order_id = pwo.id left join product_order po on pwo.product_order_id = po.id left join sales_ledger_product slp on po.product_model_id = slp.id left join sales_ledger_product slp on po.sale_ledger_product_id = slp.id where qi.product_main_id = #{productMainId}