
com.fastchar.extjs.appshare.entity.FinalAppEntity Maven / Gradle / Ivy
The newest version!
package com.fastchar.extjs.appshare.entity;
import com.dd.plist.NSArray;
import com.dd.plist.NSDictionary;
import com.dd.plist.PropertyListParser;
import com.fastchar.extjs.appshare.utils.ConvertHandler;
import com.fastchar.extjs.appshare.utils.IPAUtils;
import com.fastchar.core.FastChar;
import com.fastchar.core.FastFile;
import com.fastchar.core.FastHandler;
import com.fastchar.database.FastPage;
import com.fastchar.database.info.FastSqlInfo;
import com.fastchar.extjs.core.FastExtEntity;
import com.fastchar.utils.FastDateUtils;
import com.fastchar.utils.FastFileUtils;
import com.fastchar.utils.FastMD5Utils;
import com.fastchar.utils.FastStringUtils;
import net.dongliu.apk.parser.ApkFile;
import net.dongliu.apk.parser.bean.ApkMeta;
import net.dongliu.apk.parser.bean.ApkSigner;
import net.dongliu.apk.parser.bean.CertificateMeta;
import net.dongliu.apk.parser.bean.IconFace;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class FinalAppEntity extends FastExtEntity {
private static final long serialVersionUID = 1L;
public static FinalAppEntity dao() {
return FastChar.getOverrides().singleInstance(FinalAppEntity.class);
}
public static FinalAppEntity newInstance() {
return FastChar.getOverrides().newInstance(FinalAppEntity.class);
}
@Override
public String getTableName() {
return "final_app";
}
@Override
public String getTableDetails() {
return "APP管理";
}
@Override
public String getEntityCode() {
return this.getClass().getSimpleName();
}
@Override
public FastPage showList(int page, int pageSize) {
String sqlStr = "select t.*" +
" from final_app as t" +
" ";
FastSqlInfo sqlInfo = toSelectSql(sqlStr);
return selectBySql(page, pageSize, sqlInfo.getSql(), sqlInfo.toParams());
}
@Override
public void setDefaultValue() {
set("appState", 0);
set("appDateTime", FastDateUtils.getDateString());
}
@Override
public void convertValue() {
super.convertValue();
Enum> appState = getEnum("appState", FinalAppStateEnum.class);
if (appState != null) {
put("appStateStr", appState.name());
}
}
public void pullQrUrl(String http, String url) {
put("qrUrl", http + "qrCode?v=1&render=image&logo=" + get("appLogo") + "&content=" + url);
}
public enum FinalAppStateEnum {
正常,
下线
}
public enum FinalVersionStateEnum {
正常,
禁用
}
public enum FinalVersionImportantEnum {
一般,
重要
}
public FinalAppEntity getAppByCode(String appCode) {
String sqlStr = "select * from final_app where appCode = ? ";
return selectFirstBySql(sqlStr, appCode);
}
/**
* 添加Android安装包
*/
public FastHandler addAndroidApp(String appCode, File apkSourceFile) throws Exception {
FastHandler handler = new FastHandler();
FinalAppAndroidEntity androidEntity = FinalAppAndroidEntity.newInstance();
try (ApkFile apkFile = new ApkFile(apkSourceFile)) {
ApkMeta apkMeta = apkFile.getApkMeta();
if (appCode.equalsIgnoreCase("auto")) {
appCode = FastMD5Utils.MD5To16(apkMeta.getPackageName());
}
FinalAppEntity appByCode = FinalAppEntity.dao().getAppByCode(appCode);
if (appByCode == null) {
appByCode = FinalAppEntity.newInstance();
appByCode.set("appCode", appCode);
appByCode.set("appName", apkMeta.getLabel());
appByCode.set("appState", FinalAppEntity.FinalAppStateEnum.正常.ordinal());
List allIcons = apkFile.getAllIcons();
if (allIcons.size() > 0) {
File iconFile = new File(FastChar.getConstant().getAttachDirectory(), appCode + ".png");
FastFileUtils.writeByteArrayToFile(iconFile, allIcons.get(allIcons.size() - 1).getData());
appByCode.set("appLogo", FastFile.newInstance(iconFile).getUrl());
}
if (!appByCode.save()) {
handler.setError(appByCode.getError());
handler.setCode(-1);
return handler;
}
}
boolean beta = apkMeta.getVersionName().toLowerCase().contains("beta");
FinalAppAndroidEntity lastVersion = FinalAppAndroidEntity.dao().getLastVersion(appByCode.getId(), beta);
androidEntity.set("appId", appByCode.getId());
if (lastVersion != null) {
androidEntity.setAll(lastVersion);
androidEntity.remove("versionId");
androidEntity.remove("versionDateTime");
androidEntity.remove("countDownload");
androidEntity.remove("appPagesZip");
}
androidEntity.set("packageName", apkMeta.getPackageName());
androidEntity.set("versionName", apkMeta.getVersionName());
androidEntity.set("versionBuild", apkMeta.getVersionCode());
androidEntity.set("appOSType", apkMeta.getMinSdkVersion());
List apkSingers = apkFile.getApkSingers();
for (ApkSigner apkSinger : apkSingers) {
for (CertificateMeta certificateMeta : apkSinger.getCertificateMetas()) {
androidEntity.set("appSign", certificateMeta.getCertMd5());
}
}
androidEntity.set("appPermissions", FastStringUtils.join(apkMeta.getUsesPermissions(), "\n"));
}
androidEntity.set("fileSize", apkSourceFile.length());
androidEntity.set("appFile", FastFile.newInstance(apkSourceFile).getUrl());
if (androidEntity.save()) {
handler.setError("保存成功!");
handler.setCode(0);
return handler;
}
handler.setCode(-1);
handler.setError("保存失败!");
return handler;
}
/**
* 添加IOS安装包
*/
public FastHandler addIOSApp(String appCode, File ipaSourceFile) throws Exception {
FastHandler handler = new FastHandler();
File plistFile = IPAUtils.getPlistFile(ipaSourceFile);
if (plistFile != null) {
NSDictionary rootDict = (NSDictionary) PropertyListParser.parse(plistFile);
if (appCode.equalsIgnoreCase("auto")) {
appCode = FastMD5Utils.MD5To16(String.valueOf(rootDict.get("CFBundleIdentifier")));
}
FinalAppEntity appByCode = FinalAppEntity.dao().getAppByCode(appCode);
if (appByCode == null) {
appByCode = FinalAppEntity.newInstance();
appByCode.set("appCode", appCode);
if (rootDict.containsKey("CFBundleDisplayName")) {
appByCode.set("appName", String.valueOf(rootDict.get("CFBundleDisplayName")));
} else {
appByCode.set("appName", String.valueOf(rootDict.get("CFBundleName")));
}
appByCode.set("appState", FinalAppEntity.FinalAppStateEnum.正常.ordinal());
File appIcon = IPAUtils.getAppIcon(ipaSourceFile, plistFile);
if (appIcon != null) {
File destFile = new File(appIcon.getParent(), "appIcon_dest.png");
File upFile = new File(appIcon.getParent(), "appIcon_up.png");
File downFile = new File(appIcon.getParent(), "appIcon_down.png");
ConvertHandler convertHandler = new ConvertHandler();
convertHandler.convertPNGFile(appIcon, destFile, upFile, downFile);
appByCode.set("appLogo", FastFile.newInstance(destFile).getUrl());
FastFileUtils.forceDelete(appIcon);
FastFileUtils.forceDelete(destFile);
FastFileUtils.forceDelete(upFile);
FastFileUtils.forceDelete(downFile);
}
if (!appByCode.save()) {
handler.setError(appByCode.getError());
handler.setCode(-1);
return handler;
}
}
boolean beta = String.valueOf(rootDict.get("CFBundleShortVersionString")).toLowerCase().contains("beta");
FinalAppIosEntity lastVersion = FinalAppIosEntity.dao().getLastVersion(appByCode.getId(), beta);
FinalAppIosEntity iosEntity = FinalAppIosEntity.newInstance();
iosEntity.set("appId", appByCode.getId());
if (lastVersion != null) {
iosEntity.setAll(lastVersion);
iosEntity.remove("versionId");
iosEntity.remove("versionDateTime");
iosEntity.remove("countDownload");
}
iosEntity.set("packageName", String.valueOf(rootDict.get("CFBundleIdentifier")));
iosEntity.set("versionName", String.valueOf(rootDict.get("CFBundleShortVersionString")));
iosEntity.set("versionBuild", String.valueOf(rootDict.get("CFBundleVersion")));
iosEntity.set("appOSType", String.valueOf(rootDict.get("MinimumOSVersion")));
File mobileProvisionFile = IPAUtils.getMobileProvisionFile(ipaSourceFile);
if (mobileProvisionFile != null && mobileProvisionFile.exists()) {
NSDictionary nsDictionary = IPAUtils.parseMobileProvisionFile(mobileProvisionFile);
if (nsDictionary != null) {
NSArray provisionedDevices = (NSArray) nsDictionary.get("ProvisionedDevices");
if (provisionedDevices != null) {
List uuidList = new ArrayList<>();
for (int i = 0; i < provisionedDevices.count(); i++) {
uuidList.add(provisionedDevices.objectAtIndex(i).toString());
}
iosEntity.set("appDevices", FastStringUtils.join(uuidList, "\n"));
}
iosEntity.set("appTeamName", String.valueOf(nsDictionary.get("TeamName")));
}
FastFileUtils.forceDelete(mobileProvisionFile);
}
IPAUtils.clearFile(ipaSourceFile);
iosEntity.set("fileSize", ipaSourceFile.length());
iosEntity.set("appFile", FastFile.newInstance(ipaSourceFile).getUrl());
iosEntity.set("plistFile", iosEntity.getPlistFileUrl(appByCode));
if (iosEntity.save()) {
FastFileUtils.forceDelete(plistFile);
handler.setError("上传成功!");
handler.setCode(0);
return handler;
}
}
handler.setCode(-1);
handler.setError("保存失败!");
return handler;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy