| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363 |
- package com.dk.mdm.service.sale;
- import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
- import com.dk.common.exception.BaseBusinessException;
- import com.dk.common.infrastructure.annotaiton.Pagination;
- import com.dk.common.infrastructure.constant.Constant;
- import com.dk.common.infrastructure.enums.ErrorCodeEnum;
- import com.dk.common.model.pojo.PageList;
- import com.dk.common.response.ResponseCodeEnum;
- import com.dk.common.response.ResponseResultUtil;
- import com.dk.common.response.ResponseResultVO;
- import com.dk.mdm.infrastructure.convert.sale.OrderConvert;
- import com.dk.mdm.infrastructure.convert.sale.OrderItemConvert;
- import com.dk.mdm.mapper.mst.CustomerMapper;
- import com.dk.mdm.mapper.sale.MultiOwnerMapper;
- import com.dk.mdm.mapper.sale.OrderItemMapper;
- import com.dk.mdm.mapper.sale.OrderMapper;
- import com.dk.mdm.model.pojo.mst.Customer;
- import com.dk.mdm.model.pojo.sale.MultiOwner;
- import com.dk.mdm.model.pojo.sale.Order;
- import com.dk.common.service.BaseService;
- import com.dk.common.mapper.BaseMapper;
- import com.dk.mdm.model.pojo.sale.OrderItem;
- import com.dk.mdm.model.query.sale.OrderItemQuery;
- import com.dk.mdm.model.query.sale.OrderQuery;
- import com.dk.mdm.model.response.sale.OrderItemResponse;
- import com.dk.mdm.model.response.sale.OrderResponse;
- import com.dk.mdm.model.vo.sale.OrderItemVO;
- import com.dk.mdm.model.vo.sale.OrderVO;
- import com.dk.mdm.service.common.CommonService;
- import org.springframework.stereotype.Service;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.transaction.annotation.Transactional;
- import java.math.BigDecimal;
- import java.util.*;
- import java.util.stream.Collectors;
- @Service
- @Transactional
- public class OrderService extends BaseService<Order> {
- @Override
- public String getPrimaryKey() {
- return "order_id";
- }
- @Override
- public BaseMapper<Order> getRepository() {
- return orderMapper;
- }
- @Autowired
- private OrderMapper orderMapper;
- @Autowired
- private OrderItemService orderItemService;
- @Autowired
- private OrderItemMapper orderItemMapper;
- @Autowired
- private CommonService commonService;
- @Autowired
- private CustomerMapper customerMapper;
- @Autowired
- MultiOwnerMapper multiOwnerMapper;
- @Autowired
- private OrderConvert orderConvert;
- @Autowired
- private OrderItemConvert orderItemConvert;
- /**
- * @desc : 条件查询
- * @author : 付斌
- * @date : 2023/1/9 10:40
- */
- @Pagination
- public ResponseResultVO<PageList<OrderResponse>> selectByCond(OrderQuery orderQuery) {
- return super.mergeListWithCount(orderQuery, orderMapper.selectByCond(orderQuery),
- orderMapper.countByCond(orderQuery));
- }
- /**
- * @desc : 以销定采 查询
- * @author : 王英杰
- * @date : 2023/3/14 10:36
- */
- @Pagination
- public ResponseResultVO<PageList<OrderResponse>> purSaleSelectByCond(OrderQuery orderQuery) {
- return super.mergeListWithCount(orderQuery, orderMapper.purSaleSelectByCond(orderQuery),
- orderMapper.countByCond(orderQuery));
- }
- /**
- * @desc : 查询订单明细(货物、收款、附件)
- * @author : 付斌
- * @date : 2024-02-28 13:25
- */
- @Pagination
- public ResponseResultVO<Map<String, Object>> selectOrderInfoById(String id) {
- Map<String, Object> result = new HashMap<>();
- // 商品明细
- List<OrderItemResponse> orderItem = orderItemMapper.selectByCond(new OrderItemQuery().setOrderId(id));
- result.put("orderItem", orderItem);
- // 收款
- // 附件
- return ResponseResultUtil.success(result);
- }
- /**
- * @desc : 新建方法
- * @author : 付斌
- * @date : 2023/1/9 10:49
- */
- @Transactional(
- rollbackFor = {Exception.class}
- )
- public ResponseResultVO<?> insert(OrderVO orderVO) {
- // 如果没有客户id,要新建
- if (orderVO.getCusId() == null) {
- List<Customer> listCustomer = customerMapper.selectByCond(new Customer().setCpId(orderVO.getCpId()).setCusPhone(orderVO.getCusPhone()));
- // 如果客户电话已存在
- if (listCustomer.size() > 0) {
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ISEXISTS_CUSPHONE.getMessage());
- }
- // 创建客户,获取编码和主键UuId
- Map<String, Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.CUSTOMER.getName(), true);
- Customer customer = new Customer();
- customer.setCusId(codeMap.get("outId").toString()).setCusCode(codeMap.get("outNote").toString()).setCusName(orderVO.getCusName())
- .setCusPhone(orderVO.getCusPhone()).setAddressArea(orderVO.getAddressArea()).setAddressName(orderVO.getAddressName())
- .setAddressNo(orderVO.getAddressNo()).setAddressGcj02(orderVO.getAddressGcj02()).setAddressFull(orderVO.getAddressFull())
- .setContactName(orderVO.getContactName()).setContactPhone(orderVO.getContactPhone()).setCusFrom(orderVO.getCusFrom())
- .setChannelId(orderVO.getSalesChannel()).setOrgId(orderVO.getOrgId()).setStaffId(orderVO.getStaffId())
- .setReportStaff(orderVO.getMakeStaff()).setSaleStatus(Constant.SaleStatus.CHENGJIAO.getName()).setCpId(orderVO.getCpId());
- customerMapper.insert(customer);
- orderVO.setCusId(customer.getCusId());
- }
- // 获取单号
- Map<String, Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.ORDER.getName(), false);
- orderVO.setOrderId(codeMap.get("outId").toString()).setOrderNo(codeMap.get("outNote").toString())
- .setOrderType(Constant.DocumentType.ORDER.getName());
- // 转化实体
- Order order = orderConvert.convertToPo(orderVO);
- // 订单总单保存
- super.insert(order);
- // 业务部门业绩保存
- if (orderVO.getOrgList() != null && orderVO.getOrgList().size() > 0) {
- for (Map<String, Object> map : orderVO.getOrgList()) {
- MultiOwner multiOwner = new MultiOwner();
- multiOwner.setOrderId(order.getOrderId()).setOwnerId(map.get("orgId").toString())
- .setAllocationRatio(new BigDecimal(map.get("allocationRatio").toString())).setCpId(order.getCpId());
- if (Boolean.parseBoolean(map.get("ownerFlag").toString())) {
- multiOwner.setOwnerType(Constant.OwnerType.Z_ORG.getName());
- } else {
- multiOwner.setOwnerType(Constant.OwnerType.C_ORG.getName());
- }
- multiOwnerMapper.insert(multiOwner);
- }
- }
- // 业务员业绩保存
- if (orderVO.getStaffList() != null && orderVO.getStaffList().size() > 0) {
- for (Map<String, Object> map : orderVO.getStaffList()) {
- MultiOwner multiOwner = new MultiOwner();
- multiOwner.setOrderId(order.getOrderId()).setOwnerId(map.get("staffId").toString())
- .setAllocationRatio(new BigDecimal(map.get("allocationRatio").toString())).setCpId(order.getCpId());
- if (Boolean.parseBoolean(map.get("ownerFlag").toString())) {
- multiOwner.setOwnerType(Constant.OwnerType.Z_STAFF.getName());
- } else {
- multiOwner.setOwnerType(Constant.OwnerType.C_STAFF.getName());
- }
- multiOwnerMapper.insert(multiOwner);
- }
- }
- // 订单明细保存
- if (orderVO.getItemList() != null && orderVO.getItemList().size() > 0) {
- for (OrderItemVO orderItemVO : orderVO.getItemList()) {
- OrderItem orderItem = orderItemConvert.convertToPo(orderItemVO);
- orderItem.setOrderId(order.getOrderId()).setCpId(order.getCpId()).setOutStatus(Constant.OutStatus.DAICHUKU.getName());
- orderItemMapper.insert(orderItem);
- }
- }
- return ResponseResultUtil.success();
- }
- /**
- * @desc : 编辑方法
- * @author : 付斌
- * @date : 2023/1/9 10:49
- */
- @Transactional(
- rollbackFor = {Exception.class}
- )
- public ResponseResultVO<?> update(OrderVO orderVO) {
- // 明细实体(避免并发,需要再查一遍)
- OrderItem orderItemForUpdate;
- // 转化实体
- Order order = orderConvert.convertToPo(orderVO);
- //删除的
- List<OrderItemVO> deleteOrderItemVOList = orderVO.getDeleteItemList().stream().filter(it -> it.getItemId() != null).collect(Collectors.toList());
- if (deleteOrderItemVOList.size() > 0) {
- for (OrderItemVO orderItemVO : deleteOrderItemVOList) {
- orderItemForUpdate = orderItemMapper.selectByIdForUpdate(orderItemVO.getItemId());
- // 非待出库单据不能删除
- if (!Constant.OutStatus.DAICHUKU.getName().equals(orderItemForUpdate.getOutStatus())) {
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.NO_WAIT_INTO.getMessage());
- } else {
- orderItemMapper.deleteById(orderItemVO.getItemId());
- }
- }
- }
- // 新增的
- List<OrderItemVO> insertOrderItemVOList = orderVO.getItemList().stream().filter(it -> it.getItemId() == null).collect(Collectors.toList());
- for (OrderItemVO orderItemVO : insertOrderItemVOList) {
- OrderItem orderItem = orderItemConvert.convertToPo(orderItemVO);
- orderItem.setOrderId(order.getOrderId()).setCpId(order.getCpId()).setOutStatus(Constant.OutStatus.DAICHUKU.getName());
- orderItemMapper.insert(orderItem);
- }
- // 编辑的
- List<OrderItemVO> editOrderItemVOList = orderVO.getItemList().stream().filter(it -> it.getItemId() != null).collect(Collectors.toList());
- for (OrderItemVO orderItemVO : editOrderItemVOList) {
- orderItemForUpdate = orderItemMapper.selectByIdForUpdate(orderItemVO.getItemId());
- // 商品数量不能小于(出库中数量+已出库数量)
- if (orderItemVO.getItemQty().compareTo(orderItemForUpdate.getOutingQty().add(orderItemForUpdate.getOutQty())) == -1) {
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ITEMQTY_NO_LESS_OUTQTY.getMessage());
- }
- OrderItem orderItem = orderItemConvert.convertToPo(orderItemVO);
- orderItemService.updateByUuid(orderItem);
- }
- // 删除业绩信息
- multiOwnerMapper.deleteByOrderId(order.getOrderId());
- // 重新保存业绩信息
- // 业务部门业绩保存
- if (orderVO.getOrgList() != null && orderVO.getOrgList().size() > 0) {
- for (Map<String, Object> map : orderVO.getOrgList()) {
- MultiOwner multiOwner = new MultiOwner();
- multiOwner.setOrderId(order.getOrderId()).setOwnerId(map.get("orgId").toString())
- .setAllocationRatio(new BigDecimal(map.get("allocationRatio").toString())).setCpId(order.getCpId());
- if (Boolean.parseBoolean(map.get("ownerFlag").toString())) {
- multiOwner.setOwnerType(Constant.OwnerType.Z_ORG.getName());
- } else {
- multiOwner.setOwnerType(Constant.OwnerType.C_ORG.getName());
- }
- multiOwnerMapper.insert(multiOwner);
- }
- }
- // 业务员业绩保存
- if (orderVO.getStaffList() != null && orderVO.getStaffList().size() > 0) {
- for (Map<String, Object> map : orderVO.getStaffList()) {
- MultiOwner multiOwner = new MultiOwner();
- multiOwner.setOrderId(order.getOrderId()).setOwnerId(map.get("staffId").toString())
- .setAllocationRatio(new BigDecimal(map.get("allocationRatio").toString())).setCpId(order.getCpId());
- if (Boolean.parseBoolean(map.get("ownerFlag").toString())) {
- multiOwner.setOwnerType(Constant.OwnerType.Z_STAFF.getName());
- } else {
- multiOwner.setOwnerType(Constant.OwnerType.C_STAFF.getName());
- }
- multiOwnerMapper.insert(multiOwner);
- }
- }
- return ResponseResultUtil.success(super.update(order, new UpdateWrapper<Order>().lambda().eq(Order::getOrderId,
- UUID.fromString(order.getOrderId()))));
- }
- /**
- * @desc : 作废
- * @author : 付斌
- * @date : 2024-03-08 16:38
- */
- public ResponseResultVO<?> invalid(String id) {
- Order orderForUpdate = orderMapper.selectByIdForUpdate(id);
- // 并发校验
- if (!orderForUpdate.getFlgValid()) {
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ISFLGVALID_FALSE.getMessage());
- }
- // 如果出库中数量或已出库数量不是0,不能作废
- if (orderForUpdate.getOutingQty().compareTo(BigDecimal.ZERO) != 0 || orderForUpdate.getOutQty().compareTo(BigDecimal.ZERO) != 0) {
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ISEXISTS_AFTER_OPERATE.getMessage());
- }
- // 作废
- Order orderUpdate = new Order();
- orderUpdate.setFlgValid(false).setOrderId(id);
- super.update(orderUpdate, new UpdateWrapper<Order>().lambda().eq(Order::getOrderId,
- UUID.fromString(orderUpdate.getOrderId())));
- return ResponseResultUtil.success();
- }
- /**
- * @desc : 获取订单信息(编辑用)
- * @author : 付斌
- * @date : 2024-03-02 17:27
- */
- public ResponseResultVO<?> getOrderForUpdate(String id) {
- Map<String, Object> dataInfo = new HashMap<>();
- OrderResponse orderResponse = orderMapper.selectById(id);
- dataInfo.put("data", orderResponse);
- // 商品明细
- List<OrderItemResponse> orderItemResponse = orderItemMapper.selectByCond(new OrderItemQuery().setOrderId(id));
- dataInfo.put("dataItem", orderItemResponse);
- return ResponseResultUtil.success(dataInfo);
- }
- /**
- * @desc : 获取订单信息(出库用)
- * @author : 付斌
- * @date : 2024-03-02 17:27
- */
- public ResponseResultVO<?> getOrderForOut(String id) {
- Map<String, Object> dataInfo = new HashMap<>();
- OrderResponse orderResponse = orderMapper.selectById(id);
- dataInfo.put("data", orderResponse);
- // 商品明细
- List<OrderItemResponse> orderItem = orderItemMapper.selectByCondForOut(new OrderItemQuery().setOrderId(id));
- dataInfo.put("dataItem", orderItem);
- return ResponseResultUtil.success(dataInfo);
- }
- /**
- * @desc : 获取订单信息(退货用)
- * @author : 付斌
- * @date : 2024-03-02 17:27
- */
- public ResponseResultVO<?> getOrderForReturn(String id) {
- Map<String, Object> dataInfo = new HashMap<>();
- OrderResponse orderResponse = orderMapper.selectById(id);
- dataInfo.put("data", orderResponse);
- // 商品明细
- List<OrderItemResponse> orderItem = orderItemMapper.selectByCondForReturn(new OrderItemQuery().setOrderId(id));
- dataInfo.put("dataItem", orderItem);
- return ResponseResultUtil.success(dataInfo);
- }
- /**
- * @desc : 条件查询(总单带明细)
- * @author : 于继渤
- * @date : 2023/1/9 10:36
- */
- @Pagination
- public ResponseResultVO<PageList<OrderResponse>> selectTotalSingleTapeDetailPage(OrderQuery orderQuery) {
- return super.mergeListWithCount(orderQuery, orderMapper.selectByCondDetail(orderQuery),
- orderMapper.countByCondDetail(orderQuery));
- }
- }
|