浏览代码

优化派工单和优惠申请问题

xiaogang 2 年之前
父节点
当前提交
b48087f4e0

+ 1 - 0
java110-bean/src/main/java/com/java110/dto/repair/RepairUserDto.java

@@ -36,6 +36,7 @@ public class RepairUserDto extends PageDto implements Serializable {
     public static final String STATE_EVALUATE = "11000";//待评价
     public static final String STATE_FINISH_PAY_FEE = "12000";//已支付
     public static final String STATE_STOP = "12001";//暂停
+    public static final String STATE_START = "12002";//启动
 
     private String context;
     private String repairId;

+ 1 - 1
java110-db/src/main/resources/mapper/community/RepairServiceDaoImplMapper.xml

@@ -504,7 +504,7 @@
             and t.status_cd= #{statusCd}
         </if>
         <if test="state !=null and state != ''">
-            and t.state= #{state}
+            and ru.state= #{state}
         </if>
         <if test="communityId !=null and communityId != ''">
             and t.community_id= #{communityId}

+ 2 - 2
java110-db/src/main/resources/mapper/store/UserStorehouseServiceDaoImplMapper.xml

@@ -262,9 +262,9 @@
         <if test="usId !=null and usId != ''">
             and t.us_id= #{usId}
         </if>
-        <if test="userId !=null and userId != ''">
+        <!--<if test="userId !=null and userId != ''">
             and t.user_id= #{userId}
-        </if>
+        </if>-->
         <if test="userName !=null and userName != ''">
             and u.name= #{userName}
         </if>

+ 2 - 18
service-community/src/main/java/com/java110/community/api/RepairApi.java

@@ -44,7 +44,6 @@ public class RepairApi {
     @Autowired
     private IUserV1InnerServiceSMO userV1InnerServiceSMOImpl;
 
-
     /**
      * 报修评价
      *
@@ -57,7 +56,6 @@ public class RepairApi {
         return appraiseRepairBMOImpl.appraiseRepair(appraiseDto);
     }
 
-
     /**
      * 微信保存消息模板
      *
@@ -68,23 +66,16 @@ public class RepairApi {
      */
     @RequestMapping(value = "/saveRepairReturnVisit", method = RequestMethod.POST)
     public ResponseEntity<String> saveRepairReturnVisit(@RequestHeader(value = "user-id") String userId,
-
                                                         @RequestBody JSONObject reqJson) {
-
         Assert.hasKeyAndValue(reqJson, "repairId", "请求报文中未包含repairId");
         Assert.hasKeyAndValue(reqJson, "communityId", "请求报文中未包含communityId");
         Assert.hasKeyAndValue(reqJson, "visitType", "请求报文中未包含满意度");
         Assert.hasKeyAndValue(reqJson, "context", "请求报文中未包含context");
-
         UserDto userDto = new UserDto();
         userDto.setUserId(userId);
         List<UserDto> userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto);
-
-        Assert.listOnlyOne(userDtos,"未包含用户");
-
-
-        String userName  = userDtos.get(0).getName();
-
+        Assert.listOnlyOne(userDtos, "未包含用户");
+        String userName = userDtos.get(0).getName();
         RepairReturnVisitPo repairReturnVisitPo = BeanConvertUtil.covertBean(reqJson, RepairReturnVisitPo.class);
         repairReturnVisitPo.setVisitPersonId(userId);
         repairReturnVisitPo.setVisitPersonName(userName);
@@ -101,14 +92,11 @@ public class RepairApi {
      */
     @RequestMapping(value = "/updateRepairReturnVisit", method = RequestMethod.POST)
     public ResponseEntity<String> updateRepairReturnVisit(@RequestBody JSONObject reqJson) {
-
         Assert.hasKeyAndValue(reqJson, "repairId", "请求报文中未包含repairId");
         Assert.hasKeyAndValue(reqJson, "visitPersonId", "请求报文中未包含visitPersonId");
         Assert.hasKeyAndValue(reqJson, "communityId", "请求报文中未包含communityId");
         Assert.hasKeyAndValue(reqJson, "context", "请求报文中未包含context");
         Assert.hasKeyAndValue(reqJson, "visitId", "visitId不能为空");
-
-
         RepairReturnVisitPo repairReturnVisitPo = BeanConvertUtil.covertBean(reqJson, RepairReturnVisitPo.class);
         return updateRepairReturnVisitBMOImpl.update(repairReturnVisitPo);
     }
@@ -124,10 +112,7 @@ public class RepairApi {
     @RequestMapping(value = "/deleteRepairReturnVisit", method = RequestMethod.POST)
     public ResponseEntity<String> deleteRepairReturnVisit(@RequestBody JSONObject reqJson) {
         Assert.hasKeyAndValue(reqJson, "communityId", "小区ID不能为空");
-
         Assert.hasKeyAndValue(reqJson, "visitId", "visitId不能为空");
-
-
         RepairReturnVisitPo repairReturnVisitPo = BeanConvertUtil.covertBean(reqJson, RepairReturnVisitPo.class);
         return deleteRepairReturnVisitBMOImpl.delete(repairReturnVisitPo);
     }
@@ -158,7 +143,6 @@ public class RepairApi {
         repairReturnVisitDto.setTel(tel);
         repairReturnVisitDto.setRepairType(repairType);
         repairReturnVisitDto.setState(state);
-
         return getRepairReturnVisitBMOImpl.get(repairReturnVisitDto);
     }
 }

+ 2 - 1
service-community/src/main/java/com/java110/community/api/RoomRenovationApi.java

@@ -426,6 +426,7 @@ public class RoomRenovationApi {
         userDto.setUserId(userId);
         userDto.setStatusCd("0");
         List<UserDto> users = userInnerServiceSMOImpl.getUsers(userDto);
+        Assert.listOnlyOne(users, "查询用户信息错误!");
         RoomRenovationRecordPo roomRenovationRecordPo = new RoomRenovationRecordPo();
         roomRenovationRecordPo.setrId(rId);
         roomRenovationRecordPo.setRemark(remark);
@@ -438,7 +439,7 @@ public class RoomRenovationApi {
         roomRenovationRecordPo.setIsTrue(isTrue);
         saveRoomRenovationRecordBMO.saveRecord(roomRenovationRecordPo);
         for (String photo : photos) {
-            photoSMOImpl.savePhoto(photo,roomRenovationRecordPo.getRecordId(),roomRenovationPo.getCommunityId(),"19000");
+            photoSMOImpl.savePhoto(photo, roomRenovationRecordPo.getRecordId(), roomRenovationPo.getCommunityId(), "19000");
         }
         FileRelPo fileRelPo = new FileRelPo();
         fileRelPo.setObjId(roomRenovationRecordPo.getRecordId());

+ 2 - 3
service-community/src/main/java/com/java110/community/cmd/ownerRepair/GrabbingRepairCmd.java

@@ -54,7 +54,6 @@ public class GrabbingRepairCmd extends Cmd {
     @Autowired
     private IUserV1InnerServiceSMO userV1InnerServiceSMOImpl;
 
-
     //域
     public static final String DOMAIN_COMMON = "DOMAIN.COMMON";
 
@@ -74,7 +73,7 @@ public class GrabbingRepairCmd extends Cmd {
     public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
         String userId = context.getReqHeaders().get("user-id");
 
-        if(userId.startsWith("-") || StringUtil.isEmpty(userId)){
+        if (userId.startsWith("-") || StringUtil.isEmpty(userId)) {
             userId = reqJson.getString("userId");
         }
 
@@ -127,7 +126,7 @@ public class GrabbingRepairCmd extends Cmd {
             repairTypeUser.setRepairType(repairType);
             //查询工单设置表
             List<RepairTypeUserDto> repairTypeUserDtos = repairTypeUserInnerServiceSMO.queryRepairTypeUsers(repairTypeUser);
-            if (repairTypeUserDtos != null && repairTypeUserDtos.size() != 1) { //报修类型设置未添加操作的员工!
+            if (repairTypeUserDtos != null && repairTypeUserDtos.size() != 1) { //报修类型设置未添加操作的员工!
                 ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_BUSINESS_VERIFICATION, "对不起,您还没权限进行此操作,请联系管理员处理!");
                 context.setResponseEntity(responseEntity);
                 return;

+ 12 - 13
service-community/src/main/java/com/java110/community/cmd/ownerRepair/RepairDispatchCmd.java

@@ -74,7 +74,6 @@ public class RepairDispatchCmd extends Cmd {
     @Autowired
     private IRepairUserV1InnerServiceSMO repairUserV1InnerServiceSMOImpl;
 
-
     //域
     public static final String DOMAIN_COMMON = "DOMAIN.COMMON";
 
@@ -101,13 +100,13 @@ public class RepairDispatchCmd extends Cmd {
 //        RepairUserPo repairUserPo = BeanConvertUtil.covertBean(reqJson, RepairUserPo.class);
         String action = reqJson.getString("action");
         switch (action) {
-            case ACTION_DISPATCH:
+            case ACTION_DISPATCH: //派单
                 dispacthRepair(context, reqJson);
                 break;
-            case ACTION_TRANSFER:
+            case ACTION_TRANSFER: //转单
                 transferRepair(context, reqJson);
                 break;
-            case ACTION_BACK:
+            case ACTION_BACK: //退单
                 backRepair(context, reqJson);
                 break;
         }
@@ -190,11 +189,11 @@ public class RepairDispatchCmd extends Cmd {
         repair.setStaffId(reqJson.getString("staffId"));
         repair.setCommunityId(reqJson.getString("communityId"));
 //        repair.setRuId(repairUserDtos.get(0).getPreRuId());
-        repair.setStates(new String[]{RepairUserDto.STATE_TRANSFER, RepairUserDto.STATE_CLOSE, RepairUserDto.STATE_STOP});
+        repair.setStates(new String[]{RepairUserDto.STATE_TRANSFER, RepairUserDto.STATE_CLOSE, RepairUserDto.STATE_STOP}); //转单、结单、暂停
         List<RepairUserDto> repairUsers = repairUserInnerServiceSMOImpl.queryRepairUsers(repair);
         if (repairUsers == null || repairUsers.size() < 1) { //指派的不能退单
-            if (RepairDto.REPAIR_WAY_GRABBING.equals(repairDtos.get(0).getRepairWay())
-                    || RepairDto.REPAIR_WAY_TRAINING.equals(repairDtos.get(0).getRepairWay())) {
+            if (RepairDto.REPAIR_WAY_GRABBING.equals(repairDtos.get(0).getRepairWay())  
+                    || RepairDto.REPAIR_WAY_TRAINING.equals(repairDtos.get(0).getRepairWay())) {  //抢单、轮训
                 modifyBusinessRepairDispatch(reqJson, RepairDto.STATE_WAIT);//维修单变成未派单
                 //把自己改成退单
                 RepairUserPo repairUser = new RepairUserPo();
@@ -281,7 +280,7 @@ public class RepairDispatchCmd extends Cmd {
             context.setResponseEntity(responseEntity);
             return;
         }
-        //插入派单者的信息
+        //更改转单者的信息
         RepairUserPo repairUserPo = new RepairUserPo();
         repairUserPo.setRuId(repairUserDtos.get(0).getRuId());
         repairUserPo.setEndTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
@@ -291,7 +290,8 @@ public class RepairDispatchCmd extends Cmd {
         flag = repairUserV1InnerServiceSMOImpl.updateRepairUserNew(repairUserPo);
         if (flag < 1) {
             throw new CmdException("修改用户失败");
-        }        //处理人信息
+        }
+        //处理人信息
         repairUserPo = new RepairUserPo();
         repairUserPo.setRuId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_ruId));
         repairUserPo.setState(RepairUserDto.STATE_DOING);
@@ -328,7 +328,7 @@ public class RepairDispatchCmd extends Cmd {
         String staffId = reqJson.getString("staffId");
         RepairDto repair = new RepairDto();
         repair.setStaffId(staffId);
-        repair.setState("10001"); //处理中
+        repair.setState("1100"); //接单状态
         int i = repairInnerServiceSMOImpl.queryStaffRepairsCount(repair);
         //取出开关映射的值(维修师傅未处理最大单数)
         String repairNumber = MappingCache.getValue(MappingConstant.REPAIR_DOMAIN, REPAIR_NUMBER);
@@ -348,7 +348,7 @@ public class RepairDispatchCmd extends Cmd {
         RepairDto repairDto = new RepairDto();
         repairDto.setRepairId(repairId);
         List<RepairDto> repairDtos = repairInnerServiceSMOImpl.queryRepairs(repairDto);
-        if (repairDtos == null || repairDtos.size() < 1) {
+        if (repairDtos == null || repairDtos.size() != 1) {
             ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_ERROR, "数据错误!");
             context.setResponseEntity(responseEntity);
         } else {
@@ -359,7 +359,7 @@ public class RepairDispatchCmd extends Cmd {
                 String userName = reqJson.getString("userName");
 
                 String ruId = GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_ruId);
-                // 自己的单子状态修改为
+                // 自己的单子状态修改为
                 RepairUserPo repairUserPo = new RepairUserPo();
                 repairUserPo.setRuId(ruId);
                 repairUserPo.setStartTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
@@ -444,7 +444,6 @@ public class RepairDispatchCmd extends Cmd {
         JSONObject businessOwnerRepair = new JSONObject();
         businessOwnerRepair.putAll(BeanConvertUtil.beanCovertMap(repairDtos.get(0)));
         businessOwnerRepair.put("state", state);
-        //计算 应收金额
         RepairPoolPo repairPoolPo = BeanConvertUtil.covertBean(businessOwnerRepair, RepairPoolPo.class);
         int flag = repairPoolV1InnerServiceSMOImpl.updateRepairPoolNew(repairPoolPo);
         if (flag < 1) {

+ 1 - 6
service-community/src/main/java/com/java110/community/cmd/ownerRepair/RepairForceFinishCmd.java

@@ -117,11 +117,6 @@ public class RepairForceFinishCmd extends Cmd {
         repairDto.setState(RepairDto.STATE_TAKING);
         List<RepairDto> repairDtos = repairInnerServiceSMOImpl.queryRepairs(repairDto);
         Assert.listOnlyOne(repairDtos, "当前没有需要处理订单");
-        if (repairDtos != null && repairDtos.size() != 1) {
-            ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_BUSINESS_VERIFICATION, "非常抱歉当前不能退单!");
-            context.setResponseEntity(responseEntity);
-            return;
-        }
         //查询正在处理 工单的师傅
         RepairUserDto repairUserDto = new RepairUserDto();
         repairUserDto.setRepairId(reqJson.getString("repairId"));
@@ -399,7 +394,7 @@ public class RepairForceFinishCmd extends Cmd {
                 throw new CmdException("添加维修工单流程信息失败");
             }
         }
-        // 1.0 关闭自己订单
+        // 1.0 关闭自己订单
         RepairUserPo repairUserPo = new RepairUserPo();
         repairUserPo.setRuId(repairUserDtos.get(0).getRuId());
         repairUserPo.setEndTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));

+ 22 - 8
service-community/src/main/java/com/java110/community/cmd/ownerRepair/RepairStartCmd.java

@@ -5,6 +5,7 @@ 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.core.factory.GenerateCodeFactory;
 import com.java110.dto.repair.RepairDto;
 import com.java110.dto.repair.RepairUserDto;
 import com.java110.intf.community.IRepairInnerServiceSMO;
@@ -16,6 +17,7 @@ import com.java110.po.owner.RepairUserPo;
 import com.java110.utils.constant.BusinessTypeConstant;
 import com.java110.utils.exception.CmdException;
 import com.java110.utils.util.Assert;
+import com.java110.utils.util.DateUtil;
 import com.java110.utils.util.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 
@@ -59,7 +61,7 @@ public class RepairStartCmd extends Cmd {
             repairPoolPo.setRepairId(reqJson.getString("repairId"));
             repairPoolPo.setState(RepairDto.STATE_TAKING); //状态变为接单状态
             flag = repairPoolV1InnerServiceSMOImpl.updateRepairPoolNew(repairPoolPo);
-            if(flag < 1){
+            if (flag < 1) {
                 throw new CmdException("修改工单失败");
             }
             RepairUserDto repairUserDto = new RepairUserDto();
@@ -69,18 +71,30 @@ public class RepairStartCmd extends Cmd {
             List<RepairUserDto> repairUserDtos = repairUserInnerServiceSMOImpl.queryRepairUsers(repairUserDto);
             SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
             if (repairUserDtos != null && repairUserDtos.size() > 0) {
+                RepairUserPo repairUserPo = new RepairUserPo();
+                repairUserPo.setRuId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_ruId));
+                repairUserPo.setRepairId(reqJson.getString("repairId"));
+                repairUserPo.setbId("-1");
+                repairUserPo.setCommunityId(reqJson.getString("communityId"));
+                repairUserPo.setCreateTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+                repairUserPo.setState(RepairUserDto.STATE_START);
+                repairUserPo.setContext("启动报修流程");
+                repairUserPo.setStaffId(reqJson.getString("userId"));
+                repairUserPo.setStaffName(reqJson.getString("userName"));
                 for (RepairUserDto repairUser : repairUserDtos) {
                     if (repairUser.getEndTime() == null) {
-                        RepairUserPo repairUserPo = new RepairUserPo();
-                        repairUserPo.setRuId(repairUser.getRuId());
+                        repairUserPo.setPreStaffId(repairUser.getStaffId());
+                        repairUserPo.setPreStaffName(repairUser.getStaffName());
+                        repairUserPo.setStartTime(simpleDateFormat.format(repairUser.getStartTime()));
                         repairUserPo.setEndTime(simpleDateFormat.format(new Date()));
-                        //修改暂停报修状态
-                        flag = repairUserV1InnerServiceSMOImpl.updateRepairUserNew(repairUserPo);
-                        if(flag < 1){
-                            throw new CmdException("修改工单失败");
-                        }
+                        repairUserPo.setPreRuId(repairUser.getRuId());
                     }
                 }
+                repairUserPo.setRepairEvent(RepairUserDto.REPAIR_EVENT_START_USER);
+                flag = repairUserV1InnerServiceSMOImpl.saveRepairUserNew(repairUserPo);
+                if (flag < 1) {
+                    throw new CmdException("添加报修工单信息失败!");
+                }
             } else {
                 throw new IllegalArgumentException("启动报修单错误!");
             }

+ 170 - 4
service-fee/src/main/java/com/java110/fee/api/ApplyRoomDiscountApi.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.java110.core.annotation.Java110Transactional;
 import com.java110.core.context.DataFlowContext;
+import com.java110.core.factory.CommunitySettingFactory;
 import com.java110.core.factory.GenerateCodeFactory;
 import com.java110.dto.room.ApplyRoomDiscountDto;
 import com.java110.dto.room.ApplyRoomDiscountTypeDto;
@@ -27,6 +28,7 @@ import com.java110.intf.fee.IFeeDiscountRuleInnerServiceSMO;
 import com.java110.po.room.ApplyRoomDiscountPo;
 import com.java110.po.room.ApplyRoomDiscountTypePo;
 import com.java110.po.file.FileRelPo;
+import com.java110.utils.cache.MappingCache;
 import com.java110.utils.util.Assert;
 import com.java110.utils.util.BeanConvertUtil;
 import com.java110.utils.util.StringUtil;
@@ -94,6 +96,12 @@ public class ApplyRoomDiscountApi {
     @Autowired
     private IFileRelInnerServiceSMO fileRelInnerServiceSMOImpl;
 
+    //域
+    public static final String DOMAIN_COMMON = "DOMAIN.COMMON";
+
+    //键
+    public static final String TOTAL_FEE_PRICE = "TOTAL_FEE_PRICE";
+
     /**
      * 优惠申请
      *
@@ -309,20 +317,116 @@ public class ApplyRoomDiscountApi {
                         cashBackAmount = cashBackAmount.add(spec); //计算优惠的金额
                     }
                 }
+                //1表示四舍五入后保留小数点后两位;2表示四舍五入后保留小数点后一位;3表示向上取整;4 表示向下取整;5表示 四舍五入后取整 其他情况默认四舍五入后保留小数点后两位
+                String val = CommunitySettingFactory.getValue(reqJson.getString("communityId"), TOTAL_FEE_PRICE);
+                if (StringUtil.isEmpty(val)) {
+                    //1表示四舍五入后保留小数点后两位;2表示四舍五入后保留小数点后一位;3表示向上取整;4 表示向下取整;5表示 四舍五入后取整 其他情况默认四舍五入后保留小数点后两位
+                    val = MappingCache.getValue(DOMAIN_COMMON, TOTAL_FEE_PRICE);
+                }
                 DecimalFormat df = new DecimalFormat("0.00");
                 if (StringUtil.isEmpty(reqJson.getString("refundAmount"))) {
-                    reqJson.put("cashBackAmount", df.format(cashBackAmount));
+                    if (!StringUtil.isEmpty(val) && val.equals("2")) { //2表示四舍五入后保留小数点后一位
+                        BigDecimal bigDecimal = cashBackAmount.setScale(1, BigDecimal.ROUND_HALF_UP);
+                        reqJson.put("cashBackAmount", String.valueOf(bigDecimal));
+                    }
+                    if (!StringUtil.isEmpty(val) && val.equals("3")) { //3表示向上取整
+                        BigDecimal bigDecimal = cashBackAmount.setScale(0, BigDecimal.ROUND_UP);
+                        reqJson.put("cashBackAmount", String.valueOf(bigDecimal));
+                    }
+                    if (!StringUtil.isEmpty(val) && val.equals("4")) { //4 表示向下取整
+                        BigDecimal bigDecimal = cashBackAmount.setScale(0, BigDecimal.ROUND_DOWN);
+                        reqJson.put("cashBackAmount", String.valueOf(bigDecimal));
+                    }
+                    if (!StringUtil.isEmpty(val) && val.equals("5")) { //5表示 四舍五入后取整
+                        BigDecimal bigDecimal = cashBackAmount.setScale(1, BigDecimal.ROUND_HALF_UP);
+                        BigDecimal bigDecimal1 = bigDecimal.setScale(0, BigDecimal.ROUND_DOWN);
+                        reqJson.put("cashBackAmount", String.valueOf(bigDecimal1));
+                    }
+                    if ((!val.equals("2") && !val.equals("3") && !val.equals("4") && !val.equals("5")) || StringUtil.isEmpty(val)) {
+                        BigDecimal bigDecimal = cashBackAmount.setScale(2, BigDecimal.ROUND_HALF_UP);
+                        reqJson.put("cashBackAmount", String.valueOf(bigDecimal));
+                    }
                 } else {
-                    reqJson.put("cashBackAmount", reqJson.getString("refundAmount"));
+                    if (!StringUtil.isEmpty(val) && val.equals("2")) { //2表示四舍五入后保留小数点后一位
+                        BigDecimal refundAmount = new BigDecimal(reqJson.getString("refundAmount"));
+                        BigDecimal bigDecimal = refundAmount.setScale(1, BigDecimal.ROUND_HALF_UP);
+                        reqJson.put("cashBackAmount", String.valueOf(bigDecimal));
+                    }
+                    if (!StringUtil.isEmpty(val) && val.equals("3")) { //3表示向上取整
+                        BigDecimal refundAmount = new BigDecimal(reqJson.getString("refundAmount"));
+                        BigDecimal bigDecimal = refundAmount.setScale(0, BigDecimal.ROUND_UP);
+                        reqJson.put("cashBackAmount", String.valueOf(bigDecimal));
+                    }
+                    if (!StringUtil.isEmpty(val) && val.equals("4")) { //4 表示向下取整
+                        BigDecimal refundAmount = new BigDecimal(reqJson.getString("refundAmount"));
+                        BigDecimal bigDecimal = refundAmount.setScale(0, BigDecimal.ROUND_DOWN);
+                        reqJson.put("cashBackAmount", String.valueOf(bigDecimal));
+                    }
+                    if (!StringUtil.isEmpty(val) && val.equals("5")) { //5表示 四舍五入后取整
+                        BigDecimal refundAmount = new BigDecimal(reqJson.getString("refundAmount"));
+                        BigDecimal bigDecimal = refundAmount.setScale(1, BigDecimal.ROUND_HALF_UP);
+                        BigDecimal bigDecimal1 = bigDecimal.setScale(0, BigDecimal.ROUND_DOWN);
+                        reqJson.put("cashBackAmount", String.valueOf(bigDecimal1));
+                    }
+                    if ((!val.equals("2") && !val.equals("3") && !val.equals("4") && !val.equals("5")) || StringUtil.isEmpty(val)) {
+                        BigDecimal refundAmount = new BigDecimal(reqJson.getString("refundAmount"));
+                        BigDecimal bigDecimal = refundAmount.setScale(2, BigDecimal.ROUND_HALF_UP);
+                        reqJson.put("cashBackAmount", String.valueOf(bigDecimal));
+                    }
                 }
                 //处理账户返现
                 JSONArray businesses = new JSONArray();
                 updateAccountBMOImpl.cashBackAccount(reqJson, dataFlowContext, businesses);
                 reqJson.put("inUse", 1);
                 if (StringUtil.isEmpty(reqJson.getString("refundAmount"))) {
-                    reqJson.put("returnAmount", df.format(cashBackAmount));
+                    if (!StringUtil.isEmpty(val) && val.equals("2")) { //2表示四舍五入后保留小数点后一位
+                        BigDecimal bigDecimal = cashBackAmount.setScale(1, BigDecimal.ROUND_HALF_UP);
+                        reqJson.put("returnAmount", String.valueOf(bigDecimal));
+                    }
+                    if (!StringUtil.isEmpty(val) && val.equals("3")) { //3表示向上取整
+                        BigDecimal bigDecimal = cashBackAmount.setScale(0, BigDecimal.ROUND_UP);
+                        reqJson.put("returnAmount", String.valueOf(bigDecimal));
+                    }
+                    if (!StringUtil.isEmpty(val) && val.equals("4")) { //4 表示向下取整
+                        BigDecimal bigDecimal = cashBackAmount.setScale(0, BigDecimal.ROUND_DOWN);
+                        reqJson.put("returnAmount", String.valueOf(bigDecimal));
+                    }
+                    if (!StringUtil.isEmpty(val) && val.equals("5")) { //5表示 四舍五入后取整
+                        BigDecimal bigDecimal = cashBackAmount.setScale(1, BigDecimal.ROUND_HALF_UP);
+                        BigDecimal bigDecimal1 = bigDecimal.setScale(0, BigDecimal.ROUND_DOWN);
+                        reqJson.put("returnAmount", String.valueOf(bigDecimal1));
+                    }
+                    if ((!val.equals("2") && !val.equals("3") && !val.equals("4") && !val.equals("5")) || StringUtil.isEmpty(val)) {
+                        BigDecimal bigDecimal = cashBackAmount.setScale(2, BigDecimal.ROUND_HALF_UP);
+                        reqJson.put("returnAmount", String.valueOf(bigDecimal));
+                    }
                 } else {
-                    reqJson.put("returnAmount", reqJson.getString("refundAmount"));
+                    if (!StringUtil.isEmpty(val) && val.equals("2")) { //2表示四舍五入后保留小数点后一位
+                        BigDecimal refundAmount = new BigDecimal(reqJson.getString("refundAmount"));
+                        BigDecimal bigDecimal = refundAmount.setScale(1, BigDecimal.ROUND_HALF_UP);
+                        reqJson.put("returnAmount", String.valueOf(bigDecimal));
+                    }
+                    if (!StringUtil.isEmpty(val) && val.equals("3")) { //3表示向上取整
+                        BigDecimal refundAmount = new BigDecimal(reqJson.getString("refundAmount"));
+                        BigDecimal bigDecimal = refundAmount.setScale(0, BigDecimal.ROUND_UP);
+                        reqJson.put("returnAmount", String.valueOf(bigDecimal));
+                    }
+                    if (!StringUtil.isEmpty(val) && val.equals("4")) { //4 表示向下取整
+                        BigDecimal refundAmount = new BigDecimal(reqJson.getString("refundAmount"));
+                        BigDecimal bigDecimal = refundAmount.setScale(0, BigDecimal.ROUND_DOWN);
+                        reqJson.put("returnAmount", String.valueOf(bigDecimal));
+                    }
+                    if (!StringUtil.isEmpty(val) && val.equals("5")) { //5表示 四舍五入后取整
+                        BigDecimal refundAmount = new BigDecimal(reqJson.getString("refundAmount"));
+                        BigDecimal bigDecimal = refundAmount.setScale(1, BigDecimal.ROUND_HALF_UP);
+                        BigDecimal bigDecimal1 = bigDecimal.setScale(0, BigDecimal.ROUND_DOWN);
+                        reqJson.put("returnAmount", String.valueOf(bigDecimal1));
+                    }
+                    if ((!val.equals("2") && !val.equals("3") && !val.equals("4") && !val.equals("5")) || StringUtil.isEmpty(val)) {
+                        BigDecimal refundAmount = new BigDecimal(reqJson.getString("refundAmount"));
+                        BigDecimal bigDecimal = refundAmount.setScale(2, BigDecimal.ROUND_HALF_UP);
+                        reqJson.put("returnAmount", String.valueOf(bigDecimal));
+                    }
                 }
             }
         } else {
@@ -333,6 +437,68 @@ public class ApplyRoomDiscountApi {
         return updateApplyRoomDiscountBMOImpl.update(applyRoomDiscountPo);
     }
 
+    /**
+     * 处理返还金额
+     *
+     * @param reqJson
+     * @return
+     * @serviceCode /applyRoomDiscount/dealWithRefundAmount
+     * @path /app/applyRoomDiscount/dealWithRefundAmount
+     */
+    @RequestMapping(value = "/dealWithRefundAmount", method = RequestMethod.POST)
+    @Java110Transactional
+    public JSONObject dealWithRefundAmount(@RequestBody JSONObject reqJson, @RequestHeader(value = "user-id") String userId, DataFlowContext dataFlowContext) {
+        JSONArray fees = reqJson.getJSONArray("fees");
+        if (fees != null && fees.size() > 0) {
+            JSONObject fee = null;
+            BigDecimal cashBackAmount = new BigDecimal("0.00");//返现总金额
+            for (int index = 0; index < fees.size(); index++) {
+                fee = fees.getJSONObject(index);
+                if (fee.containsKey("checked") && !StringUtil.isEmpty(fee.getString("checked")) && fee.getString("checked").equals("true")) {
+                    //获取优惠
+                    JSONArray discounts = reqJson.getJSONArray("discounts");
+                    for (int i = 0; i < discounts.size(); i++) {
+                        JSONObject discountObject = discounts.getJSONObject(i);
+                        if (!reqJson.getString("discountId").equals(discountObject.getString("discountId"))) {
+                            continue;
+                        }
+                        JSONArray feeDiscountSpecs = discountObject.getJSONArray("feeDiscountSpecs");
+                        //获取规则id
+                        String ruleId = discounts.getJSONObject(i).getString("ruleId");
+                        FeeDiscountRuleDto feeDiscountRuleDto = new FeeDiscountRuleDto();
+                        feeDiscountRuleDto.setRuleId(ruleId);
+                        List<FeeDiscountRuleDto> feeDiscountRuleDtos = feeDiscountRuleInnerServiceSMOImpl.queryFeeDiscountRules(feeDiscountRuleDto);
+                        Assert.listOnlyOne(feeDiscountRuleDtos, "查询折扣规则错误!");
+                        //获取折扣类型(1: 打折  2:减免  3:滞纳金  4:空置房打折  5:空置房减免)
+                        String discountSmallType = feeDiscountRuleDtos.get(0).getDiscountSmallType();
+                        String specValue = getRateSpecValueByFeeDiscountSpecs(feeDiscountSpecs);
+                        if (!StringUtil.isEmpty(discountSmallType) && (discountSmallType.equals("1") || discountSmallType.equals("4"))) { //打折
+                            FeeDetailDto feeDetailDto = new FeeDetailDto();
+                            feeDetailDto.setDetailId(fee.getString("detailId"));
+                            List<FeeDetailDto> feeDetailDtos = feeDetailInnerServiceSMOImpl.queryFeeDetails(feeDetailDto);
+                            Assert.listOnlyOne(feeDetailDtos, "查询费用明细表错误!");
+                            BigDecimal receivedAmount = new BigDecimal(feeDetailDtos.get(0).getReceivedAmount());//获取实收金额
+                            BigDecimal spec = new BigDecimal(specValue);//折扣
+                            //计算打折后的实收金额
+                            BigDecimal money = receivedAmount.multiply(spec);
+                            cashBackAmount = cashBackAmount.add(receivedAmount.subtract(money)); //计算优惠的金额
+                        } else if (!StringUtil.isEmpty(discountSmallType) && (discountSmallType.equals("2") || discountSmallType.equals("5"))) { //减免
+                            FeeDetailDto feeDetailDto = new FeeDetailDto();
+                            feeDetailDto.setDetailId(fee.getString("detailId"));
+                            List<FeeDetailDto> feeDetailDtos = feeDetailInnerServiceSMOImpl.queryFeeDetails(feeDetailDto);
+                            Assert.listOnlyOne(feeDetailDtos, "查询费用明细表错误!");
+                            BigDecimal spec = new BigDecimal(specValue);//减免金額
+                            cashBackAmount = cashBackAmount.add(spec); //计算优惠的金额
+                        }
+                    }
+                }
+            }
+            DecimalFormat df = new DecimalFormat("0.00");
+            reqJson.put("returnAmount", df.format(cashBackAmount));
+        }
+        return reqJson;
+    }
+
     /**
      * 89002020980001	102020001	月份
      * 89002020980002	102020001	打折率