java110 лет назад: 2
Родитель
Сommit
e812fa78b1

+ 21 - 0
java110-bean/src/main/java/com/java110/dto/questionAnswer/QuestionAnswerDto.java

@@ -1,6 +1,7 @@
 package com.java110.dto.questionAnswer;
 
 import com.java110.dto.PageDto;
+import com.java110.dto.questionTitle.QuestionTitleDto;
 import com.java110.dto.questionTitleValue.QuestionTitleValueDto;
 
 import java.io.Serializable;
@@ -42,6 +43,8 @@ public class QuestionAnswerDto extends PageDto implements Serializable {
 
     private long votedCount; // 已投票人数
 
+    private long score;
+
     private String ownerName;
 
     private String link;
@@ -50,6 +53,8 @@ public class QuestionAnswerDto extends PageDto implements Serializable {
 
     private List<QuestionTitleValueDto> titleValues;
 
+    private List<QuestionTitleDto> titles;
+
     private String state;
 
     private String userQaId;
@@ -206,4 +211,20 @@ public class QuestionAnswerDto extends PageDto implements Serializable {
     public void setUserQaId(String userQaId) {
         this.userQaId = userQaId;
     }
+
+    public List<QuestionTitleDto> getTitles() {
+        return titles;
+    }
+
+    public void setTitles(List<QuestionTitleDto> titles) {
+        this.titles = titles;
+    }
+
+    public long getScore() {
+        return score;
+    }
+
+    public void setScore(long score) {
+        this.score = score;
+    }
 }

+ 12 - 0
java110-db/src/main/resources/mapper/user/QuestionAnswerV1ServiceDaoImplMapper.xml

@@ -138,4 +138,16 @@
 
     </select>
 
+
+    <select id="queryVotedCountAndScore" parameterType="Map" resultType="Map">
+        select qa_id qaId, count(1) votedCount,SUM(t.score) score
+        from user_question_answer t
+        where
+        t.state = '1202'
+        and t.qa_id in
+        <foreach collection="qaIds" item="item" index="index" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+        GROUP BY qa_id
+    </select>
 </mapper>

+ 3 - 2
java110-db/src/main/resources/mapper/user/QuestionTitleValueV1ServiceDaoImplMapper.xml

@@ -115,13 +115,14 @@
     </select>
 
     <select id="queryQuestionOwnerTitleValues" parameterType="Map" resultType="Map">
-        select qt.title_type titleType,qa.qa_id qaId,t.qa_value qaValue,t.seq,count(uqav.user_qa_id) personCount
+        select qt.qa_title qaTitle,qt.title_id titleId, qt.title_type titleType,qa.qa_id qaId,t.qa_value qaValue,t.seq,count(uqav.user_qa_id) personCount
         from question_title_value t
         inner join question_title qt on t.title_id = qt.title_id and qt.status_cd = '0'
         inner join question_answer_title_rel qatr on t.title_id = qatr.title_id and qatr.status_cd = '0'
         inner join question_answer qa on qatr.qa_id = qa.qa_id and qa.status_cd = '0'
         left join user_question_answer_value uqav on qa.qa_id = uqav.qa_id and t.value_id = uqav.value_id and t.title_id = uqav.title_id and uqav.status_cd = '0'
         where 1=1
+
         and t.community_id = #{communityId}
         <if test="titleId !=null and titleId != ''">
             and t.title_id= #{titleId}
@@ -135,7 +136,7 @@
                 #{item}
             </foreach>
         </if>
-        group by qt.title_type,qa.qa_id,t.qa_value,t.seq
+        group by qt.qa_title,qt.title_id , qt.title_type,qa.qa_id,t.qa_value,t.seq
         order by t.seq
 
 

+ 3 - 0
java110-interface/src/main/java/com/java110/intf/user/IQuestionAnswerV1InnerServiceSMO.java

@@ -65,4 +65,7 @@ public interface IQuestionAnswerV1InnerServiceSMO {
      */
     @RequestMapping(value = "/queryQuestionAnswersCount", method = RequestMethod.POST)
     int queryQuestionAnswersCount(@RequestBody QuestionAnswerDto questionAnswerDto);
+
+    @RequestMapping(value = "/queryVotedCountAndScore", method = RequestMethod.POST)
+    List<QuestionAnswerDto> queryVotedCountAndScore(@RequestBody String[] toArray);
 }

+ 63 - 12
service-user/src/main/java/com/java110/user/cmd/question/ListQuestionAnswerCmd.java

@@ -20,15 +20,20 @@ import com.java110.core.annotation.Java110Cmd;
 import com.java110.core.context.ICmdDataFlowContext;
 import com.java110.core.event.cmd.Cmd;
 import com.java110.core.event.cmd.CmdEvent;
+import com.java110.dto.questionTitleValue.QuestionTitleValueDto;
 import com.java110.intf.user.IQuestionAnswerV1InnerServiceSMO;
+import com.java110.intf.user.IQuestionTitleV1InnerServiceSMO;
+import com.java110.intf.user.IQuestionTitleValueV1InnerServiceSMO;
 import com.java110.utils.exception.CmdException;
 import com.java110.utils.util.Assert;
 import com.java110.utils.util.BeanConvertUtil;
 import com.java110.vo.ResultVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import com.java110.dto.questionAnswer.QuestionAnswerDto;
+
 import java.util.List;
 import java.util.ArrayList;
+
 import org.springframework.http.ResponseEntity;
 import org.springframework.http.HttpStatus;
 import org.slf4j.Logger;
@@ -48,10 +53,17 @@ import org.slf4j.LoggerFactory;
 @Java110Cmd(serviceCode = "question.listQuestionAnswer")
 public class ListQuestionAnswerCmd extends Cmd {
 
-  private static Logger logger = LoggerFactory.getLogger(ListQuestionAnswerCmd.class);
+    private static Logger logger = LoggerFactory.getLogger(ListQuestionAnswerCmd.class);
     @Autowired
     private IQuestionAnswerV1InnerServiceSMO questionAnswerV1InnerServiceSMOImpl;
 
+
+    @Autowired
+    private IQuestionTitleV1InnerServiceSMO questionTitleV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IQuestionTitleValueV1InnerServiceSMO questionTitleValueV1InnerServiceSMOImpl;
+
     @Override
     public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) {
         super.validatePageInfo(reqJson);
@@ -61,22 +73,61 @@ public class ListQuestionAnswerCmd extends Cmd {
     @Override
     public void doCmd(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) throws CmdException {
 
-           QuestionAnswerDto questionAnswerDto = BeanConvertUtil.covertBean(reqJson, QuestionAnswerDto.class);
+        QuestionAnswerDto questionAnswerDto = BeanConvertUtil.covertBean(reqJson, QuestionAnswerDto.class);
+
+        int count = questionAnswerV1InnerServiceSMOImpl.queryQuestionAnswersCount(questionAnswerDto);
+
+        List<QuestionAnswerDto> questionAnswerDtos = null;
 
-           int count = questionAnswerV1InnerServiceSMOImpl.queryQuestionAnswersCount(questionAnswerDto);
+        if (count > 0) {
+            questionAnswerDtos = questionAnswerV1InnerServiceSMOImpl.queryQuestionAnswers(questionAnswerDto);
+        } else {
+            questionAnswerDtos = new ArrayList<>();
+        }
 
-           List<QuestionAnswerDto> questionAnswerDtos = null;
+        //todo 查询已投票数据和 得分
+        computeVotedCountAndScore(questionAnswerDtos);
 
-           if (count > 0) {
-               questionAnswerDtos = questionAnswerV1InnerServiceSMOImpl.queryQuestionAnswers(questionAnswerDto);
-           } else {
-               questionAnswerDtos = new ArrayList<>();
-           }
 
-           ResultVo resultVo = new ResultVo((int) Math.ceil((double) count / (double) reqJson.getInteger("row")), count, questionAnswerDtos);
+        ResultVo resultVo = new ResultVo((int) Math.ceil((double) count / (double) reqJson.getInteger("row")), count, questionAnswerDtos);
 
-           ResponseEntity<String> responseEntity = new ResponseEntity<String>(resultVo.toString(), HttpStatus.OK);
+        ResponseEntity<String> responseEntity = new ResponseEntity<String>(resultVo.toString(), HttpStatus.OK);
 
-           cmdDataFlowContext.setResponseEntity(responseEntity);
+        cmdDataFlowContext.setResponseEntity(responseEntity);
     }
+
+    /**
+     * 计算 投票和得分
+     *
+     * @param questionAnswerDtos
+     */
+    private void computeVotedCountAndScore(List<QuestionAnswerDto> questionAnswerDtos) {
+
+        if (questionAnswerDtos == null || questionAnswerDtos.size() < 1) {
+            return;
+        }
+        List<String> qaIds = new ArrayList<>();
+        for (QuestionAnswerDto questionAnswerDto : questionAnswerDtos) {
+            qaIds.add(questionAnswerDto.getQaId());
+        }
+
+        // todo 查询投票人数和得分
+        List<QuestionAnswerDto> votedQAs = questionAnswerV1InnerServiceSMOImpl.queryVotedCountAndScore(qaIds.toArray(new String[qaIds.size()]));
+
+        if (votedQAs == null || votedQAs.size() < 1) {
+            return;
+        }
+        for(QuestionAnswerDto questionAnswerDto:questionAnswerDtos){
+            for(QuestionAnswerDto votedQa : votedQAs){
+                if(!questionAnswerDto.getQaId().equals(votedQa.getQaId())){
+                    continue;
+                }
+
+                questionAnswerDto.setVotedCount(votedQa.getVotedCount());
+                questionAnswerDto.setScore(votedQa.getScore());
+            }
+        }
+    }
+
+
 }

+ 1 - 0
service-user/src/main/java/com/java110/user/dao/IQuestionAnswerV1ServiceDao.java

@@ -70,4 +70,5 @@ public interface IQuestionAnswerV1ServiceDao {
      */
     int queryQuestionAnswersCount(Map info);
 
+    List<Map> queryVotedCountAndScore(Map info);
 }

+ 6 - 0
service-user/src/main/java/com/java110/user/dao/impl/QuestionAnswerV1ServiceDaoImpl.java

@@ -108,5 +108,11 @@ public class QuestionAnswerV1ServiceDaoImpl extends BaseServiceDao implements IQ
         return Integer.parseInt(businessQuestionAnswerInfos.get(0).get("count").toString());
     }
 
+    @Override
+    public List<Map> queryVotedCountAndScore(Map info) {
+        List<Map> businessQuestionAnswerInfos = sqlSessionTemplate.selectList("questionAnswerV1ServiceDaoImpl.queryVotedCountAndScore",info);
+
+        return businessQuestionAnswerInfos;    }
+
 
 }

+ 11 - 0
service-user/src/main/java/com/java110/user/smo/impl/QuestionAnswerV1InnerServiceSMOImpl.java

@@ -29,7 +29,9 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 类表述: 服务之前调用的接口实现类,不对外提供接口能力 只用于接口建调用
@@ -86,4 +88,13 @@ public class QuestionAnswerV1InnerServiceSMOImpl extends BaseServiceSMO implemen
     public int queryQuestionAnswersCount(@RequestBody QuestionAnswerDto questionAnswerDto) {
         return questionAnswerV1ServiceDaoImpl.queryQuestionAnswersCount(BeanConvertUtil.beanCovertMap(questionAnswerDto));    }
 
+    @Override
+    public List<QuestionAnswerDto> queryVotedCountAndScore(String[] qaIds) {
+        Map infos = new HashMap();
+        infos.put("qaIds",qaIds);
+        List<QuestionAnswerDto> questionAnswers = BeanConvertUtil.covertBeanList(questionAnswerV1ServiceDaoImpl.queryVotedCountAndScore(infos), QuestionAnswerDto.class);
+
+        return questionAnswers;
+    }
+
 }