feat(oa): 新增客户管理和资金日记账功能

- 添加客户管理相关实体、控制器、服务和映射
- 实现客户信息的增删改查功能
- 添加资金日记账相关实体、控制器、服务和映射
- 实现资金日记账的增删改查功能
- 优化数据库连接配置
- 更新 BOM 项关联的表名
This commit is contained in:
2025-09-02 13:53:52 +08:00
parent c50adfd648
commit bb28f02aa8
68 changed files with 4726 additions and 6 deletions

View File

@@ -0,0 +1,102 @@
package com.gear.oa.controller;
import java.util.List;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import com.gear.common.annotation.RepeatSubmit;
import com.gear.common.annotation.Log;
import com.gear.common.core.controller.BaseController;
import com.gear.common.core.domain.PageQuery;
import com.gear.common.core.domain.R;
import com.gear.common.core.validate.AddGroup;
import com.gear.common.core.validate.EditGroup;
import com.gear.common.core.validate.QueryGroup;
import com.gear.common.enums.BusinessType;
import com.gear.common.utils.poi.ExcelUtil;
import com.gear.oa.domain.vo.GearCustomerVo;
import com.gear.oa.domain.bo.GearCustomerBo;
import com.gear.oa.service.IGearCustomerService;
import com.gear.common.core.page.TableDataInfo;
/**
* CRM 客户
*
* @author Joshi
* @date 2025-09-02
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/oa/customer")
public class GearCustomerController extends BaseController {
private final IGearCustomerService iGearCustomerService;
/**
* 查询CRM 客户列表
*/
@GetMapping("/list")
public TableDataInfo<GearCustomerVo> list(GearCustomerBo bo, PageQuery pageQuery) {
return iGearCustomerService.queryPageList(bo, pageQuery);
}
/**
* 导出CRM 客户列表
*/
@Log(title = "CRM 客户", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(GearCustomerBo bo, HttpServletResponse response) {
List<GearCustomerVo> list = iGearCustomerService.queryList(bo);
ExcelUtil.exportExcel(list, "CRM 客户", GearCustomerVo.class, response);
}
/**
* 获取CRM 客户详细信息
*
* @param customerId 主键
*/
@GetMapping("/{customerId}")
public R<GearCustomerVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long customerId) {
return R.ok(iGearCustomerService.queryById(customerId));
}
/**
* 新增CRM 客户
*/
@Log(title = "CRM 客户", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody GearCustomerBo bo) {
return toAjax(iGearCustomerService.insertByBo(bo));
}
/**
* 修改CRM 客户
*/
@Log(title = "CRM 客户", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody GearCustomerBo bo) {
return toAjax(iGearCustomerService.updateByBo(bo));
}
/**
* 删除CRM 客户
*
* @param customerIds 主键串
*/
@Log(title = "CRM 客户", businessType = BusinessType.DELETE)
@DeleteMapping("/{customerIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] customerIds) {
return toAjax(iGearCustomerService.deleteWithValidByIds(Arrays.asList(customerIds), true));
}
}

View File

@@ -0,0 +1,102 @@
package com.gear.oa.controller;
import java.util.List;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import com.gear.common.annotation.RepeatSubmit;
import com.gear.common.annotation.Log;
import com.gear.common.core.controller.BaseController;
import com.gear.common.core.domain.PageQuery;
import com.gear.common.core.domain.R;
import com.gear.common.core.validate.AddGroup;
import com.gear.common.core.validate.EditGroup;
import com.gear.common.core.validate.QueryGroup;
import com.gear.common.enums.BusinessType;
import com.gear.common.utils.poi.ExcelUtil;
import com.gear.oa.domain.vo.GearJournalVo;
import com.gear.oa.domain.bo.GearJournalBo;
import com.gear.oa.service.IGearJournalService;
import com.gear.common.core.page.TableDataInfo;
/**
* 资金日记账
*
* @author Joshi
* @date 2025-09-02
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/oa/journal")
public class GearJournalController extends BaseController {
private final IGearJournalService iGearJournalService;
/**
* 查询资金日记账列表
*/
@GetMapping("/list")
public TableDataInfo<GearJournalVo> list(GearJournalBo bo, PageQuery pageQuery) {
return iGearJournalService.queryPageList(bo, pageQuery);
}
/**
* 导出资金日记账列表
*/
@Log(title = "资金日记账", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(GearJournalBo bo, HttpServletResponse response) {
List<GearJournalVo> list = iGearJournalService.queryList(bo);
ExcelUtil.exportExcel(list, "资金日记账", GearJournalVo.class, response);
}
/**
* 获取资金日记账详细信息
*
* @param journalId 主键
*/
@GetMapping("/{journalId}")
public R<GearJournalVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long journalId) {
return R.ok(iGearJournalService.queryById(journalId));
}
/**
* 新增资金日记账
*/
@Log(title = "资金日记账", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody GearJournalBo bo) {
return toAjax(iGearJournalService.insertByBo(bo));
}
/**
* 修改资金日记账
*/
@Log(title = "资金日记账", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody GearJournalBo bo) {
return toAjax(iGearJournalService.updateByBo(bo));
}
/**
* 删除资金日记账
*
* @param journalIds 主键串
*/
@Log(title = "资金日记账", businessType = BusinessType.DELETE)
@DeleteMapping("/{journalIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] journalIds) {
return toAjax(iGearJournalService.deleteWithValidByIds(Arrays.asList(journalIds), true));
}
}

View File

@@ -0,0 +1,109 @@
package com.gear.oa.controller;
import java.util.List;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import com.gear.common.annotation.RepeatSubmit;
import com.gear.common.annotation.Log;
import com.gear.common.core.controller.BaseController;
import com.gear.common.core.domain.PageQuery;
import com.gear.common.core.domain.R;
import com.gear.common.core.validate.AddGroup;
import com.gear.common.core.validate.EditGroup;
import com.gear.common.core.validate.QueryGroup;
import com.gear.common.enums.BusinessType;
import com.gear.common.utils.poi.ExcelUtil;
import com.gear.oa.domain.vo.GearOrderVo;
import com.gear.oa.domain.bo.GearOrderBo;
import com.gear.oa.service.IGearOrderService;
import com.gear.common.core.page.TableDataInfo;
/**
* 订单主
*
* @author Joshi
* @date 2025-09-02
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/oa/order")
public class GearOrderController extends BaseController {
private final IGearOrderService iGearOrderService;
/**
* 查询订单主列表
*/
@GetMapping("/list")
public TableDataInfo<GearOrderVo> list(GearOrderBo bo, PageQuery pageQuery) {
return iGearOrderService.queryPageList(bo, pageQuery);
}
/**
* order_status不是零就查出来
* 新接口 不是预订单的
*/
@GetMapping("/listByStatus")
public TableDataInfo<GearOrderVo> listByStatus(GearOrderBo bo, PageQuery pageQuery) {
return iGearOrderService.queryPageListByStatus(bo, pageQuery);
}
/**
* 导出订单主列表
*/
@Log(title = "订单主", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(GearOrderBo bo, HttpServletResponse response) {
List<GearOrderVo> list = iGearOrderService.queryList(bo);
ExcelUtil.exportExcel(list, "订单主", GearOrderVo.class, response);
}
/**
* 获取订单主详细信息
*
* @param orderId 主键
*/
@GetMapping("/{orderId}")
public R<GearOrderVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long orderId) {
return R.ok(iGearOrderService.queryById(orderId));
}
/**
* 新增订单主
*/
@Log(title = "订单主", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody GearOrderBo bo) {
return toAjax(iGearOrderService.insertByBo(bo));
}
/**
* 修改订单主
*/
@Log(title = "订单主", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody GearOrderBo bo) {
return toAjax(iGearOrderService.updateByBo(bo));
}
/**
* 删除订单主
*
* @param orderIds 主键串
*/
@Log(title = "订单主", businessType = BusinessType.DELETE)
@DeleteMapping("/{orderIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] orderIds) {
return toAjax(iGearOrderService.deleteWithValidByIds(Arrays.asList(orderIds), true));
}
}

View File

@@ -0,0 +1,109 @@
package com.gear.oa.controller;
import java.util.List;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import com.gear.common.annotation.RepeatSubmit;
import com.gear.common.annotation.Log;
import com.gear.common.core.controller.BaseController;
import com.gear.common.core.domain.PageQuery;
import com.gear.common.core.domain.R;
import com.gear.common.core.validate.AddGroup;
import com.gear.common.core.validate.EditGroup;
import com.gear.common.core.validate.QueryGroup;
import com.gear.common.enums.BusinessType;
import com.gear.common.utils.poi.ExcelUtil;
import com.gear.oa.domain.vo.GearOrderDetailVo;
import com.gear.oa.domain.bo.GearOrderDetailBo;
import com.gear.oa.service.IGearOrderDetailService;
import com.gear.common.core.page.TableDataInfo;
/**
* 订单明细
*
* @author Joshi
* @date 2025-09-02
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/oa/orderDetail")
public class GearOrderDetailController extends BaseController {
private final IGearOrderDetailService iGearOrderDetailService;
/**
* 根据订单ID查询订单明细列表
*/
@GetMapping("/listByOrderId/{orderId}")
public R<List<GearOrderDetailVo>> listByOrderId(@PathVariable Long orderId) {
List<GearOrderDetailVo> list = iGearOrderDetailService.queryListByOrderId(orderId);
return R.ok(list);
}
/**
* 查询订单明细列表
*/
@GetMapping("/list")
public TableDataInfo<GearOrderDetailVo> list(GearOrderDetailBo bo, PageQuery pageQuery) {
return iGearOrderDetailService.queryPageList(bo, pageQuery);
}
/**
* 导出订单明细列表
*/
@Log(title = "订单明细", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(GearOrderDetailBo bo, HttpServletResponse response) {
List<GearOrderDetailVo> list = iGearOrderDetailService.queryList(bo);
ExcelUtil.exportExcel(list, "订单明细", GearOrderDetailVo.class, response);
}
/**
* 获取订单明细详细信息
*
* @param detailId 主键
*/
@GetMapping("/{detailId}")
public R<GearOrderDetailVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long detailId) {
return R.ok(iGearOrderDetailService.queryById(detailId));
}
/**
* 新增订单明细
*/
@Log(title = "订单明细", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody GearOrderDetailBo bo) {
return toAjax(iGearOrderDetailService.insertByBo(bo));
}
/**
* 修改订单明细
*/
@Log(title = "订单明细", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody GearOrderDetailBo bo) {
return toAjax(iGearOrderDetailService.updateByBo(bo));
}
/**
* 删除订单明细
*
* @param detailIds 主键串
*/
@Log(title = "订单明细", businessType = BusinessType.DELETE)
@DeleteMapping("/{detailIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] detailIds) {
return toAjax(iGearOrderDetailService.deleteWithValidByIds(Arrays.asList(detailIds), true));
}
}

View File

@@ -0,0 +1,102 @@
package com.gear.oa.controller;
import java.util.List;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import com.gear.common.annotation.RepeatSubmit;
import com.gear.common.annotation.Log;
import com.gear.common.core.controller.BaseController;
import com.gear.common.core.domain.PageQuery;
import com.gear.common.core.domain.R;
import com.gear.common.core.validate.AddGroup;
import com.gear.common.core.validate.EditGroup;
import com.gear.common.core.validate.QueryGroup;
import com.gear.common.enums.BusinessType;
import com.gear.common.utils.poi.ExcelUtil;
import com.gear.oa.domain.vo.GearOtherIncomeVo;
import com.gear.oa.domain.bo.GearOtherIncomeBo;
import com.gear.oa.service.IGearOtherIncomeService;
import com.gear.common.core.page.TableDataInfo;
/**
* 其他收入
*
* @author Joshi
* @date 2025-09-02
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/oa/otherIncome")
public class GearOtherIncomeController extends BaseController {
private final IGearOtherIncomeService iGearOtherIncomeService;
/**
* 查询其他收入列表
*/
@GetMapping("/list")
public TableDataInfo<GearOtherIncomeVo> list(GearOtherIncomeBo bo, PageQuery pageQuery) {
return iGearOtherIncomeService.queryPageList(bo, pageQuery);
}
/**
* 导出其他收入列表
*/
@Log(title = "其他收入", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(GearOtherIncomeBo bo, HttpServletResponse response) {
List<GearOtherIncomeVo> list = iGearOtherIncomeService.queryList(bo);
ExcelUtil.exportExcel(list, "其他收入", GearOtherIncomeVo.class, response);
}
/**
* 获取其他收入详细信息
*
* @param otherIncomeId 主键
*/
@GetMapping("/{otherIncomeId}")
public R<GearOtherIncomeVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long otherIncomeId) {
return R.ok(iGearOtherIncomeService.queryById(otherIncomeId));
}
/**
* 新增其他收入
*/
@Log(title = "其他收入", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody GearOtherIncomeBo bo) {
return toAjax(iGearOtherIncomeService.insertByBo(bo));
}
/**
* 修改其他收入
*/
@Log(title = "其他收入", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody GearOtherIncomeBo bo) {
return toAjax(iGearOtherIncomeService.updateByBo(bo));
}
/**
* 删除其他收入
*
* @param otherIncomeIds 主键串
*/
@Log(title = "其他收入", businessType = BusinessType.DELETE)
@DeleteMapping("/{otherIncomeIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] otherIncomeIds) {
return toAjax(iGearOtherIncomeService.deleteWithValidByIds(Arrays.asList(otherIncomeIds), true));
}
}

View File

@@ -0,0 +1,110 @@
package com.gear.oa.controller;
import java.util.List;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import com.gear.common.annotation.RepeatSubmit;
import com.gear.common.annotation.Log;
import com.gear.common.core.controller.BaseController;
import com.gear.common.core.domain.PageQuery;
import com.gear.common.core.domain.R;
import com.gear.common.core.validate.AddGroup;
import com.gear.common.core.validate.EditGroup;
import com.gear.common.core.validate.QueryGroup;
import com.gear.common.enums.BusinessType;
import com.gear.common.utils.poi.ExcelUtil;
import com.gear.oa.domain.vo.GearPayableVo;
import com.gear.oa.domain.bo.GearPayableBo;
import com.gear.oa.service.IGearPayableService;
import com.gear.common.core.page.TableDataInfo;
/**
* 应付款管理(宽松版)
*
* @author Joshi
* @date 2025-09-02
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/oa/payable")
public class GearPayableController extends BaseController {
private final IGearPayableService iGearPayableService;
/**
* 查询应付款管理(宽松版)列表
*/
@GetMapping("/list")
public TableDataInfo<GearPayableVo> list(GearPayableBo bo, PageQuery pageQuery) {
return iGearPayableService.queryPageList(bo, pageQuery);
}
/**
* 导出应付款管理(宽松版)列表
*/
@Log(title = "应付款管理(宽松版)", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(GearPayableBo bo, HttpServletResponse response) {
List<GearPayableVo> list = iGearPayableService.queryList(bo);
ExcelUtil.exportExcel(list, "应付款管理(宽松版)", GearPayableVo.class, response);
}
/**
* 获取应付款管理(宽松版)详细信息
*
* @param payableId 主键
*/
@GetMapping("/{payableId}")
public R<GearPayableVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long payableId) {
return R.ok(iGearPayableService.queryById(payableId));
}
/**
* 新增应付款管理(宽松版)
*/
@Log(title = "应付款管理(宽松版)", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody GearPayableBo bo) {
return toAjax(iGearPayableService.insertByBo(bo));
}
/**
* 更新应付款已付金额 & 新增资金日记账
*/
@Log(title = "应付款管理(宽松版)", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PostMapping("/updatePaidAmount")
public R<Void> updatePaidAmount(@RequestBody GearPayableBo bo) {
return toAjax(iGearPayableService.updatePaidAmountAndAddJournal(bo));
}
/**
* 修改应付款管理(宽松版)
*/
@Log(title = "应付款管理(宽松版)", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody GearPayableBo bo) {
return toAjax(iGearPayableService.updateByBo(bo));
}
/**
* 删除应付款管理(宽松版)
*
* @param payableIds 主键串
*/
@Log(title = "应付款管理(宽松版)", businessType = BusinessType.DELETE)
@DeleteMapping("/{payableIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] payableIds) {
return toAjax(iGearPayableService.deleteWithValidByIds(Arrays.asList(payableIds), true));
}
}

View File

@@ -0,0 +1,110 @@
package com.gear.oa.controller;
import java.util.List;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import com.gear.common.annotation.RepeatSubmit;
import com.gear.common.annotation.Log;
import com.gear.common.core.controller.BaseController;
import com.gear.common.core.domain.PageQuery;
import com.gear.common.core.domain.R;
import com.gear.common.core.validate.AddGroup;
import com.gear.common.core.validate.EditGroup;
import com.gear.common.core.validate.QueryGroup;
import com.gear.common.enums.BusinessType;
import com.gear.common.utils.poi.ExcelUtil;
import com.gear.oa.domain.vo.GearReceivableVo;
import com.gear.oa.domain.bo.GearReceivableBo;
import com.gear.oa.service.IGearReceivableService;
import com.gear.common.core.page.TableDataInfo;
/**
* 应收款管理(宽松版)
*
* @author Joshi
* @date 2025-09-02
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/oa/receivable")
public class GearReceivableController extends BaseController {
private final IGearReceivableService iGearReceivableService;
/**
* 查询应收款管理(宽松版)列表
*/
@GetMapping("/list")
public TableDataInfo<GearReceivableVo> list(GearReceivableBo bo, PageQuery pageQuery) {
return iGearReceivableService.queryPageList(bo, pageQuery);
}
/**
* 导出应收款管理(宽松版)列表
*/
@Log(title = "应收款管理(宽松版)", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(GearReceivableBo bo, HttpServletResponse response) {
List<GearReceivableVo> list = iGearReceivableService.queryList(bo);
ExcelUtil.exportExcel(list, "应收款管理(宽松版)", GearReceivableVo.class, response);
}
/**
* 获取应收款管理(宽松版)详细信息
*
* @param receivableId 主键
*/
@GetMapping("/{receivableId}")
public R<GearReceivableVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long receivableId) {
return R.ok(iGearReceivableService.queryById(receivableId));
}
/**
* 新增应收款管理(宽松版)
*/
@Log(title = "应收款管理(宽松版)", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody GearReceivableBo bo) {
return toAjax(iGearReceivableService.insertByBo(bo));
}
/**
* 更新应收款已收金额 & 新增资金日记账
*/
@Log(title = "应收款管理(宽松版)", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PostMapping("/updatePaidAmount")
public R<Void> updatePaidAmount(@RequestBody GearReceivableBo bo) {
return toAjax(iGearReceivableService.updatePaidAmountAndAddJournal(bo));
}
/**
* 修改应收款管理(宽松版)
*/
@Log(title = "应收款管理(宽松版)", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody GearReceivableBo bo) {
return toAjax(iGearReceivableService.updateByBo(bo));
}
/**
* 删除应收款管理(宽松版)
*
* @param receivableIds 主键串
*/
@Log(title = "应收款管理(宽松版)", businessType = BusinessType.DELETE)
@DeleteMapping("/{receivableIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] receivableIds) {
return toAjax(iGearReceivableService.deleteWithValidByIds(Arrays.asList(receivableIds), true));
}
}

View File

@@ -0,0 +1,102 @@
package com.gear.oa.controller;
import java.util.List;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import com.gear.common.annotation.RepeatSubmit;
import com.gear.common.annotation.Log;
import com.gear.common.core.controller.BaseController;
import com.gear.common.core.domain.PageQuery;
import com.gear.common.core.domain.R;
import com.gear.common.core.validate.AddGroup;
import com.gear.common.core.validate.EditGroup;
import com.gear.common.core.validate.QueryGroup;
import com.gear.common.enums.BusinessType;
import com.gear.common.utils.poi.ExcelUtil;
import com.gear.oa.domain.vo.GearReturnExchangeVo;
import com.gear.oa.domain.bo.GearReturnExchangeBo;
import com.gear.oa.service.IGearReturnExchangeService;
import com.gear.common.core.page.TableDataInfo;
/**
* 退换货管理
*
* @author Joshi
* @date 2025-09-02
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/oa/returnExchange")
public class GearReturnExchangeController extends BaseController {
private final IGearReturnExchangeService iGearReturnExchangeService;
/**
* 查询退换货管理列表
*/
@GetMapping("/list")
public TableDataInfo<GearReturnExchangeVo> list(GearReturnExchangeBo bo, PageQuery pageQuery) {
return iGearReturnExchangeService.queryPageList(bo, pageQuery);
}
/**
* 导出退换货管理列表
*/
@Log(title = "退换货管理", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(GearReturnExchangeBo bo, HttpServletResponse response) {
List<GearReturnExchangeVo> list = iGearReturnExchangeService.queryList(bo);
ExcelUtil.exportExcel(list, "退换货管理", GearReturnExchangeVo.class, response);
}
/**
* 获取退换货管理详细信息
*
* @param returnExchangeId 主键
*/
@GetMapping("/{returnExchangeId}")
public R<GearReturnExchangeVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long returnExchangeId) {
return R.ok(iGearReturnExchangeService.queryById(returnExchangeId));
}
/**
* 新增退换货管理
*/
@Log(title = "退换货管理", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody GearReturnExchangeBo bo) {
return toAjax(iGearReturnExchangeService.insertByBo(bo));
}
/**
* 修改退换货管理
*/
@Log(title = "退换货管理", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody GearReturnExchangeBo bo) {
return toAjax(iGearReturnExchangeService.updateByBo(bo));
}
/**
* 删除退换货管理
*
* @param returnExchangeIds 主键串
*/
@Log(title = "退换货管理", businessType = BusinessType.DELETE)
@DeleteMapping("/{returnExchangeIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] returnExchangeIds) {
return toAjax(iGearReturnExchangeService.deleteWithValidByIds(Arrays.asList(returnExchangeIds), true));
}
}

View File

@@ -28,7 +28,7 @@ public class GearBomItem extends BaseEntity {
@TableId(value = "item_id")
private Long itemId;
/**
* 关联 wms_bom.bom_id
* 关联 Gear_bom.bom_id
*/
private Long bomId;
/**

View File

@@ -0,0 +1,114 @@
package com.gear.oa.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.gear.common.core.domain.BaseEntity;
/**
* CRM 客户对象 gear_customer
*
* @author Joshi
* @date 2025-09-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("gear_customer")
public class GearCustomer extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 编号,主键自增
*/
@TableId(value = "customer_id")
private Long customerId;
/**
* 客户名称
*/
private String name;
/**
* 跟进状态
*/
private Integer followUpStatus;
/**
* 最后跟进时间
*/
private Date contactLastTime;
/**
* 最后跟进内容
*/
private String contactLastContent;
/**
* 下次联系时间
*/
private Date contactNextTime;
/**
* 负责人的用户编号
*/
private Long ownerUserId;
/**
* 成为负责人的时间
*/
private Date ownerTime;
/**
* 成交状态
*/
private Integer dealStatus;
/**
* 手机
*/
private String mobile;
/**
* 电话
*/
private String telephone;
/**
* QQ
*/
private String qq;
/**
* 微信
*/
private String wechat;
/**
* 邮箱
*/
private String email;
/**
* 地区编号
*/
private Long areaId;
/**
* 详细地址
*/
private String detailAddress;
/**
* 所属行业
*/
private Long industryId;
/**
* 客户等级
*/
private Long level;
/**
* 客户来源
*/
private Long source;
/**
* 备注
*/
private String remark;
/**
* 是否删除
*/
@TableLogic
private Integer delFlag;
}

View File

@@ -0,0 +1,71 @@
package com.gear.oa.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
import java.math.BigDecimal;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.gear.common.core.domain.BaseEntity;
/**
* 资金日记账对象 gear_journal
*
* @author Joshi
* @date 2025-09-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("gear_journal")
public class GearJournal extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 主键ID
*/
@TableId(value = "journal_id")
private Long journalId;
/**
* 日期
*/
private Date journalDate;
/**
* 摘要
*/
private String summary;
/**
* 收支类型
*/
private String transType;
/**
* 对方户名
*/
private String counterpart;
/**
* 收入金额
*/
private BigDecimal incomeAmount;
/**
* 支出金额
*/
private BigDecimal expenseAmount;
/**
* 余额
*/
private BigDecimal balanceAmount;
/**
* 备注
*/
private String remark;
/**
* 删除标志0正常 1删除
*/
@TableLogic
private Integer delFlag;
}

View File

@@ -0,0 +1,69 @@
package com.gear.oa.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
import java.math.BigDecimal;
import java.math.BigDecimal;
import com.gear.common.core.domain.BaseEntity;
/**
* 订单主对象 gear_order
*
* @author Joshi
* @date 2025-09-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("gear_order")
public class GearOrder extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 订单ID
*/
@TableId(value = "order_id")
private Long orderId;
/**
* 订单编号
*/
private String orderCode;
/**
* 客户ID
*/
private Long customerId;
/**
* 销售经理
*/
private String salesManager;
/**
* 订单状态0=新建1=生产中2=已完成3=已取消)
*/
private Integer orderStatus;
/**
* 0内贸, 1外贸
*/
private Integer tradeType;
/**
* 备注
*/
private String remark;
/**
* 删除标志0=正常1=已删除)
*/
@TableLogic
private Integer delFlag;
/**
* 含税金额
*/
private BigDecimal taxAmount;
/**
* 无税金额
*/
private BigDecimal noTaxAmount;
}

View File

@@ -0,0 +1,65 @@
package com.gear.oa.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
import java.math.BigDecimal;
import java.math.BigDecimal;
import com.gear.common.core.domain.BaseEntity;
/**
* 订单明细对象 gear_order_detail
*
* @author Joshi
* @date 2025-09-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("gear_order_detail")
public class GearOrderDetail extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 明细ID
*/
@TableId(value = "detail_id")
private Long detailId;
/**
* 订单ID
*/
private Long orderId;
/**
* 产品ID
*/
private Long productId;
/**
* 产品数量
*/
private Long quantity;
/**
* 单位
*/
private String unit;
/**
* 备注
*/
private String remark;
/**
* 删除标志0=正常1=已删除)
*/
@TableLogic
private Integer delFlag;
/**
* 含税单价
*/
private BigDecimal taxPrice;
/**
* 无税单价
*/
private BigDecimal noTaxPrice;
}

View File

@@ -0,0 +1,59 @@
package com.gear.oa.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
import java.math.BigDecimal;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.gear.common.core.domain.BaseEntity;
/**
* 其他收入对象 gear_other_income
*
* @author Joshi
* @date 2025-09-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("gear_other_income")
public class GearOtherIncome extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 其他收入ID主键
*/
@TableId(value = "other_income_id")
private Long otherIncomeId;
/**
* 收入日期
*/
private Date incomeDate;
/**
* 收入类型
*/
private String incomeType;
/**
* 收入金额
*/
private BigDecimal amount;
/**
* 收入来源
*/
private String source;
/**
* 备注
*/
private String remark;
/**
* 删除标志0=正常1=已删除)
*/
@TableLogic
private Integer delFlag;
}

View File

@@ -0,0 +1,71 @@
package com.gear.oa.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
import java.math.BigDecimal;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.gear.common.core.domain.BaseEntity;
/**
* 应付款管理(宽松版)对象 gear_payable
*
* @author Joshi
* @date 2025-09-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("gear_payable")
public class GearPayable extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 应付ID主键
*/
@TableId(value = "payable_id")
private Long payableId;
/**
* 供应商ID
*/
private Long supplierId;
/**
* 订单ID
*/
private Long orderId;
/**
* 到期日
*/
private Date dueDate;
/**
* 应付金额(可为负数用于调整)
*/
private BigDecimal amount;
/**
* 已付金额(可为负数用于冲销)
*/
private BigDecimal paidAmount;
/**
* 未付金额
*/
private BigDecimal balanceAmount;
/**
* 状态
*/
private String status;
/**
* 删除标志0=正常1=已删除)
*/
@TableLogic
private Integer delFlag;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,71 @@
package com.gear.oa.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
import java.math.BigDecimal;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.gear.common.core.domain.BaseEntity;
/**
* 应收款管理(宽松版)对象 gear_receivable
*
* @author Joshi
* @date 2025-09-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("gear_receivable")
public class GearReceivable extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 应收ID主键
*/
@TableId(value = "receivable_id")
private Long receivableId;
/**
* 客户ID
*/
private Long customerId;
/**
* 订单ID
*/
private Long orderId;
/**
* 到期日
*/
private Date dueDate;
/**
* 应收金额(可为负数用于调整)
*/
private BigDecimal amount;
/**
* 已收金额(可为负数用于冲销)
*/
private BigDecimal paidAmount;
/**
* 未收金额
*/
private BigDecimal balanceAmount;
/**
* 状态
*/
private String status;
/**
* 删除标志0=正常1=已删除)
*/
@TableLogic
private Integer delFlag;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,61 @@
package com.gear.oa.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
import java.math.BigDecimal;
import java.math.BigDecimal;
import com.gear.common.core.domain.BaseEntity;
/**
* 退换货管理对象 gear_return_exchange
*
* @author Joshi
* @date 2025-09-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("gear_return_exchange")
public class GearReturnExchange extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 退换货ID主键
*/
@TableId(value = "return_exchange_id")
private Long returnExchangeId;
/**
* 关联订单明细ID
*/
private Long orderDetailId;
/**
* 客户ID
*/
private Long customerId;
/**
* 类型
*/
private String type;
/**
* 原因
*/
private String reason;
/**
* 状态
*/
private String status;
/**
* 涉及金额
*/
private BigDecimal amount;
/**
* 删除标志0=正常1=已删除)
*/
@TableLogic
private Integer delFlag;
}

View File

@@ -27,7 +27,7 @@ public class GearBomItemBo extends BaseEntity {
private Long itemId;
/**
* 关联 wms_bom.bom_id
* 关联 Gear_bom.bom_id
*/
private Long bomId;

View File

@@ -0,0 +1,134 @@
package com.gear.oa.domain.bo;
import com.gear.common.core.validate.AddGroup;
import com.gear.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;
import java.util.Date;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.gear.common.core.domain.BaseEntity;
import org.springframework.format.annotation.DateTimeFormat;
/**
* CRM 客户业务对象 gear_customer
*
* @author Joshi
* @date 2025-09-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class GearCustomerBo extends BaseEntity {
/**
* 编号,主键自增
*/
private Long customerId;
/**
* 客户名称
*/
private String name;
/**
* 跟进状态
*/
private Integer followUpStatus;
/**
* 最后跟进时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date contactLastTime;
/**
* 最后跟进内容
*/
private String contactLastContent;
/**
* 下次联系时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date contactNextTime;
/**
* 负责人的用户编号
*/
private Long ownerUserId;
/**
* 成为负责人的时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date ownerTime;
/**
* 成交状态
*/
private Integer dealStatus;
/**
* 手机
*/
private String mobile;
/**
* 电话
*/
private String telephone;
/**
* QQ
*/
private String qq;
/**
* 微信
*/
private String wechat;
/**
* 邮箱
*/
private String email;
/**
* 地区编号
*/
private Long areaId;
/**
* 详细地址
*/
private String detailAddress;
/**
* 所属行业
*/
private Long industryId;
/**
* 客户等级
*/
private Long level;
/**
* 客户来源
*/
private Long source;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,76 @@
package com.gear.oa.domain.bo;
import com.gear.common.core.validate.AddGroup;
import com.gear.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;
import java.util.Date;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.gear.common.core.domain.BaseEntity;
import org.springframework.format.annotation.DateTimeFormat;
/**
* 资金日记账业务对象 gear_journal
*
* @author Joshi
* @date 2025-09-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class GearJournalBo extends BaseEntity {
/**
* 主键ID
*/
private Long journalId;
/**
* 日期
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date journalDate;
/**
* 摘要
*/
private String summary;
/**
* 收支类型
*/
private String transType;
/**
* 对方户名
*/
private String counterpart;
/**
* 收入金额
*/
private BigDecimal incomeAmount;
/**
* 支出金额
*/
private BigDecimal expenseAmount;
/**
* 余额
*/
private BigDecimal balanceAmount;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,72 @@
package com.gear.oa.domain.bo;
import com.gear.common.core.validate.AddGroup;
import com.gear.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import com.gear.common.core.domain.BaseEntity;
/**
* 订单主业务对象 gear_order
*
* @author Joshi
* @date 2025-09-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class GearOrderBo extends BaseEntity {
/**
* 订单ID
*/
private Long orderId;
/**
* 订单编号
*/
private String orderCode;
/**
* 客户ID
*/
private Long customerId;
/**
* 销售经理
*/
private String salesManager;
/**
* 订单状态0=新建1=生产中2=已完成3=已取消)
*/
private Integer orderStatus;
/**
* 0内贸, 1外贸
*/
private Integer tradeType;
/**
* 备注
*/
private String remark;
/**
* 含税金额
*/
private BigDecimal taxAmount;
/**
* 无税金额
*/
private BigDecimal noTaxAmount;
}

View File

@@ -0,0 +1,67 @@
package com.gear.oa.domain.bo;
import com.gear.common.core.validate.AddGroup;
import com.gear.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import com.gear.common.core.domain.BaseEntity;
/**
* 订单明细业务对象 gear_order_detail
*
* @author Joshi
* @date 2025-09-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class GearOrderDetailBo extends BaseEntity {
/**
* 明细ID
*/
private Long detailId;
/**
* 订单ID
*/
private Long orderId;
/**
* 产品ID
*/
private Long productId;
/**
* 产品数量
*/
private Long quantity;
/**
* 单位
*/
private String unit;
/**
* 备注
*/
private String remark;
/**
* 含税单价
*/
private BigDecimal taxPrice;
/**
* 无税单价
*/
private BigDecimal noTaxPrice;
}

View File

@@ -0,0 +1,61 @@
package com.gear.oa.domain.bo;
import com.gear.common.core.validate.AddGroup;
import com.gear.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.gear.common.core.domain.BaseEntity;
/**
* 其他收入业务对象 gear_other_income
*
* @author Joshi
* @date 2025-09-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class GearOtherIncomeBo extends BaseEntity {
/**
* 其他收入ID主键
*/
private Long otherIncomeId;
/**
* 收入日期
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date incomeDate;
/**
* 收入类型
*/
private String incomeType;
/**
* 收入金额
*/
private BigDecimal amount;
/**
* 收入来源
*/
private String source;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,76 @@
package com.gear.oa.domain.bo;
import com.gear.common.core.validate.AddGroup;
import com.gear.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.gear.common.core.domain.BaseEntity;
/**
* 应付款管理(宽松版)业务对象 gear_payable
*
* @author Joshi
* @date 2025-09-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class GearPayableBo extends BaseEntity {
/**
* 应付ID主键
*/
private Long payableId;
/**
* 供应商ID
*/
private Long supplierId;
/**
* 订单ID
*/
private Long orderId;
/**
* 到期日
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date dueDate;
/**
* 应付金额(可为负数用于调整)
*/
private BigDecimal amount;
/**
* 已付金额(可为负数用于冲销)
*/
private BigDecimal paidAmount;
/**
* 未付金额
*/
private BigDecimal balanceAmount;
/**
* 状态
*/
private String status;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,76 @@
package com.gear.oa.domain.bo;
import com.gear.common.core.validate.AddGroup;
import com.gear.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.gear.common.core.domain.BaseEntity;
/**
* 应收款管理(宽松版)业务对象 gear_receivable
*
* @author Joshi
* @date 2025-09-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class GearReceivableBo extends BaseEntity {
/**
* 应收ID主键
*/
private Long receivableId;
/**
* 客户ID
*/
private Long customerId;
/**
* 订单ID
*/
private Long orderId;
/**
* 到期日
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date dueDate;
/**
* 应收金额(可为负数用于调整)
*/
private BigDecimal amount;
/**
* 已收金额(可为负数用于冲销)
*/
private BigDecimal paidAmount;
/**
* 未收金额
*/
private BigDecimal balanceAmount;
/**
* 状态
*/
private String status;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,62 @@
package com.gear.oa.domain.bo;
import com.gear.common.core.validate.AddGroup;
import com.gear.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import com.gear.common.core.domain.BaseEntity;
/**
* 退换货管理业务对象 gear_return_exchange
*
* @author Joshi
* @date 2025-09-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class GearReturnExchangeBo extends BaseEntity {
/**
* 退换货ID主键
*/
private Long returnExchangeId;
/**
* 关联订单明细ID
*/
private Long orderDetailId;
/**
* 客户ID
*/
private Long customerId;
/**
* 类型
*/
private String type;
/**
* 原因
*/
private String reason;
/**
* 状态
*/
private String status;
/**
* 涉及金额
*/
private BigDecimal amount;
}

View File

@@ -28,9 +28,9 @@ public class GearBomItemVo {
private Long itemId;
/**
* 关联 wms_bom.bom_id
* 关联 Gear_bom.bom_id
*/
@ExcelProperty(value = "关联 wms_bom.bom_id")
@ExcelProperty(value = "关联 Gear_bom.bom_id")
private Long bomId;
/**

View File

@@ -0,0 +1,155 @@
package com.gear.oa.domain.vo;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.gear.common.annotation.ExcelDictFormat;
import com.gear.common.convert.ExcelDictConvert;
import lombok.Data;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
/**
* CRM 客户视图对象 gear_customer
*
* @author Joshi
* @date 2025-09-02
*/
@Data
@ExcelIgnoreUnannotated
public class GearCustomerVo {
private static final long serialVersionUID = 1L;
/**
* 编号,主键自增
*/
@ExcelProperty(value = "编号,主键自增")
private Long customerId;
/**
* 客户名称
*/
@ExcelProperty(value = "客户名称")
private String name;
/**
* 跟进状态
*/
@ExcelProperty(value = "跟进状态")
private Integer followUpStatus;
/**
* 最后跟进时间
*/
@ExcelProperty(value = "最后跟进时间")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date contactLastTime;
/**
* 最后跟进内容
*/
@ExcelProperty(value = "最后跟进内容")
private String contactLastContent;
/**
* 下次联系时间
*/
@ExcelProperty(value = "下次联系时间")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date contactNextTime;
/**
* 负责人的用户编号
*/
@ExcelProperty(value = "负责人的用户编号")
private Long ownerUserId;
/**
* 成为负责人的时间
*/
@ExcelProperty(value = "成为负责人的时间")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date ownerTime;
/**
* 成交状态
*/
@ExcelProperty(value = "成交状态")
private Integer dealStatus;
/**
* 手机
*/
@ExcelProperty(value = "手机")
private String mobile;
/**
* 电话
*/
@ExcelProperty(value = "电话")
private String telephone;
/**
* QQ
*/
@ExcelProperty(value = "QQ")
private String qq;
/**
* 微信
*/
@ExcelProperty(value = "微信")
private String wechat;
/**
* 邮箱
*/
@ExcelProperty(value = "邮箱")
private String email;
/**
* 地区编号
*/
@ExcelProperty(value = "地区编号")
private Long areaId;
/**
* 详细地址
*/
@ExcelProperty(value = "详细地址")
private String detailAddress;
/**
* 所属行业
*/
@ExcelProperty(value = "所属行业")
private Long industryId;
/**
* 客户等级
*/
@ExcelProperty(value = "客户等级")
private Long level;
/**
* 客户来源
*/
@ExcelProperty(value = "客户来源")
private Long source;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}

View File

@@ -0,0 +1,86 @@
package com.gear.oa.domain.vo;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.gear.common.annotation.ExcelDictFormat;
import com.gear.common.convert.ExcelDictConvert;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
* 资金日记账视图对象 gear_journal
*
* @author Joshi
* @date 2025-09-02
*/
@Data
@ExcelIgnoreUnannotated
public class GearJournalVo {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long journalId;
/**
* 日期
*/
@ExcelProperty(value = "日期")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date journalDate;
/**
* 摘要
*/
@ExcelProperty(value = "摘要")
private String summary;
/**
* 收支类型
*/
@ExcelProperty(value = "收支类型")
private String transType;
/**
* 对方户名
*/
@ExcelProperty(value = "对方户名")
private String counterpart;
/**
* 收入金额
*/
@ExcelProperty(value = "收入金额")
private BigDecimal incomeAmount;
/**
* 支出金额
*/
@ExcelProperty(value = "支出金额")
private BigDecimal expenseAmount;
/**
* 余额
*/
@ExcelProperty(value = "余额")
private BigDecimal balanceAmount;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}

View File

@@ -0,0 +1,79 @@
package com.gear.oa.domain.vo;
import java.math.BigDecimal;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.gear.common.annotation.ExcelDictFormat;
import com.gear.common.convert.ExcelDictConvert;
import lombok.Data;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
/**
* 订单明细视图对象 gear_order_detail
*
* @author Joshi
* @date 2025-09-02
*/
@Data
@ExcelIgnoreUnannotated
public class GearOrderDetailVo {
private static final long serialVersionUID = 1L;
/**
* 明细ID
*/
@ExcelProperty(value = "明细ID")
private Long detailId;
/**
* 订单ID
*/
@ExcelProperty(value = "订单ID")
private Long orderId;
/**
* 产品ID
*/
@ExcelProperty(value = "产品ID")
private Long productId;
/**
* 产品数量
*/
@ExcelProperty(value = "产品数量")
private Long quantity;
/**
* 单位
*/
@ExcelProperty(value = "单位")
private String unit;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 含税单价
*/
@ExcelProperty(value = "含税单价")
private BigDecimal taxPrice;
/**
* 无税单价
*/
@ExcelProperty(value = "无税单价")
private BigDecimal noTaxPrice;
//产品名称和产品code
private String productName;
private String productCode;
}

View File

@@ -0,0 +1,84 @@
package com.gear.oa.domain.vo;
import java.math.BigDecimal;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.gear.common.annotation.ExcelDictFormat;
import com.gear.common.convert.ExcelDictConvert;
import lombok.Data;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
/**
* 订单主视图对象 gear_order
*
* @author Joshi
* @date 2025-09-02
*/
@Data
@ExcelIgnoreUnannotated
public class GearOrderVo {
private static final long serialVersionUID = 1L;
/**
* 订单ID
*/
@ExcelProperty(value = "订单ID")
private Long orderId;
/**
* 订单编号
*/
@ExcelProperty(value = "订单编号")
private String orderCode;
/**
* 客户ID
*/
@ExcelProperty(value = "客户ID")
private Long customerId;
/**
* 销售经理
*/
@ExcelProperty(value = "销售经理")
private String salesManager;
/**
* 订单状态0=新建1=生产中2=已完成3=已取消)
*/
@ExcelProperty(value = "订单状态", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "0==新建1=生产中2=已完成3=已取消")
private Integer orderStatus;
/**
* 0内贸, 1外贸
*/
@ExcelProperty(value = "0内贸, 1外贸")
private Integer tradeType;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 含税金额
*/
@ExcelProperty(value = "含税金额")
private BigDecimal taxAmount;
/**
* 无税金额
*/
@ExcelProperty(value = "无税金额")
private BigDecimal noTaxAmount;
private String customerName;
}

View File

@@ -0,0 +1,69 @@
package com.gear.oa.domain.vo;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.gear.common.annotation.ExcelDictFormat;
import com.gear.common.convert.ExcelDictConvert;
import lombok.Data;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
/**
* 其他收入视图对象 gear_other_income
*
* @author Joshi
* @date 2025-09-02
*/
@Data
@ExcelIgnoreUnannotated
public class GearOtherIncomeVo {
private static final long serialVersionUID = 1L;
/**
* 其他收入ID主键
*/
@ExcelProperty(value = "其他收入ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "主=键")
private Long otherIncomeId;
/**
* 收入日期
*/
@ExcelProperty(value = "收入日期")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date incomeDate;
/**
* 收入类型
*/
@ExcelProperty(value = "收入类型")
private String incomeType;
/**
* 收入金额
*/
@ExcelProperty(value = "收入金额")
private BigDecimal amount;
/**
* 收入来源
*/
@ExcelProperty(value = "收入来源")
private String source;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}

View File

@@ -0,0 +1,91 @@
package com.gear.oa.domain.vo;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.gear.common.annotation.ExcelDictFormat;
import com.gear.common.convert.ExcelDictConvert;
import lombok.Data;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
/**
* 应付款管理(宽松版)视图对象 gear_payable
*
* @author Joshi
* @date 2025-09-02
*/
@Data
@ExcelIgnoreUnannotated
public class GearPayableVo {
private static final long serialVersionUID = 1L;
/**
* 应付ID主键
*/
@ExcelProperty(value = "应付ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "主=键")
private Long payableId;
/**
* 供应商ID
*/
@ExcelProperty(value = "供应商ID")
private Long supplierId;
/**
* 订单ID
*/
@ExcelProperty(value = "订单ID")
private Long orderId;
/**
* 到期日
*/
@ExcelProperty(value = "到期日")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date dueDate;
/**
* 应付金额(可为负数用于调整)
*/
@ExcelProperty(value = "应付金额", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "可=为负数用于调整")
private BigDecimal amount;
/**
* 已付金额(可为负数用于冲销)
*/
@ExcelProperty(value = "已付金额", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "可=为负数用于冲销")
private BigDecimal paidAmount;
/**
* 未付金额
*/
@ExcelProperty(value = "未付金额")
private BigDecimal balanceAmount;
/**
* 状态
*/
@ExcelProperty(value = "状态")
private String status;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
//供应商名称
private String supplierName;
}

View File

@@ -0,0 +1,90 @@
package com.gear.oa.domain.vo;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.gear.common.annotation.ExcelDictFormat;
import com.gear.common.convert.ExcelDictConvert;
import lombok.Data;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
/**
* 应收款管理(宽松版)视图对象 gear_receivable
*
* @author Joshi
* @date 2025-09-02
*/
@Data
@ExcelIgnoreUnannotated
public class GearReceivableVo {
private static final long serialVersionUID = 1L;
/**
* 应收ID主键
*/
@ExcelProperty(value = "应收ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "主=键")
private Long receivableId;
/**
* 客户ID
*/
@ExcelProperty(value = "客户ID")
private Long customerId;
/**
* 订单ID
*/
@ExcelProperty(value = "订单ID")
private Long orderId;
/**
* 到期日
*/
@ExcelProperty(value = "到期日")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date dueDate;
/**
* 应收金额(可为负数用于调整)
*/
@ExcelProperty(value = "应收金额", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "可=为负数用于调整")
private BigDecimal amount;
/**
* 已收金额(可为负数用于冲销)
*/
@ExcelProperty(value = "已收金额", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "可=为负数用于冲销")
private BigDecimal paidAmount;
/**
* 未收金额
*/
@ExcelProperty(value = "未收金额")
private BigDecimal balanceAmount;
/**
* 状态
*/
@ExcelProperty(value = "状态")
private String status;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
//客户名称
private String customerName;
}

View File

@@ -0,0 +1,71 @@
package com.gear.oa.domain.vo;
import java.math.BigDecimal;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.gear.common.annotation.ExcelDictFormat;
import com.gear.common.convert.ExcelDictConvert;
import lombok.Data;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
/**
* 退换货管理视图对象 gear_return_exchange
*
* @author Joshi
* @date 2025-09-02
*/
@Data
@ExcelIgnoreUnannotated
public class GearReturnExchangeVo {
private static final long serialVersionUID = 1L;
/**
* 退换货ID主键
*/
@ExcelProperty(value = "退换货ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "主=键")
private Long returnExchangeId;
/**
* 关联订单明细ID
*/
@ExcelProperty(value = "关联订单明细ID")
private Long orderDetailId;
/**
* 客户ID
*/
@ExcelProperty(value = "客户ID")
private Long customerId;
/**
* 类型
*/
@ExcelProperty(value = "类型")
private String type;
/**
* 原因
*/
@ExcelProperty(value = "原因")
private String reason;
/**
* 状态
*/
@ExcelProperty(value = "状态")
private String status;
/**
* 涉及金额
*/
@ExcelProperty(value = "涉及金额")
private BigDecimal amount;
}

View File

@@ -0,0 +1,15 @@
package com.gear.oa.mapper;
import com.gear.oa.domain.GearCustomer;
import com.gear.oa.domain.vo.GearCustomerVo;
import com.gear.common.core.mapper.BaseMapperPlus;
/**
* CRM 客户Mapper接口
*
* @author Joshi
* @date 2025-09-02
*/
public interface GearCustomerMapper extends BaseMapperPlus<GearCustomerMapper, GearCustomer, GearCustomerVo> {
}

View File

@@ -0,0 +1,18 @@
package com.gear.oa.mapper;
import com.gear.oa.domain.GearJournal;
import com.gear.oa.domain.vo.GearJournalVo;
import com.gear.common.core.mapper.BaseMapperPlus;
import java.math.BigDecimal;
/**
* 资金日记账Mapper接口
*
* @author Joshi
* @date 2025-09-02
*/
public interface GearJournalMapper extends BaseMapperPlus<GearJournalMapper, GearJournal, GearJournalVo> {
BigDecimal getLastBalance();
}

View File

@@ -0,0 +1,24 @@
package com.gear.oa.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gear.oa.domain.GearOrderDetail;
import com.gear.oa.domain.vo.GearOrderDetailVo;
import com.gear.common.core.mapper.BaseMapperPlus;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 订单明细Mapper接口
*
* @author Joshi
* @date 2025-09-02
*/
public interface GearOrderDetailMapper extends BaseMapperPlus<GearOrderDetailMapper, GearOrderDetail, GearOrderDetailVo> {
List<GearOrderDetailVo> selectVoListByOrderId(Long orderId);
Page<GearOrderDetailVo> selectVoPagePlus(Page<?> page, @Param("ew") Wrapper<GearOrderDetail> wrapper);
}

View File

@@ -0,0 +1,20 @@
package com.gear.oa.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gear.oa.domain.GearOrder;
import com.gear.oa.domain.vo.GearOrderVo;
import com.gear.common.core.mapper.BaseMapperPlus;
import org.apache.ibatis.annotations.Param;
/**
* 订单主Mapper接口
*
* @author Joshi
* @date 2025-09-02
*/
public interface GearOrderMapper extends BaseMapperPlus<GearOrderMapper, GearOrder, GearOrderVo> {
Page<GearOrderVo> selectVoPlusPage(Page<?> page, @Param("ew") Wrapper<GearOrder> wrapper);
}

View File

@@ -0,0 +1,15 @@
package com.gear.oa.mapper;
import com.gear.oa.domain.GearOtherIncome;
import com.gear.oa.domain.vo.GearOtherIncomeVo;
import com.gear.common.core.mapper.BaseMapperPlus;
/**
* 其他收入Mapper接口
*
* @author Joshi
* @date 2025-09-02
*/
public interface GearOtherIncomeMapper extends BaseMapperPlus<GearOtherIncomeMapper, GearOtherIncome, GearOtherIncomeVo> {
}

View File

@@ -0,0 +1,20 @@
package com.gear.oa.mapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gear.oa.domain.GearPayable;
import com.gear.oa.domain.vo.GearPayableVo;
import com.gear.common.core.mapper.BaseMapperPlus;
import org.apache.ibatis.annotations.Param;
/**
* 应付款管理宽松版Mapper接口
*
* @author Joshi
* @date 2025-09-02
*/
public interface GearPayableMapper extends BaseMapperPlus<GearPayableMapper, GearPayable, GearPayableVo> {
Page<GearPayableVo> selectVoPagePlus(Page<Object> build, @Param("ew") QueryWrapper<GearPayable> lqw);
}

View File

@@ -0,0 +1,19 @@
package com.gear.oa.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gear.oa.domain.GearReceivable;
import com.gear.oa.domain.vo.GearReceivableVo;
import com.gear.common.core.mapper.BaseMapperPlus;
import org.apache.ibatis.annotations.Param;
/**
* 应收款管理宽松版Mapper接口
*
* @author Joshi
* @date 2025-09-02
*/
public interface GearReceivableMapper extends BaseMapperPlus<GearReceivableMapper, GearReceivable, GearReceivableVo> {
Page<GearReceivableVo> selectVoPagePlus(Page<Object> build, @Param("ew") QueryWrapper<GearReceivable> lqw);
}

View File

@@ -0,0 +1,15 @@
package com.gear.oa.mapper;
import com.gear.oa.domain.GearReturnExchange;
import com.gear.oa.domain.vo.GearReturnExchangeVo;
import com.gear.common.core.mapper.BaseMapperPlus;
/**
* 退换货管理Mapper接口
*
* @author Joshi
* @date 2025-09-02
*/
public interface GearReturnExchangeMapper extends BaseMapperPlus<GearReturnExchangeMapper, GearReturnExchange, GearReturnExchangeVo> {
}

View File

@@ -0,0 +1,49 @@
package com.gear.oa.service;
import com.gear.oa.domain.GearCustomer;
import com.gear.oa.domain.vo.GearCustomerVo;
import com.gear.oa.domain.bo.GearCustomerBo;
import com.gear.common.core.page.TableDataInfo;
import com.gear.common.core.domain.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* CRM 客户Service接口
*
* @author Joshi
* @date 2025-09-02
*/
public interface IGearCustomerService {
/**
* 查询CRM 客户
*/
GearCustomerVo queryById(Long customerId);
/**
* 查询CRM 客户列表
*/
TableDataInfo<GearCustomerVo> queryPageList(GearCustomerBo bo, PageQuery pageQuery);
/**
* 查询CRM 客户列表
*/
List<GearCustomerVo> queryList(GearCustomerBo bo);
/**
* 新增CRM 客户
*/
Boolean insertByBo(GearCustomerBo bo);
/**
* 修改CRM 客户
*/
Boolean updateByBo(GearCustomerBo bo);
/**
* 校验并批量删除CRM 客户信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@@ -0,0 +1,53 @@
package com.gear.oa.service;
import com.gear.oa.domain.GearJournal;
import com.gear.oa.domain.vo.GearJournalVo;
import com.gear.oa.domain.bo.GearJournalBo;
import com.gear.common.core.page.TableDataInfo;
import com.gear.common.core.domain.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* 资金日记账Service接口
*
* @author Joshi
* @date 2025-09-02
*/
public interface IGearJournalService {
/**
* 查询资金日记账
*/
GearJournalVo queryById(Long journalId);
/**
* 查询资金日记账列表
*/
TableDataInfo<GearJournalVo> queryPageList(GearJournalBo bo, PageQuery pageQuery);
/**
* 查询资金日记账列表
*/
List<GearJournalVo> queryList(GearJournalBo bo);
/**
* 新增资金日记账
*/
Boolean insertByBo(GearJournalBo bo);
/**
* 修改资金日记账
*/
Boolean updateByBo(GearJournalBo bo);
/**
* 校验并批量删除资金日记账信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 计算余额
*/
void computeBalance(GearJournal journal);
}

View File

@@ -0,0 +1,51 @@
package com.gear.oa.service;
import com.gear.oa.domain.GearOrderDetail;
import com.gear.oa.domain.vo.GearOrderDetailVo;
import com.gear.oa.domain.bo.GearOrderDetailBo;
import com.gear.common.core.page.TableDataInfo;
import com.gear.common.core.domain.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* 订单明细Service接口
*
* @author Joshi
* @date 2025-09-02
*/
public interface IGearOrderDetailService {
/**
* 查询订单明细
*/
GearOrderDetailVo queryById(Long detailId);
/**
* 查询订单明细列表
*/
TableDataInfo<GearOrderDetailVo> queryPageList(GearOrderDetailBo bo, PageQuery pageQuery);
/**
* 查询订单明细列表
*/
List<GearOrderDetailVo> queryList(GearOrderDetailBo bo);
/**
* 新增订单明细
*/
Boolean insertByBo(GearOrderDetailBo bo);
/**
* 修改订单明细
*/
Boolean updateByBo(GearOrderDetailBo bo);
/**
* 校验并批量删除订单明细信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
List<GearOrderDetailVo> queryListByOrderId(Long orderId);
}

View File

@@ -0,0 +1,51 @@
package com.gear.oa.service;
import com.gear.oa.domain.GearOrder;
import com.gear.oa.domain.vo.GearOrderVo;
import com.gear.oa.domain.bo.GearOrderBo;
import com.gear.common.core.page.TableDataInfo;
import com.gear.common.core.domain.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* 订单主Service接口
*
* @author Joshi
* @date 2025-09-02
*/
public interface IGearOrderService {
/**
* 查询订单主
*/
GearOrderVo queryById(Long orderId);
/**
* 查询订单主列表
*/
TableDataInfo<GearOrderVo> queryPageList(GearOrderBo bo, PageQuery pageQuery);
/**
* 查询订单主列表
*/
List<GearOrderVo> queryList(GearOrderBo bo);
/**
* 新增订单主
*/
Boolean insertByBo(GearOrderBo bo);
/**
* 修改订单主
*/
Boolean updateByBo(GearOrderBo bo);
/**
* 校验并批量删除订单主信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
TableDataInfo<GearOrderVo> queryPageListByStatus(GearOrderBo bo, PageQuery pageQuery);
}

View File

@@ -0,0 +1,49 @@
package com.gear.oa.service;
import com.gear.oa.domain.GearOtherIncome;
import com.gear.oa.domain.vo.GearOtherIncomeVo;
import com.gear.oa.domain.bo.GearOtherIncomeBo;
import com.gear.common.core.page.TableDataInfo;
import com.gear.common.core.domain.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* 其他收入Service接口
*
* @author Joshi
* @date 2025-09-02
*/
public interface IGearOtherIncomeService {
/**
* 查询其他收入
*/
GearOtherIncomeVo queryById(Long otherIncomeId);
/**
* 查询其他收入列表
*/
TableDataInfo<GearOtherIncomeVo> queryPageList(GearOtherIncomeBo bo, PageQuery pageQuery);
/**
* 查询其他收入列表
*/
List<GearOtherIncomeVo> queryList(GearOtherIncomeBo bo);
/**
* 新增其他收入
*/
Boolean insertByBo(GearOtherIncomeBo bo);
/**
* 修改其他收入
*/
Boolean updateByBo(GearOtherIncomeBo bo);
/**
* 校验并批量删除其他收入信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@@ -0,0 +1,51 @@
package com.gear.oa.service;
import com.gear.oa.domain.GearPayable;
import com.gear.oa.domain.vo.GearPayableVo;
import com.gear.oa.domain.bo.GearPayableBo;
import com.gear.common.core.page.TableDataInfo;
import com.gear.common.core.domain.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* 应付款管理宽松版Service接口
*
* @author Joshi
* @date 2025-09-02
*/
public interface IGearPayableService {
/**
* 查询应付款管理(宽松版)
*/
GearPayableVo queryById(Long payableId);
/**
* 查询应付款管理(宽松版)列表
*/
TableDataInfo<GearPayableVo> queryPageList(GearPayableBo bo, PageQuery pageQuery);
/**
* 查询应付款管理(宽松版)列表
*/
List<GearPayableVo> queryList(GearPayableBo bo);
/**
* 新增应付款管理(宽松版)
*/
Boolean insertByBo(GearPayableBo bo);
/**
* 修改应付款管理(宽松版)
*/
Boolean updateByBo(GearPayableBo bo);
/**
* 校验并批量删除应付款管理(宽松版)信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
Boolean updatePaidAmountAndAddJournal(GearPayableBo bo);
}

View File

@@ -0,0 +1,51 @@
package com.gear.oa.service;
import com.gear.oa.domain.GearReceivable;
import com.gear.oa.domain.vo.GearReceivableVo;
import com.gear.oa.domain.bo.GearReceivableBo;
import com.gear.common.core.page.TableDataInfo;
import com.gear.common.core.domain.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* 应收款管理宽松版Service接口
*
* @author Joshi
* @date 2025-09-02
*/
public interface IGearReceivableService {
/**
* 查询应收款管理(宽松版)
*/
GearReceivableVo queryById(Long receivableId);
/**
* 查询应收款管理(宽松版)列表
*/
TableDataInfo<GearReceivableVo> queryPageList(GearReceivableBo bo, PageQuery pageQuery);
/**
* 查询应收款管理(宽松版)列表
*/
List<GearReceivableVo> queryList(GearReceivableBo bo);
/**
* 新增应收款管理(宽松版)
*/
Boolean insertByBo(GearReceivableBo bo);
/**
* 修改应收款管理(宽松版)
*/
Boolean updateByBo(GearReceivableBo bo);
/**
* 校验并批量删除应收款管理(宽松版)信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
Boolean updatePaidAmountAndAddJournal(GearReceivableBo bo);
}

View File

@@ -0,0 +1,49 @@
package com.gear.oa.service;
import com.gear.oa.domain.GearReturnExchange;
import com.gear.oa.domain.vo.GearReturnExchangeVo;
import com.gear.oa.domain.bo.GearReturnExchangeBo;
import com.gear.common.core.page.TableDataInfo;
import com.gear.common.core.domain.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* 退换货管理Service接口
*
* @author Joshi
* @date 2025-09-02
*/
public interface IGearReturnExchangeService {
/**
* 查询退换货管理
*/
GearReturnExchangeVo queryById(Long returnExchangeId);
/**
* 查询退换货管理列表
*/
TableDataInfo<GearReturnExchangeVo> queryPageList(GearReturnExchangeBo bo, PageQuery pageQuery);
/**
* 查询退换货管理列表
*/
List<GearReturnExchangeVo> queryList(GearReturnExchangeBo bo);
/**
* 新增退换货管理
*/
Boolean insertByBo(GearReturnExchangeBo bo);
/**
* 修改退换货管理
*/
Boolean updateByBo(GearReturnExchangeBo bo);
/**
* 校验并批量删除退换货管理信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@@ -0,0 +1,126 @@
package com.gear.oa.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.gear.common.utils.StringUtils;
import com.gear.common.core.page.TableDataInfo;
import com.gear.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.gear.oa.domain.bo.GearCustomerBo;
import com.gear.oa.domain.vo.GearCustomerVo;
import com.gear.oa.domain.GearCustomer;
import com.gear.oa.mapper.GearCustomerMapper;
import com.gear.oa.service.IGearCustomerService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* CRM 客户Service业务层处理
*
* @author Joshi
* @date 2025-09-02
*/
@RequiredArgsConstructor
@Service
public class GearCustomerServiceImpl implements IGearCustomerService {
private final GearCustomerMapper baseMapper;
/**
* 查询CRM 客户
*/
@Override
public GearCustomerVo queryById(Long customerId){
return baseMapper.selectVoById(customerId);
}
/**
* 查询CRM 客户列表
*/
@Override
public TableDataInfo<GearCustomerVo> queryPageList(GearCustomerBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<GearCustomer> lqw = buildQueryWrapper(bo);
Page<GearCustomerVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询CRM 客户列表
*/
@Override
public List<GearCustomerVo> queryList(GearCustomerBo bo) {
LambdaQueryWrapper<GearCustomer> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<GearCustomer> buildQueryWrapper(GearCustomerBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<GearCustomer> lqw = Wrappers.lambdaQuery();
lqw.like(StringUtils.isNotBlank(bo.getName()), GearCustomer::getName, bo.getName());
lqw.eq(bo.getFollowUpStatus() != null, GearCustomer::getFollowUpStatus, bo.getFollowUpStatus());
lqw.eq(bo.getContactLastTime() != null, GearCustomer::getContactLastTime, bo.getContactLastTime());
lqw.eq(StringUtils.isNotBlank(bo.getContactLastContent()), GearCustomer::getContactLastContent, bo.getContactLastContent());
lqw.eq(bo.getContactNextTime() != null, GearCustomer::getContactNextTime, bo.getContactNextTime());
lqw.eq(bo.getOwnerUserId() != null, GearCustomer::getOwnerUserId, bo.getOwnerUserId());
lqw.eq(bo.getOwnerTime() != null, GearCustomer::getOwnerTime, bo.getOwnerTime());
lqw.eq(bo.getDealStatus() != null, GearCustomer::getDealStatus, bo.getDealStatus());
lqw.eq(StringUtils.isNotBlank(bo.getMobile()), GearCustomer::getMobile, bo.getMobile());
lqw.eq(StringUtils.isNotBlank(bo.getTelephone()), GearCustomer::getTelephone, bo.getTelephone());
lqw.eq(StringUtils.isNotBlank(bo.getQq()), GearCustomer::getQq, bo.getQq());
lqw.eq(StringUtils.isNotBlank(bo.getWechat()), GearCustomer::getWechat, bo.getWechat());
lqw.eq(StringUtils.isNotBlank(bo.getEmail()), GearCustomer::getEmail, bo.getEmail());
lqw.eq(bo.getAreaId() != null, GearCustomer::getAreaId, bo.getAreaId());
lqw.eq(StringUtils.isNotBlank(bo.getDetailAddress()), GearCustomer::getDetailAddress, bo.getDetailAddress());
lqw.eq(bo.getIndustryId() != null, GearCustomer::getIndustryId, bo.getIndustryId());
lqw.eq(bo.getLevel() != null, GearCustomer::getLevel, bo.getLevel());
lqw.eq(bo.getSource() != null, GearCustomer::getSource, bo.getSource());
return lqw;
}
/**
* 新增CRM 客户
*/
@Override
public Boolean insertByBo(GearCustomerBo bo) {
GearCustomer add = BeanUtil.toBean(bo, GearCustomer.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setCustomerId(add.getCustomerId());
}
return flag;
}
/**
* 修改CRM 客户
*/
@Override
public Boolean updateByBo(GearCustomerBo bo) {
GearCustomer update = BeanUtil.toBean(bo, GearCustomer.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(GearCustomer entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 批量删除CRM 客户
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
}

View File

@@ -0,0 +1,130 @@
package com.gear.oa.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.gear.common.utils.StringUtils;
import com.gear.common.core.page.TableDataInfo;
import com.gear.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.gear.oa.domain.bo.GearJournalBo;
import com.gear.oa.domain.vo.GearJournalVo;
import com.gear.oa.domain.GearJournal;
import com.gear.oa.mapper.GearJournalMapper;
import com.gear.oa.service.IGearJournalService;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.Optional;
/**
* 资金日记账Service业务层处理
*
* @author Joshi
* @date 2025-09-02
*/
@RequiredArgsConstructor
@Service
public class GearJournalServiceImpl implements IGearJournalService {
private final GearJournalMapper baseMapper;
/**
* 查询资金日记账
*/
@Override
public GearJournalVo queryById(Long journalId){
return baseMapper.selectVoById(journalId);
}
/**
* 查询资金日记账列表
*/
@Override
public TableDataInfo<GearJournalVo> queryPageList(GearJournalBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<GearJournal> lqw = buildQueryWrapper(bo);
Page<GearJournalVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询资金日记账列表
*/
@Override
public List<GearJournalVo> queryList(GearJournalBo bo) {
LambdaQueryWrapper<GearJournal> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<GearJournal> buildQueryWrapper(GearJournalBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<GearJournal> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getJournalDate() != null, GearJournal::getJournalDate, bo.getJournalDate());
lqw.eq(StringUtils.isNotBlank(bo.getSummary()), GearJournal::getSummary, bo.getSummary());
lqw.eq(StringUtils.isNotBlank(bo.getTransType()), GearJournal::getTransType, bo.getTransType());
lqw.eq(StringUtils.isNotBlank(bo.getCounterpart()), GearJournal::getCounterpart, bo.getCounterpart());
lqw.eq(bo.getIncomeAmount() != null, GearJournal::getIncomeAmount, bo.getIncomeAmount());
lqw.eq(bo.getExpenseAmount() != null, GearJournal::getExpenseAmount, bo.getExpenseAmount());
lqw.eq(bo.getBalanceAmount() != null, GearJournal::getBalanceAmount, bo.getBalanceAmount());
return lqw;
}
/**
* 新增资金日记账
*/
@Override
public Boolean insertByBo(GearJournalBo bo) {
GearJournal journal = BeanUtil.toBean(bo, GearJournal.class);
validEntityBeforeSave(journal);
computeBalance(journal);
boolean flag = baseMapper.insert(journal) > 0;
if (flag) {
bo.setJournalId(journal.getJournalId());
}
return flag;
}
@Override
public void computeBalance(GearJournal journal) {
// 计算新的余额
BigDecimal lastBalance = baseMapper.getLastBalance();
if (lastBalance == null) {
lastBalance = BigDecimal.ZERO;
}
BigDecimal newBalance = lastBalance
.add(Optional.ofNullable(journal.getIncomeAmount()).orElse(BigDecimal.ZERO))
.subtract(Optional.ofNullable(journal.getExpenseAmount()).orElse(BigDecimal.ZERO));
journal.setBalanceAmount(newBalance);
}
/**
* 修改资金日记账
*/
@Override
public Boolean updateByBo(GearJournalBo bo) {
GearJournal update = BeanUtil.toBean(bo, GearJournal.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(GearJournal entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 批量删除资金日记账
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
}

View File

@@ -0,0 +1,130 @@
package com.gear.oa.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.gear.common.utils.StringUtils;
import com.gear.common.core.page.TableDataInfo;
import com.gear.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.gear.oa.domain.bo.GearOrderDetailBo;
import com.gear.oa.domain.vo.GearOrderDetailVo;
import com.gear.oa.domain.GearOrderDetail;
import com.gear.oa.mapper.GearOrderDetailMapper;
import com.gear.oa.service.IGearOrderDetailService;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 订单明细Service业务层处理
*
* @author Joshi
* @date 2025-09-02
*/
@RequiredArgsConstructor
@Service
public class GearOrderDetailServiceImpl implements IGearOrderDetailService {
private final GearOrderDetailMapper baseMapper;
/**
* 查询订单明细
*/
@Override
public GearOrderDetailVo queryById(Long detailId){
return baseMapper.selectVoById(detailId);
}
/**
* 查询订单明细列表
*/
@Override
public TableDataInfo<GearOrderDetailVo> queryPageList(GearOrderDetailBo bo, PageQuery pageQuery) {
QueryWrapper<GearOrderDetail> lqw = buildQueryWrapperPlus(bo);
Page<GearOrderDetailVo> result = baseMapper.selectVoPagePlus(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询订单明细列表
*/
@Override
public List<GearOrderDetailVo> queryList(GearOrderDetailBo bo) {
LambdaQueryWrapper<GearOrderDetail> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private QueryWrapper<GearOrderDetail> buildQueryWrapperPlus(GearOrderDetailBo bo) {
Map<String, Object> params = bo.getParams();
QueryWrapper<GearOrderDetail> qw = new QueryWrapper<>();
qw.eq("d.del_flag", 0); // 手动添加逻辑删除条件
qw.eq(bo.getOrderId() != null, "d.order_id", bo.getOrderId());
qw.eq(bo.getProductId() != null, "d.product_id", bo.getProductId());
qw.eq(bo.getQuantity() != null, "d.quantity", bo.getQuantity());
qw.eq(StringUtils.isNotBlank(bo.getUnit()), "d.unit", bo.getUnit());
return qw;
}
private LambdaQueryWrapper<GearOrderDetail> buildQueryWrapper(GearOrderDetailBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<GearOrderDetail> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getOrderId() != null, GearOrderDetail::getOrderId, bo.getOrderId());
lqw.eq(bo.getProductId() != null, GearOrderDetail::getProductId, bo.getProductId());
lqw.eq(bo.getQuantity() != null, GearOrderDetail::getQuantity, bo.getQuantity());
lqw.eq(StringUtils.isNotBlank(bo.getUnit()), GearOrderDetail::getUnit, bo.getUnit());
lqw.eq(bo.getTaxPrice() != null, GearOrderDetail::getTaxPrice, bo.getTaxPrice());
lqw.eq(bo.getNoTaxPrice() != null, GearOrderDetail::getNoTaxPrice, bo.getNoTaxPrice());
return lqw;
}
/**
* 新增订单明细
*/
@Override
public Boolean insertByBo(GearOrderDetailBo bo) {
GearOrderDetail add = BeanUtil.toBean(bo, GearOrderDetail.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setDetailId(add.getDetailId());
}
return flag;
}
/**
* 修改订单明细
*/
@Override
public Boolean updateByBo(GearOrderDetailBo bo) {
GearOrderDetail update = BeanUtil.toBean(bo, GearOrderDetail.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(GearOrderDetail entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 批量删除订单明细
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
@Override
public List<GearOrderDetailVo> queryListByOrderId(Long orderId) {
return baseMapper.selectVoListByOrderId(orderId);
}
}

View File

@@ -0,0 +1,143 @@
package com.gear.oa.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.gear.common.utils.StringUtils;
import com.gear.common.core.page.TableDataInfo;
import com.gear.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.gear.oa.domain.bo.GearOrderBo;
import com.gear.oa.domain.vo.GearOrderVo;
import com.gear.oa.domain.GearOrder;
import com.gear.oa.mapper.GearOrderMapper;
import com.gear.oa.service.IGearOrderService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 订单主Service业务层处理
*
* @author Joshi
* @date 2025-09-02
*/
@RequiredArgsConstructor
@Service
public class GearOrderServiceImpl implements IGearOrderService {
private final GearOrderMapper baseMapper;
/**
* 查询订单主
*/
@Override
public GearOrderVo queryById(Long orderId){
return baseMapper.selectVoById(orderId);
}
/**
* 查询订单主列表
*/
@Override
public TableDataInfo<GearOrderVo> queryPageList(GearOrderBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<GearOrder> lqw = buildQueryWrapper(bo);
Page<GearOrderVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询订单主列表
*/
@Override
public List<GearOrderVo> queryList(GearOrderBo bo) {
LambdaQueryWrapper<GearOrder> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<GearOrder> buildQueryWrapper(GearOrderBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<GearOrder> lqw = Wrappers.lambdaQuery();
lqw.eq(StringUtils.isNotBlank(bo.getOrderCode()), GearOrder::getOrderCode, bo.getOrderCode());
lqw.eq(bo.getCustomerId() != null, GearOrder::getCustomerId, bo.getCustomerId());
lqw.eq(StringUtils.isNotBlank(bo.getSalesManager()), GearOrder::getSalesManager, bo.getSalesManager());
lqw.eq(bo.getOrderStatus() != null, GearOrder::getOrderStatus, bo.getOrderStatus());
lqw.eq(bo.getTradeType() != null, GearOrder::getTradeType, bo.getTradeType());
lqw.eq(bo.getTaxAmount() != null, GearOrder::getTaxAmount, bo.getTaxAmount());
lqw.eq(bo.getNoTaxAmount() != null, GearOrder::getNoTaxAmount, bo.getNoTaxAmount());
return lqw;
}
/**
* 新增订单主
*/
@Override
public Boolean insertByBo(GearOrderBo bo) {
GearOrder add = BeanUtil.toBean(bo, GearOrder.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setOrderId(add.getOrderId());
}
return flag;
}
/**
* 修改订单主
*/
@Override
public Boolean updateByBo(GearOrderBo bo) {
GearOrder update = BeanUtil.toBean(bo, GearOrder.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(GearOrder entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 批量删除订单主
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
@Override
public TableDataInfo<GearOrderVo> queryPageListByStatus(GearOrderBo bo, PageQuery pageQuery) {
QueryWrapper<GearOrder> lqw = buildQueryWrapperByStatus(bo);
Page<GearOrderVo> result = baseMapper.selectVoPlusPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
private QueryWrapper<GearOrder> buildQueryWrapperByStatus(GearOrderBo bo) {
QueryWrapper<GearOrder> lqw = Wrappers.query();
// 修改为order_status不是零就查出来
if (bo.getOrderStatus() != null) {
if (bo.getOrderStatus() == -1) {
// 当orderStatus为-1时查询所有非0状态的记录
lqw.ne("o.order_status", 0);
} else {
// 当orderStatus为其他值时包括0按指定状态查询
lqw.eq("o.order_status", bo.getOrderStatus());
}
}
lqw.eq("o.del_flag", 0);
lqw.eq(StringUtils.isNotBlank(bo.getOrderCode()), "o.order_code", bo.getOrderCode());
lqw.eq(bo.getCustomerId() != null, "o.customer_id", bo.getCustomerId());
lqw.eq(StringUtils.isNotBlank(bo.getSalesManager()), "o.sales_manager", bo.getSalesManager());
// 当orderStatus为null时不添加任何条件查询所有记录
return lqw;
}
}

View File

@@ -0,0 +1,112 @@
package com.gear.oa.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.gear.common.utils.StringUtils;
import com.gear.common.core.page.TableDataInfo;
import com.gear.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.gear.oa.domain.bo.GearOtherIncomeBo;
import com.gear.oa.domain.vo.GearOtherIncomeVo;
import com.gear.oa.domain.GearOtherIncome;
import com.gear.oa.mapper.GearOtherIncomeMapper;
import com.gear.oa.service.IGearOtherIncomeService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 其他收入Service业务层处理
*
* @author Joshi
* @date 2025-09-02
*/
@RequiredArgsConstructor
@Service
public class GearOtherIncomeServiceImpl implements IGearOtherIncomeService {
private final GearOtherIncomeMapper baseMapper;
/**
* 查询其他收入
*/
@Override
public GearOtherIncomeVo queryById(Long otherIncomeId){
return baseMapper.selectVoById(otherIncomeId);
}
/**
* 查询其他收入列表
*/
@Override
public TableDataInfo<GearOtherIncomeVo> queryPageList(GearOtherIncomeBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<GearOtherIncome> lqw = buildQueryWrapper(bo);
Page<GearOtherIncomeVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询其他收入列表
*/
@Override
public List<GearOtherIncomeVo> queryList(GearOtherIncomeBo bo) {
LambdaQueryWrapper<GearOtherIncome> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<GearOtherIncome> buildQueryWrapper(GearOtherIncomeBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<GearOtherIncome> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getIncomeDate() != null, GearOtherIncome::getIncomeDate, bo.getIncomeDate());
lqw.eq(StringUtils.isNotBlank(bo.getIncomeType()), GearOtherIncome::getIncomeType, bo.getIncomeType());
lqw.eq(bo.getAmount() != null, GearOtherIncome::getAmount, bo.getAmount());
lqw.eq(StringUtils.isNotBlank(bo.getSource()), GearOtherIncome::getSource, bo.getSource());
return lqw;
}
/**
* 新增其他收入
*/
@Override
public Boolean insertByBo(GearOtherIncomeBo bo) {
GearOtherIncome add = BeanUtil.toBean(bo, GearOtherIncome.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setOtherIncomeId(add.getOtherIncomeId());
}
return flag;
}
/**
* 修改其他收入
*/
@Override
public Boolean updateByBo(GearOtherIncomeBo bo) {
GearOtherIncome update = BeanUtil.toBean(bo, GearOtherIncome.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(GearOtherIncome entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 批量删除其他收入
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
}

View File

@@ -0,0 +1,177 @@
package com.gear.oa.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.gear.common.utils.StringUtils;
import com.gear.common.core.page.TableDataInfo;
import com.gear.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.gear.oa.domain.GearJournal;
import com.gear.oa.mapper.GearJournalMapper;
import com.gear.oa.mapper.GearSupplierMapper;
import com.gear.oa.service.IGearJournalService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.gear.oa.domain.bo.GearPayableBo;
import com.gear.oa.domain.vo.GearPayableVo;
import com.gear.oa.domain.GearPayable;
import com.gear.oa.mapper.GearPayableMapper;
import com.gear.oa.service.IGearPayableService;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 应付款管理宽松版Service业务层处理
*
* @author Joshi
* @date 2025-09-02
*/
@RequiredArgsConstructor
@Service
public class GearPayableServiceImpl implements IGearPayableService {
private final GearPayableMapper baseMapper;
@Resource
private GearJournalMapper journalMapper;
@Resource
private GearSupplierMapper supplierMapper;
@Resource
private IGearJournalService gearJournalService;
/**
* 查询应付款管理(宽松版)
*/
@Override
public GearPayableVo queryById(Long payableId){
return baseMapper.selectVoById(payableId);
}
/**
* 查询应付款管理(宽松版)列表
*/
@Override
public TableDataInfo<GearPayableVo> queryPageList(GearPayableBo bo, PageQuery pageQuery) {
QueryWrapper<GearPayable> lqw = buildQueryWrapperPlus(bo);
Page<GearPayableVo> result = baseMapper.selectVoPagePlus(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
private QueryWrapper<GearPayable> buildQueryWrapperPlus(GearPayableBo bo) {
QueryWrapper<GearPayable> lqw = Wrappers.query();
lqw.eq("p.del_flag", 0);
lqw.eq(bo.getSupplierId() != null, "p.supplier_id", bo.getSupplierId());
lqw.eq(bo.getOrderId() != null, "p.order_id", bo.getOrderId());
lqw.eq(bo.getDueDate() != null, "p.due_date", bo.getDueDate());
lqw.eq(bo.getAmount() != null, "p.amount", bo.getAmount());
lqw.eq(bo.getPaidAmount() != null, "p.paid_amount", bo.getPaidAmount());
lqw.eq(bo.getBalanceAmount() != null, "p.balance_amount", bo.getBalanceAmount());
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), "p.status", bo.getStatus());
return lqw;
}
/**
* 查询应付款管理(宽松版)列表
*/
@Override
public List<GearPayableVo> queryList(GearPayableBo bo) {
LambdaQueryWrapper<GearPayable> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<GearPayable> buildQueryWrapper(GearPayableBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<GearPayable> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getSupplierId() != null, GearPayable::getSupplierId, bo.getSupplierId());
lqw.eq(bo.getOrderId() != null, GearPayable::getOrderId, bo.getOrderId());
lqw.eq(bo.getDueDate() != null, GearPayable::getDueDate, bo.getDueDate());
lqw.eq(bo.getAmount() != null, GearPayable::getAmount, bo.getAmount());
lqw.eq(bo.getPaidAmount() != null, GearPayable::getPaidAmount, bo.getPaidAmount());
lqw.eq(bo.getBalanceAmount() != null, GearPayable::getBalanceAmount, bo.getBalanceAmount());
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), GearPayable::getStatus, bo.getStatus());
return lqw;
}
/**
* 新增应付款管理(宽松版)
*/
@Override
public Boolean insertByBo(GearPayableBo bo) {
GearPayable add = BeanUtil.toBean(bo, GearPayable.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setPayableId(add.getPayableId());
}
return flag;
}
/**
* 修改应付款管理(宽松版)
*/
@Override
public Boolean updateByBo(GearPayableBo bo) {
GearPayable update = BeanUtil.toBean(bo, GearPayable.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(GearPayable entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 批量删除应付款管理(宽松版)
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
@Override
public Boolean updatePaidAmountAndAddJournal(GearPayableBo bo) {
// 1. 更新应付款已付金额
GearPayable payable = baseMapper.selectById(bo.getPayableId());
if (payable == null) {
throw new RuntimeException("应付款记录不存在");
}
// bo.getPaidAmount()传入的是变化量
BigDecimal changePaidAmount = bo.getPaidAmount();
BigDecimal newPaidAmount = payable.getPaidAmount().add(changePaidAmount);
GearPayable updateGearPayable = new GearPayable();
updateGearPayable.setPayableId(bo.getPayableId());
updateGearPayable.setPaidAmount(newPaidAmount);
if(payable.getPaidAmount().compareTo(BigDecimal.ZERO) == 0
&& changePaidAmount.compareTo(BigDecimal.ZERO) > 0){
updateGearPayable.setStatus("部分支付");
}
if(newPaidAmount.compareTo(payable.getAmount()) == 0){
updateGearPayable.setStatus("已结清");
}
int countFlag = baseMapper.updateById(updateGearPayable);
// 2. 新增资金日记账记录
GearJournal journal = new GearJournal();
journal.setJournalDate(new Date());
journal.setSummary("向供应商付款");
journal.setTransType("支出");
journal.setCounterpart(supplierMapper.selectById(payable.getSupplierId()).getName());
journal.setIncomeAmount(BigDecimal.ZERO);
journal.setExpenseAmount(changePaidAmount);
gearJournalService.computeBalance(journal);
journal.setRemark("应付款ID: " + bo.getPayableId());
countFlag += journalMapper.insert(journal);
return countFlag == 2;
}
}

View File

@@ -0,0 +1,179 @@
package com.gear.oa.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.gear.common.utils.StringUtils;
import com.gear.common.core.page.TableDataInfo;
import com.gear.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.gear.oa.domain.GearJournal;
import com.gear.oa.mapper.GearCustomerMapper;
import com.gear.oa.mapper.GearJournalMapper;
import com.gear.oa.service.IGearJournalService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.gear.oa.domain.bo.GearReceivableBo;
import com.gear.oa.domain.vo.GearReceivableVo;
import com.gear.oa.domain.GearReceivable;
import com.gear.oa.mapper.GearReceivableMapper;
import com.gear.oa.service.IGearReceivableService;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 应收款管理宽松版Service业务层处理
*
* @author Joshi
* @date 2025-09-02
*/
@RequiredArgsConstructor
@Service
public class GearReceivableServiceImpl implements IGearReceivableService {
private final GearReceivableMapper baseMapper;
@Resource
private GearJournalMapper journalMapper;
@Resource
private GearCustomerMapper customerMapper;
@Resource
private IGearJournalService gearJournalService;
/**
* 查询应收款管理(宽松版)
*/
@Override
public GearReceivableVo queryById(Long receivableId){
return baseMapper.selectVoById(receivableId);
}
/**
* 查询应收款管理(宽松版)列表
*/
@Override
public TableDataInfo<GearReceivableVo> queryPageList(GearReceivableBo bo, PageQuery pageQuery) {
QueryWrapper<GearReceivable> lqw = buildQueryWrapperPlus(bo);
Page<GearReceivableVo> result = baseMapper.selectVoPagePlus(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
private QueryWrapper<GearReceivable> buildQueryWrapperPlus(GearReceivableBo bo) {
QueryWrapper<GearReceivable> lqw = Wrappers.query();
lqw.eq("r.del_flag", 0);
lqw.eq(bo.getCustomerId() != null, "r.customer_id", bo.getCustomerId());
lqw.eq(bo.getOrderId() != null, "r.order_id", bo.getOrderId());
lqw.eq(bo.getDueDate() != null, "r.due_date", bo.getDueDate());
lqw.eq(bo.getAmount() != null, "r.amount", bo.getAmount());
lqw.eq(bo.getPaidAmount() != null, "r.paid_amount", bo.getPaidAmount());
lqw.eq(bo.getBalanceAmount() != null, "r.balance_amount", bo.getBalanceAmount());
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), "r.status", bo.getStatus());
return lqw;
}
/**
* 查询应收款管理(宽松版)列表
*/
@Override
public List<GearReceivableVo> queryList(GearReceivableBo bo) {
LambdaQueryWrapper<GearReceivable> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<GearReceivable> buildQueryWrapper(GearReceivableBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<GearReceivable> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getCustomerId() != null, GearReceivable::getCustomerId, bo.getCustomerId());
lqw.eq(bo.getOrderId() != null, GearReceivable::getOrderId, bo.getOrderId());
lqw.eq(bo.getDueDate() != null, GearReceivable::getDueDate, bo.getDueDate());
lqw.eq(bo.getAmount() != null, GearReceivable::getAmount, bo.getAmount());
lqw.eq(bo.getPaidAmount() != null, GearReceivable::getPaidAmount, bo.getPaidAmount());
lqw.eq(bo.getBalanceAmount() != null, GearReceivable::getBalanceAmount, bo.getBalanceAmount());
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), GearReceivable::getStatus, bo.getStatus());
return lqw;
}
/**
* 新增应收款管理(宽松版)
*/
@Override
public Boolean insertByBo(GearReceivableBo bo) {
GearReceivable add = BeanUtil.toBean(bo, GearReceivable.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setReceivableId(add.getReceivableId());
}
return flag;
}
/**
* 修改应收款管理(宽松版)
*/
@Override
public Boolean updateByBo(GearReceivableBo bo) {
GearReceivable update = BeanUtil.toBean(bo, GearReceivable.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(GearReceivable entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 批量删除应收款管理(宽松版)
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
@Transactional(rollbackFor = Exception.class)
@Override
public Boolean updatePaidAmountAndAddJournal(GearReceivableBo bo) {
// 1. 更新应收款已收金额
GearReceivable receivable = baseMapper.selectById(bo.getReceivableId());
if (receivable == null) {
throw new RuntimeException("应收款记录不存在");
}
// bo.getPaidAmount()传入的是变化量
BigDecimal changePaidAmount = bo.getPaidAmount();
BigDecimal newPaidAmount = receivable.getPaidAmount().add(changePaidAmount);
GearReceivable updateGearReceivable = new GearReceivable();
updateGearReceivable.setReceivableId(bo.getReceivableId());
updateGearReceivable.setPaidAmount(newPaidAmount);
if(receivable.getPaidAmount().compareTo(BigDecimal.ZERO) == 0
&& changePaidAmount.compareTo(BigDecimal.ZERO) > 0){
updateGearReceivable.setStatus("部分支付");
}
if(newPaidAmount.compareTo(receivable.getAmount()) == 0){
updateGearReceivable.setStatus("已结清");
}
int countFlag = baseMapper.updateById(updateGearReceivable);
// 2. 新增资金日记账记录
GearJournal journal = new GearJournal();
journal.setJournalDate(new Date());
journal.setSummary("客户付款");
journal.setTransType("收入");
journal.setCounterpart(customerMapper.selectById(receivable.getCustomerId()).getName());
journal.setIncomeAmount(changePaidAmount);
journal.setExpenseAmount(BigDecimal.ZERO);
gearJournalService.computeBalance(journal);
journal.setRemark("应收款ID: " + bo.getReceivableId());
countFlag += journalMapper.insert(journal);
return countFlag == 2;
}
}

View File

@@ -0,0 +1,114 @@
package com.gear.oa.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.gear.common.utils.StringUtils;
import com.gear.common.core.page.TableDataInfo;
import com.gear.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.gear.oa.domain.bo.GearReturnExchangeBo;
import com.gear.oa.domain.vo.GearReturnExchangeVo;
import com.gear.oa.domain.GearReturnExchange;
import com.gear.oa.mapper.GearReturnExchangeMapper;
import com.gear.oa.service.IGearReturnExchangeService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 退换货管理Service业务层处理
*
* @author Joshi
* @date 2025-09-02
*/
@RequiredArgsConstructor
@Service
public class GearReturnExchangeServiceImpl implements IGearReturnExchangeService {
private final GearReturnExchangeMapper baseMapper;
/**
* 查询退换货管理
*/
@Override
public GearReturnExchangeVo queryById(Long returnExchangeId){
return baseMapper.selectVoById(returnExchangeId);
}
/**
* 查询退换货管理列表
*/
@Override
public TableDataInfo<GearReturnExchangeVo> queryPageList(GearReturnExchangeBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<GearReturnExchange> lqw = buildQueryWrapper(bo);
Page<GearReturnExchangeVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询退换货管理列表
*/
@Override
public List<GearReturnExchangeVo> queryList(GearReturnExchangeBo bo) {
LambdaQueryWrapper<GearReturnExchange> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<GearReturnExchange> buildQueryWrapper(GearReturnExchangeBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<GearReturnExchange> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getOrderDetailId() != null, GearReturnExchange::getOrderDetailId, bo.getOrderDetailId());
lqw.eq(bo.getCustomerId() != null, GearReturnExchange::getCustomerId, bo.getCustomerId());
lqw.eq(StringUtils.isNotBlank(bo.getType()), GearReturnExchange::getType, bo.getType());
lqw.eq(StringUtils.isNotBlank(bo.getReason()), GearReturnExchange::getReason, bo.getReason());
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), GearReturnExchange::getStatus, bo.getStatus());
lqw.eq(bo.getAmount() != null, GearReturnExchange::getAmount, bo.getAmount());
return lqw;
}
/**
* 新增退换货管理
*/
@Override
public Boolean insertByBo(GearReturnExchangeBo bo) {
GearReturnExchange add = BeanUtil.toBean(bo, GearReturnExchange.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setReturnExchangeId(add.getReturnExchangeId());
}
return flag;
}
/**
* 修改退换货管理
*/
@Override
public Boolean updateByBo(GearReturnExchangeBo bo) {
GearReturnExchange update = BeanUtil.toBean(bo, GearReturnExchange.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(GearReturnExchange entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 批量删除退换货管理
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
}

View File

@@ -0,0 +1,36 @@
<?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.gear.oa.mapper.GearCustomerMapper">
<resultMap type="com.gear.oa.domain.GearCustomer" id="GearCustomerResult">
<result property="customerId" column="customer_id"/>
<result property="name" column="name"/>
<result property="followUpStatus" column="follow_up_status"/>
<result property="contactLastTime" column="contact_last_time"/>
<result property="contactLastContent" column="contact_last_content"/>
<result property="contactNextTime" column="contact_next_time"/>
<result property="ownerUserId" column="owner_user_id"/>
<result property="ownerTime" column="owner_time"/>
<result property="dealStatus" column="deal_status"/>
<result property="mobile" column="mobile"/>
<result property="telephone" column="telephone"/>
<result property="qq" column="qq"/>
<result property="wechat" column="wechat"/>
<result property="email" column="email"/>
<result property="areaId" column="area_id"/>
<result property="detailAddress" column="detail_address"/>
<result property="industryId" column="industry_id"/>
<result property="level" column="level"/>
<result property="source" column="source"/>
<result property="remark" column="remark"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<result property="delFlag" column="del_flag"/>
</resultMap>
</mapper>

View File

@@ -0,0 +1,32 @@
<?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.gear.oa.mapper.GearJournalMapper">
<resultMap type="com.gear.oa.domain.GearJournal" id="GearJournalResult">
<result property="journalId" column="journal_id"/>
<result property="journalDate" column="journal_date"/>
<result property="summary" column="summary"/>
<result property="transType" column="trans_type"/>
<result property="counterpart" column="counterpart"/>
<result property="incomeAmount" column="income_amount"/>
<result property="expenseAmount" column="expense_amount"/>
<result property="balanceAmount" column="balance_amount"/>
<result property="remark" column="remark"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<result property="delFlag" column="del_flag"/>
</resultMap>
<select id="getLastBalance" resultType="java.math.BigDecimal">
SELECT balance_amount
FROM gear_journal
WHERE del_flag = 0
ORDER BY create_time DESC
LIMIT 1
</select>
</mapper>

View File

@@ -0,0 +1,36 @@
<?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.gear.oa.mapper.GearOrderDetailMapper">
<resultMap type="com.gear.oa.domain.GearOrderDetail" id="GearOrderDetailResult">
<result property="detailId" column="detail_id"/>
<result property="orderId" column="order_id"/>
<result property="productId" column="product_id"/>
<result property="quantity" column="quantity"/>
<result property="unit" column="unit"/>
<result property="remark" column="remark"/>
<result property="delFlag" column="del_flag"/>
<result property="createTime" column="create_time"/>
<result property="createBy" column="create_by"/>
<result property="updateTime" column="update_time"/>
<result property="updateBy" column="update_by"/>
<result property="taxPrice" column="tax_price"/>
<result property="noTaxPrice" column="no_tax_price"/>
</resultMap>
<select id="selectVoListByOrderId" resultType="com.gear.oa.domain.vo.GearOrderDetailVo">
SELECT * FROM gear_order_detail WHERE order_id = #{orderId} AND del_flag = 0
</select>
<select id="selectVoPagePlus" resultType="com.gear.oa.domain.vo.GearOrderDetailVo">
SELECT
d.*,
p.product_name AS productName,
p.product_code AS productCode
FROM gear_order_detail d
LEFT JOIN gear_product p ON d.product_id = p.product_id AND p.del_flag = 0
${ew.customSqlSegment}
</select>
</mapper>

View File

@@ -0,0 +1,44 @@
<?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.gear.oa.mapper.GearOrderMapper">
<resultMap type="com.gear.oa.domain.GearOrder" id="GearOrderResult">
<result property="orderId" column="order_id"/>
<result property="orderCode" column="order_code"/>
<result property="customerId" column="customer_id"/>
<result property="salesManager" column="sales_manager"/>
<result property="orderStatus" column="order_status"/>
<result property="tradeType" column="trade_type"/>
<result property="remark" column="remark"/>
<result property="delFlag" column="del_flag"/>
<result property="createTime" column="create_time"/>
<result property="createBy" column="create_by"/>
<result property="updateTime" column="update_time"/>
<result property="updateBy" column="update_by"/>
<result property="taxAmount" column="tax_amount"/>
<result property="noTaxAmount" column="no_tax_amount"/>
</resultMap>
<select id="selectVoPlusPage" resultType="com.gear.oa.domain.vo.GearOrderVo">
select o.order_id,
o.order_code,
o.customer_id,
o.sales_manager,
o.order_status,
o.remark,
o.del_flag,
o.create_time,
o.create_by,
o.update_time,
o.update_by,
o.tax_amount,
o.no_tax_amount,
c.name as customerName
from gear_order o
left join gear_customer c on o.customer_id = c.customer_id and c.del_flag = 0
${ew.customSqlSegment}
</select>
</mapper>

View File

@@ -0,0 +1,22 @@
<?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.gear.oa.mapper.GearOtherIncomeMapper">
<resultMap type="com.gear.oa.domain.GearOtherIncome" id="GearOtherIncomeResult">
<result property="otherIncomeId" column="other_income_id"/>
<result property="incomeDate" column="income_date"/>
<result property="incomeType" column="income_type"/>
<result property="amount" column="amount"/>
<result property="source" column="source"/>
<result property="remark" column="remark"/>
<result property="delFlag" column="del_flag"/>
<result property="createTime" column="create_time"/>
<result property="createBy" column="create_by"/>
<result property="updateTime" column="update_time"/>
<result property="updateBy" column="update_by"/>
</resultMap>
</mapper>

View File

@@ -0,0 +1,45 @@
<?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.gear.oa.mapper.GearPayableMapper">
<resultMap type="com.gear.oa.domain.GearPayable" id="GearPayableResult">
<result property="payableId" column="payable_id"/>
<result property="supplierId" column="supplier_id"/>
<result property="orderId" column="order_id"/>
<result property="dueDate" column="due_date"/>
<result property="amount" column="amount"/>
<result property="paidAmount" column="paid_amount"/>
<result property="balanceAmount" column="balance_amount"/>
<result property="status" column="status"/>
<result property="delFlag" column="del_flag"/>
<result property="remark" column="remark"/>
<result property="createTime" column="create_time"/>
<result property="createBy" column="create_by"/>
<result property="updateTime" column="update_time"/>
<result property="updateBy" column="update_by"/>
</resultMap>
<select id="selectVoPagePlus" resultType="com.gear.oa.domain.vo.GearPayableVo">
select p.payable_id,
p.supplier_id,
s.name as supplierName,
p.order_id,
p.due_date,
p.amount,
p.paid_amount,
p.balance_amount,
p.status,
p.del_flag,
p.remark,
p.create_time,
p.create_by,
p.update_time,
p.update_by
from gear_payable p
left join gear_supplier s on p.supplier_id = s.supplier_id and s.del_flag = 0
${ew.customSqlSegment}
</select>
</mapper>

View File

@@ -0,0 +1,45 @@
<?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.gear.oa.mapper.GearReceivableMapper">
<resultMap type="com.gear.oa.domain.GearReceivable" id="GearReceivableResult">
<result property="receivableId" column="receivable_id"/>
<result property="customerId" column="customer_id"/>
<result property="orderId" column="order_id"/>
<result property="dueDate" column="due_date"/>
<result property="amount" column="amount"/>
<result property="paidAmount" column="paid_amount"/>
<result property="balanceAmount" column="balance_amount"/>
<result property="status" column="status"/>
<result property="delFlag" column="del_flag"/>
<result property="remark" column="remark"/>
<result property="createTime" column="create_time"/>
<result property="createBy" column="create_by"/>
<result property="updateTime" column="update_time"/>
<result property="updateBy" column="update_by"/>
</resultMap>
<select id="selectVoPagePlus" resultType="com.gear.oa.domain.vo.GearReceivableVo">
select r.receivable_id,
r.customer_id,
r.order_id,
r.due_date,
r.amount,
r.paid_amount,
r.balance_amount,
r.status,
r.del_flag,
r.remark,
r.create_time,
r.create_by,
r.update_time,
r.update_by,
c.name as customerName
from gear_receivable r
left join gear_customer c on r.customer_id = c.customer_id and c.del_flag = 0
${ew.customSqlSegment}
</select>
</mapper>

View File

@@ -0,0 +1,23 @@
<?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.gear.oa.mapper.GearReturnExchangeMapper">
<resultMap type="com.gear.oa.domain.GearReturnExchange" id="GearReturnExchangeResult">
<result property="returnExchangeId" column="return_exchange_id"/>
<result property="orderDetailId" column="order_detail_id"/>
<result property="customerId" column="customer_id"/>
<result property="type" column="type"/>
<result property="reason" column="reason"/>
<result property="status" column="status"/>
<result property="amount" column="amount"/>
<result property="delFlag" column="del_flag"/>
<result property="createTime" column="create_time"/>
<result property="createBy" column="create_by"/>
<result property="updateTime" column="update_time"/>
<result property="updateBy" column="update_by"/>
</resultMap>
</mapper>