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.*; import com.trade.purchase.order.enums.OrderTypeEnum; import com.trade.purchase.order.service.*; 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("/shipping-enquiry") @Api(value = "出口船务询价", tags = "出口船务询价接口") public class ShippingEnquiry extends BladeController { private final IOrderService orderService; private final IOrderFeesService orderFeesService; private final IOrderFilesService orderFilesService; private final IOrderItemsService orderItemsService; private final IOrderFreightService orderFreightService; 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.getShippingMessage(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.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.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.getContractEndDate()), Order::getBusinesDate, order.getContractEndDate());//合同日期结束 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());//计划交货结束 lambdaQueryWrapper.orderByDesc(Order::getId); 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.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 orderMessage = orderService.getById(order.getId()); if (orderMessage != null && !orderMessage.getIfShipping().equals("无")){ return R.fail(500,"已提交船务询价,请勿重复提交"); } order.setIfShipping("已提交"); return R.status(orderService.saveOrUpdate(order)); } /** * 新增或修改 出口采购询价 */ @PostMapping("/submit") @ApiOperationSupport(order = 6) @ApiOperation(value = "新增或修改", notes = "传入order") public R submit(@Valid @RequestBody OrderSubmitDto submitDto) { submitDto.setBillType(OrderTypeEnum.ENQUIRY.getType()); submitDto.setTradeTypeEnum(OrderTypeEnum.EXPORT); return orderService.saveShippingMessage(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(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) { return R.status(orderService.removeByIds(Func.toLongList(ids))); } /** * 删除费用信息 */ @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); } return R.status(orderFeesService.removeById(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); } return R.status(orderFilesService.removeById(order)); } /** * 删除费用信息 */ @PostMapping("/removeFreight") @ApiOperationSupport(order = 8) @ApiOperation(value = "删除费用信息", notes = "传入order") public R removeFreight(@Valid @RequestBody OrderFreight orderFreight) { if (orderFreight.getId() == null) { return R.fail(ERROR_MSG); } return R.status(orderFreightService.removeById(orderFreight)); } /** * 提交船务询价 */ @PostMapping("/commit") @ApiOperationSupport(order = 6) @ApiOperation(value = "提交船务询价", notes = "传入order") public R commit(@Valid @RequestBody OrderSubmitDto submitDto) { if (StringUtils.isNotBlank(submitDto.getIfShipping()) && submitDto.getIfShipping().equals("船务确认")){ throw new RuntimeException("请勿重复提交"); } submitDto.setBillType(OrderTypeEnum.ENQUIRY.getType()); submitDto.setTradeTypeEnum(OrderTypeEnum.EXPORT); return orderService.commit(submitDto); } }