he2802 hai 1 ano
pai
achega
2c2c3cab6b
Modificáronse 16 ficheiros con 1009 adicións e 0 borrados
  1. 118 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/order/OrderHandleController.java
  2. 1 0
      zhongzheng-common/src/main/java/com/zhongzheng/common/utils/DateUtils.java
  3. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderAddBo.java
  4. 72 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderHandleAddBo.java
  5. 83 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderHandleEditBo.java
  6. 72 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderHandleQueryBo.java
  7. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/Order.java
  8. 64 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderHandle.java
  9. 20 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/mapper/OrderHandleMapper.java
  10. 59 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderHandleService.java
  11. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderService.java
  12. 131 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderHandleServiceImpl.java
  13. 217 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java
  14. 103 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderHandleVo.java
  15. 62 0
      zhongzheng-system/src/main/resources/mapper/modules/order/OrderHandleMapper.xml
  16. 1 0
      zhongzheng-system/src/main/resources/mapper/modules/order/OrderMapper.xml

+ 118 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/order/OrderHandleController.java

@@ -0,0 +1,118 @@
+package com.zhongzheng.controller.order;
+
+import java.util.List;
+import java.util.Arrays;
+
+import cn.hutool.core.lang.Validator;
+import com.zhongzheng.common.core.domain.model.LoginUser;
+import com.zhongzheng.common.utils.SecurityUtils;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.framework.web.service.WxTokenService;
+import com.zhongzheng.modules.order.bo.OrderAddBo;
+import com.zhongzheng.modules.order.bo.OrderHandleAddBo;
+import com.zhongzheng.modules.order.bo.OrderHandleEditBo;
+import com.zhongzheng.modules.order.bo.OrderHandleQueryBo;
+import com.zhongzheng.modules.order.service.IOrderHandleService;
+import com.zhongzheng.modules.order.service.IOrderService;
+import com.zhongzheng.modules.order.vo.OrderHandleVo;
+import com.zhongzheng.modules.user.entity.ClientLoginUser;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 经办录单Controller
+ *
+ * @author hjl
+ * @date 2024-01-19
+ */
+@Api(value = "经办录单控制器", tags = {"经办录单管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/prder/handle")
+public class OrderHandleController extends BaseController {
+
+    private final IOrderHandleService iOrderHandleService;
+
+    private final WxTokenService wxTokenService;
+
+    private final IOrderService iOrderService;
+
+    /**
+     * 查询经办录单列表
+     */
+    @ApiOperation("查询经办录单列表")
+    @PreAuthorize("@ss.hasPermi('system:handle:list')")
+    @GetMapping("/list")
+    public TableDataInfo<OrderHandleVo> list(OrderHandleQueryBo bo) {
+        startPage();
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setCreateUserId(loginUser.getUser().getUserId());
+        List<OrderHandleVo> list = iOrderHandleService.selectList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出经办录单列表
+     */
+    @ApiOperation("导出经办录单列表")
+    @PreAuthorize("@ss.hasPermi('system:handle:export')")
+    @Log(title = "经办录单", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult<OrderHandleVo> export(OrderHandleQueryBo bo) {
+        List<OrderHandleVo> list = iOrderHandleService.queryList(bo);
+        ExcelUtil<OrderHandleVo> util = new ExcelUtil<OrderHandleVo>(OrderHandleVo.class);
+        return util.exportExcel(list, "经办录单");
+    }
+
+    /**
+     * 新增经办录单
+     */
+    @ApiOperation("新增经办录单")
+    @PreAuthorize("@ss.hasPermi('system:handle:add')")
+    @Log(title = "经办录单", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<String> add(@RequestBody OrderHandleAddBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setCreateUserId(loginUser.getUser().getUserId());
+        return AjaxResult.success("录单单号",iOrderHandleService.insertByAddBo(bo));
+    }
+
+    /**
+     * 修改经办录单
+     */
+    @ApiOperation("修改经办录单")
+    @PreAuthorize("@ss.hasPermi('system:handle:edit')")
+    @Log(title = "经办录单", businessType = BusinessType.UPDATE)
+    @PutMapping()
+    public AjaxResult<Void> edit(@RequestBody OrderHandleEditBo bo) {
+        return toAjax(iOrderHandleService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 新增订单
+     */
+    @ApiOperation("新增经办人子录单")
+    @PreAuthorize("@ss.hasPermi('system:order:add')")
+    @Log(title = "新增经办人子录单", businessType = BusinessType.INSERT)
+    @PostMapping("/inputOrder")
+    public AjaxResult addInputOrder(@RequestBody OrderAddBo bo) {
+        return AjaxResult.success(iOrderService.placePlatHandleOrder(bo));
+    }
+}

+ 1 - 0
zhongzheng-common/src/main/java/com/zhongzheng/common/utils/DateUtils.java

@@ -410,6 +410,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
         return "LD"+getDateOrderSn();
     }
 
+
     public static String getPayOrderSn()
     {
         return "P"+getDateOrderSn();

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderAddBo.java

@@ -113,4 +113,6 @@ public class OrderAddBo {
     private Integer openQuestionSign;
     @ApiModelProperty("业务系统订单标识")
     private Integer orgSign;
+    @ApiModelProperty("经办人订单编号")
+    private String handleOrderSn;
 }

+ 72 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderHandleAddBo.java

@@ -0,0 +1,72 @@
+package com.zhongzheng.modules.order.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+
+
+/**
+ * 经办录单添加对象 order_handle
+ *
+ * @author hjl
+ * @date 2024-01-19
+ */
+@Data
+@ApiModel("经办录单添加对象")
+public class OrderHandleAddBo {
+
+    /** 录单订单编号 */
+    @ApiModelProperty("录单订单编号")
+    private String handleOrderSn;
+    /** 系统订单操作人 */
+    @ApiModelProperty("系统订单操作人")
+    private String createUsername;
+    /** 1有效 0无效 */
+    @ApiModelProperty("1有效 0无效")
+    private Integer status;
+    /** 经办人操作人ID */
+    @ApiModelProperty("经办人操作人ID")
+    private Long createUserId;
+    /** 创建时间 */
+    @ApiModelProperty("创建时间")
+    private Long createTime;
+    /** 更新时间 */
+    @ApiModelProperty("更新时间")
+    private Long updateTime;
+    /** 教育类型id */
+    @ApiModelProperty("教育类型id")
+    private Long educationTypeId;
+    /** 业务层次id */
+    @ApiModelProperty("业务层次id")
+    private Long businessId;
+    /** 项目ID */
+    @ApiModelProperty("项目ID")
+    private Long projectId;
+    /** 录单来源 1经办人下单 */
+    @ApiModelProperty("录单来源 1经办人下单")
+    private Integer inputFrom;
+    /** 支付状态:0待支付 1已支付 -1已关闭 */
+    @ApiModelProperty("支付状态:0待支付 1已支付 -1已关闭  2审核中:对公支付提交审核中 -2不通过:对公支付审核不通过")
+    private Integer payStauts;
+    /** 商品类型 */
+    @ApiModelProperty("商品类型")
+    private Integer goodsType;
+    /** 订单标准价格 */
+    @ApiModelProperty("订单标准价格")
+    private BigDecimal orderPrice;
+    /** 支付平台 1微信 2对公转账 */
+    @ApiModelProperty("支付平台 1微信 2对公转账")
+    private Integer payType;
+    /** 支付时间 */
+    @ApiModelProperty("支付时间")
+    private Long payTime;
+    /** 支付价格(成交价) */
+    @ApiModelProperty("支付价格(成交价)")
+    private BigDecimal payPrice;
+
+}

+ 83 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderHandleEditBo.java

@@ -0,0 +1,83 @@
+package com.zhongzheng.modules.order.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+
+/**
+ * 经办录单编辑对象 order_handle
+ *
+ * @author hjl
+ * @date 2024-01-19
+ */
+@Data
+@ApiModel("经办录单编辑对象")
+public class OrderHandleEditBo {
+
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private Long id;
+
+    /** 录单订单编号 */
+    @ApiModelProperty("录单订单编号")
+    private String handleOrderSn;
+
+    /** 系统订单操作人 */
+    @ApiModelProperty("系统订单操作人")
+    private String createUsername;
+
+    /** 1有效 0无效 */
+    @ApiModelProperty("1有效 0无效")
+    private Integer status;
+
+    /** 经办人操作人ID */
+    @ApiModelProperty("经办人操作人ID")
+    private Long createUserId;
+
+    /** 更新时间 */
+    @ApiModelProperty("更新时间")
+    private Long updateTime;
+
+    /** 教育类型id */
+    @ApiModelProperty("教育类型id")
+    private Long educationTypeId;
+
+    /** 业务层次id */
+    @ApiModelProperty("业务层次id")
+    private Long businessId;
+
+    /** 项目ID */
+    @ApiModelProperty("项目ID")
+    private Long projectId;
+
+
+    /** 录单来源 1经办人下单 */
+    @ApiModelProperty("录单来源 1经办人下单")
+    private Integer inputFrom;
+
+    /** 支付状态:0待支付 1已支付 -1已关闭 */
+    @ApiModelProperty("支付状态:0待支付 1已支付 -1已关闭  2审核中:对公支付提交审核中 -2不通过:对公支付审核不通过")
+    private Integer payStauts;
+
+    /** 商品类型 */
+    @ApiModelProperty("商品类型")
+    private Integer goodsType;
+    /** 订单标准价格 */
+    @ApiModelProperty("订单标准价格")
+    private BigDecimal orderPrice;
+    /** 支付平台 1微信 2对公转账 */
+    @ApiModelProperty("支付平台 1微信 2对公转账")
+    private Integer payType;
+    /** 支付时间 */
+    @ApiModelProperty("支付时间")
+    private Long payTime;
+    /** 支付价格(成交价) */
+    @ApiModelProperty("支付价格(成交价)")
+    private BigDecimal payPrice;
+
+}

+ 72 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderHandleQueryBo.java

@@ -0,0 +1,72 @@
+package com.zhongzheng.modules.order.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+import java.util.Map;
+import java.util.HashMap;
+
+import com.zhongzheng.common.core.domain.BaseEntity;
+
+/**
+ * 经办录单分页查询对象 order_handle
+ *
+ * @author hjl
+ * @date 2024-01-19
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("经办录单分页查询对象")
+public class OrderHandleQueryBo extends BaseEntity {
+
+	/** 分页大小 */
+	@ApiModelProperty("分页大小")
+	private Integer pageSize;
+	/** 当前页数 */
+	@ApiModelProperty("当前页数")
+	private Integer pageNum;
+	/** 排序列 */
+	@ApiModelProperty("排序列")
+	private String orderByColumn;
+	/** 排序的方向desc或者asc */
+	@ApiModelProperty(value = "排序的方向", example = "asc,desc")
+	private String isAsc;
+
+
+	/** 录单订单编号 */
+	@ApiModelProperty("录单订单编号")
+	private String handleOrderSn;
+	/** 系统订单操作人 */
+	@ApiModelProperty("系统订单操作人")
+	private String createUsername;
+	/** 1有效 0无效 */
+	@ApiModelProperty("1有效 0无效")
+	private Integer status;
+	/** 经办人操作人ID */
+	@ApiModelProperty("经办人操作人ID")
+	private Long createUserId;
+	/** 教育类型id */
+	@ApiModelProperty("教育类型id")
+	private Long educationTypeId;
+	/** 业务层次id */
+	@ApiModelProperty("业务层次id")
+	private Long businessId;
+	/** 项目ID */
+	@ApiModelProperty("项目ID")
+	private Long projectId;
+	/** 录单来源 1经办人下单 */
+	@ApiModelProperty("录单来源 1经办人下单")
+	private Integer inputFrom;
+	/** 支付状态:0待支付 1已支付 -1已关闭 */
+	@ApiModelProperty("支付状态:0待支付 1已支付 -1已关闭  2审核中:对公支付提交审核中 -2不通过:对公支付审核不通过")
+	private Integer payStauts;
+	/** 商品类型 */
+	@ApiModelProperty("商品类型")
+	private Integer goodsType;
+
+	private String searchKey;
+
+}

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/Order.java

@@ -1,6 +1,7 @@
 package com.zhongzheng.modules.order.domain;
 
 import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
@@ -189,4 +190,5 @@ private static final long serialVersionUID=1L;
     /** 业务系统订单标识 */
     private Integer orgSign;
 
+    private String handleOrderSn;
 }

+ 64 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderHandle.java

@@ -0,0 +1,64 @@
+package com.zhongzheng.modules.order.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import java.io.Serializable;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.zhongzheng.common.annotation.Excel;
+
+/**
+ * 经办录单对象 order_handle
+ *
+ * @author hjl
+ * @date 2024-01-19
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("order_handle")
+public class OrderHandle implements Serializable {
+
+private static final long serialVersionUID=1L;
+
+    /** $column.columnComment */
+    @TableId(value = "id")
+    private Long id;
+    /** 录单订单编号 */
+    private String handleOrderSn;
+    /** 系统订单操作人 */
+    private String createUsername;
+    /** 1有效 0无效 */
+    private Integer status;
+    /** 经办人操作人ID */
+    private Long createUserId;
+    /** 创建时间 */
+    @TableField(fill = FieldFill.INSERT)
+    private Long createTime;
+    /** 更新时间 */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateTime;
+    /** 教育类型id */
+    private Long educationTypeId;
+    /** 业务层次id */
+    private Long businessId;
+    /** 项目ID */
+    private Long projectId;
+    /** 录单来源 1经办人下单 */
+    private Integer inputFrom;
+    /** 支付状态:0待支付 1已支付 -1已关闭  2审核中:对公支付提交审核中 -2不通过:对公支付审核不通过 */
+    private Integer payStauts;
+    /** 商品类型 */
+    private Integer goodsType;
+    /** 订单标准价格 */
+    private BigDecimal orderPrice;
+    /** 支付平台 1微信 2对公转账 */
+    private Integer payType;
+    /** 支付时间 */
+    private Long payTime;
+    /** 支付价格(成交价) */
+    private BigDecimal payPrice;
+
+}

+ 20 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/mapper/OrderHandleMapper.java

@@ -0,0 +1,20 @@
+package com.zhongzheng.modules.order.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.order.bo.OrderHandleQueryBo;
+import com.zhongzheng.modules.order.domain.OrderHandle;
+import com.zhongzheng.modules.order.vo.OrderHandleVo;
+
+import java.util.List;
+
+/**
+ * 经办录单Mapper接口
+ *
+ * @author hjl
+ * @date 2024-01-19
+ */
+public interface OrderHandleMapper extends BaseMapper<OrderHandle> {
+
+    List<OrderHandleVo> selectList(OrderHandleQueryBo bo);
+
+}

+ 59 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderHandleService.java

@@ -0,0 +1,59 @@
+package com.zhongzheng.modules.order.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.modules.order.bo.OrderHandleAddBo;
+import com.zhongzheng.modules.order.bo.OrderHandleEditBo;
+import com.zhongzheng.modules.order.bo.OrderHandleQueryBo;
+import com.zhongzheng.modules.order.bo.OrderInputQueryBo;
+import com.zhongzheng.modules.order.domain.OrderHandle;
+import com.zhongzheng.modules.order.domain.OrderInput;
+import com.zhongzheng.modules.order.vo.OrderHandleVo;
+import com.zhongzheng.modules.order.vo.OrderInputVo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 经办录单Service接口
+ *
+ * @author hjl
+ * @date 2024-01-19
+ */
+public interface IOrderHandleService extends IService<OrderHandle> {
+	/**
+	 * 查询单个
+	 * @return
+	 */
+	OrderHandleVo queryById(Long id);
+
+	OrderHandle queryBySn(String handleOrderSn);
+
+	/**
+	 * 查询列表
+	 */
+	List<OrderHandleVo> queryList(OrderHandleQueryBo bo);
+
+	List<OrderHandleVo> selectList(OrderHandleQueryBo bo);
+
+	/**
+	 * 根据新增业务对象插入经办录单
+	 * @param bo 经办录单新增业务对象
+	 * @return
+	 */
+	String insertByAddBo(OrderHandleAddBo bo);
+
+	/**
+	 * 根据编辑业务对象修改经办录单
+	 * @param bo 经办录单编辑业务对象
+	 * @return
+	 */
+	Boolean updateByEditBo(OrderHandleEditBo bo);
+
+	/**
+	 * 校验并删除数据
+	 * @param ids 主键集合
+	 * @param isValid 是否校验,true-删除前校验,false-不校验
+	 * @return
+	 */
+	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderService.java

@@ -62,6 +62,8 @@ public interface IOrderService extends IService<Order> {
 
 	Map<String, Object> placePlatInputOrder(OrderAddBo bo);
 
+	Map<String, Object> placePlatHandleOrder(OrderAddBo bo);
+
 	boolean joinGrade(Long orderGoodsId,Long gradeId,Long userId);
 	/**
 	 * 小程序下单

+ 131 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderHandleServiceImpl.java

@@ -0,0 +1,131 @@
+package com.zhongzheng.modules.order.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.lang.Validator;
+import cn.hutool.core.util.StrUtil;
+import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.modules.order.bo.OrderHandleAddBo;
+import com.zhongzheng.modules.order.bo.OrderHandleEditBo;
+import com.zhongzheng.modules.order.bo.OrderHandleQueryBo;
+import com.zhongzheng.modules.order.domain.OrderHandle;
+import com.zhongzheng.modules.order.domain.OrderInput;
+import com.zhongzheng.modules.order.mapper.OrderHandleMapper;
+import com.zhongzheng.modules.order.service.IOrderHandleService;
+import com.zhongzheng.modules.order.vo.OrderHandleVo;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.pagehelper.Page;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 经办录单Service业务层处理
+ *
+ * @author hjl
+ * @date 2024-01-19
+ */
+@Service
+public class OrderHandleServiceImpl extends ServiceImpl<OrderHandleMapper, OrderHandle> implements IOrderHandleService {
+
+    @Override
+    public OrderHandleVo queryById(Long id){
+        OrderHandle db = this.baseMapper.selectById(id);
+        return BeanUtil.toBean(db, OrderHandleVo.class);
+    }
+
+    @Override
+    public OrderHandle queryBySn(String handleOrderSn) {
+        return getOne(new LambdaQueryWrapper<OrderHandle>().eq(OrderHandle::getHandleOrderSn,handleOrderSn));
+    }
+
+    @Override
+    public List<OrderHandleVo> queryList(OrderHandleQueryBo bo) {
+        LambdaQueryWrapper<OrderHandle> lqw = Wrappers.lambdaQuery();
+        lqw.eq(StrUtil.isNotBlank(bo.getHandleOrderSn()), OrderHandle::getHandleOrderSn, bo.getHandleOrderSn());
+        lqw.like(StrUtil.isNotBlank(bo.getCreateUsername()), OrderHandle::getCreateUsername, bo.getCreateUsername());
+        lqw.eq(bo.getStatus() != null, OrderHandle::getStatus, bo.getStatus());
+        lqw.eq(bo.getCreateUserId() != null, OrderHandle::getCreateUserId, bo.getCreateUserId());
+        lqw.eq(bo.getEducationTypeId() != null, OrderHandle::getEducationTypeId, bo.getEducationTypeId());
+        lqw.eq(bo.getBusinessId() != null, OrderHandle::getBusinessId, bo.getBusinessId());
+        lqw.eq(bo.getProjectId() != null, OrderHandle::getProjectId, bo.getProjectId());
+        lqw.eq(bo.getInputFrom() != null, OrderHandle::getInputFrom, bo.getInputFrom());
+        lqw.eq(bo.getPayStauts() != null, OrderHandle::getPayStauts, bo.getPayStauts());
+        lqw.eq(bo.getGoodsType() != null, OrderHandle::getGoodsType, bo.getGoodsType());
+        return entity2Vo(this.list(lqw));
+    }
+
+    @Override
+    public List<OrderHandleVo> selectList(OrderHandleQueryBo bo) {
+        return this.baseMapper.selectList(bo);
+    }
+
+    /**
+    * 实体类转化成视图对象
+    *
+    * @param collection 实体类集合
+    * @return
+    */
+    private List<OrderHandleVo> entity2Vo(Collection<OrderHandle> collection) {
+        List<OrderHandleVo> voList = collection.stream()
+                .map(any -> BeanUtil.toBean(any, OrderHandleVo.class))
+                .collect(Collectors.toList());
+        if (collection instanceof Page) {
+            Page<OrderHandle> page = (Page<OrderHandle>)collection;
+            Page<OrderHandleVo> pageVo = new Page<>();
+            BeanUtil.copyProperties(page,pageVo);
+            pageVo.addAll(voList);
+            voList = pageVo;
+        }
+        return voList;
+    }
+
+    @Override
+    public String insertByAddBo(OrderHandleAddBo bo) {
+        if(Validator.isEmpty(bo.getBusinessId())||Validator.isEmpty(bo.getGoodsType())||Validator.isEmpty(bo.getInputFrom())||Validator.isEmpty(bo.getPayType())){
+            throw new CustomException("参数缺失");
+        }
+        OrderHandle add = BeanUtil.toBean(bo, OrderHandle.class);
+        validEntityBeforeSave(add);
+        add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
+        add.setHandleOrderSn(DateUtils.getTagOrderSn("HD"));
+        if(Validator.isEmpty(add.getInputFrom())){
+            add.setInputFrom(1);
+        }
+        if(this.save(add)){
+            return add.getHandleOrderSn();
+        }
+        return null;
+    }
+
+    @Override
+    public Boolean updateByEditBo(OrderHandleEditBo bo) {
+        OrderHandle update = BeanUtil.toBean(bo, OrderHandle.class);
+        validEntityBeforeSave(update);
+        update.setUpdateTime(DateUtils.getNowTime());
+        return this.updateById(update);
+    }
+
+    /**
+     * 保存前的数据校验
+     *
+     * @param entity 实体类数据
+     */
+    private void validEntityBeforeSave(OrderHandle entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return this.removeByIds(ids);
+    }
+}

+ 217 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java

@@ -219,6 +219,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     @Value("${oldStudySys.createExamPath}")
     private String CREATE_EXAM_PATH;
 
+    @Autowired
+    private IOrderHandleService iOrderHandleService;
+
     @Override
     public OrderVo queryById(Long orderId) {
         Order db = this.baseMapper.selectById(orderId);
@@ -867,6 +870,220 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         return result;
     }
 
+    @Override
+    public Map<String, Object> placePlatHandleOrder(OrderAddBo bo) {
+        List<OrderGoodsAddBo> goodsList = bo.getGoodsList();
+        if (goodsList == null || goodsList.size() < 1) {
+            throw new CustomException("商品列表为空", 510);
+        }
+        if (Validator.isEmpty(bo.getUserId())) {
+            throw new CustomException("用户ID缺失", 510);
+        }
+        if (Validator.isEmpty(bo.getInputOrderSn())) {
+            throw new CustomException("录单单号为空", 510);
+        }
+        OrderHandle orderHandle = iOrderHandleService.queryBySn(bo.getHandleOrderSn());
+        if (Validator.isEmpty(orderHandle)) {
+            throw new CustomException("录单单号不存在", 510);
+        }
+        Order add = BeanUtil.toBean(bo, Order.class);
+        validEntityBeforeSave(add);
+        add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
+        add.setOrderType(Order.CONSUME_ORDER);
+        add.setOrderFrom(11);
+        add.setHandleOrderSn(bo.getHandleOrderSn());
+        if(orderHandle.getPayType()==1){
+            add.setPayType(1);
+        }else if(orderHandle.getPayType()==2){
+            add.setPayType(7);
+        }
+        //订单运营类型
+        String tenantId = ServletUtils.getRequest().getHeader("TenantId");
+        SysOldOrg oldOrg = iSysOldOrgService.getOne(new LambdaQueryWrapper<SysOldOrg>().eq(SysOldOrg::getTenantId, Long.valueOf(tenantId)).last("limit 1"));
+        if (ObjectUtils.isNotNull(oldOrg)){
+            add.setOperationType(oldOrg.getOperationType());
+        }
+        //生成订单号
+        String out_trade_no = DateUtils.getDateOrderSn();
+
+        BigDecimal totalPrice = new BigDecimal(0);
+        BigDecimal payPrice = new BigDecimal(0);
+        BigDecimal receivedPrice = new BigDecimal(0);
+        //收费的商品列表,不含免费
+        List<OrderGoods> payList = new ArrayList<>();
+        List<OrderGoods> freeList = new ArrayList<>();
+        //生成订单
+        for (OrderGoodsAddBo g : goodsList) {
+            //订单商品
+            Goods goods = iGoodsService.getOne(new LambdaQueryWrapper<Goods>().eq(Goods::getGoodsId, g.getGoodsId()));
+            if (Validator.isEmpty(goods)) {
+                throw new CustomException("商品不存在", 510);
+            }
+            //校验是否有重复商品
+            if (StringUtils.isNotBlank(g.getSevenYear())){
+                Long count = iOrderGoodsService.countOrderGoodsByYear(g.getSevenYear(),g.getGoodsId(),bo.getUserId());
+                if (count > 0){
+                    throw new CustomException(goods.getGoodsName() + ",请勿重复购买相同年份的商品");
+                }
+            }
+//            if (goods.getGoodsStatus() != 1) {
+//                throw new CustomException(goods.getGoodsName()+"商品已下架,请重新选择商品下单", 510);
+//            }
+            OrderGoods orderGoods = BeanUtil.toBean(g, OrderGoods.class);
+            orderGoods.setOrderSn(out_trade_no);
+            if (g.getGoodsInputData() != null) {
+                orderGoods.setGoodsInputData(JSON.toJSONString(g.getGoodsInputData()));
+            }
+            if (g.getGoodsReceived().compareTo(g.getGoodsRealPrice()) == 1) {
+                throw new CustomException("已收费大于成交价", 510);
+            }
+            if (StringUtils.isNotBlank(goods.getSevenYear())){
+                orderGoods.setSevenYear(goods.getSevenYear());
+            }
+            //成交价
+            orderGoods.setGoodsRealPrice(g.getGoodsRealPrice());
+            orderGoods.setGoodsYear(goods.getYear().toString());
+            orderGoods.setCreateTime(DateUtils.getNowTime());
+            orderGoods.setUpdateTime(DateUtils.getNowTime());
+            orderGoods.setGoodsReceived(g.getGoodsReceived());
+            if (ObjectUtils.isNotNull(g.getSubOrderGoodsId())){
+                //补充考试次数订单商品ID
+                orderGoods.setSubOrderGoodsId(g.getSubOrderGoodsId());
+                orderGoods.setOpenQuestionSign(bo.getOpenQuestionSign());
+            }
+            //订单标准价格不计算优惠
+            totalPrice = totalPrice.add(goods.getStandPrice());
+            //实际应收价格
+            payPrice = payPrice.add(g.getGoodsRealPrice());
+            //已收价格
+            receivedPrice = receivedPrice.add(g.getGoodsReceived());
+            boolean orderGoodsRs = iOrderGoodsService.save(orderGoods);
+            boolean canRepeatBuy = false;
+            validUserBeforeBuy(goods, bo.getUserId());
+            //判断是否有购买过
+            Long oldOrderGoodsId = getHaveBuyGoods(g.getGoodsId(), bo.getUserId());
+            //视频商品安排班级
+            if (goods.getGoodsType() == 1) {
+                if (Validator.isNotEmpty(goods.getStudyCount())) {
+                    orderGoods.setStudyCount(goods.getStudyCount() - 1); //默认消耗一次学习机会
+                } else {
+                    orderGoods.setStudyCount(0L);//没配置则为0
+                }
+
+                Long gradeId = null;
+                //判断是否购买历史班级都过期
+                canRepeatBuy = this.canBuyRepeatGoods(g.getGoodsId(), bo.getUserId(),g.getSevenYear());
+                if (g.getGoodsInputData() != null) {
+                    gradeId = g.getGoodsInputData().getGradeId();
+                    if (Validator.isNotEmpty(oldOrderGoodsId)) {
+                        //有指定选班模板且视频商品班级已过期,记录复购状态
+                        orderGoods.setRebuyOrderGoodsId(oldOrderGoodsId);
+                    }
+                }
+                String requestId = IdUtil.simpleUUID();
+                RedisLockEntity redisLockEntity = new RedisLockEntity();
+                redisLockEntity.setLockKey(RedisLockEntity.KEY_LOCK_GRADE);
+                redisLockEntity.setRequestId(requestId);
+                boolean isArrange = false;
+                if (redisCache.lock(redisLockEntity)) {
+                    isArrange = arrangeGrade(goods.getGoodsName(), goods.getGoodsId(), orderGoods.getOrderGoodsId(), gradeId, add.getUserId(), out_trade_no, goods.getBusinessId());
+                    redisCache.unlockLua(redisLockEntity);
+                }
+                if (!isArrange) {
+                    throw new CustomException("分班错误", 510);
+                }
+                iOrderGoodsService.updateById(orderGoods);
+                newFreeBankGoods(goods.getGoodsId(), orderGoods.getOrderGoodsId());
+            }
+
+            if (!canRepeatBuy && goods.getGoodsType() != 3 && goods.getGoodsType() != 4) {
+                this.checkBuyGoods(g.getGoodsId(), bo.getUserId(), goods.getGoodsType());
+            }
+            if (goods.getGoodsType() == 6) {
+                //直播商品
+                if (Validator.isNotEmpty(oldOrderGoodsId) && oldOrderGoodsId.longValue() > 0) {
+                    throw new CustomException("直播商品不允许复购");
+                }
+            }
+            //商品0元或已收费加入收费商品列表
+            if (g.getGoodsRealPrice().compareTo(BigDecimal.ZERO) == 0) {
+                //免费的
+                freeList.add(orderGoods);
+            } else if (g.getGoodsRealPrice().compareTo(BigDecimal.ZERO) > 0 && g.getGoodsReceived().compareTo(BigDecimal.ZERO) > 0) {
+                //有收费的
+                payList.add(orderGoods);
+            }
+        }
+
+        add.setOrderSn(out_trade_no);
+        if (Validator.isNotEmpty(bo.getOrderFrom()) && bo.getOrderFrom() == 6) {
+            add.setOrderFrom(bo.getOrderFrom());
+        } else {
+            add.setOrderFrom(Order.FROM_INPUT);
+        }
+        add.setPayPrice(payPrice);//需要支付价格
+        add.setOrderPrice(totalPrice);//标准价格
+        orderHandle.setPayPrice(orderHandle.getPayPrice().add(payPrice));
+        orderHandle.setOrderPrice(orderHandle.getOrderPrice().add(totalPrice));
+        orderHandle.setUpdateTime(DateUtils.getNowTime());
+        iOrderHandleService.updateById(orderHandle);
+        //有已收费的商品,修改订单支付状态
+        if ((freeList.size() + payList.size()) > 0) {
+            add.setOrderStatus(Order.ORDER_STATUS_PAY);
+            if (payPrice.compareTo(BigDecimal.ZERO) == 0) {
+                //总订单0元
+                add.setPayStatus(Order.PAY_FREE);
+            } else if (payPrice.compareTo(receivedPrice) == 0) {
+                //完全收费
+                add.setPayStatus(Order.PAY_FULL);
+            } else {
+                //部分收费
+                add.setPayStatus(Order.PAY_PART);
+            }
+            add.setStatus(1);
+        }
+        if (bo.getOrderFrom() != 6){
+            orderCostHandle(add,1);
+        }
+        this.save(add);
+        //处理收费商品,生成计费单
+        Map<String, Object> billRs = null;
+        if (payList.size() > 0) {
+            OrderBillSheetAddBo billSheetAddBo = new OrderBillSheetAddBo();
+            billSheetAddBo.setInputOrderSn(bo.getInputOrderSn());
+            List<OrderBillGoodsAddBo> billGoodsList = new ArrayList<>();
+            for (OrderGoods orderGoods : payList) {
+                OrderBillGoodsAddBo billGoodsAddBo = new OrderBillGoodsAddBo();
+                billGoodsAddBo.setOrderSn(add.getOrderSn());
+                billGoodsAddBo.setGoodsId(orderGoods.getGoodsId());
+                billGoodsAddBo.setOrderGoodsId(orderGoods.getOrderGoodsId());
+                billGoodsAddBo.setAmount(orderGoods.getGoodsReceived());
+                billGoodsList.add(billGoodsAddBo);
+//                //商品是否有活动模考
+//                iUserMockSubscribeService.addActivityMock(orderGoods.getGoodsId(),add.getUserId());
+            }
+            billSheetAddBo.setGoodsList(billGoodsList);
+            billRs = iOrderBillSheetService.placeBillInputOrder(billSheetAddBo);
+        }
+
+        //处理免费商品
+        for (OrderGoods orderGoods : freeList) {
+            dealFreeGoods(orderGoods, add);
+        }
+        instTimeSettleOrder(add,DateUtils.getNowTime());
+        Map<String, Object> result = new HashMap<>();
+        result.put("orderId", add.getOrderId());
+        result.put("orderSn", out_trade_no);
+        result.put("sheetId", null);
+        result.put("sheetSn", null);
+        if (Validator.isNotEmpty(billRs)) {
+            result.put("sheetId", billRs.get("sheetId"));
+            result.put("sheetSn", billRs.get("sheetSn"));
+        }
+        return result;
+    }
+
     private void instTimeSettleOrder(Order order, Long checkTime) {
         String tenantId = ServletUtils.getRequest().getHeader("TenantId");
         SysOldOrg sysOldOrg = sysOldOrgService.getOne(new LambdaQueryWrapper<SysOldOrg>()

+ 103 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderHandleVo.java

@@ -0,0 +1,103 @@
+package com.zhongzheng.modules.order.vo;
+
+import com.zhongzheng.common.annotation.Excel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+
+
+/**
+ * 经办录单视图对象 mall_package
+ *
+ * @author hjl
+ * @date 2024-01-19
+ */
+@Data
+@ApiModel("经办录单视图对象")
+public class OrderHandleVo {
+	private static final long serialVersionUID = 1L;
+
+	/** $pkColumn.columnComment */
+	@ApiModelProperty("$pkColumn.columnComment")
+	private Long id;
+
+	/** 录单订单编号 */
+	@Excel(name = "录单订单编号")
+	@ApiModelProperty("录单订单编号")
+	private String handleOrderSn;
+	/** 系统订单操作人 */
+	@Excel(name = "系统订单操作人")
+	@ApiModelProperty("系统订单操作人")
+	private String createUsername;
+	/** 1有效 0无效 */
+	@Excel(name = "1有效 0无效")
+	@ApiModelProperty("1有效 0无效")
+	private Integer status;
+	/** 经办人操作人ID */
+	@Excel(name = "经办人操作人ID")
+	@ApiModelProperty("经办人操作人ID")
+	private Long createUserId;
+	/** 教育类型id */
+	@Excel(name = "教育类型id")
+	@ApiModelProperty("教育类型id")
+	private Long educationTypeId;
+	/** 业务层次id */
+	@Excel(name = "业务层次id")
+	@ApiModelProperty("业务层次id")
+	private Long businessId;
+	/** 项目ID */
+	@Excel(name = "项目ID")
+	@ApiModelProperty("项目ID")
+	private Long projectId;
+	/** 录单来源 1经办人下单 */
+	@Excel(name = "录单来源 1经办人下单")
+	@ApiModelProperty("录单来源 1经办人下单")
+	private Integer inputFrom;
+	/** 支付状态:0待支付 1已支付 -1已关闭 */
+	@Excel(name = "支付状态:0待支付 1已支付 -1已关闭")
+	@ApiModelProperty("支付状态:0待支付 1已支付 -1已关闭  2审核中:对公支付提交审核中 -2不通过:对公支付审核不通过")
+	private Integer payStauts;
+	/** 商品类型 */
+	@Excel(name = "商品类型")
+	@ApiModelProperty("商品类型")
+	private Integer goodsType;
+	/** 订单标准价格 */
+	@Excel(name = "订单标准价格")
+	@ApiModelProperty("订单标准价格")
+	private BigDecimal orderPrice;
+	/** 支付平台 1微信 2对公转账 */
+	@Excel(name = "支付平台 1微信 2对公转账")
+	@ApiModelProperty("支付平台 1微信 2对公转账")
+	private Integer payType;
+	/** 支付时间 */
+	@Excel(name = "支付时间")
+	@ApiModelProperty("支付时间")
+	private Long payTime;
+	/** 支付价格(成交价) */
+	@Excel(name = "支付价格(成交价)")
+	@ApiModelProperty("支付价格(成交价)")
+	private BigDecimal payPrice;
+
+	@ApiModelProperty("教育名称")
+	private String educationName;
+	@ApiModelProperty("项目名称")
+	private String projectName;
+	@ApiModelProperty("业务名称")
+	private String businessName;
+
+	@ApiModelProperty("用户人数")
+	private Integer userNum;
+	@ApiModelProperty("商品人数")
+	private Integer goodsNum;
+
+	private Long createTime;
+
+	@ApiModelProperty("已退费金额")
+	private BigDecimal goodsRefund;
+
+}

+ 62 - 0
zhongzheng-system/src/main/resources/mapper/modules/order/OrderHandleMapper.xml

@@ -0,0 +1,62 @@
+<?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.zhongzheng.modules.order.mapper.OrderHandleMapper">
+
+    <resultMap type="com.zhongzheng.modules.order.domain.OrderHandle" id="OrderHandleResult">
+        <result property="id" column="id"/>
+        <result property="handleOrderSn" column="handle_order_sn"/>
+        <result property="createUsername" column="create_username"/>
+        <result property="status" column="status"/>
+        <result property="createUserId" column="create_user_id"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="educationTypeId" column="education_type_id"/>
+        <result property="businessId" column="business_id"/>
+        <result property="projectId" column="project_id"/>
+        <result property="inputFrom" column="input_from"/>
+        <result property="payStauts" column="pay_stauts"/>
+        <result property="goodsType" column="goods_type"/>
+    </resultMap>
+
+    <select id="selectList" parameterType="com.zhongzheng.modules.order.bo.OrderHandleQueryBo" resultType="com.zhongzheng.modules.order.vo.OrderHandleVo">
+        SELECT  u.*,
+        (select count( DISTINCT o.user_id ) from `order` o  where  u.handle_order_sn = o.handle_order_sn) user_num,
+        (select count( DISTINCT og.goods_id ) from `order` o  LEFT JOIN order_goods og ON o.order_sn = og.order_sn where  u.handle_order_sn = o.handle_order_sn) goods_num,
+        cet.education_name education_name,
+        cpt.project_name project_name,
+        cb.business_name business_name,
+        (select IFNULL(sum(og.goods_received),0) from order_goods og LEFT JOIN `order` o on o.order_sn = og.order_sn  where o.handle_order_sn = u.handle_order_sn and og.refund_status = 2) goods_refund
+        FROM (SELECT
+        oh.*
+        FROM
+        order_handle oh
+        where 1=1
+        <if test="businessId != null and businessId != ''">
+            AND oh.business_id = #{businessId}
+        </if>
+        <if test="educationTypeId != null and educationTypeId != ''">
+            AND oh.education_type_id = #{educationTypeId}
+        </if>
+        <if test="searchKey != null and searchKey != ''">
+            AND (oh.create_username like concat('%', #{searchKey}, '%') or oh.handle_order_sn = #{searchKey})
+        </if>
+        <if test="goodsType != null">
+            AND oh.goods_type = #{goodsType}
+        </if>
+        <if test="createUserId != null">
+            AND oh.create_user_id = #{createUserId}
+        </if>
+        <if test="payStauts != null and payStauts != ''">
+            AND oh.pay_stauts = #{payStauts}
+        </if>)u
+
+        LEFT JOIN course_education_type cet ON u.education_type_id = cet.id
+        LEFT JOIN course_project_type cpt ON u.project_id = cpt.id
+        LEFT JOIN course_business cb ON u.business_id = cb.id
+        where 1=1
+        ORDER BY u.create_time DESC
+    </select>
+
+</mapper>

+ 1 - 0
zhongzheng-system/src/main/resources/mapper/modules/order/OrderMapper.xml

@@ -26,6 +26,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="createSysUserId" column="create_sys_user_id"/>
         <result property="inputOrderSn" column="input_order_sn"/>
         <result property="payStatus" column="pay_status"/>
+        <result property="handleOrderSn" column="handle_order_sn"/>
     </resultMap>
 
     <resultMap type="com.zhongzheng.modules.order.vo.OrderListVo" id="OrderResultVo">