java110 2 anni fa
parent
commit
7affe8533d

+ 107 - 0
service-report/src/main/java/com/java110/report/cmd/dataReport/QueryReceivedDetailStatisticsCmd.java

@@ -0,0 +1,107 @@
+package com.java110.report.cmd.dataReport;
+
+import com.alibaba.fastjson.JSONObject;
+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.report.QueryStatisticsDto;
+import com.java110.report.statistics.IFeeStatistics;
+import com.java110.utils.exception.CmdException;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.StringUtil;
+import com.java110.vo.ResultVo;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 查询实收明细统计
+ */
+@Java110Cmd(serviceCode = "dataReport.queryReceivedDetailStatistics")
+public class QueryReceivedDetailStatisticsCmd extends Cmd {
+
+    @Autowired
+    private IFeeStatistics feeStatisticsImpl;
+
+    @Override
+    public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
+        Assert.hasKeyAndValue(reqJson, "communityId", "未包含小区");
+        String startDate = reqJson.getString("startDate");
+        String endDate = reqJson.getString("endDate");
+        if (!StringUtil.isEmpty(startDate) && !startDate.contains(":")) {
+            startDate += " 00:00:00";
+            reqJson.put("startDate", startDate);
+        }
+        if (!StringUtil.isEmpty(endDate) && !endDate.contains(":")) {
+            endDate += " 23:59:59";
+            reqJson.put("endDate", endDate);
+        }
+    }
+
+    @Override
+    public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
+        QueryStatisticsDto queryStatisticsDto = new QueryStatisticsDto();
+        queryStatisticsDto.setCommunityId(reqJson.getString("communityId"));
+        queryStatisticsDto.setStartDate(reqJson.getString("startDate"));
+        queryStatisticsDto.setEndDate(reqJson.getString("endDate"));
+        queryStatisticsDto.setConfigId(reqJson.getString("configId"));
+        queryStatisticsDto.setObjName(reqJson.getString("objName"));
+        queryStatisticsDto.setFeeTypeCd(reqJson.getString("feeTypeCd"));
+        queryStatisticsDto.setOwnerName(reqJson.getString("ownerName"));
+
+        List<Map> datas = null;
+        // todo 按楼栋计算实收情况
+        datas = feeStatisticsImpl.getReceivedFeeByFloor(queryStatisticsDto);
+
+        datas = computeFloorReceivedFee(datas);
+
+        context.setResponseEntity(ResultVo.createResponseEntity(datas));
+    }
+
+    private List<Map> computeFloorReceivedFee(List<Map> datas) {
+        if (datas == null || datas.size() < 1) {
+            return new ArrayList<>();
+        }
+
+        List<Map> tmpDatas = new ArrayList<>();
+        for (Map data : datas) {
+            if (!hasInTmp(tmpDatas, data)) {
+                tmpDatas.add(data);
+            }
+        }
+
+        if (tmpDatas == null || tmpDatas.size() < 1) {
+            return new ArrayList<>();
+        }
+
+        BigDecimal receivedFee = new BigDecimal(0.00);
+        for (Map tmpData : tmpDatas) {
+            for (Map data : datas) {
+                if (!data.get("floorId").toString().equals(tmpData.get("floorId"))) {
+                    continue;
+                }
+
+                receivedFee = receivedFee.add(new BigDecimal(data.get("receivedFee").toString()));
+                tmpData.put("receivedFee" + data.get("feeTypeCd").toString(), data.get("receivedFee"));
+            }
+            tmpData.put("receivedFee", receivedFee.doubleValue());
+        }
+
+        return tmpDatas;
+    }
+
+    private boolean hasInTmp(List<Map> tmpDatas, Map data) {
+        for (Map tmpData : tmpDatas) {
+            if (tmpData.get("floorId").equals(data.get("floorId"))) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+}

+ 0 - 5
service-report/src/main/java/com/java110/report/cmd/dataReport/QueryReceivedStatisticsCmd.java

@@ -1,12 +1,10 @@
 package com.java110.report.cmd.dataReport;
 
-import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 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.RoomDto;
 import com.java110.dto.report.QueryStatisticsDto;
 import com.java110.report.statistics.IFeeStatistics;
 import com.java110.utils.exception.CmdException;
@@ -14,13 +12,10 @@ import com.java110.utils.util.Assert;
 import com.java110.utils.util.StringUtil;
 import com.java110.vo.ResultVo;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
 
 import java.math.BigDecimal;
 import java.text.ParseException;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 

+ 30 - 6
service-store/src/main/java/com/java110/store/cmd/reserveOrder/DoDiningCmd.java

@@ -9,6 +9,7 @@ import com.java110.core.event.cmd.Cmd;
 import com.java110.core.event.cmd.CmdEvent;
 import com.java110.core.factory.GenerateCodeFactory;
 import com.java110.dto.community.CommunitySpacePersonTimeDto;
+import com.java110.dto.owner.OwnerDto;
 import com.java110.dto.reserve.ReserveGoodsConfirmOrderDto;
 import com.java110.dto.reserve.ReserveGoodsDto;
 import com.java110.dto.reserve.ReserveGoodsOrderDto;
@@ -18,6 +19,7 @@ import com.java110.intf.store.IReserveGoodsConfirmOrderV1InnerServiceSMO;
 import com.java110.intf.store.IReserveGoodsOrderTimeV1InnerServiceSMO;
 import com.java110.intf.store.IReserveGoodsOrderV1InnerServiceSMO;
 import com.java110.intf.store.IReserveGoodsV1InnerServiceSMO;
+import com.java110.intf.user.IOwnerV1InnerServiceSMO;
 import com.java110.intf.user.IUserV1InnerServiceSMO;
 import com.java110.po.reserveGoodsConfirmOrder.ReserveGoodsConfirmOrderPo;
 import com.java110.po.reserveGoodsOrder.ReserveGoodsOrderPo;
@@ -57,12 +59,37 @@ public class DoDiningCmd extends Cmd {
     @Autowired
     private IReserveGoodsConfirmOrderV1InnerServiceSMO reserveGoodsConfirmOrderV1InnerServiceSMOImpl;
 
+    @Autowired
+    private IOwnerV1InnerServiceSMO ownerV1InnerServiceSMOImpl;
+
     @Override
     public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
         Assert.hasKeyAndValue(reqJson, "communityId", "未包含小区");
         Assert.hasKeyAndValue(reqJson, "qrCode", "未包含二维码");
         Assert.hasKeyAndValue(reqJson, "goodsId", "未包含商品");
 
+        String userId = userV1InnerServiceSMOImpl.getUserIdByQrCode(reqJson.getString("qrCode"));
+
+        if (StringUtil.isEmpty(userId)) {
+            throw new CmdException("二维码过期");
+        }
+
+        UserDto userDto = new UserDto();
+        userDto.setUserId(reqJson.getString("userId"));
+        List<UserDto> userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto);
+
+        Assert.listOnlyOne(userDtos, "用户不存在");
+
+        // todo 判断用户是否为这个小区业主
+        OwnerDto ownerDto = new OwnerDto();
+        ownerDto.setCommunityId(reqJson.getString("communityId"));
+        ownerDto.setLink(userDtos.get(0).getTel());
+        int count = ownerV1InnerServiceSMOImpl.queryOwnersCount(ownerDto);
+        if (count < 1) {
+            throw new CmdException("业主不存在");
+        }
+        reqJson.put("userId", userId);
+
         ReserveGoodsDto reserveGoodsDto = new ReserveGoodsDto();
         reserveGoodsDto.setGoodsId(reqJson.getString("goodsId"));
         List<ReserveGoodsDto> reserveGoodsDtos = reserveGoodsV1InnerServiceSMOImpl.queryReserveGoodss(reserveGoodsDto);
@@ -77,6 +104,7 @@ public class DoDiningCmd extends Cmd {
         reserveGoodsOrderTimeDto.setAppointmentTime(DateUtil.getFormatTimeStringB(DateUtil.getCurrentDate()));
         reserveGoodsOrderTimeDto.setHours(calendar.get(Calendar.HOUR) + "");
         reserveGoodsOrderTimeDto.setGoodsId(reqJson.getString("goodsId"));
+        reserveGoodsOrderTimeDto.setPersonTel(userDtos.get(0).getTel());
         flag = reserveGoodsOrderTimeV1InnerServiceSMOImpl.queryReserveGoodsOrderTimesCount(reserveGoodsOrderTimeDto);
         if (flag > 0) {
             throw new CmdException(reserveGoodsOrderTimeDto.getAppointmentTime() + "," + reserveGoodsOrderTimeDto.getHours() + "已经就餐");
@@ -103,18 +131,14 @@ public class DoDiningCmd extends Cmd {
         List<ReserveGoodsDto> reserveGoodsDtos = reserveGoodsV1InnerServiceSMOImpl.queryReserveGoodss(reserveGoodsDto);
         Assert.listOnlyOne(reserveGoodsDtos, "就餐不存在");
 
-        String userId = userV1InnerServiceSMOImpl.getUserIdByQrCode(reqJson.getString("qrCode"));
-
-        if (StringUtil.isEmpty(userId)) {
-            throw new CmdException("二维码过期");
-        }
 
         UserDto userDto = new UserDto();
-        userDto.setUserId(userId);
+        userDto.setUserId(reqJson.getString("userId"));
         List<UserDto> userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto);
 
         Assert.listOnlyOne(userDtos, "用户不存在");
 
+
         ReserveGoodsOrderPo reserveGoodsOrderPo = new ReserveGoodsOrderPo();
         reserveGoodsOrderPo.setOrderId(GenerateCodeFactory.getGeneratorId(CODE_PREFIX_ID));
         reserveGoodsOrderPo.setGoodsId(reqJson.getString("goodsId"));

+ 3 - 0
service-user/src/main/java/com/java110/user/smo/impl/UserV1InnerServiceSMOImpl.java

@@ -116,6 +116,9 @@ public class UserV1InnerServiceSMOImpl extends BaseServiceSMO implements IUserV1
     public String getUserIdByQrCode(@RequestBody String qrCode) {
         qrCode = AuthenticationFactory.AesDecrypt(qrCode, AuthenticationFactory.AES_KEY);
         JSONObject qrCodeJson = JSONObject.parseObject(qrCode);
+        if (qrCodeJson == null || !qrCodeJson.containsKey("time")) {
+            throw new IllegalArgumentException("二维码非法");
+        }
         long time = qrCodeJson.getLongValue("time");
         if (DateUtil.getCurrentDate().getTime() - time > 5 * 60 * 1000) {
             throw new IllegalArgumentException("二维码失效");