src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
@@ -76,14 +76,12 @@ @Override public void initApproveNodes(String approveUserIds,String approveID,Long tenantId) { Long userId = SecurityUtils.getLoginUser().getUser().getUserId(); ApproveProcess approve = getApproveById(approveID); String[] names = approveUserIds.split(","); String approveId = approve.getApproveId(); for (int i = 0; i < names.length; i++) { SysUser sysUser = sysUserMapper.selectUserById(Long.parseLong(names[i])); if (sysUser == null) continue; ApproveNode approveNode = new ApproveNode(); approveNode.setApproveProcessId(approveId); approveNode.setApproveProcessId(approveID); approveNode.setApproveNodeOrder(i +1); approveNode.setApproveNodeUser(sysUser.getNickName()); approveNode.setApproveNodeUserId(sysUser.getUserId()); src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.approve.mapper.ApproveNodeMapper; @@ -189,12 +190,9 @@ @Override public ApproveProcess getApproveById(String id) { LambdaQueryWrapper<ApproveProcess> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(ApproveProcess::getApproveId, id); queryWrapper.eq(ApproveProcess::getApproveDelete, 0); queryWrapper.eq(ApproveProcess::getTenantId, SecurityUtils.getLoginUser().getTenantId()); queryWrapper.last("limit 1"); ApproveProcess one = getOne(queryWrapper); ApproveProcess one = approveProcessMapper.selectList(Wrappers.<ApproveProcess>lambdaQuery() .eq(ApproveProcess::getApproveId,id) .eq(ApproveProcess::getApproveDelete,0)).get(0); one.setCommonFileList(commonFileMapper.selectList(new LambdaQueryWrapper<CommonFile>() .eq(CommonFile::getCommonId, one.getId()) .eq(CommonFile::getType, FileNameType.ApproveProcess.getValue()))); src/main/java/com/ruoyi/collaborativeApproval/controller/NoticeTypeController.java
@@ -34,7 +34,7 @@ */ @PostMapping("/add") public AjaxResult add(@RequestBody NoticeType noticeType) { return AjaxResult.success(noticeTypeService.save(noticeType)); return AjaxResult.success(noticeTypeService.saveOrUpdate(noticeType)); } /** src/main/java/com/ruoyi/customervisits/controller/CustomerVisitsController.java
@@ -45,6 +45,31 @@ return AjaxResult.success("添加成功"); } return AjaxResult.error("添加失败"); } @Log(title = "客户拜访-编辑", businessType = BusinessType.UPDATE) @ApiOperation("客户拜访-编辑") @PostMapping("update") public AjaxResult updateCustomerVisit(@RequestBody CustomerVisits customerVisits) { boolean updateResult = customerVisitsService.updateCustomerVisit(customerVisits); if (updateResult) { return AjaxResult.success("编辑成功"); } return AjaxResult.error("编辑失败"); } @Log(title = "客户拜访-删除", businessType = BusinessType.DELETE) @ApiOperation("客户拜访-删除") @DeleteMapping("{customerId}") public AjaxResult deleteCustomerVisit(@PathVariable Integer customerId) { if (customerId == null) { return AjaxResult.error("客户ID不能为空"); } boolean deleteResult = customerVisitsService.removeById(customerId); if (deleteResult) { return AjaxResult.success("删除成功"); } return AjaxResult.error("删除失败"); } } src/main/java/com/ruoyi/customervisits/service/CustomerVisitsService.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.customervisits.pojo.CustomerVisits; import com.ruoyi.framework.web.domain.AjaxResult; /** * @author :yys @@ -11,4 +12,7 @@ */ public interface CustomerVisitsService extends IService<CustomerVisits> { IPage<CustomerVisits> listPage(Page page, CustomerVisits customerVisits); boolean updateCustomerVisit(CustomerVisits customerVisits); } src/main/java/com/ruoyi/customervisits/service/impl/CustomerVisitsServiceImpl.java
@@ -11,6 +11,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; /** * @author :yys @@ -32,4 +33,21 @@ Page page1 = customerVisitsMapper.selectPage(page, customerVisitsLambdaQueryWrapper); return page1; } @Override @Transactional(rollbackFor = Exception.class) public boolean updateCustomerVisit(CustomerVisits customerVisits) { if (customerVisits == null || customerVisits.getId() == null) { return false; } if (StringUtils.isEmpty(customerVisits.getCustomerName()) || StringUtils.isEmpty(customerVisits.getPurposeVisit()) || StringUtils.isEmpty(customerVisits.getVisitAddress()) || StringUtils.isEmpty(customerVisits.getPurposeDate())) { return false; } return updateById(customerVisits); } } src/main/java/com/ruoyi/home/controller/HomeController.java
@@ -36,6 +36,31 @@ @Autowired private HomeService homeService; /********************************************************基础类*****************************************************/ @GetMapping("/todos") @Log(title = "待办事项", businessType = BusinessType.OTHER) @ApiOperation("待办事项") public AjaxResult todos(ApproveProcess req) throws ParseException { List<ApproveProcess> approveProcessList = homeService.todos(); return AjaxResult.success(approveProcessList); } @GetMapping("/approveAndDeviceTodos") @ApiOperation("审批协同,设备报修待办事项") public AjaxResult approveAndDeviceTodos(){ Map<String, Object> map = homeService.approveAndDeviceTodos(); return AjaxResult.success(map); } @GetMapping("/noticesCount") @ApiOperation("未过期的公告数量") public AjaxResult noticesCount(){ Long count = homeService.noticesCount(); return AjaxResult.success(count); } /********************************************************营销采购类**************************************************/ @GetMapping("/business") @Log(title = "销售-采购-库存数据", businessType = BusinessType.OTHER) @ApiOperation("销售-采购-库存数据") @@ -53,43 +78,8 @@ return AjaxResult.success(analysisCustomerContractAmounts); } @GetMapping("/qualityStatistics") @Log(title = "质量分析", businessType = BusinessType.OTHER) @ApiOperation("质量分析") public AjaxResult qualityStatistics(QualityStatisticsDto req) { QualityStatisticsDto qualityStatisticsDto = homeService.qualityStatistics(); return AjaxResult.success(qualityStatisticsDto); } @GetMapping("/todos") @Log(title = "待办事项", businessType = BusinessType.OTHER) @ApiOperation("待办事项") public AjaxResult todos(ApproveProcess req) throws ParseException { List<ApproveProcess> approveProcessList = homeService.todos(); return AjaxResult.success(approveProcessList); } @GetMapping("/statisticsReceivablePayable") @Log(title = "应收应付统计", businessType = BusinessType.OTHER) @ApiOperation("应收应付统计") public AjaxResult statisticsReceivablePayable(StatisticsReceivablePayableDto req, @RequestParam(value = "type", defaultValue = "1") Integer type ) { StatisticsReceivablePayableDto statisticsReceivablePayable = homeService.statisticsReceivablePayable(type); return AjaxResult.success(statisticsReceivablePayable); } @GetMapping("/approveAndDeviceTodos") @ApiOperation("审批协同,设备报修待办事项") public AjaxResult approveAndDeviceTodos(){ Map<String, Object> map = homeService.approveAndDeviceTodos(); return AjaxResult.success(map); } @GetMapping("/noticesCount") @ApiOperation("未过期的公告数量") public AjaxResult noticesCount(){ Long count = homeService.noticesCount(); return AjaxResult.success(count); } /********************************************************生产类*****************************************************/ @GetMapping("/progressStatistics") @ApiOperation("各生产订单的完成进度统计") public AjaxResult progressStatistics(){ @@ -102,4 +92,38 @@ ProductionTurnoverDto productionTurnoverDto = homeService.workInProcessTurnover(); return AjaxResult.success(productionTurnoverDto); } /********************************************************质量类*****************************************************/ @GetMapping("/qualityStatistics") @Log(title = "质量分析", businessType = BusinessType.OTHER) @ApiOperation("质量分析") public AjaxResult qualityStatistics(QualityStatisticsDto req) { QualityStatisticsDto qualityStatisticsDto = homeService.qualityStatistics(); return AjaxResult.success(qualityStatisticsDto); } /********************************************************财务类*****************************************************/ @GetMapping("/statisticsReceivablePayable") @Log(title = "应收应付统计", businessType = BusinessType.OTHER) @ApiOperation("应收应付统计") public AjaxResult statisticsReceivablePayable(StatisticsReceivablePayableDto req, @RequestParam(value = "type", defaultValue = "1") Integer type ) { StatisticsReceivablePayableDto statisticsReceivablePayable = homeService.statisticsReceivablePayable(type); return AjaxResult.success(statisticsReceivablePayable); } /********************************************************仓储类*****************************************************/ } src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java
@@ -27,6 +27,10 @@ @Excel(name = "报工数量") private BigDecimal quantity; @ApiModelProperty(value = "报废数量") @Excel(name = "报废数量") private BigDecimal scrapQty; //产品名称 @Excel(name = "产品名称") private String productName; src/main/java/com/ruoyi/production/pojo/ProductionProductOutput.java
@@ -20,7 +20,8 @@ @ApiModelProperty(value = "产品id") private Long productModelId; @ApiModelProperty(value = "数量") //合格数量=报工数量-报废数量 @ApiModelProperty(value = "报工数量") private BigDecimal quantity; @ApiModelProperty(value = "创建时间") @@ -29,4 +30,7 @@ @ApiModelProperty(value = "租户ID") @TableField(fill = FieldFill.INSERT) private Long tenantId; @ApiModelProperty(value = "报废数量") private BigDecimal scrapQty; } src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -189,7 +189,12 @@ productionProductOutput.setProductMainId(productionProductMain.getId()); productionProductOutput.setProductModelId(productProcessRouteItem.getProductModelId()); productionProductOutput.setQuantity(dto.getQuantity() != null ? dto.getQuantity() : BigDecimal.ZERO); productionProductOutput.setScrapQty(dto.getScrapQty() != null ? dto.getScrapQty() : BigDecimal.ZERO); productionProductOutputMapper.insert(productionProductOutput); //合格数量=报工数量-报废数量 BigDecimal productQty = productionProductOutput.getQuantity().subtract(productionProductOutput.getScrapQty()); //只有合格数量>0才能增加相应数据 if (productQty.compareTo(BigDecimal.ZERO)>0) { /*新增质检*/ //对应的过程检或者出厂检 List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId())); @@ -206,7 +211,7 @@ qualityInspect.setProductName(product.getProductName()); qualityInspect.setModel(productModel.getModel()); qualityInspect.setUnit(productModel.getUnit()); qualityInspect.setQuantity(dto.getQuantity()); qualityInspect.setQuantity(productQty); qualityInspect.setProcess(productProcess.getName()); qualityInspect.setInspectState(0); qualityInspect.setInspectType(inspectType); @@ -229,7 +234,7 @@ } /*更新工单和生产订单*/ ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(dto.getWorkOrderId()); productWorkOrder.setCompleteQuantity(productWorkOrder.getCompleteQuantity().add(dto.getQuantity())); productWorkOrder.setCompleteQuantity(productQty.add(dto.getQuantity())); if (ObjectUtils.isNull(productWorkOrder.getActualStartTime())){ productWorkOrder.setActualStartTime(LocalDate.now());//实际开始时间 } @@ -244,7 +249,7 @@ } if (productProcessRouteItem.getDragSort()==productProcessRouteItems.size()){ //如果是最后一道工序报工之后生产订单完成数量+ productOrder.setCompleteQuantity(productOrder.getCompleteQuantity().add(dto.getQuantity())); productOrder.setCompleteQuantity(productOrder.getCompleteQuantity().add(productQty)); if (productOrder.getCompleteQuantity().compareTo(productOrder.getQuantity()) == 0){ productOrder.setEndTime(LocalDateTime.now());//结束时间 } @@ -258,13 +263,15 @@ .salesLedgerProductId(productOrder.getProductModelId()) .schedulingUserId(user.getUserId()) .schedulingUserName(user.getNickName()) .finishedNum(dto.getQuantity() != null ? dto.getQuantity() : BigDecimal.ZERO) .finishedNum(productQty) .workHours(productProcess.getSalaryQuota()) .process(productProcess.getName()) .schedulingDate(LocalDate.now()) .tenantId(dto.getTenantId()) .build(); salesLedgerProductionAccountingMapper.insert(salesLedgerProductionAccounting); } //如果报废数量>0,需要进入报废的库存 return true; } src/main/java/com/ruoyi/stock/controller/StockInRecordController.java
@@ -16,13 +16,13 @@ import java.util.List; @RestController @Api(tags = "采购入库") @Api(tags = "入库") @RequestMapping("/stockInRecord") public class StockInRecordController { @Autowired private StockInRecordService stockInRecordService; @GetMapping("/listPageByProduction") @GetMapping("/listPage") @Log(title = "生产入库-入库管理-列表", businessType = BusinessType.OTHER) @ApiOperation(value = "入库管理列表") public AjaxResult listPage(Page page, StockInRecordDto stockInRecordDto) { src/main/java/com/ruoyi/stock/controller/StockOutRecordController.java
@@ -7,6 +7,7 @@ import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.stock.dto.StockOutRecordDto; import com.ruoyi.stock.service.StockOutRecordService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; @@ -22,13 +23,14 @@ * @author 芯导软件(江苏)有限公司 * @since 2026-01-21 05:27:04 */ @Api(tags = "出库") @RestController @RequestMapping("/stockOutRecord") public class StockOutRecordController { @Autowired private StockOutRecordService stockOutRecordService; @GetMapping("/listPageByProduction") @GetMapping("/listPage") @Log(title = "生产出库-出库管理-列表", businessType = BusinessType.OTHER) @ApiOperation(value = "出库管理列表") public AjaxResult listPage(Page page, StockOutRecordDto stockOutRecordDto) { src/main/java/com/ruoyi/stock/dto/StockInRecordDto.java
@@ -3,6 +3,7 @@ import com.ruoyi.stock.pojo.StockInRecord; import lombok.Data; @Data public class StockInRecordDto extends StockInRecord { /** @@ -17,4 +18,6 @@ * 产品单位 */ private String unit; private String timeStr; } src/main/java/com/ruoyi/stock/dto/StockOutRecordDto.java
@@ -1,7 +1,13 @@ package com.ruoyi.stock.dto; import com.ruoyi.stock.pojo.StockOutRecord; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class StockOutRecordDto extends StockOutRecord { /** * 产品名称 src/main/resources/mapper/collaborativeApproval/StaffContactsPersonalMapper.xml
@@ -17,7 +17,7 @@ sjlr.phone, scp.create_time FROM staff_contacts_personal scp LEFT JOIN (select * from staff_join_leave_record WHERE staff_state = 1) sjlr ON scp.contact_id=sjlr.id LEFT JOIN (select * from staff_on_job WHERE staff_state = 1) sjlr ON scp.contact_id=sjlr.id where 1=1 <if test="staffContactsPersonalDTO.staffName != null and staffContactsPersonalDTO.staffName != ''"> and sjlr.staff_name like concat('%',#{staffContactsPersonalDTO.staffName},'%') src/main/resources/mapper/lavorissue/LavorIssueMapper.xml
@@ -10,7 +10,7 @@ t3.dict_label as dictName, t4.dict_label as dictTypeName from labor_issue t1 left join staff_join_leave_record t2 on t1.staff_id = t2.id left join staff_on_job t2 on t1.staff_id = t2.id left join sys_dict_data t3 on t1.dict_id = t3.dict_value left join sys_dict_data t4 on t1.dict_type = t4.dict_value <where> @@ -45,7 +45,7 @@ t3.dict_label as dictName, t4.dict_label as dictTypeName from labor_issue t1 left join staff_join_leave_record t2 on t1.staff_id = t2.id left join staff_on_job t2 on t1.staff_id = t2.id left join sys_dict_data t3 on t1.dict_id = t3.dict_value left join sys_dict_data t4 on t1.dict_type = t4.dict_value <where> src/main/resources/mapper/production/ProductionProductMainMapper.xml
@@ -20,6 +20,7 @@ p.product_name as productName, pm.model as productModelName, ppo.quantity, ppo.scrap_qty, pm.unit, sl.sales_contract_no salesContractNo from src/main/resources/mapper/purchase/InvoicePurchaseMapper.xml
@@ -27,7 +27,7 @@ sl.customer_name, sl.contract_amount ORDER BY sl.sales_contract_no; sl.sales_contract_no </select> <select id="listVat" resultType="com.ruoyi.purchase.dto.VatDto"> select * src/main/resources/mapper/stock/StockInRecordMapper.xml
@@ -4,12 +4,13 @@ <select id="listPage" resultType="com.ruoyi.stock.dto.StockInRecordDto"> SELECT sir.* pm.product_name as productName, sir.*, p.product_name as productName, pm.model, pm.unit FROM stock_in_record as sir LEFT JOIN product_models as pm on sir.product_model_id = pm.id LEFT JOIN product_model as pm on sir.product_model_id = pm.id LEFT JOIN product as p on pm.product_id = p.id <where> <if test="params.timeStr != null and params.timeStr != ''"> and sir.create_time like concat('%',#{param.timeStr},'%') src/main/resources/mapper/stock/StockOutRecordMapper.xml
@@ -20,12 +20,13 @@ <select id="listPage" resultType="com.ruoyi.stock.dto.StockOutRecordDto"> SELECT sor.* pm.product_name as productName, sor.*, p.product_name as productName, pm.model, pm.unit FROM stock_out_record as sor LEFT JOIN product_models as pm on sor.product_model_id = pm.id LEFT JOIN product_model as pm on sor.product_model_id = pm.id LEFT JOIN product as p on pm.product_id = p.id <where> <if test="params.timeStr != null and params.timeStr != ''"> and sor.create_time like concat('%',#{param.timeStr},'%')