package com.trade.purchase.enquiry; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.trade.purchase.order.dto.OrderSubmitDto; import com.trade.purchase.order.entity.Order; import com.trade.purchase.order.entity.OrderFees; import com.trade.purchase.order.entity.OrderFiles; import com.trade.purchase.order.entity.OrderItems; import com.trade.purchase.order.enums.OrderTypeEnum; import com.trade.purchase.order.service.IOrderFeesService; import com.trade.purchase.order.service.IOrderFilesService; import com.trade.purchase.order.service.IOrderItemsService; import com.trade.purchase.order.service.IOrderService; import com.trade.purchase.order.vo.OrderVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.AllArgsConstructor; import org.springblade.client.entity.CorpsDesc; import org.springblade.client.feign.ICorpsDescClient; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.secure.utils.SecureUtil; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; import org.springblade.system.user.entity.User; import org.springblade.system.user.feign.IUserClient; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.math.BigDecimal; import java.util.List; /** * 出口采购询价 控制器 * * @author BladeX * @since 2021-09-26 */ @RestController @AllArgsConstructor @RequestMapping("/purchase-enquiry") @Api(value = "出口采购询价", tags = "出口采购询价接口") public class PurchaseEnquiry extends BladeController { private final IOrderService orderService; private final IOrderFeesService orderFeesService; private final IOrderFilesService orderFilesService; private final IOrderItemsService orderItemsService; private final String ERROR_MSG = "缺少查询信息"; private final ICorpsDescClient corpsDescClient;//获取客户信息 private final IUserClient userClient;//获取用户信息 /** * 详情 */ @GetMapping("/{id}") @ApiOperationSupport(order = 1) @ApiOperation(value = "详情", notes = "传入order") public R detail(@PathVariable(value = "id") String id) { return orderService.getOrderMessage(id); } /** * 分页 出口采购询价 */ @GetMapping("/list") @ApiOperationSupport(order = 2) @ApiOperation(value = "查询所有", notes = "传入order") public R> list(Order order, Query query) { order.setIsDeleted(0); order.setTenantId(AuthUtil.getTenantId()); order.setBillType(OrderTypeEnum.PURCHASE_ENQUIRY.getType()); order.setTradeType(OrderTypeEnum.EXPORT.getType()); IPage pages = orderService.page(Condition.getPage(query), Condition.getQueryWrapper(order)); return R.data(pages); } /** * 自定义分页 出口采购询价 */ @GetMapping("/page") @ApiOperationSupport(order = 3) @ApiOperation(value = "分页", notes = "传入order") public R> page(OrderVO order, Query query) { LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(Order::getTenantId, SecureUtil.getTenantId());//租户id lambdaQueryWrapper.eq(Order::getIsDeleted, 0);//订单是否有效 lambdaQueryWrapper.eq(Order::getBillType, OrderTypeEnum.PURCHASE_ENQUIRY.getType());//订单类型 lambdaQueryWrapper.eq(Order::getTradeType, OrderTypeEnum.EXPORT.getType());//贸易类型 lambdaQueryWrapper.like(Func.isNotEmpty(order.getOrderNo()), Order::getOrderNo, order.getOrderNo());//订单号 lambdaQueryWrapper.like(Func.isNotEmpty(order.getCorpId()), Order::getCorpId, order.getCorpId());//客户id lambdaQueryWrapper.ge(Func.isNotEmpty(order.getContractStartDate()), Order::getBusinesDate, order.getContractStartDate());//合同日期开始 lambdaQueryWrapper.le(Func.isNotEmpty(order.getContractStartDate()), Order::getBusinesDate, order.getContractStartDate());//合同日期结束 lambdaQueryWrapper.like(Func.isNotEmpty(order.getSrcOrderNo()), Order::getSrcOrderNo, order.getSrcOrderNo());//订单来源 lambdaQueryWrapper.like(Func.isNotEmpty(order.getShippingAddress()), Order::getShippingAddress, order.getShippingAddress());//发货地址 lambdaQueryWrapper.like(Func.isNotEmpty(order.getArrivalAddress()), Order::getArrivalAddress, order.getArrivalAddress());//到货地址 lambdaQueryWrapper.ge(Func.isNotEmpty(order.getActualDeliveryDateStart()), Order::getActualDeliveryDate, order.getActualDeliveryDateStart());//发货日期开始 lambdaQueryWrapper.le(Func.isNotEmpty(order.getActualDeliveryDateEnd()), Order::getActualDeliveryDate, order.getActualDeliveryDateEnd());//发货日期结束 lambdaQueryWrapper.ge(Func.isNotEmpty(order.getDeliveryStartDate()), Order::getRequiredDeliveryDate, order.getDeliveryStartDate());//要求发货日期开始 lambdaQueryWrapper.le(Func.isNotEmpty(order.getDeliveryEndDate()), Order::getRequiredDeliveryDate, order.getDeliveryEndDate());//要求发货日期结束 lambdaQueryWrapper.ge(Func.isNotEmpty(order.getArrivalDateStart()), Order::getRequiredArrivalDate, order.getArrivalDateStart());//要求到货日期开始 lambdaQueryWrapper.le(Func.isNotEmpty(order.getArrivalDateEnd()), Order::getRequiredArrivalDate, order.getArrivalDateEnd());//要求到货日期结束 lambdaQueryWrapper.like(Func.isNotEmpty(order.getOrderStatus()), Order::getOrderStatus, order.getOrderStatus());//单据状态 lambdaQueryWrapper.like(Func.isNotEmpty(order.getSysNo()), Order::getSysNo, order.getSysNo());//系统编号 lambdaQueryWrapper.eq(Func.isNotEmpty(order.getCreateUser()), Order::getCreateUser, order.getCreateUser());//制单人 lambdaQueryWrapper.ge(Func.isNotEmpty(order.getCreateTimeStart()), Order::getCreateTime, order.getCreateTimeStart());//制单日期开始 lambdaQueryWrapper.le(Func.isNotEmpty(order.getCreateTimeEnd()), Order::getCreateTime, order.getCreateTimeEnd());//制单日期结束 lambdaQueryWrapper.ge(Func.isNotEmpty(order.getDateValidityStart()), Order::getDateValidity, order.getDateValidityStart());//有效日期开始 lambdaQueryWrapper.le(Func.isNotEmpty(order.getDateValidityEnd()), Order::getDateValidity, order.getDateValidityEnd());//有效日期结束 lambdaQueryWrapper.ge(Func.isNotEmpty(order.getOrderStartDate()),Order::getBusinesDate,order.getOrderStartDate());//订单日期开始 lambdaQueryWrapper.le(Func.isNotEmpty(order.getOrderEndDate()),Order::getBusinesDate,order.getOrderEndDate());//订单日期结束 lambdaQueryWrapper.like(Func.isNotEmpty(order.getPortOfLoad()),Order::getPortOfLoad,order.getPortOfLoad());//装货港 lambdaQueryWrapper.like(Func.isNotEmpty(order.getPortOfDestination()),Order::getPortOfDestination,order.getPortOfDestination());//目的港 lambdaQueryWrapper.like(Func.isNotEmpty(order.getPlannedDeliveryStart()),Order::getPlannedDeliveryDate,order.getPlannedDeliveryStart());//计划交货开始 lambdaQueryWrapper.like(Func.isNotEmpty(order.getPlannedDeliveryEnd()),Order::getPlannedDeliveryDate,order.getPlannedDeliveryEnd());//计划交货结束 IPage page = orderService.page(Condition.getPage(query), lambdaQueryWrapper); if (CollectionUtils.isNotEmpty(page.getRecords())) { page.getRecords().stream().forEach(item -> { if (item.getCorpId() != null) { R corpMessage = corpsDescClient.getCorpMessage(item.getCorpId());//客户 if (corpMessage.isSuccess() && corpMessage.getData() != null) { item.setCorpName(corpMessage.getData().getCname()); } } if (item.getBelongToCorpId() != null) { R corpMessage = corpsDescClient.getCorpMessage(item.getBelongToCorpId());//销售公司 if (corpMessage.isSuccess() && corpMessage.getData() != null) { item.setBelongToCorpName(corpMessage.getData().getCname()); } } R user = userClient.userInfoById(item.getCreateUser());//制单人 if (user.isSuccess() && user.getData() != null) { item.setCreateUserName(user.getData().getName()); } //获取订单明细 List list = orderItemsService.list(new QueryWrapper().eq("pid", item.getId()).eq("is_deleted", 0)); if (CollectionUtils.isNotEmpty(list)){ item.setOrderQuantity(list.stream().map(OrderItems::getOrderQuantity).reduce(BigDecimal.ZERO,BigDecimal::add));//数量合计 item.setAmount(list.stream().map(OrderItems::getAmount).reduce(BigDecimal.ZERO,BigDecimal::add));//销售金额 item.setPurchaseAmount(list.stream().map(OrderItems::getPurchaseAmount).reduce(BigDecimal.ZERO,BigDecimal::add));//采购金额 item.setActualQuantity(list.stream().map(OrderItems::getActualQuantity).reduce(BigDecimal.ZERO,BigDecimal::add));//发货数量 } }); } return R.data(page); } /** * 新增 出口采购询价 */ @PostMapping("/save") @ApiOperationSupport(order = 4) @ApiOperation(value = "新增", notes = "传入order") public R save(@Valid @RequestBody OrderSubmitDto submitDto) { submitDto.setBillType(OrderTypeEnum.PURCHASE_ENQUIRY.getType()); submitDto.setTradeTypeEnum(OrderTypeEnum.EXPORT); return orderService.saveOrderMessage(submitDto); } /** * 修改 出口采购询价 */ @PostMapping("/update") @ApiOperationSupport(order = 5) @ApiOperation(value = "修改", notes = "传入order") public R update(@Valid @RequestBody Order order) { if (order.getId() == null) { return R.fail(ERROR_MSG); } order.setIsDeleted(1); return R.status(orderService.updateById(order)); } /** * 新增或修改 出口采购询价 */ @PostMapping("/submit") @ApiOperationSupport(order = 6) @ApiOperation(value = "新增或修改", notes = "传入order") public R submit(@Valid @RequestBody OrderSubmitDto submitDto) { submitDto.setBillType(OrderTypeEnum.PURCHASE_ENQUIRY.getType()); submitDto.setTradeTypeEnum(OrderTypeEnum.EXPORT); return orderService.savePurchase(submitDto); } /** * 采购订单表 */ @PostMapping("/removeByItem") @ApiOperationSupport(order = 5) @ApiOperation(value = "删除明细信息", notes = "传入order") public R update(@Valid @RequestBody OrderItems order) { if (order.getId() == null) { return R.fail(500, "请选择要删除的数据"); } order.setIsDeleted(1); return R.status(orderItemsService.updateById(order)); } /** * 删除 出口采购询价 */ @PostMapping("/remove") @ApiOperationSupport(order = 8) @ApiOperation(value = "删除", notes = "传入ids") public R remove(@Valid @RequestBody Order order) { if (order.getId() == null){ return R.fail(500,"请选择要删除的数据"); } return R.status(orderService.removeById(order)); } @PostMapping("/remove-byItem") @ApiOperationSupport(order = 5) @ApiOperation(value = "删除明细信息", notes = "传入order") public R removeByitem(@Valid @RequestBody OrderItems order) { if (order.getId() == null) { return R.fail(500, "请选择要删除的数据"); } return R.status(orderItemsService.removeById(order)); } /** * 删除费用信息 */ @PostMapping("/removeByFees") @ApiOperationSupport(order = 8) @ApiOperation(value = "删除费用信息", notes = "传入order") public R update(@Valid @RequestBody OrderFees order) { if (order.getId() == null) { return R.fail(ERROR_MSG); } order.setIsDeleted(1); return R.status(orderFeesService.updateById(order)); } /** * 删除订单文件信息 * * @param order * @return */ @PostMapping("/removeByFiles") @ApiOperationSupport(order = 9) @ApiOperation(value = "删除文件信息", notes = "传入order") public R update(@Valid @RequestBody OrderFiles order) { if (order.getId() == null) { return R.fail(ERROR_MSG); } order.setIsDeleted(1); return R.status(orderFilesService.updateById(order)); } /** * 报价单生成采购询价 * @param order * @return */ @PostMapping("/savePurchaseEnquiry") @ApiOperationSupport(order = 10) @ApiOperation(value = "报价单生成采购询价单", notes = "传入order的id") public R savePurchaseEnquiry(@Valid @RequestBody Order order){ order.setBillType(OrderTypeEnum.PURCHASE_ENQUIRY.getType()); order.setTradeType(OrderTypeEnum.EXPORT.getType()); return orderService.savePurchaseEnquiry(order); } /** * 提交采购询价 * @param order * @return */ @PostMapping("/submitMessage") @ApiOperationSupport(order = 10) @ApiOperation(value = "提交采购询价", notes = "传入order的id") public R submitMessage(@Valid @RequestBody Order order){ if (order.getId() == null){ throw new RuntimeException("请选择确认的单据"); } if (StringUtils.isNotBlank(order.getIfEnquiry()) && order.getIfEnquiry().equals("询价确认")) { throw new RuntimeException("请勿重复提交"); } order.setBillType(OrderTypeEnum.PURCHASE_ENQUIRY.getType()); order.setTradeType(OrderTypeEnum.EXPORT.getType()); return orderService.submit(order); } }