Sfoglia il codice sorgente

优化采购逻辑修改

Your Name 3 anni fa
parent
commit
6e29bd3484

+ 5 - 0
java110-bean/src/main/java/com/java110/dto/visit/VisitDto.java

@@ -14,6 +14,11 @@ import java.io.Serializable;
  **/
 public class VisitDto extends PageDto implements Serializable {
 
+    //审核状态 0表示未审核;1表示审核通过;2表示审核拒绝
+    public static final String STATE_W = "0"; //待审核
+    public static final String STATE_C = "1"; //表示审核通过
+    public static final String STATE_F = "2"; //表示审核拒绝
+
     private String departureTime;
     private String vName;
     private String visitGender;

+ 26 - 0
java110-core/src/main/java/com/java110/core/smo/IPhotoSMO.java

@@ -0,0 +1,26 @@
+package com.java110.core.smo;
+
+import com.alibaba.fastjson.JSONObject;
+
+/**
+ * 图片处理 服务类
+ * add by wuxw 2023-01-19
+ */
+public interface IPhotoSMO {
+
+    /**
+     * 保存图片公共类,供cmd 调用
+     * @param photo
+     * @param objId
+     * @return
+     */
+    int savePhoto(String photo,String objId, String communityId);
+
+    /**
+     * 保存图片公共类,供cmd 调用
+     * @param reqJson
+     * @param objId
+     * @return
+     */
+    int savePhoto(JSONObject reqJson, String objId, String communityId);
+}

+ 79 - 0
java110-core/src/main/java/com/java110/core/smo/impl/PhotoSMOImpl.java

@@ -0,0 +1,79 @@
+package com.java110.core.smo.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.core.smo.IPhotoSMO;
+import com.java110.dto.file.FileDto;
+import com.java110.intf.common.IFileInnerServiceSMO;
+import com.java110.intf.common.IFileRelInnerServiceSMO;
+import com.java110.po.file.FileRelPo;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.utils.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class PhotoSMOImpl implements IPhotoSMO {
+
+    @Autowired(required = false)
+    private IFileInnerServiceSMO fileInnerServiceSMOImpl;
+
+
+    @Autowired(required = false)
+    private IFileRelInnerServiceSMO fileRelInnerServiceSMOImpl;
+
+    @Override
+    public int savePhoto(String photo, String objId, String communityId) {
+        if (StringUtil.isEmpty(photo)) {
+            return 0;
+        }
+        if (photo.length() > 512) { //说明是图片
+            FileDto fileDto = new FileDto();
+            fileDto.setFileId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_file_id));
+            fileDto.setFileName(fileDto.getFileId());
+            fileDto.setContext(photo);
+            fileDto.setSuffix("jpeg");
+            fileDto.setCommunityId(communityId);
+            String fileName = fileInnerServiceSMOImpl.saveFile(fileDto);
+            photo = fileName;
+        }
+        JSONObject businessUnit = new JSONObject();
+        businessUnit.put("fileRelId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_fileRelId));
+        businessUnit.put("relTypeCd", "11000");
+        businessUnit.put("saveWay", "table");
+        businessUnit.put("objId", objId);
+        businessUnit.put("fileRealName", photo);
+        businessUnit.put("fileSaveName", photo);
+        FileRelPo fileRelPo = BeanConvertUtil.covertBean(businessUnit, FileRelPo.class);
+        return fileRelInnerServiceSMOImpl.saveFileRel(fileRelPo);
+    }
+
+    @Override
+    public int savePhoto(JSONObject reqJson, String objId, String communityId) {
+        if (!reqJson.containsKey("photo") || StringUtils.isEmpty(reqJson.getString("photo"))) {
+            return 0;
+        }
+        if (reqJson.getString("photo").length() > 512) { //说明是图片
+            FileDto fileDto = new FileDto();
+            fileDto.setFileId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_file_id));
+            fileDto.setFileName(fileDto.getFileId());
+            fileDto.setContext(reqJson.getString("photo"));
+            fileDto.setSuffix("jpeg");
+            fileDto.setCommunityId(communityId);
+            String fileName = fileInnerServiceSMOImpl.saveFile(fileDto);
+            reqJson.put("photo", fileName);
+
+        }
+        JSONObject businessUnit = new JSONObject();
+        businessUnit.put("fileRelId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_fileRelId));
+        businessUnit.put("relTypeCd", "11000");
+        businessUnit.put("saveWay", "table");
+        businessUnit.put("objId", objId);
+        businessUnit.put("fileRealName", reqJson.getString("photo"));
+        businessUnit.put("fileSaveName", reqJson.getString("photo"));
+        FileRelPo fileRelPo = BeanConvertUtil.covertBean(businessUnit, FileRelPo.class);
+        return fileRelInnerServiceSMOImpl.saveFileRel(fileRelPo);
+    }
+
+}

+ 3 - 0
java110-interface/src/main/java/com/java110/intf/store/IResourceStoreTimesV1InnerServiceSMO.java

@@ -65,4 +65,7 @@ public interface IResourceStoreTimesV1InnerServiceSMO {
      */
     @RequestMapping(value = "/queryResourceStoreTimessCount", method = RequestMethod.POST)
     int queryResourceStoreTimessCount(@RequestBody ResourceStoreTimesDto resourceResourceStoreTimesTimesDto);
+
+    @RequestMapping(value = "/saveOrUpdateResourceStoreTimes", method = RequestMethod.POST)
+    int saveOrUpdateResourceStoreTimes(@RequestBody ResourceStoreTimesPo resourceStoreTimesPo);
 }

+ 19 - 207
service-community/src/main/java/com/java110/community/cmd/visit/SaveVisitCmd.java

@@ -8,6 +8,7 @@ import com.java110.core.event.cmd.Cmd;
 import com.java110.core.event.cmd.CmdEvent;
 import com.java110.core.factory.CommunitySettingFactory;
 import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.core.smo.IPhotoSMO;
 import com.java110.dto.file.FileDto;
 import com.java110.dto.owner.OwnerCarDto;
 import com.java110.dto.parking.ParkingSpaceDto;
@@ -50,7 +51,7 @@ public class SaveVisitCmd extends Cmd {
     private IVisitV1InnerServiceSMO visitV1InnerServiceSMOImpl;
 
     @Autowired
-    private IFileRelInnerServiceSMO fileRelInnerServiceSMOImpl;
+    private IPhotoSMO photoSMOImpl;
 
     @Autowired
     private IParkingSpaceInnerServiceSMO parkingSpaceInnerServiceSMOImpl;
@@ -64,8 +65,6 @@ public class SaveVisitCmd extends Cmd {
     @Autowired
     private IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl;
 
-    @Autowired
-    private IFileInnerServiceSMO fileInnerServiceSMOImpl;
 
     //键
     public static final String IS_NEED_REVIEW = "IS_NEED_REVIEW";
@@ -92,221 +91,34 @@ public class SaveVisitCmd extends Cmd {
     public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException {
         String userId = context.getReqHeaders().get("user-id");
         reqJson.put("vId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_vId));
-        //是否需要审核
-        String isNeedReviewFlag = CommunitySettingFactory.getValue(reqJson.getString("communityId"), IS_NEED_REVIEW);
-        //是否有空闲车位 false 有空闲  true无空闲
-        boolean freeSpace = false;
-        //是否超过规定次数
-        boolean specifiedTimes = false;
-        //是否存在车辆
-        boolean existCar = false;
-        if (!StringUtils.isEmpty(isNeedReviewFlag) && isNeedReviewFlag.equals("true") && reqJson.containsKey("carNum") && !StringUtil.isEmpty(reqJson.getString("carNum"))) {
-            reqJson.put("state", "0"); //0表示未审核;1表示审核通过;2表示审核拒绝
-        } else {
-            reqJson.put("state", "1");
-        }
         //随行人数
-        if (reqJson.containsKey("entourage") && reqJson.getString("entourage").equals("")) {
+        if (StringUtil.isEmpty(reqJson.getString("entourage"))) {
             reqJson.put("entourage", "0");
         }
         reqJson.put("recordState", "0");
-        if (reqJson.containsKey("carNum") && !StringUtil.isEmpty(reqJson.getString("carNum"))) {
-            //获取预约车免费时长的值
-            String freeTime = CommunitySettingFactory.getValue(reqJson.getString("communityId"), CAR_FREE_TIME);
-
-            if (StringUtil.isEmpty(freeTime)) {
-                freeTime = "120";
-            }
-            Date time = DateUtil.getDateFromStringA(reqJson.getString("visitTime"));
-            Calendar newTime = Calendar.getInstance();
-            newTime.setTime(time);
-            newTime.add(Calendar.MINUTE, Integer.parseInt(freeTime));//日期加上分钟
-            Date newDate = newTime.getTime();
-            String finishFreeTime = DateUtil.getFormatTimeString(newDate, DateUtil.DATE_FORMATE_STRING_A);
-            reqJson.put("freeTime", finishFreeTime);
-            if (!StringUtils.isEmpty(isNeedReviewFlag) && isNeedReviewFlag.equals("false")) { //不需要审核就随机自动分配车位
-                //获取小区配置里配置的停车场id
-                String parkingAreaId = CommunitySettingFactory.getValue(reqJson.getString("communityId"), ASCRIPTION_CAR_AREA_ID);
-                if (StringUtil.isEmpty(parkingAreaId)) { //如果没有配置停车场id,就随便分配该小区下一个空闲车位
-                    ParkingSpaceDto parkingSpace = new ParkingSpaceDto();
-                    parkingSpace.setCommunityId(reqJson.getString("communityId"));
-                    parkingSpace.setState("F"); //车位状态 出售 S,出租 H ,空闲 F
-                    parkingSpace.setParkingType("1"); //1:普通车位  2:子母车位  3:豪华车位
-                    //查询小区空闲车位
-                    List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpace);
-                    if (parkingSpaceDtos == null || parkingSpaceDtos.size() < 1) {
-                        freeSpace = true;
-                    } else {
-                        //随机生成一个不大于集合长度的整数
-                        Random random = new Random();
-                        int i = random.nextInt(parkingSpaceDtos.size());
-                        //获取车位id
-                        String psId = parkingSpaceDtos.get(i).getPsId();
-                        reqJson.put("psId", psId);
-                    }
-                } else {
-                    ParkingSpaceDto parkingSpace = new ParkingSpaceDto();
-                    parkingSpace.setCommunityId(reqJson.getString("communityId"));
-                    parkingSpace.setPaId(parkingAreaId); //停车场id
-                    parkingSpace.setState("F"); //车位状态 出售 S,出租 H ,空闲 F
-                    parkingSpace.setParkingType("1"); //1:普通车位  2:子母车位  3:豪华车位
-                    List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpace);
-                    if (parkingSpaceDtos == null || parkingSpaceDtos.size() < 1) {
-                        freeSpace = true;
-                    } else {
-                        //随机生成一个不大于集合长度的整数
-                        Random random = new Random();
-                        int i = random.nextInt(parkingSpaceDtos.size());
-                        //获取车位id
-                        String psId = parkingSpaceDtos.get(i).getPsId();
-                        reqJson.put("psId", psId);
-                    }
-                }
-            } else { //需要审核就在审核通过时才分配车位
-                reqJson.put("psId", "-1");
-            }
-            //查询预约车辆登记次数
-            String visitNumber = CommunitySettingFactory.getValue(reqJson.getString("communityId"), VISIT_NUMBER);
-            if (StringUtil.isEmpty(visitNumber)) {
-                visitNumber = "10000";
-            }
-            int number = Integer.parseInt(visitNumber);
-
-            VisitDto visitDto = new VisitDto();
-            //查询当天车辆登记次数
-            visitDto.setOwnerId(reqJson.getString("ownerId"));
-            visitDto.setCarNumNoEmpty("1");
-            visitDto.setSameDay("1");
-            List<VisitDto> visitDtos = visitInnerServiceSMOImpl.queryVisits(visitDto);
-            int count = visitDtos.size();
-            //预约车辆登记次数0不做限制
-            if (count >= number && number > 0) {
-                if (!StringUtils.isEmpty(isNeedReviewFlag) && isNeedReviewFlag.equals("false")) {
-                    reqJson.put("state", "0");
-                    reqJson.put("psId", null);
-                    reqJson.put("freeTime", null);
-                }
-                specifiedTimes = true;
-            }
-            //校验车牌号是否存在
-            OwnerCarDto ownerCarDto1 = new OwnerCarDto();
-            ownerCarDto1.setCommunityId(reqJson.getString("communityId"));
-            ownerCarDto1.setCarNum(reqJson.getString("carNum"));
-            int existCarCount = ownerCarInnerServiceSMOImpl.queryOwnerCarsCount(ownerCarDto1);
-            if (existCarCount > 0) {
-                existCar = true;
-                reqJson.put("psId", "-1");
-            }
-        }
-        String result = "";
-        if (existCar) {
-            result = "访客信息登记成功,车辆已经存在预约,请您在预约到期后,再次进行车辆预约,谢谢!";
-        }
-        if (specifiedTimes) {
-            result = "访客信息登记成功,您已经超过预约车辆登记次数限制,车辆将无法自动审核!";
-        }
-        if (freeSpace) {
-            result = "访客信息登记成功,当前停车场已无空闲车位,登记车辆将暂时不能进入停车场,请您合理安排出行。";
+        VisitPo visitPo = BeanConvertUtil.covertBean(reqJson, VisitPo.class);
+        visitPo.setState(VisitDto.STATE_W);
+        visitPo.setUserId(userId);
+        int flag = visitV1InnerServiceSMOImpl.saveVisit(visitPo);
+        if (flag < 1) {
+            throw new CmdException("保存访客失败");
         }
-        reqJson.put("stateRemark", result);
-        addVisit(reqJson);
-        if (reqJson.containsKey("photo") && !StringUtils.isEmpty(reqJson.getString("photo"))) {
-            if(reqJson.getString("photo").length()>512){ //说明是图片
-                FileDto fileDto = new FileDto();
-                fileDto.setFileId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_file_id));
-                fileDto.setFileName(fileDto.getFileId());
-                fileDto.setContext(reqJson.getString("photo"));
-                fileDto.setSuffix("jpeg");
-                fileDto.setCommunityId(reqJson.getString("communityId"));
-                String fileName = fileInnerServiceSMOImpl.saveFile(fileDto);
-                reqJson.put("photo", fileName);
+        photoSMOImpl.savePhoto(reqJson, reqJson.getString("vId"), reqJson.getString("communityId"));
+
+        // 是否需要审核
+        hasAuditVisit(visitPo,reqJson);
 
-            }
-            JSONObject businessUnit = new JSONObject();
-            businessUnit.put("fileRelId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_fileRelId));
-            businessUnit.put("relTypeCd", "11000");
-            businessUnit.put("saveWay", "table");
-            businessUnit.put("objId", reqJson.getString("vId"));
-            businessUnit.put("fileRealName", reqJson.getString("photo"));
-            businessUnit.put("fileSaveName", reqJson.getString("photo"));
-            FileRelPo fileRelPo = BeanConvertUtil.covertBean(businessUnit, FileRelPo.class);
-            fileRelInnerServiceSMOImpl.saveFileRel(fileRelPo);
-        }
-        if ("1".equals(reqJson.getString("state"))
-                && reqJson.containsKey("carNum") && !StringUtil.isEmpty(reqJson.getString("carNum"))
-                && !existCar && !StringUtil.isEmpty(reqJson.getString("psId")) && !"-1".equals(reqJson.getString("psId"))) { //审核通过且有车位就更新车位状态
-            ParkingSpaceDto parkingSpaceDto = new ParkingSpaceDto();
-            parkingSpaceDto.setPsId(reqJson.getString("psId"));
-            //查询停车位
-            List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto);
-            Assert.listOnlyOne(parkingSpaceDtos, "访客登记,查询停车位错误!");
-            //添加车辆信息
-            OwnerCarPo ownerCarPo = new OwnerCarPo();
-            ownerCarPo.setCarId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_carId));
-            ownerCarPo.setOwnerId(reqJson.getString("ownerId"));
-            ownerCarPo.setbId("-1");
-            ownerCarPo.setCarNum(reqJson.getString("carNum"));
-            ownerCarPo.setCarBrand("无(预约车)");
-            ownerCarPo.setCarType("9901");
-            ownerCarPo.setCarColor("无(预约车)");
-            ownerCarPo.setPsId(reqJson.getString("psId"));
-            ownerCarPo.setUserId(userId);
-            ownerCarPo.setRemark("访客登记预约车");
-            ownerCarPo.setCommunityId(reqJson.getString("communityId"));
-            ownerCarPo.setStartTime(reqJson.getString("visitTime"));
-            ownerCarPo.setEndTime(reqJson.getString("freeTime"));
-            ownerCarPo.setState(OwnerCarDto.STATE_NORMAL); //1001 正常状态,2002 车位释放欠费状态  3003 车位释放
-            ownerCarPo.setCarTypeCd(OwnerCarDto.CAR_TYPE_TEMP); //1001 业主车辆 1002 成员车辆 1003 临时车
-            ownerCarPo.setMemberId(reqJson.getString("ownerId"));
-            ownerCarPo.setLeaseType(OwnerCarDto.LEASE_TYPE_RESERVE); //H 月租车   S 出售车   I 内部车   NM 免费车   R 预约车
-            ownerCarV1InnerServiceSMOImpl.saveOwnerCar(ownerCarPo);
-            //添加车辆属性
-            OwnerCarAttrPo ownerCarAttrPo = new OwnerCarAttrPo();
-            ownerCarAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_cartId));
-            ownerCarAttrPo.setCarId(ownerCarPo.getCarId());
-            ownerCarAttrPo.setCommunityId(ownerCarPo.getCommunityId());
-            ownerCarAttrPo.setSpecCd("6443000036"); //6443000036业主车辆
-            ownerCarAttrPo.setValue("true"); //预约车
-            ownerCarAttrPo.setbId("-1");
-            ownerCarAttrInnerServiceSMOImpl.saveOwnerCarAttr(ownerCarAttrPo);
-            //更改车位状态
-            ParkingSpacePo parkingSpacePo = new ParkingSpacePo();
-            parkingSpacePo.setPsId(reqJson.getString("psId"));
-            parkingSpacePo.setState("H"); //车位状态 出售 S,出租 H ,空闲 F
-            parkingSpaceInnerServiceSMOImpl.updateParkingSpace(parkingSpacePo);
-        }
-        if (existCar) {
-            ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_OK, "访客信息登记成功,车辆已经存在预约,请您在预约到期后,再次进行车辆预约,谢谢!");
-            context.setResponseEntity(responseEntity);
-            return;
-        }
-        if (specifiedTimes) {
-            ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_OK, "访客信息登记成功,您已经超过预约车辆登记次数限制,车辆将无法自动审核!");
-            context.setResponseEntity(responseEntity);
-            return;
-        }
-        if (freeSpace) {
-            ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_OK, "访客信息登记成功,当前停车场已无空闲车位,登记车辆将暂时不能进入停车场,请您合理安排出行。");
-            context.setResponseEntity(responseEntity);
-            return;
-        }
     }
 
     /**
-     * 添加小区信息
-     *
-     * @param paramInJson 接口调用放传入入参
-     * @return 订单服务能够接受的报文
+     * 是否需要审核
+     * @param visitPo
+     * @param reqJson
      */
-    public void addVisit(JSONObject paramInJson) {
+    private void hasAuditVisit(VisitPo visitPo, JSONObject reqJson) {
 
-        JSONObject businessVisit = new JSONObject();
-        businessVisit.putAll(paramInJson);
 
-        VisitPo visitPo = BeanConvertUtil.covertBean(businessVisit, VisitPo.class);
-        int flag = visitV1InnerServiceSMOImpl.saveVisit(visitPo);
-        if (flag < 1) {
-            throw new CmdException("保存访客失败");
-        }
     }
+
+
 }

+ 312 - 0
service-community/src/main/java/com/java110/community/cmd/visit/SaveVisitSdCmd.java

@@ -0,0 +1,312 @@
+package com.java110.community.cmd.visit;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.core.annotation.Java110Cmd;
+import com.java110.core.annotation.Java110Transactional;
+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.CommunitySettingFactory;
+import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.dto.file.FileDto;
+import com.java110.dto.owner.OwnerCarDto;
+import com.java110.dto.parking.ParkingSpaceDto;
+import com.java110.dto.visit.VisitDto;
+import com.java110.intf.common.IFileInnerServiceSMO;
+import com.java110.intf.common.IFileRelInnerServiceSMO;
+import com.java110.intf.community.IParkingSpaceInnerServiceSMO;
+import com.java110.intf.community.IVisitInnerServiceSMO;
+import com.java110.intf.community.IVisitV1InnerServiceSMO;
+import com.java110.intf.user.IOwnerCarAttrInnerServiceSMO;
+import com.java110.intf.user.IOwnerCarInnerServiceSMO;
+import com.java110.intf.user.IOwnerCarV1InnerServiceSMO;
+import com.java110.po.car.OwnerCarPo;
+import com.java110.po.file.FileRelPo;
+import com.java110.po.owner.VisitPo;
+import com.java110.po.ownerCarAttr.OwnerCarAttrPo;
+import com.java110.po.parking.ParkingSpacePo;
+import com.java110.utils.exception.CmdException;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.utils.util.DateUtil;
+import com.java110.utils.util.StringUtil;
+import com.java110.vo.ResultVo;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.Random;
+
+//@Java110Cmd(serviceCode = "visit.saveVisit")
+public class SaveVisitSdCmd extends Cmd {
+
+    @Autowired
+    private IVisitInnerServiceSMO visitInnerServiceSMOImpl;
+
+    @Autowired
+    private IVisitV1InnerServiceSMO visitV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IFileRelInnerServiceSMO fileRelInnerServiceSMOImpl;
+
+    @Autowired
+    private IParkingSpaceInnerServiceSMO parkingSpaceInnerServiceSMOImpl;
+
+    @Autowired
+    private IOwnerCarV1InnerServiceSMO ownerCarV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IOwnerCarAttrInnerServiceSMO ownerCarAttrInnerServiceSMOImpl;
+
+    @Autowired
+    private IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl;
+
+    @Autowired
+    private IFileInnerServiceSMO fileInnerServiceSMOImpl;
+
+    //键
+    public static final String IS_NEED_REVIEW = "IS_NEED_REVIEW";
+
+    //键
+    public static final String VISIT_NUMBER = "VISIT_NUMBER";
+
+    //键
+    public static final String CAR_FREE_TIME = "CAR_FREE_TIME";
+
+    //键
+    public static final String ASCRIPTION_CAR_AREA_ID = "ASCRIPTION_CAR_AREA_ID";
+
+    @Override
+    public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException {
+        Assert.hasKeyAndValue(reqJson, "vName", "必填,请填写访客姓名");
+        Assert.hasKeyAndValue(reqJson, "visitGender", "必填,请填写访客姓名");
+        Assert.hasKeyAndValue(reqJson, "phoneNumber", "必填,请填写访客联系方式");
+        Assert.hasKeyAndValue(reqJson, "visitTime", "必填,请填写访客拜访时间");
+    }
+
+    @Override
+    @Java110Transactional
+    public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException {
+        String userId = context.getReqHeaders().get("user-id");
+        reqJson.put("vId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_vId));
+        //是否需要审核
+        String isNeedReviewFlag = CommunitySettingFactory.getValue(reqJson.getString("communityId"), IS_NEED_REVIEW);
+        //是否有空闲车位 false 有空闲  true无空闲
+        boolean freeSpace = false;
+        //是否超过规定次数
+        boolean specifiedTimes = false;
+        //是否存在车辆
+        boolean existCar = false;
+        if ("true".equals(isNeedReviewFlag) &&  !StringUtil.isEmpty(reqJson.getString("carNum"))) {
+            reqJson.put("state", "0"); //0表示未审核;1表示审核通过;2表示审核拒绝
+        } else {
+            reqJson.put("state", "1");
+        }
+        //随行人数
+        if (StringUtil.isEmpty(reqJson.getString("entourage"))) {
+            reqJson.put("entourage", "0");
+        }
+        reqJson.put("recordState", "0");
+        if (reqJson.containsKey("carNum") && !StringUtil.isEmpty(reqJson.getString("carNum"))) {
+            //获取预约车免费时长的值
+            String freeTime = CommunitySettingFactory.getValue(reqJson.getString("communityId"), CAR_FREE_TIME);
+
+            if (StringUtil.isEmpty(freeTime)) {
+                freeTime = "120";
+            }
+            Date time = DateUtil.getDateFromStringA(reqJson.getString("visitTime"));
+            Calendar newTime = Calendar.getInstance();
+            newTime.setTime(time);
+            newTime.add(Calendar.MINUTE, Integer.parseInt(freeTime));//日期加上分钟
+            Date newDate = newTime.getTime();
+            String finishFreeTime = DateUtil.getFormatTimeString(newDate, DateUtil.DATE_FORMATE_STRING_A);
+            reqJson.put("freeTime", finishFreeTime);
+            if (!StringUtils.isEmpty(isNeedReviewFlag) && isNeedReviewFlag.equals("false")) { //不需要审核就随机自动分配车位
+                //获取小区配置里配置的停车场id
+                String parkingAreaId = CommunitySettingFactory.getValue(reqJson.getString("communityId"), ASCRIPTION_CAR_AREA_ID);
+                if (StringUtil.isEmpty(parkingAreaId)) { //如果没有配置停车场id,就随便分配该小区下一个空闲车位
+                    ParkingSpaceDto parkingSpace = new ParkingSpaceDto();
+                    parkingSpace.setCommunityId(reqJson.getString("communityId"));
+                    parkingSpace.setState("F"); //车位状态 出售 S,出租 H ,空闲 F
+                    parkingSpace.setParkingType("1"); //1:普通车位  2:子母车位  3:豪华车位
+                    //查询小区空闲车位
+                    List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpace);
+                    if (parkingSpaceDtos == null || parkingSpaceDtos.size() < 1) {
+                        freeSpace = true;
+                    } else {
+                        //随机生成一个不大于集合长度的整数
+                        Random random = new Random();
+                        int i = random.nextInt(parkingSpaceDtos.size());
+                        //获取车位id
+                        String psId = parkingSpaceDtos.get(i).getPsId();
+                        reqJson.put("psId", psId);
+                    }
+                } else {
+                    ParkingSpaceDto parkingSpace = new ParkingSpaceDto();
+                    parkingSpace.setCommunityId(reqJson.getString("communityId"));
+                    parkingSpace.setPaId(parkingAreaId); //停车场id
+                    parkingSpace.setState("F"); //车位状态 出售 S,出租 H ,空闲 F
+                    parkingSpace.setParkingType("1"); //1:普通车位  2:子母车位  3:豪华车位
+                    List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpace);
+                    if (parkingSpaceDtos == null || parkingSpaceDtos.size() < 1) {
+                        freeSpace = true;
+                    } else {
+                        //随机生成一个不大于集合长度的整数
+                        Random random = new Random();
+                        int i = random.nextInt(parkingSpaceDtos.size());
+                        //获取车位id
+                        String psId = parkingSpaceDtos.get(i).getPsId();
+                        reqJson.put("psId", psId);
+                    }
+                }
+            } else { //需要审核就在审核通过时才分配车位
+                reqJson.put("psId", "-1");
+            }
+            //查询预约车辆登记次数
+            String visitNumber = CommunitySettingFactory.getValue(reqJson.getString("communityId"), VISIT_NUMBER);
+            if (StringUtil.isEmpty(visitNumber)) {
+                visitNumber = "10000";
+            }
+            int number = Integer.parseInt(visitNumber);
+
+            VisitDto visitDto = new VisitDto();
+            //查询当天车辆登记次数
+            visitDto.setOwnerId(reqJson.getString("ownerId"));
+            visitDto.setCarNumNoEmpty("1");
+            visitDto.setSameDay("1");
+            List<VisitDto> visitDtos = visitInnerServiceSMOImpl.queryVisits(visitDto);
+            int count = visitDtos.size();
+            //预约车辆登记次数0不做限制
+            if (count >= number && number > 0) {
+                if (!StringUtils.isEmpty(isNeedReviewFlag) && isNeedReviewFlag.equals("false")) {
+                    reqJson.put("state", "0");
+                    reqJson.put("psId", null);
+                    reqJson.put("freeTime", null);
+                }
+                specifiedTimes = true;
+            }
+            //校验车牌号是否存在
+            OwnerCarDto ownerCarDto1 = new OwnerCarDto();
+            ownerCarDto1.setCommunityId(reqJson.getString("communityId"));
+            ownerCarDto1.setCarNum(reqJson.getString("carNum"));
+            int existCarCount = ownerCarInnerServiceSMOImpl.queryOwnerCarsCount(ownerCarDto1);
+            if (existCarCount > 0) {
+                existCar = true;
+                reqJson.put("psId", "-1");
+            }
+        }
+        String result = "";
+        if (existCar) {
+            result = "访客信息登记成功,车辆已经存在预约,请您在预约到期后,再次进行车辆预约,谢谢!";
+        }
+        if (specifiedTimes) {
+            result = "访客信息登记成功,您已经超过预约车辆登记次数限制,车辆将无法自动审核!";
+        }
+        if (freeSpace) {
+            result = "访客信息登记成功,当前停车场已无空闲车位,登记车辆将暂时不能进入停车场,请您合理安排出行。";
+        }
+        reqJson.put("stateRemark", result);
+        addVisit(reqJson);
+        if (reqJson.containsKey("photo") && !StringUtils.isEmpty(reqJson.getString("photo"))) {
+            if(reqJson.getString("photo").length()>512){ //说明是图片
+                FileDto fileDto = new FileDto();
+                fileDto.setFileId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_file_id));
+                fileDto.setFileName(fileDto.getFileId());
+                fileDto.setContext(reqJson.getString("photo"));
+                fileDto.setSuffix("jpeg");
+                fileDto.setCommunityId(reqJson.getString("communityId"));
+                String fileName = fileInnerServiceSMOImpl.saveFile(fileDto);
+                reqJson.put("photo", fileName);
+
+            }
+            JSONObject businessUnit = new JSONObject();
+            businessUnit.put("fileRelId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_fileRelId));
+            businessUnit.put("relTypeCd", "11000");
+            businessUnit.put("saveWay", "table");
+            businessUnit.put("objId", reqJson.getString("vId"));
+            businessUnit.put("fileRealName", reqJson.getString("photo"));
+            businessUnit.put("fileSaveName", reqJson.getString("photo"));
+            FileRelPo fileRelPo = BeanConvertUtil.covertBean(businessUnit, FileRelPo.class);
+            fileRelInnerServiceSMOImpl.saveFileRel(fileRelPo);
+        }
+        if ("1".equals(reqJson.getString("state"))
+                && reqJson.containsKey("carNum") && !StringUtil.isEmpty(reqJson.getString("carNum"))
+                && !existCar && !StringUtil.isEmpty(reqJson.getString("psId")) && !"-1".equals(reqJson.getString("psId"))) { //审核通过且有车位就更新车位状态
+            ParkingSpaceDto parkingSpaceDto = new ParkingSpaceDto();
+            parkingSpaceDto.setPsId(reqJson.getString("psId"));
+            //查询停车位
+            List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto);
+            Assert.listOnlyOne(parkingSpaceDtos, "访客登记,查询停车位错误!");
+            //添加车辆信息
+            OwnerCarPo ownerCarPo = new OwnerCarPo();
+            ownerCarPo.setCarId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_carId));
+            ownerCarPo.setOwnerId(reqJson.getString("ownerId"));
+            ownerCarPo.setbId("-1");
+            ownerCarPo.setCarNum(reqJson.getString("carNum"));
+            ownerCarPo.setCarBrand("无(预约车)");
+            ownerCarPo.setCarType("9901");
+            ownerCarPo.setCarColor("无(预约车)");
+            ownerCarPo.setPsId(reqJson.getString("psId"));
+            ownerCarPo.setUserId(userId);
+            ownerCarPo.setRemark("访客登记预约车");
+            ownerCarPo.setCommunityId(reqJson.getString("communityId"));
+            ownerCarPo.setStartTime(reqJson.getString("visitTime"));
+            ownerCarPo.setEndTime(reqJson.getString("freeTime"));
+            ownerCarPo.setState(OwnerCarDto.STATE_NORMAL); //1001 正常状态,2002 车位释放欠费状态  3003 车位释放
+            ownerCarPo.setCarTypeCd(OwnerCarDto.CAR_TYPE_TEMP); //1001 业主车辆 1002 成员车辆 1003 临时车
+            ownerCarPo.setMemberId(reqJson.getString("ownerId"));
+            ownerCarPo.setLeaseType(OwnerCarDto.LEASE_TYPE_RESERVE); //H 月租车   S 出售车   I 内部车   NM 免费车   R 预约车
+            ownerCarV1InnerServiceSMOImpl.saveOwnerCar(ownerCarPo);
+            //添加车辆属性
+            OwnerCarAttrPo ownerCarAttrPo = new OwnerCarAttrPo();
+            ownerCarAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_cartId));
+            ownerCarAttrPo.setCarId(ownerCarPo.getCarId());
+            ownerCarAttrPo.setCommunityId(ownerCarPo.getCommunityId());
+            ownerCarAttrPo.setSpecCd("6443000036"); //6443000036业主车辆
+            ownerCarAttrPo.setValue("true"); //预约车
+            ownerCarAttrPo.setbId("-1");
+            ownerCarAttrInnerServiceSMOImpl.saveOwnerCarAttr(ownerCarAttrPo);
+            //更改车位状态
+            ParkingSpacePo parkingSpacePo = new ParkingSpacePo();
+            parkingSpacePo.setPsId(reqJson.getString("psId"));
+            parkingSpacePo.setState("H"); //车位状态 出售 S,出租 H ,空闲 F
+            parkingSpaceInnerServiceSMOImpl.updateParkingSpace(parkingSpacePo);
+        }
+        if (existCar) {
+            ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_OK, "访客信息登记成功,车辆已经存在预约,请您在预约到期后,再次进行车辆预约,谢谢!");
+            context.setResponseEntity(responseEntity);
+            return;
+        }
+        if (specifiedTimes) {
+            ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_OK, "访客信息登记成功,您已经超过预约车辆登记次数限制,车辆将无法自动审核!");
+            context.setResponseEntity(responseEntity);
+            return;
+        }
+        if (freeSpace) {
+            ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_OK, "访客信息登记成功,当前停车场已无空闲车位,登记车辆将暂时不能进入停车场,请您合理安排出行。");
+            context.setResponseEntity(responseEntity);
+            return;
+        }
+    }
+
+    /**
+     * 添加小区信息
+     *
+     * @param paramInJson 接口调用放传入入参
+     * @return 订单服务能够接受的报文
+     */
+    public void addVisit(JSONObject paramInJson) {
+
+        JSONObject businessVisit = new JSONObject();
+        businessVisit.putAll(paramInJson);
+
+        VisitPo visitPo = BeanConvertUtil.covertBean(businessVisit, VisitPo.class);
+        int flag = visitV1InnerServiceSMOImpl.saveVisit(visitPo);
+        if (flag < 1) {
+            throw new CmdException("保存访客失败");
+        }
+    }
+}

+ 4 - 4
service-community/src/main/java/com/java110/community/cmd/visit/UpdateVisitCmd.java

@@ -84,8 +84,8 @@ public class UpdateVisitCmd extends Cmd {
             reqJson.put("psId", "-1");
         }
         //flag审核操作 并且 审核通过 state=1 并且业主车辆不存在的情况先existCar=false
-        if (reqJson.containsKey("flag") && !StringUtil.isEmpty(reqJson.getString("flag")) && reqJson.getString("flag").equals("1")
-                && reqJson.containsKey("state") && !StringUtil.isEmpty(reqJson.getString("state")) && reqJson.getString("state").equals("1")
+        if ("1".equals(reqJson.getString("flag"))
+                && "1".equals(reqJson.getString("state"))
                 && !existCar) {
             //获取预约车免费时长的值
             String freeTime = CommunitySettingFactory.getValue(reqJson.getString("communityId"), CAR_FREE_TIME);
@@ -137,9 +137,9 @@ public class UpdateVisitCmd extends Cmd {
             }
         }
         String result = "";
-        if (reqJson.containsKey("state") && !StringUtil.isEmpty(reqJson.getString("state")) && reqJson.getString("state").equals("1")) {
+        if ("1".equals(reqJson.getString("state"))) {
             result = "审核通过!";
-        } else if (reqJson.containsKey("state") && !StringUtil.isEmpty(reqJson.getString("state")) && reqJson.getString("state").equals("2")) {
+        } else if ("2".equals(reqJson.getString("state"))) {
             result = "审核不通过!";
         }
         if (existCar) {

+ 0 - 80
service-store/src/main/java/com/java110/store/api/PurchaseApi.java

@@ -157,85 +157,5 @@ public class PurchaseApi {
      * @param reqJson
      * @return
      */
-    @RequestMapping(value = "/purchaseStorage", method = RequestMethod.POST)
-    public ResponseEntity<String> purchaseStorage(@RequestBody JSONObject reqJson,
-                                                  @RequestHeader(value = "user-id") String userId,
 
-                                                  @RequestHeader(value = "store-id") String storeId) {
-        Assert.hasKeyAndValue(reqJson, "resourceStores", "必填,请填写申请采购的物资");
-        Assert.hasKeyAndValue(reqJson, "description", "必填,请填写采购申请说明");
-        Assert.hasKeyAndValue(reqJson, "resOrderType", "必填,请填写申请类型");
-        UserDto userDto = new UserDto();
-        userDto.setUserId(userId);
-        List<UserDto> userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto);
-
-        Assert.listOnlyOne(userDtos,"未包含用户");
-
-
-        String userName  = userDtos.get(0).getName();
-        PurchaseApplyPo purchaseApplyPo = new PurchaseApplyPo();
-        purchaseApplyPo.setApplyOrderId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_applyOrderId));
-        purchaseApplyPo.setDescription(reqJson.getString("description"));
-        purchaseApplyPo.setUserId(userId);
-        purchaseApplyPo.setUserName(userName);
-        purchaseApplyPo.setEndUserName(reqJson.getString("endUserName"));
-        purchaseApplyPo.setEndUserTel(reqJson.getString("endUserTel"));
-        purchaseApplyPo.setStoreId(storeId);
-        purchaseApplyPo.setResOrderType(PurchaseApplyDto.RES_ORDER_TYPE_ENTER);
-        purchaseApplyPo.setState(PurchaseApplyDto.STATE_END);
-        purchaseApplyPo.setCreateTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
-        purchaseApplyPo.setDescription("直接采购入库");
-        purchaseApplyPo.setCreateUserId(userId);
-        purchaseApplyPo.setCreateUserName(userName);
-        purchaseApplyPo.setWarehousingWay(PurchaseApplyDto.WAREHOUSING_TYPE_DIRECT);
-        purchaseApplyPo.setCommunityId(reqJson.getString("communityId"));
-        JSONArray resourceStores = reqJson.getJSONArray("resourceStores");
-        List<PurchaseApplyDetailPo> purchaseApplyDetailPos = new ArrayList<>();
-        for (int resourceStoreIndex = 0; resourceStoreIndex < resourceStores.size(); resourceStoreIndex++) {
-            JSONObject resourceStore = resourceStores.getJSONObject(resourceStoreIndex);
-            PurchaseApplyDetailPo purchaseApplyDetailPo = BeanConvertUtil.covertBean(resourceStore, PurchaseApplyDetailPo.class);
-            purchaseApplyDetailPo.setId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_applyOrderId));
-            purchaseApplyDetailPo.setRemark("直接采购入库");
-            purchaseApplyDetailPo.setOriginalStock(resourceStore.getString("stock"));
-            purchaseApplyDetailPo.setQuantity(purchaseApplyDetailPo.getPurchaseQuantity());
-            purchaseApplyDetailPos.add(purchaseApplyDetailPo);
-            //增加库存
-            ResourceStorePo resourceStorePo = new ResourceStorePo();
-            resourceStorePo.setPurchasePrice(purchaseApplyDetailPo.getPrice());
-            resourceStorePo.setResId(purchaseApplyDetailPo.getResId());
-            resourceStorePo.setStock(purchaseApplyDetailPo.getPurchaseQuantity());
-            resourceStorePo.setResOrderType(PurchaseApplyDto.RES_ORDER_TYPE_ENTER);
-            //获取采购数量
-            BigDecimal purchaseQuantity = new BigDecimal(purchaseApplyDetailPo.getPurchaseQuantity());
-            //获取原有最小计量总数
-            BigDecimal miniStock = new BigDecimal(resourceStore.getString("miniStock"));
-            //获取最小单位数量
-            BigDecimal newMiniStock = new BigDecimal(0);
-            if (StringUtil.isEmpty(resourceStore.getString("miniUnitStock"))) {
-                throw new IllegalArgumentException("最小计量单位数量不能为空!");
-            }
-            BigDecimal miniUnitStock = new BigDecimal(resourceStore.getString("miniUnitStock"));
-            //计算最小计量总数
-            if (StringUtil.isEmpty(resourceStore.getString("miniStock"))) {
-                newMiniStock = purchaseQuantity.multiply(miniUnitStock);
-            } else {
-                newMiniStock = (purchaseQuantity.multiply(miniUnitStock)).add(miniStock);
-            }
-            resourceStorePo.setMiniStock(String.valueOf(newMiniStock));
-            resourceStoreInnerServiceSMOImpl.updateResourceStore(resourceStorePo);
-
-            // 保存至 物品 times表
-            ResourceStoreTimesPo resourceStoreTimesPo = new ResourceStoreTimesPo();
-            resourceStoreTimesPo.setApplyOrderId(purchaseApplyPo.getApplyOrderId());
-            resourceStoreTimesPo.setPrice(purchaseApplyDetailPo.getPrice());
-            resourceStoreTimesPo.setStock(purchaseApplyDetailPo.getPurchaseQuantity());
-            resourceStoreTimesPo.setResCode(resourceStore.getString("resCode"));
-            resourceStoreTimesPo.setStoreId(storeId);
-            resourceStoreTimesPo.setTimesId(GenerateCodeFactory.getGeneratorId("10"));
-            resourceStoreTimesV1InnerServiceSMOImpl.saveResourceStoreTimes(resourceStoreTimesPo);
-
-        }
-        purchaseApplyPo.setPurchaseApplyDetailPos(purchaseApplyDetailPos);
-        return purchaseApplyBMOImpl.apply(purchaseApplyPo,reqJson);
-    }
 }

+ 155 - 0
service-store/src/main/java/com/java110/store/cmd/purchase/PurchaseStorageCmd.java

@@ -0,0 +1,155 @@
+package com.java110.store.cmd.purchase;
+
+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.core.factory.GenerateCodeFactory;
+import com.java110.dto.purchaseApply.PurchaseApplyDto;
+import com.java110.dto.user.UserDto;
+import com.java110.intf.common.IPurchaseApplyUserInnerServiceSMO;
+import com.java110.intf.store.IPurchaseApplyInnerServiceSMO;
+import com.java110.intf.store.IResourceStoreInnerServiceSMO;
+import com.java110.intf.store.IResourceStoreTimesV1InnerServiceSMO;
+import com.java110.intf.user.IUserV1InnerServiceSMO;
+import com.java110.po.purchase.PurchaseApplyDetailPo;
+import com.java110.po.purchase.PurchaseApplyPo;
+import com.java110.po.purchase.ResourceStorePo;
+import com.java110.po.resourceStoreTimes.ResourceStoreTimesPo;
+import com.java110.utils.exception.CmdException;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.utils.util.DateUtil;
+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;
+
+/**
+ * 直接入库
+ *      * {"resourceStores":[{"resId":"852020061636590016","resName":"橡皮擦","resCode":"003","price":"100.00","stock":"0","description":"ada","quantity":"1"},
+ *      * {"resId":"852020061729120031","resName":"文档柜","resCode":"002","price":"33.00","stock":"0","description":"蓝色","quantity":"1"}],
+ *      * "description":"123123","endUserName":"1","endUserTel":"17797173942","file":"","resOrderType":"10000","staffId":"","staffName":""}
+ */
+@Java110Cmd(serviceCode = "/purchase/purchaseStorage")
+public class PurchaseStorageCmd extends Cmd {
+
+
+    @Autowired
+    private IResourceStoreInnerServiceSMO resourceStoreInnerServiceSMOImpl;
+
+    @Autowired
+    private IUserV1InnerServiceSMO userV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IResourceStoreTimesV1InnerServiceSMO resourceStoreTimesV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IPurchaseApplyInnerServiceSMO purchaseApplyInnerServiceSMOImpl;
+
+    @Autowired
+    private IPurchaseApplyUserInnerServiceSMO purchaseApplyUserInnerServiceSMOImpl;
+
+    @Override
+    public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
+        Assert.hasKeyAndValue(reqJson, "resourceStores", "必填,请填写申请采购的物资");
+        Assert.hasKeyAndValue(reqJson, "description", "必填,请填写采购申请说明");
+        Assert.hasKeyAndValue(reqJson, "resOrderType", "必填,请填写申请类型");
+    }
+
+    @Override
+    public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
+
+        String storeId = context.getReqHeaders().get("store-id");
+        String userId = context.getReqHeaders().get("user-id");
+        UserDto userDto = new UserDto();
+        userDto.setUserId(userId);
+        List<UserDto> userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto);
+
+        Assert.listOnlyOne(userDtos, "未包含用户");
+
+
+        String userName = userDtos.get(0).getName();
+        PurchaseApplyPo purchaseApplyPo = new PurchaseApplyPo();
+        purchaseApplyPo.setApplyOrderId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_applyOrderId));
+        purchaseApplyPo.setDescription(reqJson.getString("description"));
+        purchaseApplyPo.setUserId(userId);
+        purchaseApplyPo.setUserName(userName);
+        purchaseApplyPo.setEndUserName(reqJson.getString("endUserName"));
+        purchaseApplyPo.setEndUserTel(reqJson.getString("endUserTel"));
+        purchaseApplyPo.setStoreId(storeId);
+        purchaseApplyPo.setResOrderType(PurchaseApplyDto.RES_ORDER_TYPE_ENTER);
+        purchaseApplyPo.setState(PurchaseApplyDto.STATE_END);
+        purchaseApplyPo.setCreateTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+        purchaseApplyPo.setDescription("直接采购入库");
+        purchaseApplyPo.setCreateUserId(userId);
+        purchaseApplyPo.setCreateUserName(userName);
+        purchaseApplyPo.setWarehousingWay(PurchaseApplyDto.WAREHOUSING_TYPE_DIRECT);
+        purchaseApplyPo.setCommunityId(reqJson.getString("communityId"));
+        JSONArray resourceStores = reqJson.getJSONArray("resourceStores");
+        List<PurchaseApplyDetailPo> purchaseApplyDetailPos = new ArrayList<>();
+        for (int resourceStoreIndex = 0; resourceStoreIndex < resourceStores.size(); resourceStoreIndex++) {
+            JSONObject resourceStore = resourceStores.getJSONObject(resourceStoreIndex);
+            PurchaseApplyDetailPo purchaseApplyDetailPo = BeanConvertUtil.covertBean(resourceStore, PurchaseApplyDetailPo.class);
+            purchaseApplyDetailPo.setId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_applyOrderId));
+            purchaseApplyDetailPo.setRemark("直接采购入库");
+            purchaseApplyDetailPo.setOriginalStock(resourceStore.getString("stock"));
+            purchaseApplyDetailPo.setQuantity(purchaseApplyDetailPo.getPurchaseQuantity());
+            purchaseApplyDetailPos.add(purchaseApplyDetailPo);
+            //增加库存
+            ResourceStorePo resourceStorePo = new ResourceStorePo();
+            resourceStorePo.setPurchasePrice(purchaseApplyDetailPo.getPrice());
+            resourceStorePo.setResId(purchaseApplyDetailPo.getResId());
+            resourceStorePo.setStock(purchaseApplyDetailPo.getPurchaseQuantity());
+            resourceStorePo.setResOrderType(PurchaseApplyDto.RES_ORDER_TYPE_ENTER);
+            //获取采购数量
+            BigDecimal purchaseQuantity = new BigDecimal(purchaseApplyDetailPo.getPurchaseQuantity());
+            //获取原有最小计量总数
+            BigDecimal miniStock = new BigDecimal(resourceStore.getString("miniStock"));
+            //获取最小单位数量
+            BigDecimal newMiniStock = new BigDecimal(0);
+            if (StringUtil.isEmpty(resourceStore.getString("miniUnitStock"))) {
+                throw new IllegalArgumentException("最小计量单位数量不能为空!");
+            }
+            BigDecimal miniUnitStock = new BigDecimal(resourceStore.getString("miniUnitStock"));
+            //计算最小计量总数
+            if (StringUtil.isEmpty(resourceStore.getString("miniStock"))) {
+                newMiniStock = purchaseQuantity.multiply(miniUnitStock);
+            } else {
+                newMiniStock = (purchaseQuantity.multiply(miniUnitStock)).add(miniStock);
+            }
+            resourceStorePo.setMiniStock(String.valueOf(newMiniStock));
+            resourceStoreInnerServiceSMOImpl.updateResourceStore(resourceStorePo);
+
+            // 保存至 物品 times表
+            ResourceStoreTimesPo resourceStoreTimesPo = new ResourceStoreTimesPo();
+            resourceStoreTimesPo.setApplyOrderId(purchaseApplyPo.getApplyOrderId());
+            resourceStoreTimesPo.setPrice(purchaseApplyDetailPo.getPrice());
+            resourceStoreTimesPo.setStock(purchaseApplyDetailPo.getPurchaseQuantity());
+            resourceStoreTimesPo.setResCode(resourceStore.getString("resCode"));
+            resourceStoreTimesPo.setStoreId(storeId);
+            resourceStoreTimesV1InnerServiceSMOImpl.saveOrUpdateResourceStoreTimes(resourceStoreTimesPo);
+
+        }
+        purchaseApplyPo.setPurchaseApplyDetailPos(purchaseApplyDetailPos);
+        int saveFlag = purchaseApplyInnerServiceSMOImpl.savePurchaseApply(purchaseApplyPo);
+        if (saveFlag < 1) {
+            context.setResponseEntity(ResultVo.createResponseEntity(ResultVo.CODE_ERROR, "采购申请失败"));
+            return;
+        }
+        PurchaseApplyDto purchaseApplyDto = BeanConvertUtil.covertBean(purchaseApplyPo, PurchaseApplyDto.class);
+        purchaseApplyDto.setCurrentUserId(purchaseApplyPo.getUserId());
+        if (!purchaseApplyPo.getWarehousingWay().equals(PurchaseApplyDto.WAREHOUSING_TYPE_DIRECT) && !purchaseApplyPo.getWarehousingWay().equals(PurchaseApplyDto.WAREHOUSING_TYPE_URGENT)) {
+            purchaseApplyDto.setNextStaffId(reqJson.getString("staffId"));
+            purchaseApplyUserInnerServiceSMOImpl.startProcess(purchaseApplyDto);
+        }
+        context.setResponseEntity(ResultVo.createResponseEntity(ResultVo.CODE_OK, "采购申请成功"));
+
+    }
+}

+ 1 - 1
service-store/src/main/java/com/java110/store/cmd/purchase/ResourceEnterCmd.java

@@ -156,7 +156,7 @@ public class ResourceEnterCmd extends Cmd{
             resourceStoreTimesPo.setResCode(resourceStoreDtos.get(0).getResCode());
             resourceStoreTimesPo.setStoreId(resourceStoreDtos.get(0).getStoreId());
             resourceStoreTimesPo.setTimesId(GenerateCodeFactory.getGeneratorId("10"));
-            resourceStoreTimesV1InnerServiceSMOImpl.saveResourceStoreTimes(resourceStoreTimesPo);
+            resourceStoreTimesV1InnerServiceSMOImpl.saveOrUpdateResourceStoreTimes(resourceStoreTimesPo);
         }
         //获取订单号
         String applyOrderId = purchaseApplyPo.getApplyOrderId();

+ 2 - 2
service-store/src/main/java/com/java110/store/cmd/purchase/UrgentPurchaseApplyCmd.java

@@ -238,7 +238,7 @@ public class UrgentPurchaseApplyCmd extends Cmd {
                 resourceStoreTimesPo.setResCode(resourceStoreDtoList.get(0).getResCode());
                 resourceStoreTimesPo.setStoreId(resourceStoreDtoList.get(0).getStoreId());
                 resourceStoreTimesPo.setTimesId(GenerateCodeFactory.getGeneratorId("10"));
-                resourceStoreTimesV1InnerServiceSMOImpl.saveResourceStoreTimes(resourceStoreTimesPo);
+                resourceStoreTimesV1InnerServiceSMOImpl.saveOrUpdateResourceStoreTimes(resourceStoreTimesPo);
             } else if (resourceStoreDtos != null && resourceStoreDtos.size() > 1) {
                 throw new IllegalArgumentException("查询商品错误!");
             } else {
@@ -306,7 +306,7 @@ public class UrgentPurchaseApplyCmd extends Cmd {
                 resourceStoreTimesPo.setResCode(resourceStoreDtoList.get(0).getResCode());
                 resourceStoreTimesPo.setStoreId(resourceStoreDtoList.get(0).getStoreId());
                 resourceStoreTimesPo.setTimesId(GenerateCodeFactory.getGeneratorId("10"));
-                resourceStoreTimesV1InnerServiceSMOImpl.saveResourceStoreTimes(resourceStoreTimesPo);
+                resourceStoreTimesV1InnerServiceSMOImpl.saveOrUpdateResourceStoreTimes(resourceStoreTimesPo);
             }
         }
         purchaseApplyPo.setPurchaseApplyDetailPos(purchaseApplyDetailPos);

+ 1 - 1
service-store/src/main/java/com/java110/store/cmd/resourceStore/ImportResourceStoreCmd.java

@@ -273,7 +273,7 @@ public class ImportResourceStoreCmd extends Cmd {
             resourceStoreTimesPo.setResCode(resourceStorePo.getResCode());
             resourceStoreTimesPo.setStoreId(resourceStorePo.getStoreId());
             resourceStoreTimesPo.setTimesId(GenerateCodeFactory.getGeneratorId("10"));
-            resourceStoreTimesV1InnerServiceSMOImpl.saveResourceStoreTimes(resourceStoreTimesPo);
+            resourceStoreTimesV1InnerServiceSMOImpl.saveOrUpdateResourceStoreTimes(resourceStoreTimesPo);
         }
         int saveFlag = purchaseApplyInnerServiceSMOImpl.savePurchaseApply(purchaseApplyPo);
         if (saveFlag < 1) {

+ 30 - 9
service-store/src/main/java/com/java110/store/smo/impl/ResourceStoreTimesV1InnerServiceSMOImpl.java

@@ -16,6 +16,7 @@
 package com.java110.store.smo.impl;
 
 
+import com.java110.core.factory.GenerateCodeFactory;
 import com.java110.dto.resourceStoreTimes.ResourceStoreTimesDto;
 import com.java110.po.resourceStoreTimes.ResourceStoreTimesPo;
 import com.java110.store.dao.IResourceStoreTimesV1ServiceDao;
@@ -52,21 +53,40 @@ public class ResourceStoreTimesV1InnerServiceSMOImpl extends BaseServiceSMO impl
         return saveFlag;
     }
 
-     @Override
-    public int updateResourceStoreTimes(@RequestBody  ResourceStoreTimesPo resourceResourceStoreTimesTimesPo) {
+    @Override
+    public int updateResourceStoreTimes(@RequestBody ResourceStoreTimesPo resourceResourceStoreTimesTimesPo) {
         int saveFlag = resourceResourceStoreTimesTimesV1ServiceDaoImpl.updateResourceStoreTimesInfo(BeanConvertUtil.beanCovertMap(resourceResourceStoreTimesTimesPo));
         return saveFlag;
     }
 
-     @Override
-    public int deleteResourceStoreTimes(@RequestBody  ResourceStoreTimesPo resourceResourceStoreTimesTimesPo) {
-       resourceResourceStoreTimesTimesPo.setStatusCd("1");
-       int saveFlag = resourceResourceStoreTimesTimesV1ServiceDaoImpl.updateResourceStoreTimesInfo(BeanConvertUtil.beanCovertMap(resourceResourceStoreTimesTimesPo));
-       return saveFlag;
+
+    @Override
+    public int saveOrUpdateResourceStoreTimes(@RequestBody ResourceStoreTimesPo resourceStoreTimesPo) {
+        ResourceStoreTimesDto resourceStoreTimesDto = new ResourceStoreTimesDto();
+        resourceStoreTimesDto.setStoreId(resourceStoreTimesPo.getStoreId());
+        resourceStoreTimesDto.setPrice(resourceStoreTimesPo.getPrice());
+        resourceStoreTimesDto.setResCode(resourceStoreTimesPo.getResCode());
+        List<ResourceStoreTimesDto> resourceStoreTimesDtos = queryResourceStoreTimess(resourceStoreTimesDto);
+        if (resourceStoreTimesDtos == null || resourceStoreTimesDtos.size() < 1) {
+            resourceStoreTimesPo.setTimesId(GenerateCodeFactory.getGeneratorId("11"));
+            return saveResourceStoreTimes(resourceStoreTimesPo);
+        }
+        int stock = Integer.parseInt(resourceStoreTimesDtos.get(0).getStock()) + Integer.parseInt(resourceStoreTimesPo.getStock());
+        resourceStoreTimesPo.setStock(stock + "");
+        resourceStoreTimesPo.setTimesId(resourceStoreTimesDtos.get(0).getTimesId());
+        return updateResourceStoreTimes(resourceStoreTimesPo);
     }
 
+
     @Override
-    public List<ResourceStoreTimesDto> queryResourceStoreTimess(@RequestBody  ResourceStoreTimesDto resourceResourceStoreTimesTimesDto) {
+    public int deleteResourceStoreTimes(@RequestBody ResourceStoreTimesPo resourceResourceStoreTimesTimesPo) {
+        resourceResourceStoreTimesTimesPo.setStatusCd("1");
+        int saveFlag = resourceResourceStoreTimesTimesV1ServiceDaoImpl.updateResourceStoreTimesInfo(BeanConvertUtil.beanCovertMap(resourceResourceStoreTimesTimesPo));
+        return saveFlag;
+    }
+
+    @Override
+    public List<ResourceStoreTimesDto> queryResourceStoreTimess(@RequestBody ResourceStoreTimesDto resourceResourceStoreTimesTimesDto) {
 
         //校验是否传了 分页信息
 
@@ -84,6 +104,7 @@ public class ResourceStoreTimesV1InnerServiceSMOImpl extends BaseServiceSMO impl
 
     @Override
     public int queryResourceStoreTimessCount(@RequestBody ResourceStoreTimesDto resourceResourceStoreTimesTimesDto) {
-        return resourceResourceStoreTimesTimesV1ServiceDaoImpl.queryResourceStoreTimessCount(BeanConvertUtil.beanCovertMap(resourceResourceStoreTimesTimesDto));    }
+        return resourceResourceStoreTimesTimesV1ServiceDaoImpl.queryResourceStoreTimessCount(BeanConvertUtil.beanCovertMap(resourceResourceStoreTimesTimesDto));
+    }
 
 }