xiaogang 3 gadi atpakaļ
vecāks
revīzija
d30a6eb6d7
27 mainītis faili ar 998 papildinājumiem un 29 dzēšanām
  1. 141 0
      java110-bean/src/main/java/com/java110/entity/assetImport/ImportResourceStoreDto.java
  2. 40 0
      service-api/src/main/java/com/java110/api/components/assetImport/ImportResourceStoreComponent.java
  3. 24 0
      service-api/src/main/java/com/java110/api/smo/assetImport/IImportResourceStoreSMO.java
  4. 1 1
      service-api/src/main/java/com/java110/api/smo/assetImport/impl/ImportOwnerCarSMOImpl.java
  5. 213 0
      service-api/src/main/java/com/java110/api/smo/assetImport/impl/ImportResourceStoreSMOImpl.java
  6. 4 5
      service-community/src/main/java/com/java110/community/cmd/room/QueryRoomsCmd.java
  7. 2 2
      service-fee/src/main/java/com/java110/fee/bmo/meterWater/impl/QueryPreMeterWaterImpl.java
  8. 1 1
      service-fee/src/main/java/com/java110/fee/cmd/fee/ListFeeCmd.java
  9. 2 2
      service-fee/src/main/java/com/java110/fee/cmd/meterWater/ListMeterWaterCmd.java
  10. 1 1
      service-job/src/main/java/com/java110/job/adapt/roomRenovation/MachineRoomRenovationCompleted.java
  11. 1 1
      service-job/src/main/java/com/java110/job/adapt/roomRenovation/MachineRoomRenovationDetail.java
  12. 1 1
      service-job/src/main/java/com/java110/job/adapt/roomRenovation/MachineRoomToExamine.java
  13. 2 2
      service-job/src/main/java/com/java110/job/adapt/roomRenovation/MachineSaveRoomRenovation.java
  14. 1 1
      service-job/src/main/java/com/java110/job/task/wechat/FeeCollectionPushMessageTemplate.java
  15. 1 1
      service-report/src/main/java/com/java110/report/api/ReportFeeMonthStatisticsApi.java
  16. 1 1
      service-report/src/main/java/com/java110/report/api/ReportOwnerPayFeeApi.java
  17. 1 1
      service-store/src/main/java/com/java110/store/cmd/complaint/ListComplaintsCmd.java
  18. 266 0
      service-store/src/main/java/com/java110/store/cmd/resourceStore/ImportResourceStoreCmd.java
  19. 1 1
      service-user/src/main/java/com/java110/user/bmo/owner/impl/ComprehensiveQueryImpl.java
  20. 1 1
      service-user/src/main/java/com/java110/user/cmd/owner/QueryOwnersCmd.java
  21. 4 4
      springboot/pom.xml
  22. 36 0
      springboot/src/main/java/com/java110/boot/components/assetImport/ImportResourceStoreComponent.java
  23. 24 0
      springboot/src/main/java/com/java110/boot/smo/assetImport/IImportResourceStoreSMO.java
  24. 1 1
      springboot/src/main/java/com/java110/boot/smo/assetImport/impl/ImportCustomCreateFeeSMOImpl.java
  25. 2 2
      springboot/src/main/java/com/java110/boot/smo/assetImport/impl/ImportOwnerCarSMOImpl.java
  26. 213 0
      springboot/src/main/java/com/java110/boot/smo/assetImport/impl/ImportResourceStoreSMOImpl.java
  27. 13 0
      springboot/src/main/resources/java110.properties

+ 141 - 0
java110-bean/src/main/java/com/java110/entity/assetImport/ImportResourceStoreDto.java

@@ -0,0 +1,141 @@
+package com.java110.entity.assetImport;
+
+import java.io.Serializable;
+
+public class ImportResourceStoreDto implements Serializable {
+
+    private String communityId;
+
+    private String shId;
+    private String resName;
+
+    private String resCode;
+
+    private String outLowPrice;
+    private String outHighPrice;
+
+    private String warningStock;
+
+    private String isFixed;
+
+    private String unitCode;
+    private String price;
+    private String stock; // 是否有电梯
+    private String remark; // 房屋类型
+    private String amount;
+    private String rstName;
+
+
+    public String getCommunityId() {
+        return communityId;
+    }
+
+    public void setCommunityId(String communityId) {
+        this.communityId = communityId;
+    }
+
+    public String getShId() {
+        return shId;
+    }
+
+    public void setShId(String shId) {
+        this.shId = shId;
+    }
+
+    public String getResName() {
+        return resName;
+    }
+
+    public void setResName(String resName) {
+        this.resName = resName;
+    }
+
+    public String getUnitCode() {
+        return unitCode;
+    }
+
+    public void setUnitCode(String unitCode) {
+        this.unitCode = unitCode;
+    }
+
+    public String getPrice() {
+        return price;
+    }
+
+    public void setPrice(String price) {
+        this.price = price;
+    }
+
+    public String getStock() {
+        return stock;
+    }
+
+    public void setStock(String stock) {
+        this.stock = stock;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public String getAmount() {
+        return amount;
+    }
+
+    public void setAmount(String amount) {
+        this.amount = amount;
+    }
+
+    public String getRstName() {
+        return rstName;
+    }
+
+    public void setRstName(String rstName) {
+        this.rstName = rstName;
+    }
+
+
+    public String getResCode() {
+        return resCode;
+    }
+
+    public void setResCode(String resCode) {
+        this.resCode = resCode;
+    }
+
+    public String getOutLowPrice() {
+        return outLowPrice;
+    }
+
+    public void setOutLowPrice(String outLowPrice) {
+        this.outLowPrice = outLowPrice;
+    }
+
+    public String getOutHighPrice() {
+        return outHighPrice;
+    }
+
+    public void setOutHighPrice(String outHighPrice) {
+        this.outHighPrice = outHighPrice;
+    }
+
+    public String getWarningStock() {
+        return warningStock;
+    }
+
+    public void setWarningStock(String warningStock) {
+        this.warningStock = warningStock;
+    }
+
+    public String getIsFixed() {
+        return isFixed;
+    }
+
+    public void setIsFixed(String isFixed) {
+        this.isFixed = isFixed;
+    }
+}

+ 40 - 0
service-api/src/main/java/com/java110/api/components/assetImport/ImportResourceStoreComponent.java

@@ -0,0 +1,40 @@
+package com.java110.api.components.assetImport;
+
+import com.java110.api.controller.component.CallComponentController;
+import com.java110.api.smo.assetExport.IExportRoomSMO;
+import com.java110.api.smo.assetImport.IImportResourceStoreSMO;
+import com.java110.core.context.IPageData;
+import com.java110.core.log.LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * 添加应用组件
+ */
+@Component("importResourceStore")
+public class ImportResourceStoreComponent {
+
+    private final static Logger logger = LoggerFactory.getLogger(CallComponentController.class);
+
+
+    @Autowired
+    private IImportResourceStoreSMO importResourceStoreSMOImpl;
+
+    @Autowired
+    private IExportRoomSMO exportRoomSMOImpl;
+
+    /**
+     * 添加应用数据
+     *
+     * @param pd 页面数据封装
+     * @return ResponseEntity 对象
+     */
+    public ResponseEntity<String> importData(IPageData pd, MultipartFile uploadFile) throws Exception {
+
+        return importResourceStoreSMOImpl.importExcelData(pd, uploadFile);
+    }
+
+}

+ 24 - 0
service-api/src/main/java/com/java110/api/smo/assetImport/IImportResourceStoreSMO.java

@@ -0,0 +1,24 @@
+package com.java110.api.smo.assetImport;
+
+import com.java110.core.context.IPageData;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * @ClassName IAssetImportSMO
+ * @Description TODO
+ * @Author wuxw
+ * @Date 2019/9/23 23:13
+ * @Version 1.0
+ * add by wuxw 2019/9/23
+ **/
+public interface IImportResourceStoreSMO {
+
+    /**
+     * 导入excel数据
+     * @param pd 前台数据封装
+     * @param uploadFile excel 文件
+     * @return ResponseEntity
+     */
+    public ResponseEntity<String> importExcelData(IPageData pd,  MultipartFile uploadFile) throws Exception;
+}

+ 1 - 1
service-api/src/main/java/com/java110/api/smo/assetImport/impl/ImportOwnerCarSMOImpl.java

@@ -174,7 +174,7 @@ public class ImportOwnerCarSMOImpl extends DefaultAbstractComponentSMO implement
 
             //获取房屋名称
             String roomName = ownerCarDto.getRoomName().trim();
-            String[] split = roomName.split("-");
+            String[] split = roomName.split("-",3);
             String floorNum = split[0];
             String unitNum = split[1];
             String roomNum = split[2];

+ 213 - 0
service-api/src/main/java/com/java110/api/smo/assetImport/impl/ImportResourceStoreSMOImpl.java

@@ -0,0 +1,213 @@
+package com.java110.api.smo.assetImport.impl;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.java110.api.smo.DefaultAbstractComponentSMO;
+import com.java110.api.smo.assetImport.IImportResourceStoreSMO;
+import com.java110.core.context.IPageData;
+import com.java110.core.log.LoggerFactory;
+import com.java110.entity.assetImport.ImportOwnerRoomDto;
+import com.java110.entity.assetImport.ImportResourceStoreDto;
+import com.java110.entity.component.ComponentValidateResult;
+import com.java110.intf.community.IImportOwnerRoomInnerServiceSMO;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.ImportExcelUtils;
+import com.java110.utils.util.StringUtil;
+import com.java110.vo.ResultVo;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@Service("importResourceStoreSMOImpl")
+public class ImportResourceStoreSMOImpl extends DefaultAbstractComponentSMO implements IImportResourceStoreSMO {
+
+    private final static Logger logger = LoggerFactory.getLogger(ImportResourceStoreSMOImpl.class);
+
+    public static final int DEFAULT_ROWS = 500;
+
+    @Autowired
+    private RestTemplate restTemplate;
+
+    @Autowired
+    private IImportOwnerRoomInnerServiceSMO importOwnerRoomInnerServiceSMOImpl;
+
+
+    @Override
+    public ResponseEntity<String> importExcelData(IPageData pd, MultipartFile uploadFile) throws Exception {
+        try {
+            ComponentValidateResult result = this.validateStoreStaffCommunityRelationship(pd, restTemplate);
+            //InputStream is = uploadFile.getInputStream();
+            Workbook workbook = ImportExcelUtils.createWorkbook(uploadFile);  //工作簿
+            List<ImportResourceStoreDto> resourceStoreDtos = new ArrayList<ImportResourceStoreDto>();
+            //封装对象
+            getResourceStores(workbook, resourceStoreDtos, result);
+
+            //数据格式校验
+            validateRoomInfo(resourceStoreDtos);
+
+            // 保存数据
+            return dealExcelData(pd, resourceStoreDtos, result);
+        } catch (Exception e) {
+            logger.error("导入失败 ", e);
+            return new ResponseEntity<String>("非常抱歉,您填写的模板数据有误:" + e.getMessage(), HttpStatus.BAD_REQUEST);
+        }
+    }
+
+
+    /**
+     * 数据格式校验
+     *
+     * @param resourceStoreDtos
+     */
+    private void validateRoomInfo(List<ImportResourceStoreDto> resourceStoreDtos) {
+        ImportOwnerRoomDto importOwnerRoomDto = null;
+        ImportOwnerRoomDto tmpImportOwnerRoomDto = null;
+        boolean hasOwnerType = false;
+
+    }
+
+    /**
+     * 获取业主车辆信息
+     *
+     * @param workbook
+     * @param resourceStoreDtos
+     */
+    private void getResourceStores(Workbook workbook, List<ImportResourceStoreDto> resourceStoreDtos, ComponentValidateResult result) throws ParseException {
+        Sheet sheet = null;
+        sheet = ImportExcelUtils.getSheet(workbook, "物品信息");
+        List<Object[]> oList = ImportExcelUtils.listFromSheet(sheet);
+        ImportResourceStoreDto resourceStoreDto = null;
+        for (int osIndex = 0; osIndex < oList.size(); osIndex++) {
+
+            Object[] os = oList.get(osIndex);
+
+            if (osIndex == 0 || osIndex == 1) { // 第一行是 头部信息 直接跳过
+                continue;
+            }
+            if (os == null || StringUtil.isNullOrNone(os[0])) {
+                continue;
+            }
+            Assert.hasValue(os[1], (osIndex + 1) + "行物品名称不能为空");
+            Assert.hasValue(os[2], (osIndex + 1) + "行物品编号不能为空");
+            Assert.hasValue(os[3], (osIndex + 1) + "行物品单价不能为空");
+            Assert.hasValue(os[4], (osIndex + 1) + "行物品库存不能为空");
+            Assert.hasValue(os[5], (osIndex + 1) + "行物品单位不能为空");
+            Assert.hasValue(os[6], (osIndex + 1) + "行物品对外最低售价不能为空");
+            Assert.hasValue(os[7], (osIndex + 1) + "行物品对外最高售价不能为空");
+            Assert.hasValue(os[8], (osIndex + 1) + "行物品告警库存不能为空");
+            Assert.hasValue(os[9], (osIndex + 1) + "行物品类型不能为空");
+            Assert.hasValue(os[10], (osIndex + 1) + "行是否固定物品不能为空");
+            resourceStoreDto = new ImportResourceStoreDto();
+            resourceStoreDto.setCommunityId(result.getCommunityId());
+            resourceStoreDto.setResName(os[1].toString());
+            resourceStoreDto.setResCode(os[2].toString());
+            resourceStoreDto.setPrice(os[3].toString());
+            resourceStoreDto.setStock(os[4].toString());
+            resourceStoreDto.setUnitCode(os[5].toString());
+            resourceStoreDto.setOutLowPrice(os[6].toString());
+            resourceStoreDto.setOutHighPrice(os[7].toString());
+            resourceStoreDto.setWarningStock(os[8].toString());
+            resourceStoreDto.setRstName(os[9].toString());
+            resourceStoreDto.setIsFixed(os[10].toString());
+
+            if (os.length > 11) {
+                resourceStoreDto.setRemark(os[11].toString());
+            }
+            resourceStoreDtos.add(resourceStoreDto);
+
+        }
+    }
+
+
+    /**
+     * 处理房产信息
+     */
+    private ResponseEntity<String> dealExcelData(IPageData pd, List<ImportResourceStoreDto> resourceStoreDtos, ComponentValidateResult result) {
+        ResponseEntity<String> responseEntity = null;
+
+        List<ImportResourceStoreDto> tmpImportResourceStoreDtos = new ArrayList<>();
+        int flag = 0;
+
+        JSONObject paramIn = JSONObject.parseObject(pd.getReqData());
+
+        int successCount = 0;
+        JSONObject data = new JSONObject();
+        data.put("userId", result.getUserId());
+        data.put("userName", result.getUserName());
+        data.put("storeId", result.getStoreId());
+        data.put("communityId", result.getCommunityId());
+        data.put("shId", paramIn.getString("shId"));
+
+        try {
+            for (int roomIndex = 0; roomIndex < resourceStoreDtos.size(); roomIndex++) {
+                tmpImportResourceStoreDtos.add(resourceStoreDtos.get(roomIndex));
+                if (tmpImportResourceStoreDtos.size() > DEFAULT_ROWS) {
+                    flag = saveResourceStore(pd, tmpImportResourceStoreDtos, data);
+                    tmpImportResourceStoreDtos = new ArrayList<>();
+
+                    successCount += flag;
+                }
+            }
+
+            if (tmpImportResourceStoreDtos.size() > 0) {
+                flag = saveResourceStore(pd, tmpImportResourceStoreDtos, data);
+
+                successCount += flag;
+            }
+        } catch (Exception e) {
+            logger.error("导入失败", e);
+            //按批次做撤销功能
+            throw e;
+        }
+
+        return ResultVo.createResponseEntity("总共导入:" + tmpImportResourceStoreDtos.size() + ";成功导入:" + successCount + ";导入失败:" + (tmpImportResourceStoreDtos.size() - successCount));
+    }
+
+    /**
+     * 创建费用
+     *
+     * @param pd
+     * @param tmpImportResourceStoreDtos
+     */
+    private int saveResourceStore(IPageData pd, List<ImportResourceStoreDto> tmpImportResourceStoreDtos, JSONObject data) {
+
+        JSONArray importRoomFees = JSONArray.parseArray(JSONObject.toJSONString(tmpImportResourceStoreDtos));
+        data.put("importResourceStoreDtos", importRoomFees);
+
+        String apiUrl = "resourceStore.importResourceStore";
+
+        ResponseEntity<String> responseEntity = this.callCenterService(restTemplate, pd, data.toJSONString(), apiUrl, HttpMethod.POST);
+
+        if (responseEntity.getStatusCode() != HttpStatus.OK) {
+            throw new IllegalArgumentException(responseEntity.getBody());
+        }
+
+        JSONObject paramOut = JSONObject.parseObject(responseEntity.getBody());
+        if (ResultVo.CODE_OK != paramOut.getInteger("code")) {
+            throw new IllegalArgumentException(paramOut.getString("msg"));
+        }
+
+        return paramOut.getIntValue("data");
+
+    }
+
+    //解析Excel日期格式
+    public static Date DoubleToDate(Double dVal) {
+        Date tDate = new Date();
+        long localOffset = tDate.getTimezoneOffset() * 60000; //系统时区偏移 1900/1/1 到 1970/1/1 的 25569 天
+        tDate.setTime((long) ((dVal - 25569) * 24 * 3600 * 1000 + localOffset));
+        return tDate;
+    }
+}

+ 4 - 5
service-community/src/main/java/com/java110/community/cmd/room/QueryRoomsCmd.java

@@ -25,7 +25,6 @@ import com.java110.utils.util.DateUtil;
 import com.java110.utils.util.StringUtil;
 import com.java110.vo.api.ApiRoomDataVo;
 import com.java110.vo.api.ApiRoomVo;
-import org.apache.kafka.common.protocol.types.Field;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
@@ -97,7 +96,7 @@ public class QueryRoomsCmd extends Cmd {
 //        }
         String roomId = "";
         String unitId = "";
-        if (reqJson.containsKey("flag") && !StringUtil.isEmpty(reqJson.getString("flag")) && reqJson.getString("flag").equals("0")
+        if (reqJson.containsKey("flag") && "0".equals(reqJson.getString("flag"))
                 && reqJson.containsKey("floorNum") && !StringUtil.isEmpty(reqJson.getString("floorNum"))
                 && reqJson.containsKey("unitNum") && !StringUtil.isEmpty(reqJson.getString("unitNum"))
                 && reqJson.containsKey("roomNum") && !StringUtil.isEmpty(reqJson.getString("roomNum"))) {
@@ -131,15 +130,15 @@ public class QueryRoomsCmd extends Cmd {
             roomDto.setRoomId(roomId);
             roomDto.setUnitId(unitId);
         }
-        if (reqJson.containsKey("flag") && !StringUtil.isEmpty(reqJson.getString("flag")) && reqJson.getString("flag").equals("1")) {
+        if (reqJson.containsKey("flag") && "1".equals(reqJson.getString("flag"))) {
             if (reqJson.containsKey("roomNum") && !StringUtil.isEmpty(reqJson.getString("roomNum"))) {
-                String[] roomNums = reqJson.getString("roomNum").split("-");
+                String[] roomNums = reqJson.getString("roomNum").split("-", 3);
                 if (roomNums != null && roomNums.length == 3) {
                     roomDto.setFloorNum(roomNums[0]);
                     roomDto.setUnitNum(roomNums[1]);
                     roomDto.setRoomNum(roomNums[2]);
                 } else {
-                    throw new IllegalArgumentException("房屋编号错误!");
+                    roomDto.setRoomNum(reqJson.getString("roomNum"));
                 }
             } else {
                 roomDto.setUnitNum("");

+ 2 - 2
service-fee/src/main/java/com/java110/fee/bmo/meterWater/impl/QueryPreMeterWaterImpl.java

@@ -283,7 +283,7 @@ public class QueryPreMeterWaterImpl implements IQueryPreMeterWater {
             return false;
         }
         if (MeterWaterDto.METER_TYPE_ROOM.equals(meterWaterDto.getObjType())) {
-            String[] nums = roomNum.split("-");
+            String[] nums = roomNum.split("-",3);
             if (nums.length != 3) {
                 return false;
             }
@@ -300,7 +300,7 @@ public class QueryPreMeterWaterImpl implements IQueryPreMeterWater {
             meterWaterDto.setObjId(roomDtos.get(0).getRoomId());
 
         } else {
-            String[] nums = roomNum.split("-");
+            String[] nums = roomNum.split("-",2);
             if (nums.length != 2) {
                 return false;
             }

+ 1 - 1
service-fee/src/main/java/com/java110/fee/cmd/fee/ListFeeCmd.java

@@ -95,7 +95,7 @@ public class ListFeeCmd extends Cmd {
     @Override
     public void doCmd(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) throws CmdException {
         if (reqJson.containsKey("roomNum") && !StringUtil.isEmpty(reqJson.getString("roomNum"))) {
-            String[] roomNums = reqJson.getString("roomNum").split("-");
+            String[] roomNums = reqJson.getString("roomNum").split("-",3);
             if (roomNums == null || roomNums.length != 3) {
                 throw new IllegalArgumentException("房屋编号格式错误!");
             }

+ 2 - 2
service-fee/src/main/java/com/java110/fee/cmd/meterWater/ListMeterWaterCmd.java

@@ -126,7 +126,7 @@ public class ListMeterWaterCmd extends Cmd {
         }
 
         if (MeterWaterDto.PAYER_OBJ_TYPE_ROOM.equals(meterWaterDto.getObjType())) {
-            String[] nums = roomNum.split("-");
+            String[] nums = roomNum.split("-",3);
             if (nums.length != 3) {
                 return false;
             }
@@ -143,7 +143,7 @@ public class ListMeterWaterCmd extends Cmd {
             meterWaterDto.setObjId(roomDtos.get(0).getRoomId());
 
         } else {
-            String[] nums = roomNum.split("-");
+            String[] nums = roomNum.split("-",2);
             if (nums.length != 2) {
                 return false;
             }

+ 1 - 1
service-job/src/main/java/com/java110/job/adapt/roomRenovation/MachineRoomRenovationCompleted.java

@@ -135,7 +135,7 @@ public class MachineRoomRenovationCompleted extends DatabusAdaptImpl {
         basePrivilegeDto.setResource("/wechatDecorationNotice");
         List<UserDto> userDtos = privilegeInnerServiceSMO.queryPrivilegeUsers(basePrivilegeDto);
         String url = sendMsgUrl + accessToken;
-        String[] roomName = paramIn.getString("roomName").split("-");
+        String[] roomName = paramIn.getString("roomName").split("-",3);
         if (userDtos != null && userDtos.size() > 0) {
             for (UserDto userDto : userDtos) {
                 //根据 userId 查询到openId

+ 1 - 1
service-job/src/main/java/com/java110/job/adapt/roomRenovation/MachineRoomRenovationDetail.java

@@ -194,7 +194,7 @@ public class MachineRoomRenovationDetail extends DatabusAdaptImpl {
         if (communityDtos != null && communityDtos.size() > 0) {
             tel = communityDtos.get(0).getTel();
         }
-        String[] roomNames = paramIn.getString("roomName").split("-");
+        String[] roomNames = paramIn.getString("roomName").split("-",3);
         if (ownerAppUserDtos.size() > 0) {
             //获取openId
             String openId = ownerAppUserDtos.get(0).getOpenId();

+ 1 - 1
service-job/src/main/java/com/java110/job/adapt/roomRenovation/MachineRoomToExamine.java

@@ -185,7 +185,7 @@ public class MachineRoomToExamine extends DatabusAdaptImpl {
         if (communityDtos != null && communityDtos.size() > 0) {
             tel = communityDtos.get(0).getTel();
         }
-        String[] roomNames = paramIn.getString("roomName").split("-");
+        String[] roomNames = paramIn.getString("roomName").split("-",3);
         //获取状态
         String state = paramIn.getString("state");
         if (ownerAppUserDtos.size() > 0) {

+ 2 - 2
service-job/src/main/java/com/java110/job/adapt/roomRenovation/MachineSaveRoomRenovation.java

@@ -174,7 +174,7 @@ public class MachineSaveRoomRenovation extends DatabusAdaptImpl {
         basePrivilegeDto.setResource("/wechatDecorationNotice");
         List<UserDto> userDtos = privilegeInnerServiceSMO.queryPrivilegeUsers(basePrivilegeDto);
         String url = sendMsgUrl + accessToken;
-        String[] roomName = paramIn.getString("roomName").split("-");
+        String[] roomName = paramIn.getString("roomName").split("-",3);
         if (userDtos != null && userDtos.size() > 0) {
             for (UserDto userDto : userDtos) {
                 //根据 userId 查询到openId
@@ -278,7 +278,7 @@ public class MachineSaveRoomRenovation extends DatabusAdaptImpl {
         if (communityDtos != null && communityDtos.size() > 0) {
             tel = communityDtos.get(0).getTel();
         }
-        String[] roomName = paramIn.getString("roomName").split("-");
+        String[] roomName = paramIn.getString("roomName").split("-",3);
         if (ownerAppUserDtos.size() > 0) {
             //获取openId
             String openId = ownerAppUserDtos.get(0).getOpenId();

+ 1 - 1
service-job/src/main/java/com/java110/job/task/wechat/FeeCollectionPushMessageTemplate.java

@@ -296,7 +296,7 @@ public class FeeCollectionPushMessageTemplate extends TaskSystemQuartz {
             oweUrl = FeeDto.PAYER_OBJ_TYPE_ROOM.equals(reportOweFeeDo.getPayerObjType()) ? oweRoomUrl : oweCarUrl;
             String[] roomName = new String[]{};
             if ("3333".equals(reportOweFeeDo.getPayerObjType())) {
-                roomName = itemDto.getPayerObjName().split("-");
+                roomName = itemDto.getPayerObjName().split("-",3);
             }
             for (OwnerAppUserDto appUserDto : ownerAppUserDtos) {
                 try {

+ 1 - 1
service-report/src/main/java/com/java110/report/api/ReportFeeMonthStatisticsApi.java

@@ -360,7 +360,7 @@ public class ReportFeeMonthStatisticsApi {
         reportFeeMonthStatisticsDto.setEndTime(endTime);
         reportFeeMonthStatisticsDto.setObjId(objId);
         if(!StringUtil.isEmpty(roomName)){
-            String[] roomNameArray = roomName.split("-");
+            String[] roomNameArray = roomName.split("-",3);
             reportFeeMonthStatisticsDto.setFloorNum(roomNameArray[0]);
             reportFeeMonthStatisticsDto.setUnitNum(roomNameArray[1]);
             reportFeeMonthStatisticsDto.setRoomNum(roomNameArray[2]);

+ 1 - 1
service-report/src/main/java/com/java110/report/api/ReportOwnerPayFeeApi.java

@@ -112,7 +112,7 @@ public class ReportOwnerPayFeeApi {
         reportOwnerPayFeeDto.setOwnerName(ownerName);
         reportOwnerPayFeeDto.setFeeTypeCd(feeTypeCd);
         if (!StringUtil.isEmpty(roomName) && roomName.contains("-")) {
-            String[] datas = roomName.split("-");
+            String[] datas = roomName.split("-",3);
             if (datas.length != 3) {
                 throw new IllegalArgumentException("房屋格式错误,请填写 楼栋-单元-房屋格式");
             }

+ 1 - 1
service-store/src/main/java/com/java110/store/cmd/complaint/ListComplaintsCmd.java

@@ -52,7 +52,7 @@ public class ListComplaintsCmd extends Cmd{
 
         String roomId = reqJson.getString("roomId");
         if (!StringUtil.isEmpty(roomId) && roomId.contains("-")) {
-            String[] values = roomId.split("-");
+            String[] values = roomId.split("-",3);
             if (values.length == 3) {
                 RoomDto roomDto = new RoomDto();
                 roomDto.setFloorNum(values[0]);

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

@@ -0,0 +1,266 @@
+/*
+ * Copyright 2017-2020 吴学文 and java110 team.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.java110.store.cmd.resourceStore;
+
+import com.alibaba.fastjson.JSONArray;
+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.GenerateCodeFactory;
+import com.java110.dto.Dict.DictDto;
+import com.java110.dto.Dict.DictQueryDto;
+import com.java110.dto.purchaseApply.PurchaseApplyDto;
+import com.java110.dto.resourceStore.ResourceStoreDto;
+import com.java110.dto.resourceStoreType.ResourceStoreTypeDto;
+import com.java110.dto.user.UserDto;
+import com.java110.entity.assetImport.ImportResourceStoreDto;
+import com.java110.intf.common.IFileInnerServiceSMO;
+import com.java110.intf.common.IFileRelInnerServiceSMO;
+import com.java110.intf.community.DictInnerServiceSMO;
+import com.java110.intf.store.*;
+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.resourceStoreType.ResourceStoreTypePo;
+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.vo.ResultVo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 类表述:保存
+ * 服务编码:resourceStore.saveResourceStore
+ * 请求路劲:/app/resourceStore.SaveResourceStore
+ * add by 吴学文 at 2022-06-30 12:03:19 mail: 928255095@qq.com
+ * open source address: https://gitee.com/wuxw7/MicroCommunity
+ * 官网:http://www.homecommunity.cn
+ * 温馨提示:如果您对此文件进行修改 请不要删除原有作者及注释信息,请补充您的 修改的原因以及联系邮箱如下
+ * // modify by 张三 at 2021-09-12 第10行在某种场景下存在某种bug 需要修复,注释10至20行 加入 20行至30行
+ */
+@Java110Cmd(serviceCode = "resourceStore.importResourceStore")
+public class ImportResourceStoreCmd extends Cmd {
+
+    private static Logger logger = LoggerFactory.getLogger(ImportResourceStoreCmd.class);
+
+    public static final String CODE_PREFIX_ID = "10";
+
+    @Autowired
+    private IResourceStoreV1InnerServiceSMO resourceStoreV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IResourceStoreInnerServiceSMO resourceStoreInnerServiceSMOImpl;
+
+    @Autowired
+    private IFileRelInnerServiceSMO fileRelInnerServiceSMOImpl;
+
+    @Autowired
+    private IFileInnerServiceSMO fileInnerServiceSMOImpl;
+
+    @Autowired
+    private IUserV1InnerServiceSMO userV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IPurchaseApplyInnerServiceSMO purchaseApplyInnerServiceSMOImpl;
+
+    @Autowired
+    private DictInnerServiceSMO dictInnerServiceSMOImpl;
+
+    @Autowired
+    private IResourceStoreTypeV1InnerServiceSMO resourceStoreTypeV1InnerServiceSMOImpl;
+
+    @Override
+    public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) {
+        //Assert.hasKeyAndValue(reqJson, "xxx", "xxx");
+
+
+    }
+
+    @Override
+    @Java110Transactional
+    public void doCmd(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) throws CmdException {
+        String userId = reqJson.getString("userId");
+        String userName = reqJson.getString("userName");
+        String storeId = reqJson.getString("storeId");
+
+        JSONArray importResourceStoreDtos = reqJson.getJSONArray("importResourceStoreDtos");
+        List<ImportResourceStoreDto> tmpImportResourceStoreDtos = JSONArray.parseArray(importResourceStoreDtos.toJSONString(), ImportResourceStoreDto.class);
+        if (tmpImportResourceStoreDtos == null || tmpImportResourceStoreDtos.size() < 1) {
+            cmdDataFlowContext.setResponseEntity(ResultVo.createResponseEntity(0));
+            return;
+        }
+        DictQueryDto dictDto = new DictQueryDto();
+        dictDto.setName("resource_store");
+        dictDto.setType("unit_code");
+        List<DictDto> dictDtos = dictInnerServiceSMOImpl.queryDict(dictDto);
+
+        List<ResourceStorePo> resourceStorePos = new ArrayList<>();
+        for (ImportResourceStoreDto importResourceStoreDto : tmpImportResourceStoreDtos) {
+            //根据物品编码查询物品资源表
+            ResourceStoreDto resourceStoreDto = new ResourceStoreDto();
+            resourceStoreDto.setResCode(importResourceStoreDto.getResName());
+            resourceStoreDto.setShId(reqJson.getString("shId"));
+            List<ResourceStoreDto> resourceStoreDtos = resourceStoreInnerServiceSMOImpl.queryResourceStores(resourceStoreDto);
+            //判断资源表里是否有该物品编码,避免物品编码重复
+            JSONObject businessResourceStore = new JSONObject();
+            //businessResourceStore.put("stock", "0");
+            businessResourceStore.put("miniStock", "0");
+            businessResourceStore.put("outLowPrice", importResourceStoreDto.getOutLowPrice());
+            businessResourceStore.put("outHighPrice", importResourceStoreDto.getOutHighPrice());
+            businessResourceStore.put("showMobile", "N");
+            businessResourceStore.put("description", importResourceStoreDto.getResName());
+            businessResourceStore.put("isFixed", importResourceStoreDto.getIsFixed());
+            businessResourceStore.put("miniUnitCode", "1");
+            businessResourceStore.put("miniUnitStock", "1");
+            businessResourceStore.put("storeId", storeId);
+            businessResourceStore.put("createTime", new Date());
+            ResourceStorePo resourceStorePo = BeanConvertUtil.covertBean(businessResourceStore, ResourceStorePo.class);
+            resourceStorePo.setShId(reqJson.getString("shId"));
+            resourceStorePo.setStock(importResourceStoreDto.getStock());
+            resourceStorePo.setResName(importResourceStoreDto.getResName());
+            resourceStorePo.setResCode(importResourceStoreDto.getResCode());
+            resourceStorePo.setRstId(getRstId(importResourceStoreDto.getRstName(), storeId));
+            resourceStorePo.setParentRstId(resourceStorePo.getRstId());
+            resourceStorePo.setPrice(importResourceStoreDto.getPrice());
+            resourceStorePo.setUnitCode(getUnitCode(importResourceStoreDto.getUnitCode(), dictDtos));
+            resourceStorePo.setRemark(importResourceStoreDto.getRemark());
+            resourceStorePo.setWarningStock(importResourceStoreDto.getWarningStock());
+            int flag = 0;
+            if (resourceStoreDtos == null || resourceStoreDtos.size() < 1) {
+                resourceStorePo.setResId(GenerateCodeFactory.getResId(GenerateCodeFactory.CODE_PREFIX_resId));
+                flag = resourceStoreV1InnerServiceSMOImpl.saveResourceStore(resourceStorePo);
+            } else {
+                resourceStorePo.setResId(resourceStoreDtos.get(0).getResId());
+                double stock = Double.parseDouble(resourceStoreDtos.get(0).getStock()) + Double.parseDouble(importResourceStoreDto.getStock());
+                resourceStorePo.setStock(stock + "");
+                resourceStorePo.setOutLowPrice("");
+                resourceStorePo.setOutHighPrice("");
+               resourceStorePo.setMiniUnitCode("");
+               resourceStorePo.setMiniStock("");
+
+                flag = resourceStoreV1InnerServiceSMOImpl.updateResourceStore(resourceStorePo);
+
+                resourceStorePo.setStock(importResourceStoreDto.getStock());
+            }
+
+            if (flag < 1) {
+                throw new CmdException("保存数据失败");
+            }
+
+            resourceStorePos.add(resourceStorePo);
+        }
+
+        inStore(reqJson, userId, userName, storeId, resourceStorePos);
+        cmdDataFlowContext.setResponseEntity(ResultVo.createResponseEntity(tmpImportResourceStoreDtos.size()));
+
+    }
+
+    private String getRstId(String rstName, String storeId) {
+
+        ResourceStoreTypeDto resourceStoreTypeDto = new ResourceStoreTypeDto();
+        resourceStoreTypeDto.setStoreId(storeId);
+        resourceStoreTypeDto.setName(rstName);
+        List<ResourceStoreTypeDto> resourceStoreTypeDtos = resourceStoreTypeV1InnerServiceSMOImpl.queryResourceStoreTypes(resourceStoreTypeDto);
+        if (resourceStoreTypeDtos != null && resourceStoreTypeDtos.size() > 0) {
+            return resourceStoreTypeDtos.get(0).getRstId();
+        }
+
+        ResourceStoreTypePo resourceStoreTypePo = new ResourceStoreTypePo();
+        resourceStoreTypePo.setDescription(rstName);
+        resourceStoreTypePo.setName(rstName);
+        resourceStoreTypePo.setStoreId(storeId);
+        resourceStoreTypePo.setRstId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_rstId));
+        resourceStoreTypePo.setParentId("0");
+        resourceStoreTypeV1InnerServiceSMOImpl.saveResourceStoreType(resourceStoreTypePo);
+        return resourceStoreTypePo.getRstId();
+    }
+
+    private String getUnitCode(String unitCode, List<DictDto> dictDtos) {
+        for (DictDto dictDto : dictDtos) {
+            if (unitCode.equals(dictDto.getName())) {
+                return dictDto.getStatusCd();
+            }
+        }
+
+        return "无";
+    }
+
+    /**
+     * 直接入库
+     *
+     * @param reqJson
+     * @param userId
+     * @param userName
+     * @param storeId
+     */
+    private void inStore(JSONObject reqJson, String userId, String userName, String storeId, List<ResourceStorePo> resourceStorePos) {
+
+        UserDto userDto = new UserDto();
+        userDto.setUserId(userId);
+        userDto.setPage(1);
+        userDto.setRow(1);
+        List<UserDto> userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto);
+
+        Assert.listOnlyOne(userDtos, "用户不存在");
+
+        PurchaseApplyPo purchaseApplyPo = new PurchaseApplyPo();
+        purchaseApplyPo.setApplyOrderId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_applyOrderId));
+        purchaseApplyPo.setDescription("入库单(物品导入)");
+        purchaseApplyPo.setUserId(userId);
+        purchaseApplyPo.setUserName(userDtos.get(0).getName());
+        purchaseApplyPo.setEndUserName(userDtos.get(0).getName());
+        purchaseApplyPo.setEndUserTel(userDtos.get(0).getTel());
+        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.setCreateUserId(userId);
+        purchaseApplyPo.setCreateUserName(userName);
+        purchaseApplyPo.setWarehousingWay(PurchaseApplyDto.WAREHOUSING_TYPE_URGENT);
+        purchaseApplyPo.setCommunityId(reqJson.getString("communityId"));
+        //获取采购物品信息
+        List<PurchaseApplyDetailPo> purchaseApplyDetailPos = new ArrayList<>();
+        for (ResourceStorePo resourceStorePo : resourceStorePos) {
+            PurchaseApplyDetailPo purchaseApplyDetailPo = new PurchaseApplyDetailPo();
+            purchaseApplyDetailPo.setApplyOrderId(purchaseApplyPo.getApplyOrderId());
+            purchaseApplyDetailPo.setId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_applyOrderId));
+            purchaseApplyDetailPo.setPurchaseQuantity(resourceStorePo.getStock());
+            purchaseApplyDetailPo.setPurchaseRemark(resourceStorePo.getRemark());
+            purchaseApplyDetailPo.setOriginalStock(resourceStorePo.getStock());
+            purchaseApplyDetailPo.setQuantity(resourceStorePo.getStock());
+            purchaseApplyDetailPo.setPrice(resourceStorePo.getPrice());
+            purchaseApplyDetailPo.setResId(resourceStorePo.getResId());
+            purchaseApplyDetailPo.setRsId(resourceStorePo.getRssId());
+            purchaseApplyDetailPos.add(purchaseApplyDetailPo);
+            purchaseApplyPo.setPurchaseApplyDetailPos(purchaseApplyDetailPos);
+        }
+        int saveFlag = purchaseApplyInnerServiceSMOImpl.savePurchaseApply(purchaseApplyPo);
+        if (saveFlag < 1) {
+            throw new CmdException("采购申请失败");
+        }
+    }
+}

+ 1 - 1
service-user/src/main/java/com/java110/user/bmo/owner/impl/ComprehensiveQueryImpl.java

@@ -450,7 +450,7 @@ public class ComprehensiveQueryImpl implements IComprehensiveQuery {
             throw new IllegalArgumentException("查询内容格式错误,请输入 楼栋-商铺 如 1-1");
         }
 
-        String[] values = searchValue.split("-");
+        String[] values = searchValue.split("-",3);
 
         if (values.length != 2) {
             throw new IllegalArgumentException("查询内容格式错误,请输入 楼栋-商铺 如 1-1");

+ 1 - 1
service-user/src/main/java/com/java110/user/cmd/owner/QueryOwnersCmd.java

@@ -97,7 +97,7 @@ public class QueryOwnersCmd extends Cmd {
         if (!roomName.contains("-")) {
             throw new IllegalArgumentException("房屋格式错误,请写入如 楼栋-单元-房屋 格式");
         }
-        String[] params = roomName.split("-");
+        String[] params = roomName.split("-",3);
         if (params.length != 3) {
             throw new IllegalArgumentException("房屋格式错误,请写入如 楼栋-单元-房屋 格式");
         }

+ 4 - 4
springboot/pom.xml

@@ -165,10 +165,10 @@
             <artifactId>spring-boot-starter-websocket</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>org.quartz-scheduler</groupId>
-            <artifactId>quartz</artifactId>
-        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>org.quartz-scheduler</groupId>-->
+<!--            <artifactId>quartz</artifactId>-->
+<!--        </dependency>-->
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-thymeleaf</artifactId>

+ 36 - 0
springboot/src/main/java/com/java110/boot/components/assetImport/ImportResourceStoreComponent.java

@@ -0,0 +1,36 @@
+package com.java110.boot.components.assetImport;
+
+
+import com.java110.boot.smo.assetImport.IImportResourceStoreSMO;
+import com.java110.core.context.IPageData;
+import com.java110.core.log.LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * 添加应用组件
+ */
+@Component("importResourceStore")
+public class ImportResourceStoreComponent {
+
+
+
+    @Autowired
+    private IImportResourceStoreSMO importResourceStoreSMOImpl;
+
+
+    /**
+     * 添加应用数据
+     *
+     * @param pd 页面数据封装
+     * @return ResponseEntity 对象
+     */
+    public ResponseEntity<String> importData(IPageData pd, MultipartFile uploadFile) throws Exception {
+
+        return importResourceStoreSMOImpl.importExcelData(pd, uploadFile);
+    }
+
+}

+ 24 - 0
springboot/src/main/java/com/java110/boot/smo/assetImport/IImportResourceStoreSMO.java

@@ -0,0 +1,24 @@
+package com.java110.boot.smo.assetImport;
+
+import com.java110.core.context.IPageData;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * @ClassName IAssetImportSMO
+ * @Description TODO
+ * @Author wuxw
+ * @Date 2019/9/23 23:13
+ * @Version 1.0
+ * add by wuxw 2019/9/23
+ **/
+public interface IImportResourceStoreSMO {
+
+    /**
+     * 导入excel数据
+     * @param pd 前台数据封装
+     * @param uploadFile excel 文件
+     * @return ResponseEntity
+     */
+    public ResponseEntity<String> importExcelData(IPageData pd,  MultipartFile uploadFile) throws Exception;
+}

+ 1 - 1
springboot/src/main/java/com/java110/boot/smo/assetImport/impl/ImportCustomCreateFeeSMOImpl.java

@@ -213,7 +213,7 @@ public class ImportCustomCreateFeeSMOImpl extends DefaultAbstractComponentSMO im
             if (!ImportCustomCreateFeeDto.TYPE_ROOM.equals(importCustomCreateFeeDto.getObjType())) {
                 continue;
             }
-            objNames = importCustomCreateFeeDto.getObjName().split("-");
+            objNames = importCustomCreateFeeDto.getObjName().split("-",3);
             if (objNames.length != 3) {
                 continue;
             }

+ 2 - 2
springboot/src/main/java/com/java110/boot/smo/assetImport/impl/ImportOwnerCarSMOImpl.java

@@ -138,7 +138,7 @@ public class ImportOwnerCarSMOImpl extends DefaultAbstractComponentSMO implement
             importOwnerCar.setOwnerName(os[5].toString());
             //获取车位
             String parkingLot = os[6].toString();
-            String[] split = parkingLot.split("-");
+            String[] split = parkingLot.split("-",2);
             importOwnerCar.setAreaNum(split[0]);
             importOwnerCar.setNum(split[1]);
             SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@@ -176,7 +176,7 @@ public class ImportOwnerCarSMOImpl extends DefaultAbstractComponentSMO implement
 
             //获取房屋名称
             String roomName = ownerCarDto.getRoomName().trim();
-            String[] split = roomName.split("-");
+            String[] split = roomName.split("-",3);
             String floorNum = split[0];
             String unitNum = split[1];
             String roomNum = split[2];

+ 213 - 0
springboot/src/main/java/com/java110/boot/smo/assetImport/impl/ImportResourceStoreSMOImpl.java

@@ -0,0 +1,213 @@
+package com.java110.boot.smo.assetImport.impl;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.java110.boot.smo.DefaultAbstractComponentSMO;
+import com.java110.boot.smo.assetImport.IImportResourceStoreSMO;
+import com.java110.core.context.IPageData;
+import com.java110.core.log.LoggerFactory;
+import com.java110.entity.assetImport.ImportOwnerRoomDto;
+import com.java110.entity.assetImport.ImportResourceStoreDto;
+import com.java110.entity.component.ComponentValidateResult;
+import com.java110.intf.community.IImportOwnerRoomInnerServiceSMO;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.ImportExcelUtils;
+import com.java110.utils.util.StringUtil;
+import com.java110.vo.ResultVo;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@Service("importResourceStoreSMOImpl")
+public class ImportResourceStoreSMOImpl extends DefaultAbstractComponentSMO implements IImportResourceStoreSMO {
+
+    private final static Logger logger = LoggerFactory.getLogger(ImportResourceStoreSMOImpl.class);
+
+    public static final int DEFAULT_ROWS = 500;
+
+    @Autowired
+    private RestTemplate restTemplate;
+
+    @Autowired
+    private IImportOwnerRoomInnerServiceSMO importOwnerRoomInnerServiceSMOImpl;
+
+
+    @Override
+    public ResponseEntity<String> importExcelData(IPageData pd, MultipartFile uploadFile) throws Exception {
+        try {
+            ComponentValidateResult result = this.validateStoreStaffCommunityRelationship(pd, restTemplate);
+            //InputStream is = uploadFile.getInputStream();
+            Workbook workbook = ImportExcelUtils.createWorkbook(uploadFile);  //工作簿
+            List<ImportResourceStoreDto> resourceStoreDtos = new ArrayList<ImportResourceStoreDto>();
+            //封装对象
+            getResourceStores(workbook, resourceStoreDtos, result);
+
+            //数据格式校验
+            validateRoomInfo(resourceStoreDtos);
+
+            // 保存数据
+            return dealExcelData(pd, resourceStoreDtos, result);
+        } catch (Exception e) {
+            logger.error("导入失败 ", e);
+            return new ResponseEntity<String>("非常抱歉,您填写的模板数据有误:" + e.getMessage(), HttpStatus.BAD_REQUEST);
+        }
+    }
+
+
+    /**
+     * 数据格式校验
+     *
+     * @param resourceStoreDtos
+     */
+    private void validateRoomInfo(List<ImportResourceStoreDto> resourceStoreDtos) {
+        ImportOwnerRoomDto importOwnerRoomDto = null;
+        ImportOwnerRoomDto tmpImportOwnerRoomDto = null;
+        boolean hasOwnerType = false;
+
+    }
+
+    /**
+     * 获取业主车辆信息
+     *
+     * @param workbook
+     * @param resourceStoreDtos
+     */
+    private void getResourceStores(Workbook workbook, List<ImportResourceStoreDto> resourceStoreDtos, ComponentValidateResult result) throws ParseException {
+        Sheet sheet = null;
+        sheet = ImportExcelUtils.getSheet(workbook, "物品信息");
+        List<Object[]> oList = ImportExcelUtils.listFromSheet(sheet);
+        ImportResourceStoreDto resourceStoreDto = null;
+        for (int osIndex = 0; osIndex < oList.size(); osIndex++) {
+
+            Object[] os = oList.get(osIndex);
+
+            if (osIndex == 0 || osIndex == 1) { // 第一行是 头部信息 直接跳过
+                continue;
+            }
+            if (os == null || StringUtil.isNullOrNone(os[0])) {
+                continue;
+            }
+            Assert.hasValue(os[1], (osIndex + 1) + "行物品名称不能为空");
+            Assert.hasValue(os[2], (osIndex + 1) + "行物品编号不能为空");
+            Assert.hasValue(os[3], (osIndex + 1) + "行物品单价不能为空");
+            Assert.hasValue(os[4], (osIndex + 1) + "行物品库存不能为空");
+            Assert.hasValue(os[5], (osIndex + 1) + "行物品单位不能为空");
+            Assert.hasValue(os[6], (osIndex + 1) + "行物品对外最低售价不能为空");
+            Assert.hasValue(os[7], (osIndex + 1) + "行物品对外最高售价不能为空");
+            Assert.hasValue(os[8], (osIndex + 1) + "行物品告警库存不能为空");
+            Assert.hasValue(os[9], (osIndex + 1) + "行物品类型不能为空");
+            Assert.hasValue(os[10], (osIndex + 1) + "行是否固定物品不能为空");
+            resourceStoreDto = new ImportResourceStoreDto();
+            resourceStoreDto.setCommunityId(result.getCommunityId());
+            resourceStoreDto.setResName(os[1].toString());
+            resourceStoreDto.setResCode(os[2].toString());
+            resourceStoreDto.setPrice(os[3].toString());
+            resourceStoreDto.setStock(os[4].toString());
+            resourceStoreDto.setUnitCode(os[5].toString());
+            resourceStoreDto.setOutLowPrice(os[6].toString());
+            resourceStoreDto.setOutHighPrice(os[7].toString());
+            resourceStoreDto.setWarningStock(os[8].toString());
+            resourceStoreDto.setRstName(os[9].toString());
+            resourceStoreDto.setIsFixed(os[10].toString());
+
+            if (os.length > 11) {
+                resourceStoreDto.setRemark(os[11].toString());
+            }
+            resourceStoreDtos.add(resourceStoreDto);
+
+        }
+    }
+
+
+    /**
+     * 处理房产信息
+     */
+    private ResponseEntity<String> dealExcelData(IPageData pd, List<ImportResourceStoreDto> resourceStoreDtos, ComponentValidateResult result) {
+        ResponseEntity<String> responseEntity = null;
+
+        List<ImportResourceStoreDto> tmpImportResourceStoreDtos = new ArrayList<>();
+        int flag = 0;
+
+        JSONObject paramIn = JSONObject.parseObject(pd.getReqData());
+
+        int successCount = 0;
+        JSONObject data = new JSONObject();
+        data.put("userId", result.getUserId());
+        data.put("userName", result.getUserName());
+        data.put("storeId", result.getStoreId());
+        data.put("communityId", result.getCommunityId());
+        data.put("shId", paramIn.getString("shId"));
+
+        try {
+            for (int roomIndex = 0; roomIndex < resourceStoreDtos.size(); roomIndex++) {
+                tmpImportResourceStoreDtos.add(resourceStoreDtos.get(roomIndex));
+                if (tmpImportResourceStoreDtos.size() > DEFAULT_ROWS) {
+                    flag = saveResourceStore(pd, tmpImportResourceStoreDtos, data);
+                    tmpImportResourceStoreDtos = new ArrayList<>();
+
+                    successCount += flag;
+                }
+            }
+
+            if (tmpImportResourceStoreDtos.size() > 0) {
+                flag = saveResourceStore(pd, tmpImportResourceStoreDtos, data);
+
+                successCount += flag;
+            }
+        } catch (Exception e) {
+            logger.error("导入失败", e);
+            //按批次做撤销功能
+            throw e;
+        }
+
+        return ResultVo.createResponseEntity("总共导入:" + tmpImportResourceStoreDtos.size() + ";成功导入:" + successCount + ";导入失败:" + (tmpImportResourceStoreDtos.size() - successCount));
+    }
+
+    /**
+     * 创建费用
+     *
+     * @param pd
+     * @param tmpImportResourceStoreDtos
+     */
+    private int saveResourceStore(IPageData pd, List<ImportResourceStoreDto> tmpImportResourceStoreDtos, JSONObject data) {
+
+        JSONArray importRoomFees = JSONArray.parseArray(JSONObject.toJSONString(tmpImportResourceStoreDtos));
+        data.put("importResourceStoreDtos", importRoomFees);
+
+        String apiUrl = "resourceStore.importResourceStore";
+
+        ResponseEntity<String> responseEntity = this.callCenterService(restTemplate, pd, data.toJSONString(), apiUrl, HttpMethod.POST);
+
+        if (responseEntity.getStatusCode() != HttpStatus.OK) {
+            throw new IllegalArgumentException(responseEntity.getBody());
+        }
+
+        JSONObject paramOut = JSONObject.parseObject(responseEntity.getBody());
+        if (ResultVo.CODE_OK != paramOut.getInteger("code")) {
+            throw new IllegalArgumentException(paramOut.getString("msg"));
+        }
+
+        return paramOut.getIntValue("data");
+
+    }
+
+    //解析Excel日期格式
+    public static Date DoubleToDate(Double dVal) {
+        Date tDate = new Date();
+        long localOffset = tDate.getTimezoneOffset() * 60000; //系统时区偏移 1900/1/1 到 1970/1/1 的 25569 天
+        tDate.setTime((long) ((dVal - 25569) * 24 * 3600 * 1000 + localOffset));
+        return tDate;
+    }
+}

+ 13 - 0
springboot/src/main/resources/java110.properties

@@ -2,3 +2,16 @@ java110.mappingPath=classpath:mapper/*/*.xml
 java110.testSwitch=ON
 
 
+# Single file max size
+java110.ftp.multipart.maxFileSize=100Mb
+# All files max size
+java110.ftp.multipart.maxRequestSize=100Mb
+
+#ftp use
+java110.ftpServer = 121.4.123.73
+java110.ftpPort = 6069
+java110.ftpUserName = hcftp
+java110.ftpUserPassword = 123456
+java110.ftpPath = hc/
+
+