Merge branch 'dev_New_pro' into dev_平遥县盛达铸造厂
| | |
| | | `no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'éè´§åç¼å·', |
| | | `return_type` tinyint NOT NULL DEFAULT 0 COMMENT 'éè´§æ¹å¼ 0éè´§éæ¬¾ 1ææ¶', |
| | | `supplier_id` bigint NOT NULL DEFAULT 0 COMMENT 'ä¾åºåid', |
| | | `shipping_type` tinyint NULL DEFAULT NULL COMMENT 'åè´§ç±»å 1货车 2å¿«é', |
| | | `truck_plate_no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'å货车çå·', |
| | | `express_company` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'å¿«éå
¬å¸', |
| | | `express_no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'å¿«éåå·', |
| | | `project_id` bigint NOT NULL DEFAULT 0 COMMENT '项ç®id', |
| | | `project_phase` tinyint NOT NULL DEFAULT 0 COMMENT '项ç®é¶æ®µ', |
| | | `prepared_at` datetime NULL DEFAULT NULL COMMENT 'å¶åæ¥æ', |
| | |
| | | `return_no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'éè´§åå·', |
| | | `customer_id` bigint NULL DEFAULT NULL COMMENT 'å®¢æ· id', |
| | | `shipping_id` bigint NULL DEFAULT NULL COMMENT 'å
³èåè´§åå·', |
| | | `shipping_type` tinyint NULL DEFAULT NULL COMMENT 'åè´§ç±»å 1货车 2å¿«é', |
| | | `truck_plate_no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'å货车çå·', |
| | | `express_company` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'å¿«éå
¬å¸', |
| | | `express_no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'å¿«éåå·', |
| | | `project_stage` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '项ç®é¶æ®µ', |
| | | `maker` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'å¶å人', |
| | | `make_time` timestamp NULL DEFAULT NULL COMMENT 'å¶åæ¶é´', |
| | |
| | | @Excel(name = "å
³èå
¥åºåå·") |
| | | private String inboundBatches; |
| | | |
| | | @Schema(description = "åè´§ç±»å") |
| | | @Excel(name = "åè´§ç±»å") |
| | | private Integer shippingType; |
| | | |
| | | @Schema(description = "å货车çå·") |
| | | @Excel(name = "å货车çå·") |
| | | private String truckPlateNo; |
| | | |
| | | @Schema(description = "å¿«éå
¬å¸") |
| | | @Excel(name = "å¿«éå
¬å¸") |
| | | private String expressCompany; |
| | | |
| | | @Schema(description = "å¿«éåå·") |
| | | @Excel(name = "å¿«éåå·") |
| | | private String expressNo; |
| | | |
| | | @Schema(description = "éè´§æ¥æ") |
| | | @Excel(name = "éè´§æ¥æ") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | |
| | | @Excel(name = "å
³èåè´§åå·") |
| | | private String shippingNo; |
| | | |
| | | @Schema(description = "åè´§ç±»å") |
| | | @Excel(name = "åè´§ç±»å") |
| | | private Integer shippingType; |
| | | |
| | | @Schema(description = "å货车çå·") |
| | | @Excel(name = "å货车çå·") |
| | | private String truckPlateNo; |
| | | |
| | | @Schema(description = "å¿«éå
¬å¸") |
| | | @Excel(name = "å¿«éå
¬å¸") |
| | | private String expressCompany; |
| | | |
| | | @Schema(description = "å¿«éåå·") |
| | | @Excel(name = "å¿«éåå·") |
| | | private String expressNo; |
| | | |
| | | @Schema(description = "éè´§æ¥æ") |
| | | @Excel(name = "éè´§æ¥æ") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | |
| | | @Schema(description = "å
³èåºåºåå·") |
| | | private String shippingNo; |
| | | |
| | | @Schema(description = "åè´§ç±»å") |
| | | private Integer shippingType; |
| | | |
| | | @Schema(description = "å货车çå·") |
| | | private String truckPlateNo; |
| | | |
| | | @Schema(description = "å¿«éå
¬å¸") |
| | | private String expressCompany; |
| | | |
| | | @Schema(description = "å¿«éåå·") |
| | | private String expressNo; |
| | | |
| | | @Schema(description = "项ç®åç§°") |
| | | private String projectName; |
| | | |
| | |
| | | @Schema(description = "éå®äº§å对象æ°ç»") |
| | | private List<ReturnSaleProductDto> returnSaleProducts; |
| | | |
| | | @Schema(description = "éå®éè´§å
¥åºå®¡æ¹ç¶æ") |
| | | private Integer stockInApprovalStatus; |
| | | |
| | | } |
| | |
| | | |
| | | @Schema(description = "åè´§åºåºæ°é") |
| | | private BigDecimal stockOutNum; |
| | | |
| | | @Schema(description = "å¾
å¤çéè´§æ°é") |
| | | private BigDecimal pendingReturnNum; |
| | | } |
| | |
| | | |
| | | @Schema(description = "å«ç¨åä»·") |
| | | private BigDecimal taxInclusiveUnitPrice; |
| | | |
| | | @Schema(description = "å¾
å¤çéè´§æ°é") |
| | | private BigDecimal pendingReturnNum; |
| | | } |
| | |
| | | @Schema(description = "å
³èåºåºåå·Id") |
| | | private Long shippingId; |
| | | |
| | | @Schema(description = "åè´§ç±»å 1货车 2å¿«é") |
| | | private Integer shippingType; |
| | | |
| | | @Schema(description = "å货车çå·") |
| | | private String truckPlateNo; |
| | | |
| | | @Schema(description = "å¿«éå
¬å¸") |
| | | private String expressCompany; |
| | | |
| | | @Schema(description = "å¿«éåå·") |
| | | private String expressNo; |
| | | |
| | | @Schema(description = "项ç®id") |
| | | private Long projectId; |
| | | |
| | |
| | | import com.ruoyi.procurementrecord.service.ReturnManagementService; |
| | | import com.ruoyi.procurementrecord.service.ReturnSaleProductService; |
| | | import com.ruoyi.procurementrecord.utils.StockUtils; |
| | | import com.ruoyi.sales.mapper.SalesLedgerMapper; |
| | | import com.ruoyi.sales.pojo.SalesLedger; |
| | | import com.ruoyi.sales.pojo.ShippingInfo; |
| | | import com.ruoyi.sales.service.ShippingInfoService; |
| | | import lombok.RequiredArgsConstructor; |
| | |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @author :yys |
| | |
| | | private final ReturnManagementMapper returnManagementMapper; |
| | | private final ReturnSaleProductService returnSaleProductService; |
| | | private final ShippingInfoService shippingInfoService; |
| | | private final SalesLedgerMapper salesLedgerMapper; |
| | | private final SalesRefundAmountOrderService salesRefundAmountOrderService; |
| | | private final StockUtils stockUtils; |
| | | |
| | |
| | | byId.setSettler(SecurityUtils.getLoginUser().getNickName()); |
| | | byId.setRefundAmount(totalRefund); |
| | | updateById(byId); |
| | | //æ´æ°é货产åå表çç¶æ |
| | | List<ReturnSaleProduct> updateList = list.stream().map(m -> { |
| | | ReturnSaleProduct returnSaleProduct = new ReturnSaleProduct(); |
| | | returnSaleProduct.setId(m.getId()); |
| | | returnSaleProduct.setStatus(1); |
| | | return returnSaleProduct; |
| | | }).collect(Collectors.toList()); |
| | | returnSaleProductService.updateBatchById(updateList); |
| | | |
| | | // 3. æ´æ°éå®å°è´¦çå®é
ååéé¢ |
| | | if (byId.getShippingId() != null) { |
| | | ShippingInfo shippingInfo = shippingInfoService.getById(byId.getShippingId()); |
| | | if (shippingInfo != null && shippingInfo.getSalesLedgerId() != null) { |
| | | SalesLedger salesLedger = salesLedgerMapper.selectById(shippingInfo.getSalesLedgerId()); |
| | | if (salesLedger != null && salesLedger.getContractAmount() != null) { |
| | | BigDecimal baseAmount = salesLedger.getNetContractAmount() != null |
| | | ? salesLedger.getNetContractAmount() |
| | | : salesLedger.getContractAmount(); |
| | | salesLedger.setNetContractAmount(baseAmount.subtract(totalRefund)); |
| | | salesLedgerMapper.updateById(salesLedger); |
| | | } |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢éè´éè´§å¯ééè´å°è´¦ |
| | | */ |
| | | @GetMapping("/returnableList") |
| | | public TableDataInfo returnableList(PurchaseLedger purchaseLedger) { |
| | | startPage(); |
| | | List<PurchaseLedger> list = purchaseLedgerService.selectReturnablePurchaseLedgerList(purchaseLedger); |
| | | return getDataTable(list); |
| | | } |
| | | |
| | | /** |
| | | * 导åºéè´å°è´¦å表 |
| | | */ |
| | | @Log(title = "éè´å°è´¦", businessType = BusinessType.EXPORT) |
| | |
| | | import com.ruoyi.purchase.dto.PurchaseReturnOrderDto; |
| | | import com.ruoyi.purchase.mapper.PurchaseReturnOrdersMapper; |
| | | import com.ruoyi.purchase.pojo.PurchaseReturnOrders; |
| | | import com.ruoyi.stock.mapper.StockOutRecordMapper; |
| | | import com.ruoyi.stock.pojo.StockOutRecord; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import com.ruoyi.purchase.service.PurchaseReturnOrdersService; |
| | |
| | | private PurchaseReturnOrdersService purchaseReturnOrdersService; |
| | | private PurchaseReturnOrdersMapper purchaseReturnOrdersMapper; |
| | | private AccountStatementDetailsService accountStatementDetailsService; |
| | | private StockOutRecordMapper stockOutRecordMapper; |
| | | |
| | | |
| | | @GetMapping("/listPage") |
| | |
| | | if (CollectionUtils.isNotEmpty(accountStatementDetails)){ |
| | | throw new ServiceException("该éè´éè´§åå·²ç»çæå¯¹è´¦åï¼æ æ³å é¤"); |
| | | } |
| | | List<StockOutRecord> approvedStockOutRecords = stockOutRecordMapper.selectList(Wrappers.<StockOutRecord>lambdaQuery() |
| | | .eq(StockOutRecord::getRecordType, "9") |
| | | .eq(StockOutRecord::getApprovalStatus, 1) |
| | | .inSql(StockOutRecord::getRecordId, "select id from purchase_return_order_products where purchase_return_order_id = " + id)); |
| | | if (CollectionUtils.isNotEmpty(approvedStockOutRecords)) { |
| | | throw new ServiceException("该éè´éè´§å对åºåºåºå·²å®¡æ ¸éè¿ï¼æ æ³å é¤"); |
| | | } |
| | | purchaseReturnOrdersService.deleteById(id); |
| | | return AjaxResult.success(); |
| | | } |
| | |
| | | private Long id; |
| | | |
| | | /** |
| | | * 审æ¹å®ä¾ID |
| | | */ |
| | | private Long approvalInstanceId; |
| | | |
| | | /** |
| | | * éè´ååå· |
| | | */ |
| | | @Excel(name = "éè´ååå·") |
| | |
| | | // éè´ååå· |
| | | private String purchaseContractNumber; |
| | | |
| | | private String shippingTypeText; |
| | | |
| | | /** |
| | | * 对åºåºåºæ¯å¦å·²å®¡æ ¸éè¿ |
| | | */ |
| | | private Boolean stockOutApproved; |
| | | |
| | | //éæäººå§å |
| | | private String returnUserName; |
| | | |
| | |
| | | |
| | | IPage<PurchaseLedgerDto> selectPurchaseLedgerListPage(IPage ipage, @Param("c") PurchaseLedgerDto purchaseLedger); |
| | | |
| | | List<PurchaseLedger> selectReturnablePurchaseLedgerList(@Param("c") PurchaseLedger purchaseLedger); |
| | | |
| | | List<IncomeExpenseAnalysisDto> selectPurchaseStats(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("dateFormat") String dateFormat); |
| | | |
| | | BigDecimal selectTotalPurchaseAmount(@Param("startDate") String startDate, @Param("endDate") String endDate); |
| | |
| | | @Schema(description = "ä¾åºåid") |
| | | private Long supplierId; |
| | | |
| | | @Schema(description = "åè´§ç±»å 1货车 2å¿«é") |
| | | private Integer shippingType; |
| | | |
| | | @Schema(description = "å货车çå·") |
| | | private String truckPlateNo; |
| | | |
| | | @Schema(description = "å¿«éå
¬å¸") |
| | | private String expressCompany; |
| | | |
| | | @Schema(description = "å¿«éåå·") |
| | | private String expressNo; |
| | | |
| | | @Schema(description = "项ç®id") |
| | | private Long projectId; |
| | | |
| | |
| | | |
| | | List<PurchaseLedger> selectPurchaseLedgerList(PurchaseLedger purchaseLedger); |
| | | |
| | | List<PurchaseLedger> selectReturnablePurchaseLedgerList(PurchaseLedger purchaseLedger); |
| | | |
| | | int addOrEditPurchase(PurchaseLedgerDto purchaseLedgerDto) throws Exception; |
| | | |
| | | R batchInsertPurchaseSteps(List<Long> ids); |
| | |
| | | import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.alibaba.fastjson2.JSON; |
| | | import com.ruoyi.approve.bean.dto.ApprovalInstanceDto; |
| | | import com.ruoyi.approve.mapper.ApprovalTemplateMapper; |
| | | import com.ruoyi.approve.pojo.ApprovalInstance; |
| | |
| | | import com.ruoyi.basic.pojo.ProductModel; |
| | | import com.ruoyi.basic.pojo.SupplierManage; |
| | | import com.ruoyi.basic.utils.FileUtil; |
| | | import com.ruoyi.common.exception.base.BaseException; |
| | | import com.ruoyi.common.enums.ApprovalStatusEnum; |
| | | import com.ruoyi.common.enums.ReviewStatusEnum; |
| | | import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum; |
| | | import com.ruoyi.common.enums.TypeEnums; |
| | | import com.ruoyi.common.exception.base.BaseException; |
| | | import com.ruoyi.common.utils.DateUtils; |
| | | import com.ruoyi.common.utils.SecurityUtils; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | |
| | | } |
| | | |
| | | @Override |
| | | public List<PurchaseLedger> selectReturnablePurchaseLedgerList(PurchaseLedger purchaseLedger) { |
| | | return purchaseLedgerMapper.selectReturnablePurchaseLedgerList(purchaseLedger); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public int addOrEditPurchase(PurchaseLedgerDto purchaseLedgerDto) throws Exception { |
| | | PurchaseLedger purchaseLedger = new PurchaseLedger(); |
| | |
| | | // å®é
ååéé¢å§ç»çäºååéé¢ |
| | | purchaseLedger.setNetContractAmount(purchaseLedger.getContractAmount()); |
| | | // 3. æ°å¢ææ´æ°ä¸»è¡¨ |
| | | if (purchaseLedger.getId() == null) { |
| | | if (!StringUtils.hasText(purchaseLedger.getPurchaseContractNumber())) { |
| | | purchaseLedger.setPurchaseContractNumber(generatePurchaseContractNo(purchaseLedger.getEntryDate())); |
| | | } |
| | | purchaseLedgerMapper.insert(purchaseLedger); |
| | | } else { |
| | | // å é¤éè´å®¡æ ¸ï¼éæ°æäº¤ |
| | | ApproveProcess one = approveProcessService.getOne(new LambdaQueryWrapper<ApproveProcess>() |
| | | .eq(ApproveProcess::getApproveType, 5) |
| | | .eq(ApproveProcess::getApproveReason, purchaseLedger.getPurchaseContractNumber()) |
| | | .eq(ApproveProcess::getApproveDelete, 0) |
| | | .last("limit 1")); |
| | | if (one != null) { |
| | | approveProcessService.delByIds(Collections.singletonList(one.getId())); |
| | | } |
| | | purchaseLedgerMapper.updateById(purchaseLedger); |
| | | if (purchaseLedger.getId() == null && !StringUtils.hasText(purchaseLedger.getPurchaseContractNumber())) { |
| | | purchaseLedger.setPurchaseContractNumber(generatePurchaseContractNo(purchaseLedger.getEntryDate())); |
| | | } |
| | | this.saveOrUpdate(purchaseLedger); |
| | | |
| | | // 4. å¤çåè¡¨æ°æ® |
| | | List<SalesLedgerProduct> productList = purchaseLedgerDto.getProductData(); |
| | |
| | | handleSalesLedgerProducts(purchaseLedger.getId(), productList, purchaseLedgerDto.getType()); |
| | | } |
| | | // 6.éè´å®¡æ ¸æ°å¢ï¼å®¡æ¹ç®¡çæªé
ç½®éè´å®¡æ¹äººæ¶ï¼å®¡æ¹æå¡ä¼èªå¨ç½®ä¸ºå®¡æ¹éè¿ã |
| | | addApproveByPurchase(loginUser, purchaseLedger); |
| | | //æ¥è¯¢å½åéè´ååå·æ¯å¦å·²æ·»å 审æ¹ï¼å¦ææä¸ä¸æ¯é©³åç¶æï¼åä¸é夿·»å |
| | | ApprovalInstance oldApprovalInstance = approvalInstanceService.getOne(Wrappers.<ApprovalInstance>lambdaQuery() |
| | | .eq(ApprovalInstance::getDeleted, 0) |
| | | .eq(ApprovalInstance::getBusinessType, TypeEnums.PURCHASE_APPROVAL.getCode()) |
| | | .eq(ApprovalInstance::getBusinessId, purchaseLedger.getId()) |
| | | .ne(ApprovalInstance::getStatus,"REJECTED") |
| | | .last("limit 1") |
| | | ); |
| | | if(Objects.isNull(oldApprovalInstance)){ |
| | | addApproveByPurchase(loginUser, purchaseLedger, productList); |
| | | } |
| | | // 5. è¿ç§»ä¸´æ¶æä»¶å°æ£å¼ç®å½ |
| | | fileUtil.saveStorageAttachment(ApplicationTypeEnum.FILE, RecordTypeEnum.PURCHASE_LEDGER, purchaseLedger.getId(), purchaseLedgerDto.getStorageBlobDTOS()); |
| | | return 1; |
| | |
| | | salesLedgerProductMapper.insert(salesLedgerProduct); |
| | | } |
| | | // éè´å®¡æ ¸ |
| | | addApproveByPurchase(loginUser,salesLedger); |
| | | List<SalesLedgerProduct> snapshotProducts = salesLedgerProductMapper.selectList( |
| | | new LambdaQueryWrapper<SalesLedgerProduct>() |
| | | .eq(SalesLedgerProduct::getSalesLedgerId, salesLedger.getId()) |
| | | .eq(SalesLedgerProduct::getType, 2) |
| | | ); |
| | | addApproveByPurchase(loginUser, salesLedger, snapshotProducts); |
| | | } |
| | | |
| | | return AjaxResult.success("导å
¥æå"); |
| | |
| | | |
| | | @Override |
| | | public PurchaseLedgerDto getPurchaseByCode(PurchaseLedgerDto purchaseLedgerDto) { |
| | | // 1. æ¥è¯¢ä¸»è¡¨ |
| | | PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectOne(new LambdaQueryWrapper<PurchaseLedger>() |
| | | .eq(PurchaseLedger::getPurchaseContractNumber, purchaseLedgerDto.getPurchaseContractNumber()) |
| | | .last("LIMIT 1")); |
| | | if (purchaseLedger == null) { |
| | | throw new BaseException("éè´å°è´¦ä¸åå¨"); |
| | | PurchaseLedger purchaseLedger = null; |
| | | ApprovalInstance approvalSnapshotInstance = null; |
| | | |
| | | // 1. ä¼å
æå½å审æ¹å®ä¾æ¥è¯¢å¿«ç
§ |
| | | if (purchaseLedgerDto.getApprovalInstanceId() != null) { |
| | | approvalSnapshotInstance = approvalInstanceService.getById(purchaseLedgerDto.getApprovalInstanceId()); |
| | | if (approvalSnapshotInstance != null && approvalSnapshotInstance.getBusinessId() != null) { |
| | | purchaseLedger = purchaseLedgerMapper.selectById(approvalSnapshotInstance.getBusinessId()); |
| | | } |
| | | } |
| | | |
| | | // 2. æ¥è¯¢å表 |
| | | // 2. æ²¡ä¼ å®¡æ¹å®ä¾IDæ¶ï¼éåå°æéè´ååå·æ¥è¯¢ |
| | | if (purchaseLedger == null) { |
| | | purchaseLedger = purchaseLedgerMapper.selectOne(new LambdaQueryWrapper<PurchaseLedger>() |
| | | .eq(PurchaseLedger::getPurchaseContractNumber, purchaseLedgerDto.getPurchaseContractNumber()) |
| | | .last("LIMIT 1")); |
| | | if (purchaseLedger == null) { |
| | | throw new BaseException("éè´å°è´¦ä¸åå¨"); |
| | | } |
| | | } |
| | | |
| | | // 3. æ¥è¯¢å½åéè´å对åºç审æ¹å¿«ç
§ |
| | | if (approvalSnapshotInstance == null) { |
| | | approvalSnapshotInstance = approvalInstanceService.getOne(new LambdaQueryWrapper<ApprovalInstance>() |
| | | .eq(ApprovalInstance::getBusinessId, purchaseLedger.getId()) |
| | | .eq(ApprovalInstance::getBusinessType, 5L) |
| | | .eq(ApprovalInstance::getDeleted, 0) |
| | | .orderByDesc(ApprovalInstance::getId) |
| | | .last("LIMIT 1")); |
| | | } |
| | | |
| | | if (approvalSnapshotInstance != null && StringUtils.hasText(approvalSnapshotInstance.getFormConfig())) { |
| | | try { |
| | | PurchaseLedgerDto snapshot = JSON.parseObject(approvalSnapshotInstance.getFormConfig(), PurchaseLedgerDto.class); |
| | | if (snapshot != null) { |
| | | snapshot.setId(purchaseLedger.getId()); |
| | | if (snapshot.getPurchaseContractNumber() == null) { |
| | | snapshot.setPurchaseContractNumber(purchaseLedger.getPurchaseContractNumber()); |
| | | } |
| | | if (snapshot.getSupplierId() == null) { |
| | | snapshot.setSupplierId(purchaseLedger.getSupplierId()); |
| | | } |
| | | if (snapshot.getSupplierName() == null) { |
| | | snapshot.setSupplierName(purchaseLedger.getSupplierName()); |
| | | } |
| | | if (snapshot.getSalesContractNo() == null) { |
| | | snapshot.setSalesContractNo(purchaseLedger.getSalesContractNo()); |
| | | } |
| | | if (snapshot.getSalesContractNoId() == null) { |
| | | snapshot.setSalesContractNoId(purchaseLedger.getSalesLedgerId()); |
| | | } |
| | | if (snapshot.getProjectName() == null) { |
| | | snapshot.setProjectName(purchaseLedger.getProjectName()); |
| | | } |
| | | if (snapshot.getEntryDate() == null) { |
| | | snapshot.setEntryDate(purchaseLedger.getEntryDate()); |
| | | } |
| | | if (snapshot.getExecutionDate() == null) { |
| | | snapshot.setExecutionDate(purchaseLedger.getExecutionDate()); |
| | | } |
| | | if (snapshot.getRemarks() == null) { |
| | | snapshot.setRemarks(purchaseLedger.getRemarks()); |
| | | } |
| | | if (snapshot.getRecorderId() == null) { |
| | | snapshot.setRecorderId(purchaseLedger.getRecorderId()); |
| | | } |
| | | if (snapshot.getRecorderName() == null) { |
| | | snapshot.setRecorderName(purchaseLedger.getRecorderName()); |
| | | } |
| | | snapshot.setProductData(snapshot.getProductData() == null ? Collections.emptyList() : snapshot.getProductData()); |
| | | snapshot.setHasChildren(CollectionUtils.isNotEmpty(snapshot.getProductData())); |
| | | return snapshot; |
| | | } |
| | | } catch (Exception e) { |
| | | log.warn("è§£æéè´å®¡æ¹å¿«ç
§å¤±è´¥: {}", e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | // 4. æ¥è¯¢å表 |
| | | LambdaQueryWrapper<SalesLedgerProduct> productWrapper = new LambdaQueryWrapper<>(); |
| | | productWrapper.eq(SalesLedgerProduct::getSalesLedgerId, purchaseLedger.getId()) |
| | | .eq(SalesLedgerProduct::getType, 2); |
| | | List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(productWrapper); |
| | | |
| | | // 4. è½¬æ¢ DTO |
| | | // 5. è½¬æ¢ DTO |
| | | PurchaseLedgerDto resultDto = new PurchaseLedgerDto(); |
| | | BeanUtils.copyProperties(purchaseLedger, resultDto); |
| | | if (!products.isEmpty()) { |
| | |
| | | return resultDto; |
| | | } |
| | | |
| | | public void addApproveByPurchase(LoginUser loginUser,PurchaseLedger purchaseLedger) throws Exception { |
| | | public void addApproveByPurchase(LoginUser loginUser, PurchaseLedger purchaseLedger, List<SalesLedgerProduct> productList) { |
| | | if (loginUser == null) { |
| | | return; |
| | | } |
| | |
| | | approvalInstance.setTitle(purchaseLedger.getPurchaseContractNumber()+"审æ¹"); |
| | | approvalInstance.setApplicantName(loginUser.getNickName()); |
| | | approvalInstance.setApplyTime(LocalDateTime.now()); |
| | | PurchaseLedgerDto snapshot = new PurchaseLedgerDto(); |
| | | BeanUtils.copyProperties(purchaseLedger, snapshot); |
| | | snapshot.setProductData(productList == null ? Collections.emptyList() : new ArrayList<>(productList)); |
| | | approvalInstance.setFormConfig(JSON.toJSONString(snapshot)); |
| | | approvalInstanceService.add(approvalInstance); |
| | | |
| | | } |
| | |
| | | @Schema(description = "å·²éè´§æ°é") |
| | | private BigDecimal totalReturnNum; |
| | | |
| | | @Schema(description = "éå®åè´§æ°é") |
| | | private BigDecimal saleOutQuantity; |
| | | |
| | | @Schema(description = "å«ç¨åä»·") |
| | | private BigDecimal taxInclusiveUnitPrice; |
| | | |
| | |
| | | @Schema(description = "éè´§æ»æ°") |
| | | private BigDecimal totalReturnNum; |
| | | |
| | | @Schema(description = "éå®åè´§æ°é") |
| | | private BigDecimal saleOutQuantity; |
| | | |
| | | @Schema(description = "å«ç¨åä»·") |
| | | private BigDecimal taxInclusiveUnitPrice; |
| | | |
| | |
| | | @Schema(description = "åºä»éé¢") |
| | | private BigDecimal payableAmount; |
| | | |
| | | @Schema(description = "éè´§éé¢") |
| | | private BigDecimal returnAmount; |
| | | |
| | | } |
| | |
| | | private BigDecimal paymentAmount; |
| | | |
| | | @Schema(description = "åºä»éé¢") |
| | | //该ä¾åºåéè´åºä»ç´¯è®¡éé¢=è´¢å¡(å
¥åº-éè´§) |
| | | //该ä¾åºåéè´åºä»ç´¯è®¡éé¢=åå§éé¢-仿¬¾-鿬¾ |
| | | private BigDecimal payableAmount; |
| | | |
| | | @Schema(description = "éè´§éé¢") |
| | | private BigDecimal returnAmount; |
| | | |
| | | } |
| | |
| | | java.math.BigDecimal returnQuantity = item.getReturnQuantity() == null |
| | | ? java.math.BigDecimal.ZERO |
| | | : item.getReturnQuantity(); |
| | | java.math.BigDecimal quantity = item.getQuantity() == null |
| | | item.setReturnQuantity(returnQuantity); |
| | | java.math.BigDecimal availableQuality = item.getQuantity() == null |
| | | ? java.math.BigDecimal.ZERO |
| | | : item.getQuantity(); |
| | | item.setReturnQuantity(returnQuantity); |
| | | item.setAvailableQuality(quantity.subtract(returnQuantity)); |
| | | if (item.getType() != null && item.getType() == 2) { |
| | | availableQuality = item.getApprovedStockInNum() == null |
| | | ? java.math.BigDecimal.ZERO |
| | | : item.getApprovedStockInNum(); |
| | | availableQuality = availableQuality |
| | | .subtract(item.getShippedQuantity() == null ? java.math.BigDecimal.ZERO : item.getShippedQuantity()); |
| | | } |
| | | item.setAvailableQuality(availableQuality.subtract(returnQuantity)); |
| | | }); |
| | | } |
| | | return AjaxResult.success(list); |
| | |
| | | private BigDecimal returnQuantity; |
| | | |
| | | @TableField(exist = false) |
| | | @Schema(description = "éå®åè´§æ°é") |
| | | private BigDecimal shippedQuantity; |
| | | |
| | | @TableField(exist = false) |
| | | @Schema(description = "å·²å®¡æ ¸å
¥åºæ°é") |
| | | private BigDecimal approvedStockInNum; |
| | | |
| | | @TableField(exist = false) |
| | | @Schema(description = "审æ¹ä¸æ°é") |
| | | private BigDecimal pendingApprovalQuantity; |
| | | } |
| | |
| | | import com.ruoyi.technology.mapper.TechnologyBomStructureMapper; |
| | | import com.ruoyi.technology.mapper.TechnologyRoutingMapper; |
| | | import com.ruoyi.technology.pojo.TechnologyRouting; |
| | | import org.apache.commons.lang3.BooleanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | |
| | | import java.lang.reflect.Field; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | import java.time.ZoneId; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | |
| | | */ |
| | | public void addProductionData(SalesLedgerProduct salesLedgerProduct) { |
| | | //å
å¤æè¯¥äº§åæ¯å¦éè¦ç产 |
| | | if (!salesLedgerProduct.getIsProduction()) { |
| | | if (!BooleanUtils.isTrue(salesLedgerProduct.getIsProduction())) { |
| | | return; |
| | | } |
| | | SalesLedger salesLedger = salesLedgerMapper.selectById(salesLedgerProduct.getSalesLedgerId()); |
| | |
| | | @Schema(description = "åºæ¶éé¢") |
| | | private BigDecimal receiptableAmount; |
| | | |
| | | @Schema(description = "éè´§éé¢") |
| | | private BigDecimal returnAmount; |
| | | |
| | | } |
| | |
| | | private BigDecimal receiptPaymentAmount; |
| | | |
| | | @Schema(description = "åºæ¶éé¢") |
| | | //该客æ·éå®åºæ¶ç´¯è®¡éé¢=è´¢å¡(åºåº-éè´§) |
| | | //该客æ·éå®åºæ¶ç´¯è®¡éé¢=åå§éé¢-忬¾-鿬¾ |
| | | private BigDecimal receiptableAmount; |
| | | |
| | | @Schema(description = "éè´§éé¢") |
| | | private BigDecimal returnAmount; |
| | | |
| | | } |
| | |
| | | package com.ruoyi.staff.controller; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.OrderItem; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.framework.web.domain.R; |
| | |
| | | @GetMapping("/listPage") |
| | | public R listPage(Page page){ |
| | | page.addOrder(OrderItem.desc("id")); |
| | | return R.ok(personalAttendanceLocationConfigService.page(page)); |
| | | return R.ok(personalAttendanceLocationConfigService.page(page, |
| | | new LambdaQueryWrapper<PersonalAttendanceLocationConfig>() |
| | | .ne(PersonalAttendanceLocationConfig::getId, 999))); |
| | | } |
| | | |
| | | |
| | |
| | | } |
| | | |
| | | @Operation(summary = "çæ¬¡ç¶æä¿®æ¹") |
| | | @PostMapping("update") |
| | | @PostMapping("/update") |
| | | public R performanceShiftUpdate(@RequestBody PersonalShift personalShift) { |
| | | personalShiftService.performanceShiftUpdate(personalShift); |
| | | return R.ok(); |
| | |
| | | /** |
| | | * å®¶åºä½å |
| | | */ |
| | | @Excel(name = "å®¶åºä½å", sort = 6) |
| | | private String adress; |
| | | |
| | | /** |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.staff.init; |
| | | |
| | | import com.ruoyi.staff.mapper.PersonalAttendanceLocationConfigMapper; |
| | | import com.ruoyi.staff.pojo.PersonalAttendanceLocationConfig; |
| | | import lombok.RequiredArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.boot.ApplicationArguments; |
| | | import org.springframework.boot.ApplicationRunner; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | @Slf4j |
| | | @Component |
| | | @RequiredArgsConstructor |
| | | public class DataInitializer implements ApplicationRunner { |
| | | |
| | | private final PersonalAttendanceLocationConfigMapper configMapper; |
| | | |
| | | @Override |
| | | public void run(ApplicationArguments args) { |
| | | initLeaveConfig(); |
| | | } |
| | | |
| | | private void initLeaveConfig() { |
| | | PersonalAttendanceLocationConfig config = configMapper.selectById(999); |
| | | if (config == null) { |
| | | config = new PersonalAttendanceLocationConfig(); |
| | | config.setId(999); |
| | | config.setShift("请å"); |
| | | configMapper.insert(config); |
| | | log.info("å·²åå§å请åçæ¬¡é
ç½®(id=999)"); |
| | | } |
| | | } |
| | | } |
| | |
| | | /** |
| | | * å®¶åºä½å |
| | | */ |
| | | @Excel(name = "å®¶åºä½å", sort = 6) |
| | | private String adress; |
| | | |
| | | /** |
| | |
| | | List<PersonalShift> personalShifts = personalShiftMapper.selectList(Wrappers.<PersonalShift>lambdaQuery() |
| | | .eq(PersonalShift::getStaffOnJobId, staffOnJob.getId()) |
| | | .eq(PersonalShift::getWorkTime, currentDate.atStartOfDay()) |
| | | .isNotNull(PersonalShift::getPersonalAttendanceLocationConfigId)); |
| | | .isNotNull(PersonalShift::getPersonalAttendanceLocationConfigId) |
| | | .ne(PersonalShift::getPersonalAttendanceLocationConfigId, 999)); |
| | | if (CollectionUtil.isEmpty(personalShifts)){ |
| | | throw new BaseException("å½åç¨æ·å½å¤©æ²¡ææçæ°æ®"); |
| | | } |
| | |
| | | List<PersonalShift> personalShifts = personalShiftMapper.selectList(Wrappers.<PersonalShift>lambdaQuery() |
| | | .eq(PersonalShift::getStaffOnJobId, staffOnJob.getId()) |
| | | .eq(PersonalShift::getWorkTime, currentDate.atStartOfDay()) |
| | | .isNotNull(PersonalShift::getPersonalAttendanceLocationConfigId)); |
| | | .isNotNull(PersonalShift::getPersonalAttendanceLocationConfigId) |
| | | .ne(PersonalShift::getPersonalAttendanceLocationConfigId, 999)); |
| | | if (CollectionUtil.isNotEmpty(personalShifts)){ |
| | | PersonalAttendanceLocationConfig personalAttendanceLocationConfig = personalAttendanceLocationConfigMapper.selectById(personalShifts.get(0).getPersonalAttendanceLocationConfigId()); |
| | | resultDto.setStartAt(personalAttendanceLocationConfig.getStartAt()); |
| | | resultDto.setEndAt(personalAttendanceLocationConfig.getEndAt()); |
| | | resultDto.setShift(personalAttendanceLocationConfig.getShift()); |
| | | if (personalAttendanceLocationConfig != null) { |
| | | resultDto.setStartAt(personalAttendanceLocationConfig.getStartAt()); |
| | | resultDto.setEndAt(personalAttendanceLocationConfig.getEndAt()); |
| | | resultDto.setShift(personalAttendanceLocationConfig.getShift()); |
| | | } |
| | | } |
| | | return resultDto; |
| | | } |
| | |
| | | import com.ruoyi.stock.execl.StockInRecordExportData; |
| | | import com.ruoyi.production.mapper.ProductionOrderPickMapper; |
| | | import com.ruoyi.production.pojo.ProductionOrderPick; |
| | | import com.ruoyi.procurementrecord.mapper.ReturnManagementMapper; |
| | | import com.ruoyi.procurementrecord.mapper.ReturnSaleProductMapper; |
| | | import com.ruoyi.procurementrecord.pojo.ReturnManagement; |
| | | import com.ruoyi.procurementrecord.pojo.ReturnSaleProduct; |
| | | import com.ruoyi.sales.mapper.SalesLedgerMapper; |
| | | import com.ruoyi.sales.mapper.ShippingInfoMapper; |
| | | import com.ruoyi.sales.pojo.SalesLedger; |
| | | import com.ruoyi.sales.pojo.ShippingInfo; |
| | | import com.ruoyi.stock.mapper.StockInRecordMapper; |
| | | import com.ruoyi.stock.mapper.StockInventoryMapper; |
| | | import com.ruoyi.stock.mapper.StockUninventoryMapper; |
| | |
| | | private StockInventoryMapper stockInventoryMapper; |
| | | private StockUninventoryMapper stockUninventoryMapper; |
| | | private ProductionOrderPickMapper productionOrderPickMapper; |
| | | private ReturnSaleProductMapper returnSaleProductMapper; |
| | | private ReturnManagementMapper returnManagementMapper; |
| | | private ShippingInfoMapper shippingInfoMapper; |
| | | private SalesLedgerMapper salesLedgerMapper; |
| | | |
| | | @Override |
| | | public IPage<StockInRecordDto> listPage(Page page, StockInRecordDto stockInRecordDto) { |
| | |
| | | stockUninventoryMapper.updateAddStockUnInventory(stockUninventoryDto); |
| | | } |
| | | } |
| | | // éå®éè´§å
¥åº:æ£åéå®å°è´¦å®é
ååéé¢(éè´§çæ) |
| | | handleSalesReturnRefund(stockInRecord); |
| | | } |
| | | } |
| | | return ids.size(); |
| | |
| | | |
| | | return ids.size(); |
| | | } |
| | | |
| | | /** |
| | | * éå®éè´§å
¥åºå®¡æ¹éè¿æ¶,æ£å对åºéå®å°è´¦çå®é
ååéé¢ã |
| | | * å
³èé¾:stock_in_record.record_id = return_sale_product.id |
| | | * â return_management.shipping_id = shipping_info.id |
| | | * â shipping_info.sales_ledger_id = sales_ledger.id |
| | | * åªå¤ç record_type 为 14(åæ ¼)æ 15(ä¸åæ ¼)çéå®éè´§å
¥åºã |
| | | */ |
| | | private void handleSalesReturnRefund(StockInRecord stockInRecord) { |
| | | String recordType = stockInRecord.getRecordType(); |
| | | if (!StockInQualifiedRecordTypeEnum.RETURN_HE_IN.getCode().equals(recordType) |
| | | && !StockInQualifiedRecordTypeEnum.RETURN_UNSTOCK_IN.getCode().equals(recordType)) { |
| | | return; |
| | | } |
| | | if (stockInRecord.getRecordId() == null) { |
| | | return; |
| | | } |
| | | ReturnSaleProduct rsp = returnSaleProductMapper.selectById(stockInRecord.getRecordId()); |
| | | if (rsp == null || rsp.getReturnManagementId() == null) { |
| | | return; |
| | | } |
| | | ReturnManagement rm = returnManagementMapper.selectById(rsp.getReturnManagementId()); |
| | | if (rm == null || rm.getShippingId() == null) { |
| | | return; |
| | | } |
| | | ShippingInfo shippingInfo = shippingInfoMapper.selectById(rm.getShippingId()); |
| | | if (shippingInfo == null || shippingInfo.getSalesLedgerId() == null) { |
| | | return; |
| | | } |
| | | SalesLedger salesLedger = salesLedgerMapper.selectById(shippingInfo.getSalesLedgerId()); |
| | | if (salesLedger == null || salesLedger.getContractAmount() == null) { |
| | | return; |
| | | } |
| | | BigDecimal refund = rsp.getAmount() != null ? rsp.getAmount() : BigDecimal.ZERO; |
| | | if (refund.compareTo(BigDecimal.ZERO) == 0) { |
| | | return; |
| | | } |
| | | BigDecimal baseAmount = salesLedger.getNetContractAmount() != null |
| | | ? salesLedger.getNetContractAmount() |
| | | : salesLedger.getContractAmount(); |
| | | salesLedger.setNetContractAmount(baseAmount.subtract(refund)); |
| | | salesLedgerMapper.updateById(salesLedger); |
| | | } |
| | | } |
| | |
| | | <select id="customewTransactions" resultType="com.ruoyi.sales.vo.CustomerTransactionsVo"> |
| | | select T1.customer_id, |
| | | c.customer_name, |
| | | T1.contractAmounts - IFNULL(T4.returnAmount, 0) AS contractAmounts, |
| | | T1.contractAmounts AS contractAmounts, |
| | | IFNULL(T2.receiptPaymentAmount, 0) AS receiptPaymentAmount, |
| | | IFNULL(T3.outboundAmount, 0) - IFNULL(T4.returnAmount, 0) AS receiptableAmount |
| | | T1.contractAmounts - IFNULL(T2.receiptPaymentAmount, 0) - IFNULL(T4.returnAmount, 0) AS receiptableAmount, |
| | | IFNULL(T4.returnAmount, 0) AS returnAmount |
| | | from (select customer_id, sum(contract_amount) as contractAmounts from sales_ledger group by customer_id) T1 |
| | | left join (select customer_id, sum(collection_amount) as receiptPaymentAmount from account_sales_collection group by customer_id) T2 on T1.customer_id = T2.customer_id |
| | | left join ( |
| | | SELECT |
| | | sl.customer_id, |
| | | sum(sor.stock_out_num * slp.tax_inclusive_unit_price) as outboundAmount |
| | | FROM stock_out_record sor |
| | | LEFT join shipping_info s on sor.record_id = s.id |
| | | LEFT JOIN sales_ledger sl ON s.sales_ledger_id = sl.id |
| | | LEFT JOIN sales_ledger_product slp ON s.sales_ledger_product_id = slp.id |
| | | WHERE sor.record_type='13' |
| | | and sor.approval_status=1 |
| | | and slp.type = 1 |
| | | group by sl.customer_id |
| | | ) T3 on T3.customer_id=T1.customer_id |
| | | left join ( |
| | | select |
| | | sl.customer_id, |
| | |
| | | select sl.id salesLedgerId, |
| | | sl.sales_contract_no, |
| | | sl.execution_date, |
| | | sl.contract_amount - IFNULL(T3.returnAmount, 0) AS contract_amount, |
| | | sl.contract_amount AS contract_amount, |
| | | IFNULL(T1.receiptPaymentAmount, 0) AS receiptPaymentAmount, |
| | | IFNULL(T2.outboundAmount, 0) - IFNULL(T3.returnAmount, 0) AS receiptableAmount |
| | | sl.contract_amount - IFNULL(T1.receiptPaymentAmount, 0) - IFNULL(T3.returnAmount, 0) AS receiptableAmount, |
| | | IFNULL(T3.returnAmount, 0) AS returnAmount |
| | | from sales_ledger sl |
| | | left join ( |
| | | select |
| | |
| | | and sor.approval_status=1 |
| | | group by sl.id |
| | | )T1 on T1.id = sl.id |
| | | left join ( |
| | | SELECT |
| | | sl.id, |
| | | sum(sor.stock_out_num * slp.tax_inclusive_unit_price) as outboundAmount |
| | | FROM stock_out_record sor |
| | | left join shipping_info s on sor.record_id = s.id |
| | | LEFT JOIN sales_ledger sl ON s.sales_ledger_id = sl.id |
| | | LEFT JOIN sales_ledger_product slp ON s.sales_ledger_product_id = slp.id |
| | | WHERE sor.record_type='13' |
| | | and sor.approval_status=1 |
| | | and slp.type = 1 |
| | | group by sl.id |
| | | )T2 on T2.id = sl.id |
| | | left join ( |
| | | select sl.id, |
| | | sum(rm.refund_amount) as returnAmount |
| | |
| | | sm.supplier_name, |
| | | T1.contractAmounts, |
| | | IFNULL(T2.paymentAmount, 0) AS paymentAmount, |
| | | IFNULL(T3.InboundAmount, 0) - IFNULL(T4.returnAmount, 0) AS payableAmount |
| | | from (select supplier_id, sum(COALESCE(net_contract_amount, contract_amount)) as contractAmounts from purchase_ledger group by supplier_id) T1 |
| | | T1.contractAmounts - IFNULL(T2.paymentAmount, 0) - IFNULL(T4.returnAmount, 0) AS payableAmount, |
| | | IFNULL(T4.returnAmount, 0) AS returnAmount |
| | | from (select supplier_id, sum(contract_amount) as contractAmounts from purchase_ledger group by supplier_id) T1 |
| | | left join (select supplier_id, sum(payment_amount) as paymentAmount from account_purchase_payment group by supplier_id) T2 on T1.supplier_id = T2.supplier_id |
| | | left join ( |
| | | SELECT |
| | | pl.supplier_id, |
| | | sum(sir.stock_in_num * slp.tax_inclusive_unit_price) AS InboundAmount |
| | | FROM stock_in_record sir |
| | | -- 10 ç±»åæå
³èè´¨æ£è¡¨ |
| | | LEFT JOIN quality_inspect qi ON sir.record_type = 10 AND sir.record_id = qi.id |
| | | -- 卿å
³èéè´ï¼èªå¨éé
7 å 10ï¼ |
| | | LEFT JOIN purchase_ledger pl |
| | | ON pl.id = IF(sir.record_type = 7, sir.record_id, qi.purchase_ledger_id) |
| | | -- 产åå
³èä¸å¨ |
| | | LEFT JOIN sales_ledger_product slp ON pl.id = slp.sales_ledger_id |
| | | -- æ¡ä»¶ |
| | | WHERE sir.approval_status = 1 AND slp.type = 2 |
| | | AND sir.record_type IN ('7','10') |
| | | group by pl.supplier_id |
| | | ) T3 on T3.supplier_id=T1.supplier_id |
| | | left join ( |
| | | select |
| | | supplier_id, |
| | |
| | | select pl.id purchaseLedgerId, |
| | | pl.purchase_contract_number, |
| | | pl.execution_date, |
| | | COALESCE(pl.net_contract_amount, pl.contract_amount) AS contract_amount, |
| | | pl.contract_amount AS contract_amount, |
| | | IFNULL(T1.paymentAmount, 0) AS paymentAmount, |
| | | IFNULL(T2.InboundAmount, 0) - IFNULL(T3.returnAmount, 0) AS payableAmount |
| | | pl.contract_amount - IFNULL(T1.paymentAmount, 0) - IFNULL(T3.returnAmount, 0) AS payableAmount, |
| | | IFNULL(T3.returnAmount, 0) AS returnAmount |
| | | from purchase_ledger pl |
| | | left join ( |
| | | select |
| | |
| | | AND sir.record_type IN ('7','10') |
| | | group by pl.id |
| | | )T1 on T1.id = pl.id |
| | | left join ( |
| | | SELECT |
| | | pl.id, |
| | | sum(sir.stock_in_num * slp.tax_inclusive_unit_price) AS InboundAmount |
| | | FROM stock_in_record sir |
| | | -- 10 ç±»åæå
³èè´¨æ£è¡¨ |
| | | LEFT JOIN quality_inspect qi ON sir.record_type = 10 AND sir.record_id = qi.id |
| | | -- 卿å
³èéè´ï¼èªå¨éé
7 å 10ï¼ |
| | | LEFT JOIN purchase_ledger pl |
| | | ON pl.id = IF(sir.record_type = 7, sir.record_id, qi.purchase_ledger_id) |
| | | -- 产åå
³èä¸å¨ |
| | | LEFT JOIN sales_ledger_product slp ON pl.id = slp.sales_ledger_id |
| | | -- æ¡ä»¶ |
| | | WHERE sir.approval_status = 1 AND slp.type = 2 |
| | | AND sir.record_type IN ('7','10') |
| | | group by pl.id |
| | | )T2 on T2.id = pl.id |
| | | left join ( |
| | | select pl.id, |
| | | sum(pro.total_amount) as returnAmount |
| | |
| | | select rm.*, |
| | | c.customer_name, |
| | | si.shipping_no, |
| | | rm.shipping_type, |
| | | rm.truck_plate_no, |
| | | rm.express_company, |
| | | rm.express_no, |
| | | sl.project_name, |
| | | sl.sales_contract_no, |
| | | sl.salesman |
| | | sl.salesman, |
| | | CASE |
| | | WHEN tempA.total_approval = 0 OR tempA.total_approval IS NULL THEN 0 |
| | | WHEN tempA.approval_sum = tempA.total_approval THEN 1 |
| | | ELSE 2 |
| | | END AS stock_in_approval_status |
| | | from return_management rm |
| | | left join shipping_info si on rm.shipping_id = si.id |
| | | left join customer c on rm.customer_id = c.id |
| | | left join sales_ledger sl on si.sales_ledger_id = sl.id |
| | | LEFT JOIN ( |
| | | SELECT |
| | | rsp.return_management_id, |
| | | COUNT(sir.id) AS total_approval, |
| | | SUM(CASE WHEN sir.approval_status = 1 THEN 1 ELSE 0 END) AS approval_sum |
| | | FROM return_sale_product rsp LEFT JOIN stock_in_record sir ON rsp.id = sir.record_id |
| | | GROUP BY rsp.return_management_id |
| | | ) tempA ON tempA.return_management_id = rm.id |
| | | <where> |
| | | <if test="req.returnNo != null and req.returnNo != ''"> |
| | | and rm.return_no like concat('%',#{req.returnNo},'%') |
| | |
| | | select rm.*, |
| | | c.customer_name, |
| | | si.shipping_no, |
| | | rm.shipping_type, |
| | | rm.truck_plate_no, |
| | | rm.express_company, |
| | | rm.express_no, |
| | | sl.project_name, |
| | | sl.sales_contract_no, |
| | | sl.salesman |
| | |
| | | rm.return_no, |
| | | c.customer_name, |
| | | si.shipping_no, |
| | | rm.shipping_type, |
| | | rm.truck_plate_no, |
| | | rm.express_company, |
| | | rm.express_no, |
| | | rm.make_time, |
| | | rm.refund_amount, |
| | | rm.return_reason, |
| | |
| | | sor.outbound_batches, |
| | | sor.stock_out_num, |
| | | sor.batch_no, |
| | | GREATEST(sor.stock_out_num - COALESCE(rs1.total_return_num1, 0), 0) AS un_quantity, |
| | | COALESCE(rs.total_return_num, 0) AS total_return_num |
| | | GREATEST( sor.stock_out_num - COALESCE ( rs.total_return_num, 0 ), 0 ) AS un_quantity, |
| | | COALESCE ( rs.pending_return_num, 0 ) AS pending_return_num , |
| | | COALESCE ( rs.return_num, 0 ) AS total_return_num |
| | | FROM return_sale_product rsp |
| | | LEFT JOIN return_management rm ON rm.id = rsp.return_management_id |
| | | LEFT JOIN shipping_info si ON si.id = rm.shipping_id |
| | |
| | | left join product_model pm on slp.product_model_id = pm.id |
| | | LEFT JOIN product p on pm.product_id = p.id |
| | | LEFT JOIN (SELECT stock_out_record_id, |
| | | SUM(num) AS total_return_num |
| | | SUM(num) AS total_return_num, |
| | | SUM( CASE WHEN return_management_id =#{returnManagementId} AND STATUS = 0 THEN num ELSE 0 END ) AS pending_return_num , |
| | | SUM( CASE WHEN STATUS = 1 THEN num ELSE 0 END ) AS return_num |
| | | FROM return_sale_product |
| | | WHERE 1 = 1 and return_management_id = #{returnManagementId} |
| | | GROUP BY stock_out_record_id) rs ON rs.stock_out_record_id = sor.id |
| | | LEFT JOIN (SELECT stock_out_record_id, |
| | | SUM(num) AS total_return_num1 |
| | | FROM return_sale_product |
| | | WHERE 1 = 1 |
| | | GROUP BY stock_out_record_id) rs1 ON rs1.stock_out_record_id = sor.id |
| | | where rm.id =#{returnManagementId} |
| | | </select> |
| | | <select id="listReturnSaleProduct" resultType="com.ruoyi.procurementrecord.bean.dto.ReturnSaleProductDto"> |
| | |
| | | ORDER BY result.entry_date DESC |
| | | </select> |
| | | |
| | | <select id="selectReturnablePurchaseLedgerList" resultType="com.ruoyi.purchase.pojo.PurchaseLedger"> |
| | | SELECT DISTINCT pl.* |
| | | FROM purchase_ledger pl |
| | | WHERE 1 = 1 |
| | | <if test="c.purchaseContractNumber != null and c.purchaseContractNumber != ''"> |
| | | AND pl.purchase_contract_number LIKE CONCAT('%', #{c.purchaseContractNumber}, '%') |
| | | </if> |
| | | <if test="c.supplierId != null"> |
| | | AND pl.supplier_id = #{c.supplierId} |
| | | </if> |
| | | <if test="c.approvalStatus != null"> |
| | | AND pl.approval_status = #{c.approvalStatus} |
| | | </if> |
| | | AND EXISTS ( |
| | | SELECT 1 |
| | | FROM stock_in_record sir |
| | | LEFT JOIN quality_inspect qi |
| | | ON sir.record_type = '10' |
| | | AND sir.record_id = qi.id |
| | | LEFT JOIN sales_ledger_product slp |
| | | ON slp.sales_ledger_id = pl.id |
| | | AND slp.product_model_id = sir.product_model_id |
| | | AND slp.type = 2 |
| | | LEFT JOIN ( |
| | | SELECT stock_in_record_id, SUM(return_quantity) AS total_return_num |
| | | FROM purchase_return_order_products |
| | | GROUP BY stock_in_record_id |
| | | ) rs ON rs.stock_in_record_id = sir.id |
| | | WHERE sir.approval_status = 1 |
| | | AND sir.record_type IN ('7','10') |
| | | AND ( |
| | | (sir.record_type = '7' AND sir.record_id = pl.id) |
| | | OR (sir.record_type = '10' AND qi.purchase_ledger_id = pl.id) |
| | | ) |
| | | AND slp.id IS NOT NULL |
| | | AND GREATEST(sir.stock_in_num - COALESCE(rs.total_return_num, 0), 0) > 0 |
| | | ) |
| | | ORDER BY pl.entry_date DESC |
| | | </select> |
| | | |
| | | <select id="selectTotalPurchaseAmount" resultType="java.math.BigDecimal"> |
| | | SELECT IFNULL(SUM(contract_amount), 0) |
| | | FROM purchase_ledger |
| | |
| | | <result column="no" property="no" /> |
| | | <result column="return_type" property="returnType" /> |
| | | <result column="supplier_id" property="supplierId" /> |
| | | <result column="shipping_type" property="shippingType" /> |
| | | <result column="truck_plate_no" property="truckPlateNo" /> |
| | | <result column="express_company" property="expressCompany" /> |
| | | <result column="express_no" property="expressNo" /> |
| | | <result column="project_id" property="projectId" /> |
| | | <result column="project_phase" property="projectPhase" /> |
| | | <result column="prepared_at" property="preparedAt" /> |
| | |
| | | SELECT |
| | | pro.*, |
| | | sm.supplier_name as supplier_name, |
| | | pl.purchase_contract_number as purchase_contract_number |
| | | pl.purchase_contract_number as purchase_contract_number, |
| | | CASE |
| | | WHEN EXISTS ( |
| | | SELECT 1 |
| | | FROM purchase_return_order_products prop |
| | | INNER JOIN stock_out_record sor ON sor.record_id = prop.id |
| | | AND sor.record_type = '9' |
| | | AND sor.approval_status = 1 |
| | | WHERE prop.purchase_return_order_id = pro.id |
| | | ) THEN 1 |
| | | ELSE 0 |
| | | END AS stock_out_approved |
| | | FROM purchase_return_orders pro |
| | | LEFT JOIN supplier_manage sm ON pro.supplier_id = sm.id |
| | | LEFT JOIN purchase_ledger pl ON pl.id = pro.purchase_ledger_id |
| | |
| | | pro.no returnNo, |
| | | t.inboundBatches, |
| | | sm.supplier_name, |
| | | pro.shipping_type, |
| | | pro.truck_plate_no, |
| | | pro.express_company, |
| | | pro.express_no, |
| | | pro.prepared_at, |
| | | pro.total_amount, |
| | | CASE pro.return_type WHEN 0 THEN 'éè´§éæ¬¾' WHEN 1 THEN 'ææ¶' END AS returnType, |
| | |
| | | sir.stock_in_num, |
| | | sir.batch_no, |
| | | slp.tax_inclusive_unit_price, |
| | | GREATEST(sir.stock_in_num - COALESCE(rs.total_return_num, 0), 0) AS un_quantity, |
| | | COALESCE(rs.total_return_num, 0) AS total_return_num |
| | | GREATEST( |
| | | sir.stock_in_num |
| | | - COALESCE(rs.total_return_num, 0) |
| | | - COALESCE(so.total_sale_out_num, 0), |
| | | 0 |
| | | ) AS un_quantity, |
| | | COALESCE(rs.total_return_num, 0) AS total_return_num, |
| | | COALESCE(so.total_sale_out_num, 0) AS saleOutQuantity |
| | | FROM stock_in_record sir |
| | | LEFT JOIN quality_inspect qi ON sir.record_type = 10 AND sir.record_id = qi.id |
| | | LEFT JOIN purchase_ledger pl |
| | | ON pl.id = IF(sir.record_type = 7, sir.record_id, qi.purchase_ledger_id) |
| | | LEFT JOIN sales_ledger_product slp ON pl.id = slp.sales_ledger_id |
| | | LEFT JOIN sales_ledger_product slp |
| | | ON pl.id = slp.sales_ledger_id |
| | | AND slp.product_model_id = sir.product_model_id |
| | | AND slp.type = 2 |
| | | LEFT JOIN ( |
| | | SELECT |
| | | stock_in_record_id, |
| | |
| | | WHERE 1=1 |
| | | GROUP BY stock_in_record_id |
| | | ) rs ON rs.stock_in_record_id = sir.id |
| | | WHERE sir.approval_status = 1 AND slp.type = 2 |
| | | LEFT JOIN ( |
| | | SELECT |
| | | inv.batch_no, |
| | | inv.product_model_id, |
| | | SUM(spd.quantity) AS total_sale_out_num |
| | | FROM shipping_product_detail spd |
| | | INNER JOIN shipping_info si |
| | | ON si.id = spd.shipping_info_id |
| | | INNER JOIN stock_out_record sor |
| | | ON sor.record_id = si.id |
| | | AND sor.record_type = '13' |
| | | AND sor.approval_status IN (0, 1, 3) |
| | | INNER JOIN stock_inventory inv |
| | | ON inv.id = spd.stock_inventory_id |
| | | GROUP BY inv.batch_no, inv.product_model_id |
| | | ) so ON so.product_model_id = sir.product_model_id |
| | | AND (so.batch_no = sir.batch_no OR (so.batch_no IS NULL AND sir.batch_no IS NULL)) |
| | | WHERE sir.approval_status = 1 |
| | | AND sir.record_type IN ('7','10') |
| | | and pl.id = #{purchaseLedgerId} |
| | | </select> |
| | |
| | | slp.tax_inclusive_unit_price, |
| | | prop.return_quantity, |
| | | prop.purchase_return_order_id, |
| | | GREATEST(sir.stock_in_num - COALESCE(rs1.total_return_num1, 0), 0) AS un_quantity, |
| | | COALESCE(rs.total_return_num, 0) AS total_return_num |
| | | GREATEST( |
| | | sir.stock_in_num |
| | | - COALESCE(rs.total_return_num, 0) |
| | | - COALESCE(so.total_sale_out_num, 0), |
| | | 0 |
| | | ) AS un_quantity, |
| | | COALESCE(rs.total_return_num, 0) AS total_return_num, |
| | | COALESCE(so.total_sale_out_num, 0) AS saleOutQuantity |
| | | from purchase_return_order_products prop |
| | | left join purchase_return_orders pro on prop.purchase_return_order_id = pro.id |
| | | LEFT JOIN stock_in_record sir ON prop.stock_in_record_id = sir.id and sir.record_type in ('7','10') |
| | |
| | | LEFT JOIN (SELECT stock_in_record_id, |
| | | SUM(return_quantity) AS total_return_num |
| | | FROM purchase_return_order_products |
| | | WHERE 1 = 1 and purchase_return_order_id = #{id} |
| | | WHERE 1 = 1 |
| | | GROUP BY stock_in_record_id) rs ON rs.stock_in_record_id = sir.id |
| | | LEFT JOIN (SELECT stock_in_record_id, |
| | | SUM(return_quantity) AS total_return_num1 |
| | | FROM purchase_return_order_products |
| | | WHERE 1 = 1 and purchase_return_order_id = #{id} |
| | | GROUP BY stock_in_record_id) rs1 ON rs1.stock_in_record_id = sir.id |
| | | LEFT JOIN ( |
| | | SELECT |
| | | inv.batch_no, |
| | | inv.product_model_id, |
| | | SUM(spd.quantity) AS total_sale_out_num |
| | | FROM shipping_product_detail spd |
| | | INNER JOIN shipping_info si |
| | | ON si.id = spd.shipping_info_id |
| | | INNER JOIN stock_out_record sor |
| | | ON sor.record_id = si.id |
| | | AND sor.record_type = '13' |
| | | AND sor.approval_status IN (0, 1, 3) |
| | | INNER JOIN stock_inventory inv |
| | | ON inv.id = spd.stock_inventory_id |
| | | GROUP BY inv.batch_no, inv.product_model_id |
| | | ) so ON so.product_model_id = sir.product_model_id |
| | | AND (so.batch_no = sir.batch_no OR (so.batch_no IS NULL AND sir.batch_no IS NULL)) |
| | | where pro.id = #{id} |
| | | </select> |
| | | </mapper> |
| | |
| | | ELSE 0 |
| | | END as has_sufficient_stock, |
| | | (IFNULL(T1.quantity, 0) - IFNULL(t3.shipped_quantity, 0) - IFNULL(t5.pending_approval_quantity, 0)) as no_quantity, |
| | | IFNULL(t3.shipped_quantity, 0) as shipped_quantity, |
| | | IFNULL(t6.return_quantity, 0) as return_quantity, |
| | | IFNULL(t4.approved_stock_in_num, 0) as approved_stock_in_num, |
| | | IFNULL(t5.pending_approval_quantity, 0) as pending_approval_quantity, |
| | | CASE |
| | | WHEN IFNULL(t3.shipped_quantity, 0) = 0 AND IFNULL(t5.pending_approval_quantity, 0) = 0 THEN 'å¾
åè´§' |
| | |
| | | GROUP BY product_model_id |
| | | ) t2 ON T1.product_model_id = t2.product_model_id |
| | | LEFT JOIN ( |
| | | SELECT si.sales_ledger_product_id, IFNULL(SUM(spd.quantity), 0) as shipped_quantity |
| | | SELECT |
| | | slp.id AS sales_ledger_product_id, |
| | | IFNULL(SUM(so.total_sale_out_num), 0) AS shipped_quantity |
| | | FROM sales_ledger_product slp |
| | | LEFT JOIN ( |
| | | SELECT |
| | | pl.id AS purchase_ledger_id, |
| | | sir.product_model_id, |
| | | SUM(spd.quantity) AS total_sale_out_num |
| | | FROM shipping_product_detail spd |
| | | INNER JOIN shipping_info si |
| | | ON si.id = spd.shipping_info_id |
| | | INNER JOIN stock_out_record sor |
| | | ON sor.record_id = si.id |
| | | AND TRIM(sor.record_type) = '13' |
| | | AND sor.approval_status IN (0, 1, 3) |
| | | INNER JOIN stock_inventory inv |
| | | ON inv.id = spd.stock_inventory_id |
| | | INNER JOIN stock_in_record sir |
| | | ON sir.product_model_id = inv.product_model_id |
| | | AND ( |
| | | (sir.batch_no IS NOT NULL AND sir.batch_no = inv.batch_no) |
| | | OR (sir.batch_no IS NULL AND inv.batch_no IS NULL) |
| | | ) |
| | | AND sir.approval_status = 1 |
| | | AND sir.record_type IN ('7', '10') |
| | | LEFT JOIN quality_inspect qi |
| | | ON sir.record_type = '10' |
| | | AND sir.record_id = qi.id |
| | | LEFT JOIN purchase_ledger pl |
| | | ON pl.id = IF(sir.record_type = '7', sir.record_id, qi.purchase_ledger_id) |
| | | WHERE si.status IN ('å®¡æ ¸éè¿', 'å·²åè´§') |
| | | AND pl.id IS NOT NULL |
| | | GROUP BY pl.id, sir.product_model_id |
| | | ) so ON so.purchase_ledger_id = slp.sales_ledger_id |
| | | AND so.product_model_id = slp.product_model_id |
| | | WHERE slp.type = 2 |
| | | GROUP BY slp.id |
| | | |
| | | UNION ALL |
| | | |
| | | -- éå®å°è´¦(type=1): shipping_info ç´æ¥æ sales_ledger_product_id,åªç»è®¡åºåºå®¡æ ¸éè¿(approval_status=1)çåè´§é,ä¸ t5 ç pending é»è¾äºè¡¥ |
| | | SELECT |
| | | si.sales_ledger_product_id AS sales_ledger_product_id, |
| | | IFNULL(SUM(spd.quantity), 0) AS shipped_quantity |
| | | FROM shipping_info si |
| | | INNER JOIN shipping_product_detail spd ON si.id = spd.shipping_info_id |
| | | INNER JOIN stock_out_record sor |
| | | ON sor.record_id = si.id |
| | | AND TRIM(sor.record_type) = '13' |
| | | AND sor.approval_status = 1 |
| | | WHERE si.status IN ('å®¡æ ¸éè¿', 'å·²åè´§') |
| | | AND EXISTS ( |
| | | SELECT 1 FROM stock_out_record sor |
| | | WHERE sor.record_id = si.id |
| | | AND TRIM(sor.record_type) = '13' |
| | | AND sor.approval_status = 1 |
| | | ) |
| | | AND si.sales_ledger_product_id IS NOT NULL |
| | | GROUP BY si.sales_ledger_product_id |
| | | ) t3 ON t3.sales_ledger_product_id = T1.id |
| | | LEFT JOIN ( |
| | |
| | | GROUP BY si.sales_ledger_product_id |
| | | ) t5 ON t5.sales_ledger_product_id = T1.id |
| | | LEFT JOIN ( |
| | | SELECT prop.sales_ledger_product_id, IFNULL(SUM(prop.return_quantity), 0) AS return_quantity |
| | | FROM purchase_return_order_products prop |
| | | INNER JOIN purchase_return_orders pro ON prop.purchase_return_order_id = pro.id |
| | | GROUP BY prop.sales_ledger_product_id |
| | | SELECT |
| | | prop.sales_ledger_product_id, |
| | | IFNULL(SUM(prop.return_quantity), 0) AS return_quantity |
| | | FROM purchase_return_order_products prop |
| | | LEFT JOIN purchase_return_orders pro |
| | | ON pro.id = prop.purchase_return_order_id |
| | | GROUP BY prop.sales_ledger_product_id |
| | | |
| | | UNION ALL |
| | | |
| | | SELECT |
| | | si.sales_ledger_product_id, |
| | | IFNULL(SUM(rsp.num), 0) AS return_quantity |
| | | FROM return_sale_product rsp |
| | | INNER JOIN return_management rm ON rm.id = rsp.return_management_id |
| | | INNER JOIN shipping_info si ON si.id = rm.shipping_id |
| | | INNER JOIN stock_in_record sir ON sir.record_id = rsp.id |
| | | AND TRIM(sir.record_type) IN ('14','15') |
| | | AND sir.approval_status = 1 |
| | | WHERE si.sales_ledger_product_id IS NOT NULL |
| | | GROUP BY si.sales_ledger_product_id |
| | | ) t6 ON t6.sales_ledger_product_id = T1.id |
| | | left join product_model pm ON T1.product_model_id = pm.id |
| | | left join product p ON pm.product_id = p.id |
| | |
| | | sor.batch_no, |
| | | slp.tax_inclusive_unit_price, |
| | | GREATEST(sor.stock_out_num - COALESCE(rs.total_return_num, 0), 0) AS un_quantity, |
| | | COALESCE(rs.total_return_num, 0) AS total_return_num |
| | | COALESCE(rs.return_num, 0) AS total_return_num, |
| | | COALESCE(rs.pending_return_num, 0) AS pending_return_num |
| | | FROM shipping_info si |
| | | LEFT JOIN shipping_product_detail spd ON spd.shipping_info_id = si.id |
| | | LEFT JOIN stock_out_record sor ON sor.record_id = si.id and sor.record_type = '13' |
| | |
| | | LEFT JOIN ( |
| | | SELECT |
| | | stock_out_record_id, |
| | | SUM(num) AS total_return_num |
| | | SUM(num) AS total_return_num, |
| | | SUM( CASE WHEN rsp.STATUS = 0 THEN rsp.num ELSE 0 END ) AS pending_return_num , |
| | | SUM( CASE WHEN rsp.STATUS = 1 THEN rsp.num ELSE 0 END ) AS return_num |
| | | FROM return_sale_product rsp |
| | | left join return_management rm on rm.id = rsp.return_management_id |
| | | left join shipping_info si on si.id = rm.shipping_id |
| | |
| | | order by personal_attendance_records.id desc |
| | | </select> |
| | | |
| | | <!-- æ¥è¯¢æå®æ¥ææ²¡æèå¤è®°å½çå¨èåå·¥ï¼å¨æå®æ¶é´ä¹åå
¥èçï¼ --> |
| | | <!-- æ¥è¯¢æå®æ¥æææçï¼é请åï¼ä½æ²¡æèå¤è®°å½çå¨èåå·¥ï¼æ²¡æçè§ä¸ºä¼æ¯ä¸æ è®°ç¼ºå¤ --> |
| | | <select id="selectStaffWithoutAttendanceRecordBeforeTime" resultType="com.ruoyi.staff.pojo.StaffOnJob"> |
| | | SELECT soj.* |
| | | FROM staff_on_job soj |
| | |
| | | AND soj.create_time < #{entryDeadline} |
| | | AND EXISTS ( |
| | | SELECT 1 |
| | | FROM personal_attendance_location_config palc |
| | | WHERE palc.sys_dept_id = soj.sys_dept_id |
| | | FROM personal_shift ps |
| | | WHERE ps.staff_on_job_id = soj.id |
| | | AND DATE(ps.work_time) = #{date} |
| | | AND ps.personal_attendance_location_config_id IS NOT NULL |
| | | AND ps.personal_attendance_location_config_id != 999 |
| | | ) |
| | | AND NOT EXISTS ( |
| | | SELECT 1 |
| | |
| | | su.nick_name as create_by |
| | | from |
| | | stock_in_record sir |
| | | left join stock_inventory si on sir.product_model_id = si.product_model_id |
| | | left join ( |
| | | select product_model_id, sum(qualitity) as qualitity |
| | | from stock_inventory |
| | | group by product_model_id |
| | | ) si on sir.product_model_id = si.product_model_id |
| | | left join product_model pm on sir.product_model_id = pm.id |
| | | left join product p on pm.product_id = p.id |
| | | left join sys_user su on sir.create_user = su.user_id |