Browse Source

科技成果订单列表&&科技成果"我要购买"

Antiloveg 8 years ago
parent
commit
d1927b6b70

+ 28 - 0
schema/2017-06-02.sql

@@ -0,0 +1,28 @@
+CREATE TABLE `achievement_order` (
+  `id` VARCHAR(36) NOT NULL,
+  `serial_number` INT(8) NULL COMMENT '编号' AUTO_INCREMENT,
+  `achievement_id` VARCHAR(36) NOT NULL COMMENT '科技成果ID',
+  `uid` VARCHAR(36) NULL COMMENT '购买科技成果人ID',
+  `create_time` DATETIME NULL COMMENT '购买时间',
+  `status` INT(1) NULL COMMENT '流程变动(0--初始意向,1--意向金,2--签订合同,3--合同金,4--佣金,5--服务金,6--关闭(未签合同),7--关闭(已签合同))',
+  `intention_money` INT(8) NULL COMMENT '意向金',
+  `contract_money` INT(8) NULL COMMENT '合同金',
+  `commission` INT(8) NULL COMMENT '佣金',
+  `service_money` INT(8) NULL COMMENT '服务金',
+  `refund` INT(1) NULL COMMENT '是否退款(0--未退款,1--已退款)',
+  `deleted_sign` INT(1) NULL COMMENT '删除标记(0--未删除,1--已删除)',
+  PRIMARY KEY (`id`),
+  INDEX `serialNumber` (`serial_number` ASC))
+ENGINE = InnoDB AUTO_INCREMENT= 600000
+COMMENT = '科技成果意向单/交易单';
+
+CREATE TABLE `achievement_order_log` (
+  `id` VARCHAR(36) NOT NULL,
+  `achievement_order_id` VARCHAR(36) NULL COMMENT '科技成果订单ID',
+  `record_time` DATETIME NULL,
+  `status` INT(1) NULL COMMENT '状态',
+  `operator` VARCHAR(36) NULL COMMENT '记录操作人',
+  `comment` VARCHAR(128) NULL COMMENT '备注',
+  PRIMARY KEY (`id`))
+ENGINE = InnoDB
+COMMENT = '科技成果意向单/交易单log';

+ 197 - 0
src/main/java/com/goafanti/achievement/bo/AchievementOrderListBo.java

@@ -0,0 +1,197 @@
+package com.goafanti.achievement.bo;
+
+import java.util.Date;
+
+import org.apache.commons.lang3.time.DateFormatUtils;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonFormat.Shape;
+import com.goafanti.common.constant.AFTConstants;
+
+public class AchievementOrderListBo {
+	private String	id;
+
+	/**
+	 * 编号
+	 */
+	private Integer	serialNumber;
+
+	/**
+	 * 科技成果ID
+	 */
+	private String	achievementId;
+
+	/**
+	 * 购买时间
+	 */
+	private Date	createTime;
+
+
+	/**
+	 * 流程变动(0--初始意向,1--意向金,2--签订合同,3--合同金,4--佣金,5--服务金,6--关闭)
+	 */
+	private Integer	status;
+
+	/**
+	 * 意向金
+	 */
+	private Integer	intentionMoney;
+
+	/**
+	 * 合同金
+	 */
+	private Integer	contractMoney;
+
+	/**
+	 * 佣金
+	 */
+	private Integer	commission;
+
+	/**
+	 * 服务金
+	 */
+	private Integer	serviceMoney;
+
+	/**
+	 * 科技成果名称
+	 */
+	private String	name;
+
+	/**
+	 * 科技需求编号
+	 */
+	private Integer	achievementSerialNumber;
+
+	/**
+	 * 科技成果删除标记
+	 */
+	private Integer	deletedSign;
+
+	/**
+	 * 科技成果审核状态
+	 */
+	private Integer	auditStatus;
+
+	@JsonFormat(shape = Shape.STRING)
+	public Integer getDeletedSign() {
+		return deletedSign;
+	}
+
+	public void setDeletedSign(Integer deletedSign) {
+		this.deletedSign = deletedSign;
+	}
+
+	@JsonFormat(shape = Shape.STRING)
+	public Integer getAuditStatus() {
+		return auditStatus;
+	}
+
+	public void setAuditStatus(Integer auditStatus) {
+		this.auditStatus = auditStatus;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public Integer getSerialNumber() {
+		return serialNumber;
+	}
+
+	public void setSerialNumber(Integer serialNumber) {
+		this.serialNumber = serialNumber;
+	}
+
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+
+	@JsonFormat(shape = Shape.STRING)
+	public Integer getStatus() {
+		return status;
+	}
+
+	public void setStatus(Integer status) {
+		this.status = status;
+	}
+
+	public Integer getIntentionMoney() {
+		return intentionMoney;
+	}
+
+	public void setIntentionMoney(Integer intentionMoney) {
+		this.intentionMoney = intentionMoney;
+	}
+
+	public Integer getContractMoney() {
+		return contractMoney;
+	}
+
+	public void setContractMoney(Integer contractMoney) {
+		this.contractMoney = contractMoney;
+	}
+
+	public Integer getCommission() {
+		return commission;
+	}
+
+	public void setCommission(Integer commission) {
+		this.commission = commission;
+	}
+
+	public Integer getServiceMoney() {
+		return serviceMoney;
+	}
+
+	public void setServiceMoney(Integer serviceMoney) {
+		this.serviceMoney = serviceMoney;
+	}
+	
+	public String getAchievementId() {
+		return achievementId;
+	}
+
+	public void setAchievementId(String achievementId) {
+		this.achievementId = achievementId;
+	}
+
+	public Integer getAchievementSerialNumber() {
+		return achievementSerialNumber;
+	}
+
+	public void setAchievementSerialNumber(Integer achievementSerialNumber) {
+		this.achievementSerialNumber = achievementSerialNumber;
+	}
+
+	public String getCreateTimeFormattedDate() {
+		if (this.createTime == null) {
+			return null;
+		} else {
+			return DateFormatUtils.format(this.getCreateTime(), AFTConstants.YYYYMMDD);
+		}
+	}
+
+	public void setCreateTimeFormattedDate(String createTimeFormattedDate) {
+
+	}
+
+}

+ 94 - 0
src/main/java/com/goafanti/achievement/bo/InputAchievementOrder.java

@@ -0,0 +1,94 @@
+package com.goafanti.achievement.bo;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.Size;
+
+import com.goafanti.common.constant.ErrorConstants;
+
+public class InputAchievementOrder {
+	@Size(min = 0, max = 36, message = "{" + ErrorConstants.PARAM_SIZE_ERROR + "}")
+	private String	achievementId;
+
+	@Max(value = 99999999, message = "{" + ErrorConstants.PARAM_ERROR + "}")
+	@Min(value = 0, message = "{" + ErrorConstants.PARAM_ERROR + "}")
+	private Integer	intentionMoney;
+	
+	@Max(value = 99999999, message = "{" + ErrorConstants.PARAM_ERROR + "}")
+	@Min(value = 0, message = "{" + ErrorConstants.PARAM_ERROR + "}")
+	private Integer	contractMoney;
+	
+	@Max(value = 99999999, message = "{" + ErrorConstants.PARAM_ERROR + "}")
+	@Min(value = 0, message = "{" + ErrorConstants.PARAM_ERROR + "}")
+	private Integer	commission;
+	
+	@Max(value = 99999999, message = "{" + ErrorConstants.PARAM_ERROR + "}")
+	@Min(value = 0, message = "{" + ErrorConstants.PARAM_ERROR + "}")
+	private Integer	serviceMoney;
+	
+	@Max(value = 7, message = "{" + ErrorConstants.PARAM_ERROR + "}")
+	@Min(value = 0, message = "{" + ErrorConstants.PARAM_ERROR + "}")
+	private Integer	status;
+	
+	@Size(min = 0, max = 128, message = "{" + ErrorConstants.PARAM_SIZE_ERROR + "}")
+	private String comment;
+
+	public String getAchievementId() {
+		return achievementId;
+	}
+
+	public void setAchievementId(String achievementId) {
+		this.achievementId = achievementId;
+	}
+
+	public Integer getIntentionMoney() {
+		return intentionMoney;
+	}
+
+	public void setIntentionMoney(Integer intentionMoney) {
+		this.intentionMoney = intentionMoney;
+	}
+
+	public Integer getContractMoney() {
+		return contractMoney;
+	}
+
+	public void setContractMoney(Integer contractMoney) {
+		this.contractMoney = contractMoney;
+	}
+
+	public Integer getCommission() {
+		return commission;
+	}
+
+	public void setCommission(Integer commission) {
+		this.commission = commission;
+	}
+
+	public Integer getServiceMoney() {
+		return serviceMoney;
+	}
+
+	public void setServiceMoney(Integer serviceMoney) {
+		this.serviceMoney = serviceMoney;
+	}
+
+	public Integer getStatus() {
+		return status;
+	}
+
+	public void setStatus(Integer status) {
+		this.status = status;
+	}
+
+	public String getComment() {
+		return comment;
+	}
+
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+	
+	
+
+}

+ 5 - 0
src/main/java/com/goafanti/achievement/service/AchievementOrderLogService.java

@@ -0,0 +1,5 @@
+package com.goafanti.achievement.service;
+
+public interface AchievementOrderLogService {
+
+}

+ 16 - 0
src/main/java/com/goafanti/achievement/service/AchievementOrderService.java

@@ -0,0 +1,16 @@
+package com.goafanti.achievement.service;
+
+import com.goafanti.achievement.bo.AchievementOrderListBo;
+import com.goafanti.common.model.AchievementOrder;
+import com.goafanti.common.model.AchievementOrderLog;
+import com.goafanti.core.mybatis.page.Pagination;
+
+public interface AchievementOrderService {
+
+	AchievementOrder selectAchievementOrderByUidAndAchievementId(String userId, String achievementId);
+
+	void saveAchievementOrder(AchievementOrder order, AchievementOrderLog aol);
+
+	Pagination<AchievementOrderListBo> listOrderList(Integer status, Integer pNo, Integer pSize);
+
+}

+ 9 - 0
src/main/java/com/goafanti/achievement/service/impl/AchievementOrderLogServiceImpl.java

@@ -0,0 +1,9 @@
+package com.goafanti.achievement.service.impl;
+
+import org.springframework.stereotype.Service;
+
+import com.goafanti.achievement.service.AchievementOrderLogService;
+@Service
+public class AchievementOrderLogServiceImpl implements AchievementOrderLogService {
+
+}

+ 72 - 0
src/main/java/com/goafanti/achievement/service/impl/AchievementOrderServiceImpl.java

@@ -0,0 +1,72 @@
+package com.goafanti.achievement.service.impl;
+
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.goafanti.achievement.bo.AchievementOrderListBo;
+import com.goafanti.achievement.service.AchievementOrderService;
+import com.goafanti.common.dao.AchievementOrderLogMapper;
+import com.goafanti.common.dao.AchievementOrderMapper;
+import com.goafanti.common.enums.AchievementOrderStatus;
+import com.goafanti.common.enums.DeleteStatus;
+import com.goafanti.common.model.AchievementOrder;
+import com.goafanti.common.model.AchievementOrderLog;
+import com.goafanti.core.mybatis.BaseMybatisDao;
+import com.goafanti.core.mybatis.page.Pagination;
+import com.goafanti.core.shiro.token.TokenManager;
+@Service
+public class AchievementOrderServiceImpl extends BaseMybatisDao<AchievementOrderMapper> implements AchievementOrderService {
+	@Autowired
+	private AchievementOrderMapper achievementOrderMapper;
+	@Autowired
+	private AchievementOrderLogMapper achievementOrderLogMapper;
+	
+	@Override
+	public AchievementOrder selectAchievementOrderByUidAndAchievementId(String uid, String achievementId) {
+		return achievementOrderMapper.selectAchievementOrderByUidAndAchievementId(uid, achievementId);
+	}
+	@Override
+	public void saveAchievementOrder(AchievementOrder ao, AchievementOrderLog aol) {
+		ao.setId(UUID.randomUUID().toString());
+		ao.setDeletedSign(DeleteStatus.UNDELETE.getCode());
+		Calendar now = Calendar.getInstance();
+		now.set(Calendar.MILLISECOND, 0);
+		ao.setCreateTime(now.getTime());
+		ao.setStatus(AchievementOrderStatus.CREATE.getCode());
+		ao.setUid(TokenManager.getUserId());
+		achievementOrderMapper.insert(ao);
+		
+		aol.setId(UUID.randomUUID().toString());
+		aol.setAchievementOrderId(ao.getId());
+		aol.setRecordTime(ao.getCreateTime());
+		aol.setStatus(ao.getStatus());
+		achievementOrderLogMapper.insert(aol);
+	}
+	@SuppressWarnings("unchecked")
+	@Override
+	public Pagination<AchievementOrderListBo> listOrderList(Integer status, Integer pNo, Integer pSize) {
+		Map<String, Object> params = new HashMap<>();
+
+		if (null != status) {
+			params.put("status", status);
+		}
+
+		params.put("uid", TokenManager.getUserId());
+
+		if (pNo == null || pNo < 0) {
+			pNo = 1;
+		}
+
+		if (pSize == null || pSize < 0 || pSize > 10) {
+			pSize = 10;
+		}
+		return (Pagination<AchievementOrderListBo>) findPage("findAchievementOrderListByPage",
+				"findAchievementOrderCount", params, pNo, pSize);
+	}
+
+}

+ 17 - 0
src/main/java/com/goafanti/common/dao/AchievementOrderLogMapper.java

@@ -0,0 +1,17 @@
+package com.goafanti.common.dao;
+
+import com.goafanti.common.model.AchievementOrderLog;
+
+public interface AchievementOrderLogMapper {
+    int deleteByPrimaryKey(String id);
+
+    int insert(AchievementOrderLog record);
+
+    int insertSelective(AchievementOrderLog record);
+
+    AchievementOrderLog selectByPrimaryKey(String id);
+
+    int updateByPrimaryKeySelective(AchievementOrderLog record);
+
+    int updateByPrimaryKey(AchievementOrderLog record);
+}

+ 19 - 0
src/main/java/com/goafanti/common/dao/AchievementOrderMapper.java

@@ -0,0 +1,19 @@
+package com.goafanti.common.dao;
+
+import com.goafanti.common.model.AchievementOrder;
+
+public interface AchievementOrderMapper {
+    int deleteByPrimaryKey(String id);
+
+    int insert(AchievementOrder record);
+
+    int insertSelective(AchievementOrder record);
+
+    AchievementOrder selectByPrimaryKey(String id);
+
+    int updateByPrimaryKeySelective(AchievementOrder record);
+
+    int updateByPrimaryKey(AchievementOrder record);
+
+	AchievementOrder selectAchievementOrderByUidAndAchievementId(String uid, String achievementId);
+}

+ 57 - 0
src/main/java/com/goafanti/common/enums/AchievementOrderFields.java

@@ -0,0 +1,57 @@
+package com.goafanti.common.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public enum AchievementOrderFields {
+	
+	ACHIEVEMENTID("achievementId", "科技需求ID"),
+	STATUS("status", "状态"),
+	INTENTIONMONEY("intentionMoney", "意向金"),
+	CONTRACTMONEY("contractMoney", "合同金"),
+	COMMISSION("commission", "佣金"),
+	SERVICEMONEY("serviceMoney", "服务金"),
+	COMMENT("comment", "备注"),
+	
+	OTHER("", "未知参数");
+	
+	private String	code;
+	private String	desc;
+	
+	private static Map<String, AchievementOrderFields> status = new HashMap<String, AchievementOrderFields>();
+	
+	private AchievementOrderFields(String code, String desc) {
+		this.code = code;
+		this.desc = desc;
+	}
+	
+	static {
+		for (AchievementOrderFields value : AchievementOrderFields.values()) {
+			status.put(value.getCode(), value);
+		}
+	}
+	
+	public static AchievementOrderFields getField(String code) {
+		if (containsType(code)) {
+			return status.get(code);
+		}
+		return OTHER;
+	}
+	
+	public static String getFieldDesc(String code) {
+		return getField(code).getDesc();
+	}
+
+	public static boolean containsType(String code) {
+		return status.containsKey(code);
+	}
+	
+	public String getCode() {
+		return code;
+	}
+
+	public String getDesc() {
+		return desc;
+	}
+
+}

+ 62 - 0
src/main/java/com/goafanti/common/enums/AchievementOrderStatus.java

@@ -0,0 +1,62 @@
+package com.goafanti.common.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+
+public enum AchievementOrderStatus {
+	
+	CREATE(0, "初始意向"),
+	INTENTIONMONEY(1,"交付意向金"),
+	SIGN(2,"签订合同"),
+	CONTRACTMONEY(3, "交付合同金"),
+	COMMISSION(4,"交付佣金"),
+	SERVICEMONEY(5, "交付服务金"),
+	SHUTDOWNUNSIGN(6,"关闭(未签合同)"),
+	SHUTDOWN(7,"关闭(已签合同)"),
+	OTHER(8, "其他");
+
+	private AchievementOrderStatus(Integer code, String desc) {
+		this.code = code;
+		this.desc = desc;
+	}
+
+	private static Map<Integer, AchievementOrderStatus> status = new HashMap<Integer, AchievementOrderStatus>();
+
+	static {
+		for (AchievementOrderStatus value : AchievementOrderStatus.values()) {
+			status.put(value.getCode(), value);
+		}
+	}
+
+	public static AchievementOrderStatus getStatus(Integer code) {
+		if (containsType(code)) {
+			return status.get(code);
+		}
+		return OTHER;
+	}
+
+	public static AchievementOrderStatus getStatus(String code) {
+		if (StringUtils.isNumeric(code)) {
+			return getStatus(Integer.parseInt(code));
+		}
+		return OTHER;
+	}
+
+	public static boolean containsType(Integer code) {
+		return status.containsKey(code);
+	}
+
+	private Integer	code;
+	private String	desc;
+
+	public Integer getCode() {
+		return code;
+	}
+
+	public String getDesc() {
+		return desc;
+	}
+
+}

+ 1 - 1
src/main/java/com/goafanti/common/mapper/AchievementMapper.xml

@@ -1066,7 +1066,7 @@
   	and a.audit_status = 3
   </select>
   
-  <select id="selectAchievementSearchDetail" parameterType="java.lang.String" resultType="com.goafanti.portal.bo.AchievementDetailBo">
+  <select id="selectAchievementSearchDetail"  resultType="com.goafanti.portal.bo.AchievementDetailBo">
   	select 
   		a.id, a.serial_number as serialNumber, a.keyword, 
   		a.name, a.data_category as dataCategory, a.category,

+ 106 - 0
src/main/java/com/goafanti/common/mapper/AchievementOrderLogMapper.xml

@@ -0,0 +1,106 @@
+<?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.goafanti.common.dao.AchievementOrderLogMapper" >
+  <resultMap id="BaseResultMap" type="com.goafanti.common.model.AchievementOrderLog" >
+    <id column="id" property="id" jdbcType="VARCHAR" />
+    <result column="achievement_order_id" property="achievementOrderId" jdbcType="VARCHAR" />
+    <result column="record_time" property="recordTime" jdbcType="TIMESTAMP" />
+    <result column="status" property="status" jdbcType="INTEGER" />
+    <result column="operator" property="operator" jdbcType="VARCHAR" />
+    <result column="comment" property="comment" jdbcType="VARCHAR" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    id, achievement_order_id, record_time, status, operator, comment
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" >
+    select 
+    <include refid="Base_Column_List" />
+    from achievement_order_log
+    where id = #{id,jdbcType=VARCHAR}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.String" >
+    delete from achievement_order_log
+    where id = #{id,jdbcType=VARCHAR}
+  </delete>
+  <insert id="insert" parameterType="com.goafanti.common.model.AchievementOrderLog" >
+    insert into achievement_order_log (id, achievement_order_id, record_time, 
+      status, operator, comment
+      )
+    values (#{id,jdbcType=VARCHAR}, #{achievementOrderId,jdbcType=VARCHAR}, #{recordTime,jdbcType=TIMESTAMP}, 
+      #{status,jdbcType=INTEGER}, #{operator,jdbcType=VARCHAR}, #{comment,jdbcType=VARCHAR}
+      )
+  </insert>
+  <insert id="insertSelective" parameterType="com.goafanti.common.model.AchievementOrderLog" >
+    insert into achievement_order_log
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="achievementOrderId != null" >
+        achievement_order_id,
+      </if>
+      <if test="recordTime != null" >
+        record_time,
+      </if>
+      <if test="status != null" >
+        status,
+      </if>
+      <if test="operator != null" >
+        operator,
+      </if>
+      <if test="comment != null" >
+        comment,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=VARCHAR},
+      </if>
+      <if test="achievementOrderId != null" >
+        #{achievementOrderId,jdbcType=VARCHAR},
+      </if>
+      <if test="recordTime != null" >
+        #{recordTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="status != null" >
+        #{status,jdbcType=INTEGER},
+      </if>
+      <if test="operator != null" >
+        #{operator,jdbcType=VARCHAR},
+      </if>
+      <if test="comment != null" >
+        #{comment,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.goafanti.common.model.AchievementOrderLog" >
+    update achievement_order_log
+    <set >
+      <if test="achievementOrderId != null" >
+        achievement_order_id = #{achievementOrderId,jdbcType=VARCHAR},
+      </if>
+      <if test="recordTime != null" >
+        record_time = #{recordTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="status != null" >
+        status = #{status,jdbcType=INTEGER},
+      </if>
+      <if test="operator != null" >
+        operator = #{operator,jdbcType=VARCHAR},
+      </if>
+      <if test="comment != null" >
+        comment = #{comment,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=VARCHAR}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.goafanti.common.model.AchievementOrderLog" >
+    update achievement_order_log
+    set achievement_order_id = #{achievementOrderId,jdbcType=VARCHAR},
+      record_time = #{recordTime,jdbcType=TIMESTAMP},
+      status = #{status,jdbcType=INTEGER},
+      operator = #{operator,jdbcType=VARCHAR},
+      comment = #{comment,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=VARCHAR}
+  </update>
+</mapper>

+ 218 - 0
src/main/java/com/goafanti/common/mapper/AchievementOrderMapper.xml

@@ -0,0 +1,218 @@
+<?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.goafanti.common.dao.AchievementOrderMapper" >
+  <resultMap id="BaseResultMap" type="com.goafanti.common.model.AchievementOrder" >
+    <id column="id" property="id" jdbcType="VARCHAR" />
+    <result column="serial_number" property="serialNumber" jdbcType="INTEGER" />
+    <result column="achievement_id" property="achievementId" jdbcType="VARCHAR" />
+    <result column="uid" property="uid" jdbcType="VARCHAR" />
+    <result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
+    <result column="status" property="status" jdbcType="INTEGER" />
+    <result column="intention_money" property="intentionMoney" jdbcType="INTEGER" />
+    <result column="contract_money" property="contractMoney" jdbcType="INTEGER" />
+    <result column="commission" property="commission" jdbcType="INTEGER" />
+    <result column="service_money" property="serviceMoney" jdbcType="INTEGER" />
+    <result column="refund" property="refund" jdbcType="INTEGER" />
+    <result column="deleted_sign" property="deletedSign" jdbcType="INTEGER" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    id, serial_number, achievement_id, uid, create_time, status, intention_money, contract_money, 
+    commission, service_money, refund, deleted_sign
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" >
+    select 
+    <include refid="Base_Column_List" />
+    from achievement_order
+    where id = #{id,jdbcType=VARCHAR}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.String" >
+    delete from achievement_order
+    where id = #{id,jdbcType=VARCHAR}
+  </delete>
+  <insert id="insert" parameterType="com.goafanti.common.model.AchievementOrder" >
+    insert into achievement_order (id, serial_number, achievement_id, 
+      uid, create_time, status, 
+      intention_money, contract_money, commission, 
+      service_money, refund, deleted_sign
+      )
+    values (#{id,jdbcType=VARCHAR}, #{serialNumber,jdbcType=INTEGER}, #{achievementId,jdbcType=VARCHAR}, 
+      #{uid,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{status,jdbcType=INTEGER}, 
+      #{intentionMoney,jdbcType=INTEGER}, #{contractMoney,jdbcType=INTEGER}, #{commission,jdbcType=INTEGER}, 
+      #{serviceMoney,jdbcType=INTEGER}, #{refund,jdbcType=INTEGER}, #{deletedSign,jdbcType=INTEGER}
+      )
+  </insert>
+  <insert id="insertSelective" parameterType="com.goafanti.common.model.AchievementOrder" >
+    insert into achievement_order
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="serialNumber != null" >
+        serial_number,
+      </if>
+      <if test="achievementId != null" >
+        achievement_id,
+      </if>
+      <if test="uid != null" >
+        uid,
+      </if>
+      <if test="createTime != null" >
+        create_time,
+      </if>
+      <if test="status != null" >
+        status,
+      </if>
+      <if test="intentionMoney != null" >
+        intention_money,
+      </if>
+      <if test="contractMoney != null" >
+        contract_money,
+      </if>
+      <if test="commission != null" >
+        commission,
+      </if>
+      <if test="serviceMoney != null" >
+        service_money,
+      </if>
+      <if test="refund != null" >
+        refund,
+      </if>
+      <if test="deletedSign != null" >
+        deleted_sign,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=VARCHAR},
+      </if>
+      <if test="serialNumber != null" >
+        #{serialNumber,jdbcType=INTEGER},
+      </if>
+      <if test="achievementId != null" >
+        #{achievementId,jdbcType=VARCHAR},
+      </if>
+      <if test="uid != null" >
+        #{uid,jdbcType=VARCHAR},
+      </if>
+      <if test="createTime != null" >
+        #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="status != null" >
+        #{status,jdbcType=INTEGER},
+      </if>
+      <if test="intentionMoney != null" >
+        #{intentionMoney,jdbcType=INTEGER},
+      </if>
+      <if test="contractMoney != null" >
+        #{contractMoney,jdbcType=INTEGER},
+      </if>
+      <if test="commission != null" >
+        #{commission,jdbcType=INTEGER},
+      </if>
+      <if test="serviceMoney != null" >
+        #{serviceMoney,jdbcType=INTEGER},
+      </if>
+      <if test="refund != null" >
+        #{refund,jdbcType=INTEGER},
+      </if>
+      <if test="deletedSign != null" >
+        #{deletedSign,jdbcType=INTEGER},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.goafanti.common.model.AchievementOrder" >
+    update achievement_order
+    <set >
+      <if test="serialNumber != null" >
+        serial_number = #{serialNumber,jdbcType=INTEGER},
+      </if>
+      <if test="achievementId != null" >
+        achievement_id = #{achievementId,jdbcType=VARCHAR},
+      </if>
+      <if test="uid != null" >
+        uid = #{uid,jdbcType=VARCHAR},
+      </if>
+      <if test="createTime != null" >
+        create_time = #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="status != null" >
+        status = #{status,jdbcType=INTEGER},
+      </if>
+      <if test="intentionMoney != null" >
+        intention_money = #{intentionMoney,jdbcType=INTEGER},
+      </if>
+      <if test="contractMoney != null" >
+        contract_money = #{contractMoney,jdbcType=INTEGER},
+      </if>
+      <if test="commission != null" >
+        commission = #{commission,jdbcType=INTEGER},
+      </if>
+      <if test="serviceMoney != null" >
+        service_money = #{serviceMoney,jdbcType=INTEGER},
+      </if>
+      <if test="refund != null" >
+        refund = #{refund,jdbcType=INTEGER},
+      </if>
+      <if test="deletedSign != null" >
+        deleted_sign = #{deletedSign,jdbcType=INTEGER},
+      </if>
+    </set>
+    where id = #{id,jdbcType=VARCHAR}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.goafanti.common.model.AchievementOrder" >
+    update achievement_order
+    set serial_number = #{serialNumber,jdbcType=INTEGER},
+      achievement_id = #{achievementId,jdbcType=VARCHAR},
+      uid = #{uid,jdbcType=VARCHAR},
+      create_time = #{createTime,jdbcType=TIMESTAMP},
+      status = #{status,jdbcType=INTEGER},
+      intention_money = #{intentionMoney,jdbcType=INTEGER},
+      contract_money = #{contractMoney,jdbcType=INTEGER},
+      commission = #{commission,jdbcType=INTEGER},
+      service_money = #{serviceMoney,jdbcType=INTEGER},
+      refund = #{refund,jdbcType=INTEGER},
+      deleted_sign = #{deletedSign,jdbcType=INTEGER}
+    where id = #{id,jdbcType=VARCHAR}
+  </update>
+  
+  <select id="selectAchievementOrderByUidAndAchievementId" resultMap="BaseResultMap" >
+  	select 
+    <include refid="Base_Column_List" />
+    from achievement_order
+   where uid = #{0} and achievement_id = #{1}
+  </select>
+  
+   <select id="findAchievementOrderListByPage" parameterType="String" resultType="com.goafanti.achievement.bo.AchievementOrderListBo">
+  	select 
+  		ao.id, ao.serial_number as serialNumber, ao.achievement_id as achievementId,
+  		ao.create_time as createTime,ao.status,
+  		ao.intention_money as intentionMoney, ao.contract_money as contractMoney, ao.commission,
+  		ao.service_money as serviceMoney, a.name, a.serial_number as achievementSerialNumber,
+  		a.deleted_sign as deletedSign, a.audit_status as auditStatus
+  	from achievement_order ao
+  	left join achievement a on a.id = ao.achievement_id
+  	where ao.deleted_sign = 0 
+  	and   a.deleted_sign = 0 
+  	and   ao.uid = #{uid,jdbcType=VARCHAR}
+  	<if test="status != null">
+  		and ao.status = #{status,jdbcType=INTEGER}
+  	</if>
+  	order by ao.serial_number desc
+  	<if test="page_sql!=null">
+		${page_sql}
+	</if>
+  </select>
+  
+  <select id="findAchievementOrderCount" parameterType="String" resultType="java.lang.Integer">
+  	select 
+  		count(1)
+  	from achievement_order ao
+  	left join achievement a on a.id = ao.achievement_id
+  	where ao.deleted_sign = 0 
+  	and   a.deleted_sign 
+  	and   ao.uid = #{uid,jdbcType=VARCHAR}
+  	<if test="status != null">
+  		and ao.status = #{status,jdbcType=INTEGER}
+  	</if>
+  </select>
+</mapper>

+ 158 - 0
src/main/java/com/goafanti/common/model/AchievementOrder.java

@@ -0,0 +1,158 @@
+package com.goafanti.common.model;
+
+import java.util.Date;
+
+public class AchievementOrder {
+    private String id;
+
+    /**
+    * 编号
+    */
+    private Integer serialNumber;
+
+    /**
+    * 科技成果ID
+    */
+    private String achievementId;
+
+    /**
+    * 购买科技成果人ID
+    */
+    private String uid;
+
+    /**
+    * 购买时间
+    */
+    private Date createTime;
+
+    /**
+    * 流程变动(0--初始意向,1--意向金,2--签订合同,3--合同金,4--佣金,5--服务金,6--关闭(未签合同),7--关闭(已签合同))
+    */
+    private Integer status;
+
+    /**
+    * 意向金
+    */
+    private Integer intentionMoney;
+
+    /**
+    * 合同金
+    */
+    private Integer contractMoney;
+
+    /**
+    * 佣金
+    */
+    private Integer commission;
+
+    /**
+    * 服务金
+    */
+    private Integer serviceMoney;
+
+    /**
+    * 是否退款(0--未退款,1--已退款)
+    */
+    private Integer refund;
+
+    /**
+    * 删除标记(0--未删除,1--已删除)
+    */
+    private Integer deletedSign;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public Integer getSerialNumber() {
+        return serialNumber;
+    }
+
+    public void setSerialNumber(Integer serialNumber) {
+        this.serialNumber = serialNumber;
+    }
+
+    public String getAchievementId() {
+        return achievementId;
+    }
+
+    public void setAchievementId(String achievementId) {
+        this.achievementId = achievementId;
+    }
+
+    public String getUid() {
+        return uid;
+    }
+
+    public void setUid(String uid) {
+        this.uid = uid;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public Integer getIntentionMoney() {
+        return intentionMoney;
+    }
+
+    public void setIntentionMoney(Integer intentionMoney) {
+        this.intentionMoney = intentionMoney;
+    }
+
+    public Integer getContractMoney() {
+        return contractMoney;
+    }
+
+    public void setContractMoney(Integer contractMoney) {
+        this.contractMoney = contractMoney;
+    }
+
+    public Integer getCommission() {
+        return commission;
+    }
+
+    public void setCommission(Integer commission) {
+        this.commission = commission;
+    }
+
+    public Integer getServiceMoney() {
+        return serviceMoney;
+    }
+
+    public void setServiceMoney(Integer serviceMoney) {
+        this.serviceMoney = serviceMoney;
+    }
+
+    public Integer getRefund() {
+        return refund;
+    }
+
+    public void setRefund(Integer refund) {
+        this.refund = refund;
+    }
+
+    public Integer getDeletedSign() {
+        return deletedSign;
+    }
+
+    public void setDeletedSign(Integer deletedSign) {
+        this.deletedSign = deletedSign;
+    }
+}

+ 77 - 0
src/main/java/com/goafanti/common/model/AchievementOrderLog.java

@@ -0,0 +1,77 @@
+package com.goafanti.common.model;
+
+import java.util.Date;
+
+public class AchievementOrderLog {
+    private String id;
+
+    /**
+    * 科技成果订单ID
+    */
+    private String achievementOrderId;
+
+    private Date recordTime;
+
+    /**
+    * 状态
+    */
+    private Integer status;
+
+    /**
+    * 记录操作人
+    */
+    private String operator;
+
+    /**
+    * 备注
+    */
+    private String comment;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getAchievementOrderId() {
+        return achievementOrderId;
+    }
+
+    public void setAchievementOrderId(String achievementOrderId) {
+        this.achievementOrderId = achievementOrderId;
+    }
+
+    public Date getRecordTime() {
+        return recordTime;
+    }
+
+    public void setRecordTime(Date recordTime) {
+        this.recordTime = recordTime;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public String getOperator() {
+        return operator;
+    }
+
+    public void setOperator(String operator) {
+        this.operator = operator;
+    }
+
+    public String getComment() {
+        return comment;
+    }
+
+    public void setComment(String comment) {
+        this.comment = comment;
+    }
+}

+ 1 - 1
src/main/java/com/goafanti/demand/bo/InputDemandOrder.java

@@ -13,7 +13,7 @@ public class InputDemandOrder {
 	@Size(min = 0, max = 255, message = "{" + ErrorConstants.PARAM_SIZE_ERROR + "}")
 	private String	enclosureUrl;
 	
-	@Max(value = 6, message = "{" + ErrorConstants.PARAM_ERROR + "}")
+	@Max(value = 7, message = "{" + ErrorConstants.PARAM_ERROR + "}")
 	@Min(value = 0, message = "{" + ErrorConstants.PARAM_ERROR + "}")
 	private Integer	status;
 	

+ 77 - 13
src/main/java/com/goafanti/portal/controller/PortalOrderApiController.java

@@ -12,18 +12,30 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 
+import com.goafanti.achievement.bo.AchievementOrderListBo;
+import com.goafanti.achievement.bo.InputAchievementOrder;
+import com.goafanti.achievement.service.AchievementOrderLogService;
+import com.goafanti.achievement.service.AchievementOrderService;
+import com.goafanti.achievement.service.AchievementService;
 import com.goafanti.common.bo.Result;
 import com.goafanti.common.constant.ErrorConstants;
 import com.goafanti.common.controller.CertifyApiController;
+import com.goafanti.common.enums.AchievementAuditStatus;
+import com.goafanti.common.enums.AchievementOrderFields;
+import com.goafanti.common.enums.AchievementReleaseStatus;
 import com.goafanti.common.enums.AttachmentType;
 import com.goafanti.common.enums.DeleteStatus;
 import com.goafanti.common.enums.DemandAuditStatus;
 import com.goafanti.common.enums.DemandOrderFields;
 import com.goafanti.common.enums.DemandOrderStatus;
 import com.goafanti.common.enums.DemandReleaseStatus;
+import com.goafanti.common.model.Achievement;
+import com.goafanti.common.model.AchievementOrder;
+import com.goafanti.common.model.AchievementOrderLog;
 import com.goafanti.common.model.Demand;
 import com.goafanti.common.model.DemandOrder;
 import com.goafanti.common.model.DemandOrderLog;
+import com.goafanti.core.mybatis.page.Pagination;
 import com.goafanti.core.shiro.token.TokenManager;
 import com.goafanti.demand.bo.InputDemandOrder;
 import com.goafanti.demand.service.DemandOrderLogService;
@@ -34,18 +46,70 @@ import com.goafanti.demand.service.DemandService;
 @RequestMapping(value = "/api/user/portal/order")
 public class PortalOrderApiController extends CertifyApiController {
 	@Resource
-	private DemandOrderService		demandOrderService;
+	private DemandOrderService			demandOrderService;
 	@Resource
-	private DemandService			demandService;
+	private DemandService				demandService;
 	@Resource
-	private DemandOrderLogService	demandOrderLogService;
+	private DemandOrderLogService		demandOrderLogService;
+	@Resource
+	private AchievementService			achievementService;
+	@Resource
+	private AchievementOrderLogService	achievementOrderLogService;
+	@Resource
+	private AchievementOrderService		achievementOrderService;
 
 	/**
-	 * 科技成果购买
+	 * 科技成果订单列表
+	 */
+	@RequestMapping(value = "/achievementOrderList", method = RequestMethod.GET)
+	public Result achievementOrderList(Integer status, String pageNo, String pageSize) {
+		Result res = new Result();
+		Integer pNo = 1;
+		Integer pSize = 10;
+		if (StringUtils.isNumeric(pageSize)) {
+			pSize = Integer.parseInt(pageSize);
+		}
+		if (StringUtils.isNumeric(pageNo)) {
+			pNo = Integer.parseInt(pageNo);
+		}
+		res.setData(achievementOrderService.listOrderList(status, pNo, pSize));
+		return res;
+	}
+
+	/**
+	 * 科技成果"我要购买"
 	 */
 	@RequestMapping(value = "/orderAchievement", method = RequestMethod.POST)
-	public Result orderAchievement() {
+	public Result orderAchievement(@Valid InputAchievementOrder order, BindingResult bindingResult) {
 		Result res = new Result();
+		if (bindingResult.hasErrors()) {
+			res.getError().add(buildErrorByMsg(bindingResult.getFieldError().getDefaultMessage(),
+					AchievementOrderFields.getFieldDesc(bindingResult.getFieldError().getField())));
+			return res;
+		}
+		String achievementId = order.getAchievementId();
+		if (StringUtils.isBlank(achievementId)) {
+			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到科技成果ID", "科技成果ID"));
+			return res;
+		}
+		AchievementOrder ao = achievementOrderService
+				.selectAchievementOrderByUidAndAchievementId(TokenManager.getUserId(), achievementId);
+		if (null != ao) {
+			res.getError().add(buildError("", "当前科技成果已购买!"));
+			return res;
+		}
+		Achievement a = achievementService.selectByPrimaryKey(achievementId);
+		if (null == a || !AchievementAuditStatus.AUDITED.getCode().equals(a.getAuditStatus())
+				|| !AchievementReleaseStatus.RELEASED.getCode().equals(a.getReleaseStatus())
+				|| !DeleteStatus.UNDELETE.getCode().equals(a.getDeletedSign())) {
+			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "科技成果ID"));
+			return res;
+		}
+		AchievementOrder achievementOrder = new AchievementOrder();
+		AchievementOrderLog aol = new AchievementOrderLog();
+		BeanUtils.copyProperties(order, achievementOrder);
+		BeanUtils.copyProperties(order, aol);
+		achievementOrderService.saveAchievementOrder(achievementOrder, aol);
 		return res;
 	}
 
@@ -69,10 +133,10 @@ public class PortalOrderApiController extends CertifyApiController {
 	}
 
 	/**
-	 * 订单列表
+	 * 科技需求订单列表
 	 */
 	@RequestMapping(value = "/demandOrderList", method = RequestMethod.GET)
-	public Result orderList(Integer status, String pageNo, String pageSize) {
+	public Result demandOrderList(Integer status, String pageNo, String pageSize) {
 		Result res = new Result();
 		Integer pNo = 1;
 		Integer pSize = 10;
@@ -126,7 +190,7 @@ public class PortalOrderApiController extends CertifyApiController {
 	}
 
 	/**
-	 * "我要接单"
+	 * 科技需求"我要接单"
 	 */
 	@RequestMapping(value = "/orderDemand", method = RequestMethod.POST)
 	public Result orderDemand(@Valid InputDemandOrder inputDemandOrder, BindingResult bindingResult) {
@@ -136,18 +200,18 @@ public class PortalOrderApiController extends CertifyApiController {
 					DemandOrderFields.getFieldDesc(bindingResult.getFieldError().getField())));
 			return res;
 		}
-
-		if (StringUtils.isBlank(inputDemandOrder.getDemandId())) {
+		String demandId = inputDemandOrder.getDemandId();
+		if (StringUtils.isBlank(demandId)) {
 			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到需求ID", "需求ID"));
 			return res;
 		}
 		DemandOrder demandOrder = demandOrderService.selectDemandOrderByUidAndDemandId(TokenManager.getUserId(),
-				inputDemandOrder.getDemandId());
+				demandId);
 		if (null != demandOrder) {
 			res.getError().add(buildError("", "当前科技需求已接单!"));
 			return res;
 		}
-		Demand d = demandService.selectByPrimaryKey(inputDemandOrder.getDemandId());
+		Demand d = demandService.selectByPrimaryKey(demandId);
 		if (null == d || d.getDeletedSign().equals(DeleteStatus.DELETED.getCode())
 				|| !d.getAuditStatus().equals(DemandAuditStatus.AUDITED.getCode())
 				|| !d.getReleaseStatus().equals(DemandReleaseStatus.RELEASED.getCode())) {
@@ -185,7 +249,7 @@ public class PortalOrderApiController extends CertifyApiController {
 			res.getError().add(buildError("", "当前状态无法撤销!"));
 			return res;
 		}
-		
+
 		res.setData(demandOrderService.updateShutdownByUser(order));
 		return res;
 	}